diff --git a/404.html b/404.html index fb6ac46c2d..b18a817fb4 100644 --- a/404.html +++ b/404.html @@ -23,7 +23,7 @@ - + diff --git a/agent-tutorial.html b/agent-tutorial.html index 373a57b079..32a3537d56 100644 --- a/agent-tutorial.html +++ b/agent-tutorial.html @@ -23,7 +23,7 @@ - + diff --git a/agents-tools.html b/agents-tools.html index d92be6348f..adfd70587a 100644 --- a/agents-tools.html +++ b/agents-tools.html @@ -23,7 +23,7 @@ - + diff --git a/agents.html b/agents.html index 8cec10df3e..747ee84223 100644 --- a/agents.html +++ b/agents.html @@ -23,7 +23,7 @@ - + diff --git a/api-build.html b/api-build.html index bbbb11aff9..462c6a5e92 100644 --- a/api-build.html +++ b/api-build.html @@ -23,7 +23,7 @@ - + diff --git a/api-files.html b/api-files.html index a8bcbd4a5b..7aba665c45 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 0a1010c86a..62b4198e98 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 5c9554676e..3e37b944ce 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 e0088ba618..047d7dcac6 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 561c47e4d4..04de372524 100644 --- a/api-logs.html +++ b/api-logs.html @@ -23,7 +23,7 @@ - + diff --git a/api-monitor.html b/api-monitor.html index be24c7f21a..9f099c22af 100644 --- a/api-monitor.html +++ b/api-monitor.html @@ -23,7 +23,7 @@ - + diff --git a/api-openai-responses.html b/api-openai-responses.html index 47d4c7f4b8..414b57a6fc 100644 --- a/api-openai-responses.html +++ b/api-openai-responses.html @@ -23,7 +23,7 @@ - + diff --git a/api-projects.html b/api-projects.html index fe3f19933b..425f620c77 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 f4aea64d87..e446d871c4 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 683514254b..83d16b421b 100644 --- a/api-users.html +++ b/api-users.html @@ -23,7 +23,7 @@ - + diff --git a/api.html b/api.html index 5776e12317..a7a4f23da2 100644 --- a/api.html +++ b/api.html @@ -23,7 +23,7 @@ - + diff --git a/api/add-server.html b/api/add-server.html index cd50303c7e..7c7f441b14 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 500aad8573..f446e8c8f8 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 5305240c09..d05a0e5147 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 ebe6445628..2272905597 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 6c220eaaad..bb6ad6c187 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 9fdb304ea2..1e69a2fdcf 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 8d88b429d4..4fdd9b302f 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 ddee7dbd88..3e09ece9e6 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 62186d1c1b..75b02901b7 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 4bcec76f65..9aed89c8a6 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 16266ada3c..a723a0f699 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 2562a3787f..654a95c1f2 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 1bedabf7a4..1029118180 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 ebec0ef087..692a1455e3 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 04920dafcb..fad3b25596 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 d936c221c4..2a95defe36 100644 --- a/api/create-project.html +++ b/api/create-project.html @@ -23,7 +23,7 @@ - + diff --git a/api/create-response.html b/api/create-response.html index f3e6054a45..3db583b0c4 100644 --- a/api/create-response.html +++ b/api/create-response.html @@ -23,7 +23,7 @@ - + diff --git a/api/create-upload-file.html b/api/create-upload-file.html index f650824633..635927bb8d 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 0c3c199609..5fc0ed5788 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 0139999509..3272bbaaf4 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 9d8c11bd99..d9b936c681 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 81a62e9642..979125af20 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 615de4d40d..a565a3509d 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 b413c489da..4a5deade4c 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 ed7613f9a5..22c81b982f 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 de838d3b24..30c67b459f 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 c94b9c62f9..a1b704a0d3 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 1a0c86b7e5..53ab222cbd 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 6ec908805c..71274994a1 100644 --- a/api/delete-folder-redirect.html +++ b/api/delete-folder-redirect.html @@ -23,7 +23,7 @@ - + diff --git a/api/delete-knowledge-base.html b/api/delete-knowledge-base.html index 941464ad7b..bee2d4e1ec 100644 --- a/api/delete-knowledge-base.html +++ b/api/delete-knowledge-base.html @@ -23,7 +23,7 @@ - + diff --git a/api/delete-knowledge-bases-bulk-1.html b/api/delete-knowledge-bases-bulk-1.html index 05236b4b41..598378e442 100644 --- a/api/delete-knowledge-bases-bulk-1.html +++ b/api/delete-knowledge-bases-bulk-1.html @@ -23,7 +23,7 @@ - + diff --git a/api/delete-knowledge-bases-bulk.html b/api/delete-knowledge-bases-bulk.html index 57092c80d0..24f01b54d9 100644 --- a/api/delete-knowledge-bases-bulk.html +++ b/api/delete-knowledge-bases-bulk.html @@ -23,7 +23,7 @@ - + diff --git a/api/delete-messages-session.html b/api/delete-messages-session.html index 53743ad9ba..60003c5c19 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 87bc8c0c07..411481847d 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 0ed72654b9..bb476705cd 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 db00400dfa..fa87b2abbe 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 8883f14552..b6c2cb6fca 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 6f47198678..aa9748df7f 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 a920f5afde..9bdb99ad8b 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 ceb9b5c3b9..f631998469 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 96be8c97b3..c7bf676c97 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 2a6e731f53..3a3a1590a0 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 3269dc0073..f966f9c621 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 87654badef..9b57490ad1 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 63d41101eb..57df574f45 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 8b551514a8..6328cf6454 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 3ca45c0792..2e1ffc7866 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 74ea183bca..15db855f37 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 5e07737f9f..198ad52608 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 a4b0bd1bc1..9cc7f8897d 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 5b4f7f28aa..c29c39dff2 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 5067f6a538..57932200f1 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 655d5de13d..e3ec65ea01 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 e7dd4fc3ec..2384960560 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 5617f0170b..d6ce84b299 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 6fa799c177..aa18a4fde6 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 47563acf7f..f1e240008b 100644 --- a/api/get-elevenlabs-voice-ids.html +++ b/api/get-elevenlabs-voice-ids.html @@ -23,7 +23,7 @@ - + diff --git a/api/get-knowledge-base.html b/api/get-knowledge-base.html index 1c84cc00c9..614f1853b1 100644 --- a/api/get-knowledge-base.html +++ b/api/get-knowledge-base.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 c7e8630a7e..4518fc5593 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 55d1cdb11a..5e6b47a6f8 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 6756d293ac..2babdcbfae 100644 --- a/api/get-messages.html +++ b/api/get-messages.html @@ -23,7 +23,7 @@ - + diff --git a/api/get-project-composer-url.html b/api/get-project-composer-url.html index 5038b72156..529263eba7 100644 --- a/api/get-project-composer-url.html +++ b/api/get-project-composer-url.html @@ -23,7 +23,7 @@ - + diff --git a/api/get-server-endpoint.html b/api/get-server-endpoint.html index 0e69ab3cfe..e1d9fd0113 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 a703729ab6..714c7759a9 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 b6fb8cc64f..4203388ce2 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 f2cf5e25bf..b7129b9a37 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 aada9c2b46..08f3e854f7 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 30d98fef85..9c92a84d12 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 b0baa9a252..bf85e1e22e 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 45942f61c5..4a50be91f4 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 f5722ee214..74960dca13 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 cfa687167e..034539de82 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 6a9c539472..7d94530d24 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 6ca96c49b6..05f5834e37 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 4618ab2f6d..80f2905db9 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 addafb529e..81057b63a1 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 faaac53637..3f1b4a8ab6 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 04103db05d..525f03d34f 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 709c78e354..b9d31fca67 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 7438e4e538..9c0c2aa5e9 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 25b40a6786..7e4cb14a62 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 da630b94ac..5dfd4585c3 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 0bc279fabb..c4ff36f690 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 7d4628d6e2..dce61b705b 100644 --- a/api/list-files.html +++ b/api/list-files.html @@ -23,7 +23,7 @@ - + diff --git a/api/list-knowledge-bases-1.html b/api/list-knowledge-bases-1.html index ac09b7aa23..e2090b5d83 100644 --- a/api/list-knowledge-bases-1.html +++ b/api/list-knowledge-bases-1.html @@ -23,7 +23,7 @@ - + diff --git a/api/list-knowledge-bases.html b/api/list-knowledge-bases.html index 352bc5c9ec..3d19b9398f 100644 --- a/api/list-knowledge-bases.html +++ b/api/list-knowledge-bases.html @@ -23,7 +23,7 @@ - + diff --git a/api/list-profile-pictures.html b/api/list-profile-pictures.html index 6a89fd9873..00e036a0f6 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 10664b6f04..3d18539354 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 725d6cc484..e0f2656423 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 e13557ebe7..5cc69ce566 100644 --- a/api/logout.html +++ b/api/logout.html @@ -23,7 +23,7 @@ - + diff --git a/api/logs.html b/api/logs.html index 63ecf617cd..6a303489cb 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 43b1052e21..881ad51e2f 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 c04c57520d..b2129fe04d 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 ebc149b76b..f20b97ed2a 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 d7fa57a3cd..bf3efc3798 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 eed338ac30..964d6e6782 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 8f41ca61f9..e82de4337a 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 5a6aff6aeb..cffeb601ef 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 c3581f0f71..5b9c17277e 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 fed6ea4f38..44ce87c4bb 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 205bb77586..82a947e329 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 bf76a3fe52..d6c5ad1ac3 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 0942914de9..74a2027c30 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 4700fade25..a81332f4e5 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 96152d6494..e06689e02c 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 4bb8f9e1dc..0dea48e253 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 4edc3091b2..d18a73d932 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 138027615b..dae5b37e26 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 dd7e7ce508..5c65322bc1 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 5b90fc0897..6737fe4b9f 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 fe7977c452..7e9da63e72 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 9c4b199a4c..4741ad54b9 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 25a5bfe75a..677cf28e63 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 9742add635..9feebdc371 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 b52eeec654..6eccf46aa6 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 8a6d256337..03f17982ff 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 6e7a4e549f..6d3a12da95 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 25763f04cb..fc8bc24620 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 d42b214326..d99da6302f 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 586b9f4649..4bb1025556 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 649f001ca2..4cec769b31 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 1c6c80515d..dee42ad66a 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 4335bdc659..dd503c883a 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 0995564395..bee6ba9f05 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 0218bde5bd..c37e8f87a8 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 8519796752..de813247dd 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 d39f5c86eb..416c8fae68 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 063a2bc9e8..a2b362da07 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 abedade827..7f83d0b1b2 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 01f8d087e0..a7149c9e17 100644 --- a/api/webhook-run-flow.html +++ b/api/webhook-run-flow.html @@ -23,7 +23,7 @@ - + diff --git a/assets/js/2ab0d4f5.279b0589.js b/assets/js/2ab0d4f5.279b0589.js new file mode 100644 index 0000000000..4204234bbd --- /dev/null +++ b/assets/js/2ab0d4f5.279b0589.js @@ -0,0 +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.6.0"},"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 \\"nisibb\\": \\"\\",\\n \\"occaecat_d\\": \\"\\",\\n \\"officiaa_\\": \\"\\"\\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/2ab0d4f5.ffb9c13f.js b/assets/js/2ab0d4f5.ffb9c13f.js deleted file mode 100644 index 567695a081..0000000000 --- a/assets/js/2ab0d4f5.ffb9c13f.js +++ /dev/null @@ -1 +0,0 @@ -"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.6.0"},"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_d\\": \\"\\",\\n \\"Duis_79\\": \\"\\"\\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/7819cc1c.0becd7a6.js b/assets/js/7819cc1c.0becd7a6.js deleted file mode 100644 index 79fca5abd7..0000000000 --- a/assets/js/7819cc1c.0becd7a6.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunklangflow_docs=self.webpackChunklangflow_docs||[]).push([[6006],{9898:(e,t,n)=>{n.d(t,{A:()=>s});const s=n.p+"assets/images/component-llm-router-1b417082a0208a70065bc177a78fab67.png"},11470:(e,t,n)=>{n.d(t,{A:()=>v});var s=n(96540),r=n(18215),o=n(23104),a=n(56347),i=n(205),c=n(57485),l=n(31682),d=n(70679);function h(e){return s.Children.toArray(e).filter(e=>"\n"!==e).map(e=>{if(!e||(0,s.isValidElement)(e)&&function(e){const{props:t}=e;return!!t&&"object"==typeof t&&"value"in t}(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 p(e){const{values:t,children:n}=e;return(0,s.useMemo)(()=>{const e=t??function(e){return h(e).map(({props:{value:e,label:t,attributes:n,default:s}})=>({value:e,label:t,attributes:n,default:s}))}(n);return function(e){const t=(0,l.XI)(e,(e,t)=>e.value===t.value);if(t.length>0)throw new Error(`Docusaurus error: Duplicate values "${t.map(e=>e.value).join(", ")}" found in . Every value needs to be unique.`)}(e),e},[t,n])}function u({value:e,tabValues:t}){return t.some(t=>t.value===e)}function x({queryString:e=!1,groupId:t}){const n=(0,a.W6)(),r=function({queryString:e=!1,groupId:t}){if("string"==typeof e)return e;if(!1===e)return null;if(!0===e&&!t)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 t??null}({queryString:e,groupId:t});return[(0,c.aZ)(r),(0,s.useCallback)(e=>{if(!r)return;const t=new URLSearchParams(n.location.search);t.set(r,e),n.replace({...n.location,search:t.toString()})},[r,n])]}function m(e){const{defaultValue:t,queryString:n=!1,groupId:r}=e,o=p(e),[a,c]=(0,s.useState)(()=>function({defaultValue:e,tabValues:t}){if(0===t.length)throw new Error("Docusaurus error: the component requires at least one children component");if(e){if(!u({value:e,tabValues:t}))throw new Error(`Docusaurus error: The has a defaultValue "${e}" but none of its children has the corresponding value. Available values are: ${t.map(e=>e.value).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return e}const n=t.find(e=>e.default)??t[0];if(!n)throw new Error("Unexpected error: 0 tabValues");return n.value}({defaultValue:t,tabValues:o})),[l,h]=x({queryString:n,groupId:r}),[m,j]=function({groupId:e}){const t=function(e){return e?`docusaurus.tab.${e}`:null}(e),[n,r]=(0,d.Dv)(t);return[n,(0,s.useCallback)(e=>{t&&r.set(e)},[t,r])]}({groupId:r}),g=(()=>{const e=l??m;return u({value:e,tabValues:o})?e:null})();(0,i.A)(()=>{g&&c(g)},[g]);return{selectedValue:a,selectValue:(0,s.useCallback)(e=>{if(!u({value:e,tabValues:o}))throw new Error(`Can't select invalid tab value=${e}`);c(e),h(e),j(e)},[h,j,o]),tabValues:o}}var j=n(92303);const g={tabList:"tabList__CuJ",tabItem:"tabItem_LNqP"};var f=n(74848);function y({className:e,block:t,selectedValue:n,selectValue:s,tabValues:a}){const i=[],{blockElementScrollPositionUntilNextRender:c}=(0,o.a_)(),l=e=>{const t=e.currentTarget,r=i.indexOf(t),o=a[r].value;o!==n&&(c(t),s(o))},d=e=>{let t=null;switch(e.key){case"Enter":l(e);break;case"ArrowRight":{const n=i.indexOf(e.currentTarget)+1;t=i[n]??i[0];break}case"ArrowLeft":{const n=i.indexOf(e.currentTarget)-1;t=i[n]??i[i.length-1];break}}t?.focus()};return(0,f.jsx)("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,r.A)("tabs",{"tabs--block":t},e),children:a.map(({value:e,label:t,attributes:s})=>(0,f.jsx)("li",{role:"tab",tabIndex:n===e?0:-1,"aria-selected":n===e,ref:e=>{i.push(e)},onKeyDown:d,onClick:l,...s,className:(0,r.A)("tabs__item",g.tabItem,s?.className,{"tabs__item--active":n===e}),children:t??e},e))})}function b({lazy:e,children:t,selectedValue:n}){const o=(Array.isArray(t)?t:[t]).filter(Boolean);if(e){const e=o.find(e=>e.props.value===n);return e?(0,s.cloneElement)(e,{className:(0,r.A)("margin-top--md",e.props.className)}):null}return(0,f.jsx)("div",{className:"margin-top--md",children:o.map((e,t)=>(0,s.cloneElement)(e,{key:t,hidden:e.props.value!==n}))})}function D(e){const t=m(e);return(0,f.jsxs)("div",{className:(0,r.A)("tabs-container",g.tabList),children:[(0,f.jsx)(y,{...t,...e}),(0,f.jsx)(b,{...t,...e})]})}function v(e){const t=(0,j.A)();return(0,f.jsx)(D,{...e,children:h(e.children)},String(t))}},13533:(e,t,n)=>{n.d(t,{A:()=>s});const s=n.p+"assets/images/component-dataframe-operations-031488ccf4e3d3378f8842f0ea10682c.png"},17886:(e,t,n)=>{n.d(t,{A:()=>o});n(96540);var s=n(64058),r=n(74848);function o({name:e,...t}){const n=s[e];return n?(0,r.jsx)(n,{...t}):null}},19365:(e,t,n)=>{n.d(t,{A:()=>a});n(96540);var s=n(18215);const r={tabItem:"tabItem_Ymn6"};var o=n(74848);function a({children:e,hidden:t,className:n}){return(0,o.jsx)("div",{role:"tabpanel",className:(0,s.A)(r.tabItem,n),hidden:t,children:e})}},31929:(e,t,n)=>{n.d(t,{Ay:()=>c,RM:()=>a});var s=n(74848),r=n(28453),o=n(17886);const a=[];function i(e){const t={a:"a",p:"p",strong:"strong",...(0,r.R)(),...e.components};return(0,s.jsxs)(t.p,{children:["Some parameters are hidden by default in the visual editor.\nYou can modify all parameters through the ",(0,s.jsx)(o.A,{name:"SlidersHorizontal","aria-hidden":"true"})," ",(0,s.jsx)(t.strong,{children:"Controls"})," in the ",(0,s.jsx)(t.a,{href:"/concepts-components#component-menus",children:"component's header menu"}),"."]})}function c(e={}){const{wrapper:t}={...(0,r.R)(),...e.components};return t?(0,s.jsx)(t,{...e,children:(0,s.jsx)(i,{...e})}):i(e)}},36813:(e,t,n)=>{n.d(t,{Ay:()=>c,RM:()=>a});var s=n(74848),r=n(28453),o=n(17886);const a=[];function i(e){const t={a:"a",p:"p",strong:"strong",...(0,r.R)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsxs)(t.p,{children:["Legacy components are longer supported and can be removed in a future release.\nYou can continue to use them in existing flows, but it is recommended that you replace them with supported components as soon as possible.\nSuggested replacements are included in the ",(0,s.jsx)(t.strong,{children:"Legacy"})," banner on components in your flows.\nThey are also given in release notes and Langflow documentation whenever possible."]}),"\n",(0,s.jsxs)(t.p,{children:["If you aren't sure how to replace a legacy component, ",(0,s.jsx)(o.A,{name:"Search","aria-hidden":"true"})," ",(0,s.jsx)(t.strong,{children:"Search"})," for components by provider, service, or component name.\nThe component may have been deprecated in favor of a completely new component, a similar component, or a new version of the same component in a different category."]}),"\n",(0,s.jsxs)(t.p,{children:["If there is no obvious replacement, consider whether another component can be adapted to your use case.\nFor example, many ",(0,s.jsx)(o.A,{name:"Component","aria-hidden":"true"})," ",(0,s.jsx)(t.strong,{children:"Core components"})," provide generic functionality that can support multiple providers and use cases, such as the ",(0,s.jsxs)(t.a,{href:"/components-data#api-request",children:[(0,s.jsx)(t.strong,{children:"API Request"})," component"]}),"."]}),"\n",(0,s.jsxs)(t.p,{children:["If neither of these options are viable, you could use the legacy component's code to create your own custom component, or ",(0,s.jsx)(t.a,{href:"/contributing-github-issues",children:"start a discussion"})," about the legacy component."]}),"\n",(0,s.jsxs)(t.p,{children:["To discourage use of legacy components in new flows, these components are hidden by default.\nIn the visual editor, you can click ",(0,s.jsx)(o.A,{name:"SlidersHorizontal","aria-hidden":"true"})," ",(0,s.jsx)(t.strong,{children:"Component settings"})," to toggle the ",(0,s.jsx)(t.strong,{children:"Legacy"})," filter."]})]})}function c(e={}){const{wrapper:t}={...(0,r.R)(),...e.components};return t?(0,s.jsx)(t,{...e,children:(0,s.jsx)(i,{...e})}):i(e)}},40966:(e,t,n)=>{n.r(t),n.d(t,{CH:()=>j,assets:()=>m,chCodeConfig:()=>g,contentTitle:()=>x,default:()=>b,frontMatter:()=>u,metadata:()=>s,toc:()=>f});const s=JSON.parse('{"id":"Components/components-processing","title":"Processing components","description":"Processing components process and transform data within a flow.","source":"@site/docs/Components/components-processing.mdx","sourceDirName":"Components","slug":"/components-processing","permalink":"/components-processing","draft":false,"unlisted":false,"tags":[],"version":"current","frontMatter":{"title":"Processing components","slug":"/components-processing"},"sidebar":"docs","previous":{"title":"Data","permalink":"/components-data"},"next":{"title":"Prompt Template","permalink":"/components-prompts"}}');var r=n(74848),o=n(28453),a=n(24754),i=n(17886),c=n(11470),l=n(19365),d=n(31929),h=n(72736),p=n(36813);const u={title:"Processing components",slug:"/components-processing"},x=void 0,m={},j={annotations:a.hk,Code:a.Cy},g={staticMediaQuery:"not screen, (max-width: 768px)",lineNumbers:!0,showCopyButton:!0,themeName:"github-dark"},f=[{value:"Prompt Template",id:"prompt-template",level:2},{value:"Batch Run",id:"batch-run",level:2},{value:"Use the Batch Run component in a flow",id:"use-the-batch-run-component-in-a-flow",level:3},{value:"Batch Run parameters",id:"batch-run-parameters",level:3},...d.RM,{value:"Data Operations",id:"data-operations",level:2},{value:"Use the Data Operations component in a flow",id:"use-the-data-operations-component-in-a-flow",level:3},{value:"Data Operations parameters",id:"data-operations-parameters",level:3},{value:"Available data operations",id:"available-data-operations",level:4},{value:"DataFrame Operations",id:"dataframe-operations",level:2},{value:"Use the DataFrame Operations component in a flow",id:"use-the-dataframe-operations-component-in-a-flow",level:3},{value:"DataFrame Operations parameters",id:"dataframe-operations-parameters",level:3},{value:"LLM Router",id:"llm-router",level:2},{value:"LLM Router parameters",id:"llm-router-parameters",level:3},...d.RM,{value:"LLM Router outputs",id:"llm-router-outputs",level:3},{value:"Parser",id:"parser",level:2},{value:"Parsing modes",id:"parsing-modes",level:3},...h.RM,...d.RM,...d.RM,{value:"Test and troubleshoot parsed text",id:"test-and-troubleshoot-parsed-text",level:3},{value:"Python Interpreter",id:"python-interpreter",level:2},{value:"Use the Python Interpreter in a flow",id:"use-the-python-interpreter-in-a-flow",level:3},{value:"Python Interpreter parameters",id:"python-interpreter-parameters",level:3},{value:"Save File",id:"save-file",level:2},{value:"Smart Function",id:"smart-function",level:2},{value:"Smart Function parameters",id:"smart-function-parameters",level:3},...d.RM,{value:"Split Text",id:"split-text",level:2},{value:"Split Text parameters",id:"split-text-parameters",level:3},...d.RM,{value:"Tokenization errors due to chunk size",id:"chunk-size",level:3},{value:"Other text splitters",id:"other-text-splitters",level:3},{value:"Structured Output",id:"structured-output",level:2},{value:"Use the Structured Output component in a flow",id:"use-the-structured-output-component-in-a-flow",level:3},{value:"Structured Output parameters",id:"structured-output-parameters",level:3},...d.RM,{value:"Output Schema options",id:"output-schema-options",level:4},{value:"Type Convert",id:"type-convert",level:2},{value:"Use the Type Convert component in a flow",id:"use-the-type-convert-component-in-a-flow",level:3},{value:"Type Convert parameters",id:"type-convert-parameters",level:3},{value:"Legacy Processing components",id:"legacy-processing-components",level:2},...p.RM];function y(e){const t={a:"a",admonition:"admonition",code:"code",em:"em",h2:"h2",h3:"h3",h4:"h4",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}=t;return j||D("CH",!1),j.Code||D("CH.Code",!0),s||D("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.jsx)(t.p,{children:"Processing components process and transform data within a flow.\nThey have many uses, including:"}),"\n",(0,r.jsxs)(t.ul,{children:["\n",(0,r.jsxs)(t.li,{children:["Feed instructions and context to your LLMs and agents with the ",(0,r.jsxs)(t.a,{href:"#prompt-template",children:[(0,r.jsx)(t.strong,{children:"Prompt Template"})," component"]}),"."]}),"\n",(0,r.jsxs)(t.li,{children:["Extract content from larger chunks of data with a ",(0,r.jsxs)(t.a,{href:"#parser",children:[(0,r.jsx)(t.strong,{children:"Parser"})," component"]}),"."]}),"\n",(0,r.jsxs)(t.li,{children:["Filter data with natural language with the ",(0,r.jsxs)(t.a,{href:"#smart-transform",children:[(0,r.jsx)(t.strong,{children:"Smart Function"})," component"]}),"."]}),"\n",(0,r.jsxs)(t.li,{children:["Save data to your local machine with the ",(0,r.jsxs)(t.a,{href:"#save-file",children:[(0,r.jsx)(t.strong,{children:"Save File"})," component"]}),"."]}),"\n",(0,r.jsxs)(t.li,{children:["Transform data into a different data type with the ",(0,r.jsxs)(t.a,{href:"#type-convert",children:[(0,r.jsx)(t.strong,{children:"Type Convert"})," component"]})," to pass it between incompatible components."]}),"\n"]}),"\n",(0,r.jsx)(t.h2,{id:"prompt-template",children:"Prompt Template"}),"\n",(0,r.jsxs)(t.p,{children:["See ",(0,r.jsxs)(t.a,{href:"/components-prompts",children:[(0,r.jsx)(t.strong,{children:"Prompt Template"})," component"]}),"."]}),"\n",(0,r.jsx)(t.h2,{id:"batch-run",children:"Batch Run"}),"\n",(0,r.jsxs)(t.p,{children:["The ",(0,r.jsx)(t.strong,{children:"Batch Run"})," component runs a language model over ",(0,r.jsx)(t.em,{children:"each row of one text column"})," in a ",(0,r.jsx)(t.a,{href:"/data-types#dataframe",children:(0,r.jsx)(t.code,{children:"DataFrame"})}),", and then returns a new ",(0,r.jsx)(t.code,{children:"DataFrame"})," with the original text and an LLM response.\nThe output contains the following columns:"]}),"\n",(0,r.jsxs)(t.ul,{children:["\n",(0,r.jsxs)(t.li,{children:[(0,r.jsx)(t.code,{children:"text_input"}),": The original text from the input ",(0,r.jsx)(t.code,{children:"DataFrame"})]}),"\n",(0,r.jsxs)(t.li,{children:[(0,r.jsx)(t.code,{children:"model_response"}),": The model's response for each input"]}),"\n",(0,r.jsxs)(t.li,{children:[(0,r.jsx)(t.code,{children:"batch_index"}),": The 0-indexed processing order for all rows in the ",(0,r.jsx)(t.code,{children:"DataFrame"})]}),"\n",(0,r.jsxs)(t.li,{children:[(0,r.jsx)(t.code,{children:"metadata"})," (optional): Additional information about the processing"]}),"\n"]}),"\n",(0,r.jsx)(t.h3,{id:"use-the-batch-run-component-in-a-flow",children:"Use the Batch Run component in a flow"}),"\n",(0,r.jsxs)(t.p,{children:["If you pass the ",(0,r.jsx)(t.strong,{children:"Batch Run"})," output to a ",(0,r.jsxs)(t.a,{href:"/components-processing#parser",children:[(0,r.jsx)(t.strong,{children:"Parser"})," component"]}),", you can use variables in the parsing template to reference these keys, such as ",(0,r.jsx)(t.code,{children:"{text_input}"})," and ",(0,r.jsx)(t.code,{children:"{model_response}"}),".\nThis is demonstrated in the following example."]}),"\n",(0,r.jsx)(t.p,{children:(0,r.jsx)(t.img,{alt:"A batch run component connected to OpenAI and a Parser",src:n(88103).A+"",width:"4000",height:"2728"})}),"\n",(0,r.jsxs)(t.ol,{children:["\n",(0,r.jsxs)(t.li,{children:["\n",(0,r.jsxs)(t.p,{children:["Connect any language model component to a ",(0,r.jsx)(t.strong,{children:"Batch Run"})," component's ",(0,r.jsx)(t.strong,{children:"Language model"})," port."]}),"\n"]}),"\n",(0,r.jsxs)(t.li,{children:["\n",(0,r.jsxs)(t.p,{children:["Connect ",(0,r.jsx)(t.code,{children:"DataFrame"})," output from another component to the ",(0,r.jsx)(t.strong,{children:"Batch Run"})," component's ",(0,r.jsx)(t.strong,{children:"DataFrame"})," input.\nFor example, you could connect a ",(0,r.jsx)(t.strong,{children:"File"})," component with a CSV file."]}),"\n"]}),"\n",(0,r.jsxs)(t.li,{children:["\n",(0,r.jsxs)(t.p,{children:["In the ",(0,r.jsx)(t.strong,{children:"Batch Run"})," component's ",(0,r.jsx)(t.strong,{children:"Column Name"})," field, enter the name of the column in the incoming ",(0,r.jsx)(t.code,{children:"DataFrame"})," that contains the text to process.\nFor example, if you want to extract text from a ",(0,r.jsx)(t.code,{children:"name"})," column in a CSV file, enter ",(0,r.jsx)(t.code,{children:"name"})," in the ",(0,r.jsx)(t.strong,{children:"Column Name"})," field."]}),"\n"]}),"\n",(0,r.jsxs)(t.li,{children:["\n",(0,r.jsxs)(t.p,{children:["Connect the ",(0,r.jsx)(t.strong,{children:"Batch Run"})," component's ",(0,r.jsx)(t.strong,{children:"Batch Results"})," output to a ",(0,r.jsx)(t.strong,{children:"Parser"})," component's ",(0,r.jsx)(t.strong,{children:"DataFrame"})," input."]}),"\n"]}),"\n",(0,r.jsxs)(t.li,{children:["\n",(0,r.jsxs)(t.p,{children:["Optional: In the ",(0,r.jsx)(t.strong,{children:"Batch Run"})," ",(0,r.jsx)(t.a,{href:"/concepts-components#component-menus",children:"component's header menu"}),", click ",(0,r.jsx)(i.A,{name:"SlidersHorizontal","aria-hidden":"true"})," ",(0,r.jsx)(t.strong,{children:"Controls"}),", enable the ",(0,r.jsx)(t.strong,{children:"System Message"})," parameter, click ",(0,r.jsx)(t.strong,{children:"Close"}),", and then enter an instruction for how you want the LLM to process each cell extracted from the file.\nFor example, ",(0,r.jsx)(t.code,{children:"Create a business card for each name."})]}),"\n"]}),"\n",(0,r.jsxs)(t.li,{children:["\n",(0,r.jsxs)(t.p,{children:["In the ",(0,r.jsx)(t.strong,{children:"Parser"})," component's ",(0,r.jsx)(t.strong,{children:"Template"})," field, enter a template for processing the ",(0,r.jsx)(t.strong,{children:"Batch Run"})," component's new ",(0,r.jsx)(t.code,{children:"DataFrame"})," columns (",(0,r.jsx)(t.code,{children:"text_input"}),", ",(0,r.jsx)(t.code,{children:"model_response"}),", and ",(0,r.jsx)(t.code,{children:"batch_index"}),"):"]}),"\n",(0,r.jsxs)(t.p,{children:["For example, this template uses three columns from the resulting, post-batch ",(0,r.jsx)(t.code,{children:"DataFrame"}),":"]}),"\n",(0,r.jsx)(j.Code,{codeConfig:g,northPanel:{tabs:[""],active:"",heightRatio:1},files:[{name:"",focus:"",code:{lines:[{tokens:[{content:"record_number: {batch_index}, name: {text_input}, summary: {model_response}",props:{}}]}],lang:"text"},annotations:[]}]}),"\n"]}),"\n",(0,r.jsxs)(t.li,{children:["\n",(0,r.jsxs)(t.p,{children:["To test the processing, click the ",(0,r.jsx)(t.strong,{children:"Parser"})," component, click ",(0,r.jsx)(i.A,{name:"Play","aria-hidden":"true"})," ",(0,r.jsx)(t.strong,{children:"Run component"}),", and then click ",(0,r.jsx)(i.A,{name:"TextSearch","aria-hidden":"true"})," ",(0,r.jsx)(t.strong,{children:"Inspect output"})," to view the final ",(0,r.jsx)(t.code,{children:"DataFrame"}),"."]}),"\n",(0,r.jsxs)(t.p,{children:["You can also connect a ",(0,r.jsx)(t.strong,{children:"Chat Output"})," component to the ",(0,r.jsx)(t.strong,{children:"Parser"})," component if you want to see the output in the ",(0,r.jsx)(t.strong,{children:"Playground"}),"."]}),"\n"]}),"\n"]}),"\n",(0,r.jsx)(t.h3,{id:"batch-run-parameters",children:"Batch Run parameters"}),"\n",(0,r.jsx)(d.Ay,{}),"\n",(0,r.jsxs)(t.table,{children:[(0,r.jsx)(t.thead,{children:(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.th,{children:"Name"}),(0,r.jsx)(t.th,{children:"Type"}),(0,r.jsx)(t.th,{children:"Description"})]})}),(0,r.jsxs)(t.tbody,{children:[(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"model"}),(0,r.jsx)(t.td,{children:"HandleInput"}),(0,r.jsx)(t.td,{children:"Input parameter. Connect the 'Language Model' output from a language model component. Required."})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"system_message"}),(0,r.jsx)(t.td,{children:"MultilineInput"}),(0,r.jsx)(t.td,{children:"Input parameter. A multi-line system instruction for all rows in the DataFrame."})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"df"}),(0,r.jsx)(t.td,{children:"DataFrameInput"}),(0,r.jsx)(t.td,{children:"Input parameter. The DataFrame whose column is treated as text messages, as specified by 'column_name'. Required."})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"column_name"}),(0,r.jsx)(t.td,{children:"MessageTextInput"}),(0,r.jsx)(t.td,{children:"Input parameter. The name of the DataFrame column to treat as text messages. If empty, all columns are formatted in TOML."})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"output_column_name"}),(0,r.jsx)(t.td,{children:"MessageTextInput"}),(0,r.jsxs)(t.td,{children:["Input parameter. Name of the column where the model's response is stored. Default=",(0,r.jsx)(t.code,{children:"model_response"}),"."]})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"enable_metadata"}),(0,r.jsx)(t.td,{children:"BoolInput"}),(0,r.jsxs)(t.td,{children:["Input parameter. If ",(0,r.jsx)(t.code,{children:"True"}),", add metadata to the output DataFrame."]})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"batch_results"}),(0,r.jsx)(t.td,{children:"DataFrame"}),(0,r.jsx)(t.td,{children:"Output parameter. A DataFrame with all original columns plus the model's response column."})]})]})]}),"\n",(0,r.jsx)(t.h2,{id:"data-operations",children:"Data Operations"}),"\n",(0,r.jsxs)(t.p,{children:["The ",(0,r.jsx)(t.strong,{children:"Data Operations"})," component performs operations on ",(0,r.jsx)(t.a,{href:"/data-types#data",children:(0,r.jsx)(t.code,{children:"Data"})})," objects, including extracting, filtering, and editing keys and values in the ",(0,r.jsx)(t.code,{children:"Data"}),".\nFor all options, see ",(0,r.jsx)(t.a,{href:"#available-data-operations",children:"Available data operations"}),".\nThe output is a new ",(0,r.jsx)(t.code,{children:"Data"})," object containing the modified data after running the selected operation."]}),"\n",(0,r.jsx)(t.h3,{id:"use-the-data-operations-component-in-a-flow",children:"Use the Data Operations component in a flow"}),"\n",(0,r.jsxs)(t.p,{children:["The following example demonstrates how to use a ",(0,r.jsx)(t.strong,{children:"Data Operations"})," component in a flow using data from a webhook payload:"]}),"\n",(0,r.jsxs)(t.ol,{children:["\n",(0,r.jsxs)(t.li,{children:["\n",(0,r.jsxs)(t.p,{children:["Create a flow with a ",(0,r.jsx)(t.strong,{children:"Webhook"})," component and a ",(0,r.jsx)(t.strong,{children:"Data Operations"})," component, and then connect the ",(0,r.jsx)(t.strong,{children:"Webhook"})," component's output to the ",(0,r.jsx)(t.strong,{children:"Data Operations"})," component's ",(0,r.jsx)(t.strong,{children:"Data"})," input."]}),"\n",(0,r.jsxs)(t.p,{children:["All operations in the ",(0,r.jsx)(t.strong,{children:"Data Operations"})," component require at least one ",(0,r.jsx)(t.code,{children:"Data"})," input from another component.\nIf the preceding component doesn't produce ",(0,r.jsx)(t.code,{children:"Data"})," output, you can use another component, such as the ",(0,r.jsx)(t.strong,{children:"Type Convert"})," component, to reformat the data before passing it to the ",(0,r.jsx)(t.strong,{children:"Data Operations"})," component.\nAlternatively, you could consider using a component that is designed to process the original data type, such as the ",(0,r.jsx)(t.strong,{children:"Parser"})," or ",(0,r.jsx)(t.strong,{children:"DataFrame Operations"})," components."]}),"\n"]}),"\n",(0,r.jsxs)(t.li,{children:["\n",(0,r.jsxs)(t.p,{children:["In the ",(0,r.jsx)(t.strong,{children:"Operations"})," field, select the operation you want to perform on the incoming ",(0,r.jsx)(t.code,{children:"Data"}),".\nFor this example, select the ",(0,r.jsx)(t.strong,{children:"Select Keys"})," operation."]}),"\n",(0,r.jsx)(t.admonition,{type:"tip",children:(0,r.jsxs)(t.p,{children:["You can select only one operation.\nIf you need to perform multiple operations on the data, you can chain multiple ",(0,r.jsx)(t.strong,{children:"Data Operations"})," components together to execute each operation in sequence.\nFor more complex multi-step operations, consider using a component like the ",(0,r.jsx)(t.strong,{children:"Smart Function"})," component."]})}),"\n"]}),"\n",(0,r.jsxs)(t.li,{children:["\n",(0,r.jsxs)(t.p,{children:["Under ",(0,r.jsx)(t.strong,{children:"Select Keys"}),", add keys for ",(0,r.jsx)(t.code,{children:"name"}),", ",(0,r.jsx)(t.code,{children:"username"}),", and ",(0,r.jsx)(t.code,{children:"email"}),".\nClick ",(0,r.jsx)(i.A,{name:"Plus","aria-hidden":"true"})," ",(0,r.jsx)(t.strong,{children:"Add more"})," to add a field for each key."]}),"\n",(0,r.jsxs)(t.p,{children:["For this example, assume that the webhook will receive consistent payloads that always contain ",(0,r.jsx)(t.code,{children:"name"}),", ",(0,r.jsx)(t.code,{children:"username"}),", and ",(0,r.jsx)(t.code,{children:"email"})," keys.\nThe ",(0,r.jsx)(t.strong,{children:"Select Keys"})," operation extracts the value of these keys from each incoming payload."]}),"\n"]}),"\n",(0,r.jsxs)(t.li,{children:["\n",(0,r.jsxs)(t.p,{children:["Optional: If you want to view the output in the ",(0,r.jsx)(t.strong,{children:"Playground"}),", connect the ",(0,r.jsx)(t.strong,{children:"Data Operations"})," component's output to a ",(0,r.jsx)(t.strong,{children:"Chat Output"})," component."]}),"\n",(0,r.jsx)(t.p,{children:(0,r.jsx)(t.img,{alt:"A flow with Webhook, Data Operations, and Chat Output components",src:n(46445).A+"",width:"4000",height:"1920"})}),"\n"]}),"\n",(0,r.jsxs)(t.li,{children:["\n",(0,r.jsxs)(t.p,{children:["To test the flow, send the following request to your flow's webhook endpoint.\nFor more information about the webhook endpoint, see ",(0,r.jsx)(t.a,{href:"/webhook",children:"Trigger flows with webhooks"}),"."]}),"\n",(0,r.jsx)(j.Code,{codeConfig:g,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_URL",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:"#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:' "id": 1,',props:{style:{color:"#A5D6FF"}}}]},{tokens:[{content:' "name": "Leanne Graham",',props:{style:{color:"#A5D6FF"}}}]},{tokens:[{content:' "username": "Bret",',props:{style:{color:"#A5D6FF"}}}]},{tokens:[{content:' "email": "Sincere@april.biz",',props:{style:{color:"#A5D6FF"}}}]},{tokens:[{content:' "address": {',props:{style:{color:"#A5D6FF"}}}]},{tokens:[{content:' "street": "Main Street",',props:{style:{color:"#A5D6FF"}}}]},{tokens:[{content:' "suite": "Apt. 556",',props:{style:{color:"#A5D6FF"}}}]},{tokens:[{content:' "city": "Springfield",',props:{style:{color:"#A5D6FF"}}}]},{tokens:[{content:' "zipcode": "92998-3874",',props:{style:{color:"#A5D6FF"}}}]},{tokens:[{content:' "geo": {',props:{style:{color:"#A5D6FF"}}}]},{tokens:[{content:' "lat": "-37.3159",',props:{style:{color:"#A5D6FF"}}}]},{tokens:[{content:' "lng": "81.1496"',props:{style:{color:"#A5D6FF"}}}]},{tokens:[{content:" }",props:{style:{color:"#A5D6FF"}}}]},{tokens:[{content:" },",props:{style:{color:"#A5D6FF"}}}]},{tokens:[{content:' "phone": "1-770-736-8031 x56442",',props:{style:{color:"#A5D6FF"}}}]},{tokens:[{content:' "website": "hildegard.org",',props:{style:{color:"#A5D6FF"}}}]},{tokens:[{content:' "company": {',props:{style:{color:"#A5D6FF"}}}]},{tokens:[{content:' "name": "Acme-Corp",',props:{style:{color:"#A5D6FF"}}}]},{tokens:[{content:' "catchPhrase": "Multi-layered client-server neural-net",',props:{style:{color:"#A5D6FF"}}}]},{tokens:[{content:' "bs": "harness real-time e-markets"',props:{style:{color:"#A5D6FF"}}}]},{tokens:[{content:" }",props:{style:{color:"#A5D6FF"}}}]},{tokens:[{content:"}'",props:{style:{color:"#A5D6FF"}}}]}],lang:"bash"},annotations:[]}]}),"\n"]}),"\n",(0,r.jsxs)(t.li,{children:["\n",(0,r.jsxs)(t.p,{children:["To view the ",(0,r.jsx)(t.code,{children:"Data"})," resulting from the ",(0,r.jsx)(t.strong,{children:"Select Keys"})," operation, do one of the following:"]}),"\n",(0,r.jsxs)(t.ul,{children:["\n",(0,r.jsxs)(t.li,{children:["If you attached a ",(0,r.jsx)(t.strong,{children:"Chat Output"})," component, open the ",(0,r.jsx)(t.strong,{children:"Playground"})," to see the result as a chat message."]}),"\n",(0,r.jsxs)(t.li,{children:["Click ",(0,r.jsx)(i.A,{name:"TextSearch","aria-hidden":"true"})," ",(0,r.jsx)(t.strong,{children:"Inspect output"})," on the ",(0,r.jsx)(t.strong,{children:"Data Operations"})," component."]}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,r.jsx)(t.h3,{id:"data-operations-parameters",children:"Data Operations parameters"}),"\n",(0,r.jsxs)(t.p,{children:["Many parameters are conditional based on the selected ",(0,r.jsx)(t.strong,{children:"Operation"})," (",(0,r.jsx)(t.code,{children:"operation"}),")."]}),"\n",(0,r.jsxs)(t.table,{children:[(0,r.jsx)(t.thead,{children:(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.th,{children:"Name"}),(0,r.jsx)(t.th,{children:"Display Name"}),(0,r.jsx)(t.th,{children:"Info"})]})}),(0,r.jsxs)(t.tbody,{children:[(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"data"}),(0,r.jsx)(t.td,{children:"Data"}),(0,r.jsxs)(t.td,{children:["Input parameter. The ",(0,r.jsx)(t.code,{children:"Data"})," object to operate on."]})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"operation"}),(0,r.jsx)(t.td,{children:"Operation"}),(0,r.jsxs)(t.td,{children:["Input parameter. The operation to perform on the data. See ",(0,r.jsx)(t.a,{href:"#available-data-operations",children:"Available data operations"})]})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"select_keys_input"}),(0,r.jsx)(t.td,{children:"Select Keys"}),(0,r.jsx)(t.td,{children:"Input parameter. A list of keys to select from the data."})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"filter_key"}),(0,r.jsx)(t.td,{children:"Filter Key"}),(0,r.jsx)(t.td,{children:"Input parameter. The key to filter by."})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"operator"}),(0,r.jsx)(t.td,{children:"Comparison Operator"}),(0,r.jsx)(t.td,{children:"Input parameter. The operator to apply for comparing values."})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"filter_values"}),(0,r.jsx)(t.td,{children:"Filter Values"}),(0,r.jsx)(t.td,{children:"Input parameter. A list of values to filter by."})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"append_update_data"}),(0,r.jsx)(t.td,{children:"Append or Update"}),(0,r.jsx)(t.td,{children:"Input parameter. The data to append or update the existing data with."})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"remove_keys_input"}),(0,r.jsx)(t.td,{children:"Remove Keys"}),(0,r.jsx)(t.td,{children:"Input parameter. A list of keys to remove from the data."})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"rename_keys_input"}),(0,r.jsx)(t.td,{children:"Rename Keys"}),(0,r.jsx)(t.td,{children:"Input parameter. A list of keys to rename in the data."})]})]})]}),"\n",(0,r.jsx)(t.h4,{id:"available-data-operations",children:"Available data operations"}),"\n",(0,r.jsxs)(t.p,{children:["Options for the ",(0,r.jsx)(t.code,{children:"operations"})," input parameter are as follows.\nAll operations act on an incoming ",(0,r.jsx)(t.code,{children:"Data"})," object."]}),"\n",(0,r.jsxs)(t.table,{children:[(0,r.jsx)(t.thead,{children:(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.th,{children:"Name"}),(0,r.jsx)(t.th,{children:"Required Inputs"}),(0,r.jsx)(t.th,{children:"Process"})]})}),(0,r.jsxs)(t.tbody,{children:[(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"Select Keys"}),(0,r.jsx)(t.td,{children:(0,r.jsx)(t.code,{children:"select_keys_input"})}),(0,r.jsx)(t.td,{children:"Selects specific keys from the data."})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"Literal Eval"}),(0,r.jsx)(t.td,{children:"None"}),(0,r.jsx)(t.td,{children:"Evaluates string values as Python literals."})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"Combine"}),(0,r.jsx)(t.td,{children:"None"}),(0,r.jsx)(t.td,{children:"Combines multiple data objects into one."})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"Filter Values"}),(0,r.jsxs)(t.td,{children:[(0,r.jsx)(t.code,{children:"filter_key"}),", ",(0,r.jsx)(t.code,{children:"filter_values"}),", ",(0,r.jsx)(t.code,{children:"operator"})]}),(0,r.jsx)(t.td,{children:"Filters data based on key-value pair."})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"Append or Update"}),(0,r.jsx)(t.td,{children:(0,r.jsx)(t.code,{children:"append_update_data"})}),(0,r.jsx)(t.td,{children:"Adds or updates key-value pairs."})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"Remove Keys"}),(0,r.jsx)(t.td,{children:(0,r.jsx)(t.code,{children:"remove_keys_input"})}),(0,r.jsx)(t.td,{children:"Removes specified keys from the data."})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"Rename Keys"}),(0,r.jsx)(t.td,{children:(0,r.jsx)(t.code,{children:"rename_keys_input"})}),(0,r.jsx)(t.td,{children:"Renames keys in the data."})]})]})]}),"\n",(0,r.jsx)(t.h2,{id:"dataframe-operations",children:"DataFrame Operations"}),"\n",(0,r.jsxs)(t.p,{children:["The ",(0,r.jsx)(t.strong,{children:"DataFrame Operations"})," component performs operations on ",(0,r.jsx)(t.a,{href:"/data-types#dataframe",children:(0,r.jsx)(t.code,{children:"DataFrame"})})," (table) rows and columns, including schema changes, record changes, sorting, and filtering.\nFor all options, see ",(0,r.jsx)(t.a,{href:"#dataframe-operations-parameters",children:"DataFrame Operations parameters"}),"."]}),"\n",(0,r.jsxs)(t.p,{children:["The output is a new ",(0,r.jsx)(t.code,{children:"DataFrame"})," containing the modified data after running the selected operation."]}),"\n",(0,r.jsx)(t.h3,{id:"use-the-dataframe-operations-component-in-a-flow",children:"Use the DataFrame Operations component in a flow"}),"\n",(0,r.jsxs)(t.p,{children:["The following steps explain how to configure a ",(0,r.jsx)(t.strong,{children:"DataFrame Operations"})," component in a flow.\nYou can follow along with an example or use your own flow.\nThe only requirement is that the preceding component must create ",(0,r.jsx)(t.code,{children:"DataFrame"})," output that you can pass to the ",(0,r.jsx)(t.strong,{children:"DataFrame Operations"})," component."]}),"\n",(0,r.jsxs)(t.ol,{children:["\n",(0,r.jsxs)(t.li,{children:["\n",(0,r.jsx)(t.p,{children:"Create a new flow or use an existing flow."}),"\n",(0,r.jsxs)(s,{children:[(0,r.jsx)("summary",{children:"Example: API response extraction flow"}),(0,r.jsxs)(t.p,{children:["The following example flow uses five components to extract ",(0,r.jsx)(t.code,{children:"Data"})," from an API response, transform it to a ",(0,r.jsx)(t.code,{children:"DataFrame"}),", and then perform further processing on the tabular data using a ",(0,r.jsx)(t.strong,{children:"DataFrame Operations"})," component.\nThe sixth component, ",(0,r.jsx)(t.strong,{children:"Chat Output"}),", is optional in this example.\nIt only serves as a convenient way for you to view the final output in the ",(0,r.jsx)(t.strong,{children:"Playground"}),", rather than inspecting the component logs."]}),(0,r.jsx)(t.p,{children:(0,r.jsx)(t.img,{alt:"A flow that ingests an API response, extracts it to a DataFrame with a Smart Function component, and the processes it through a DataFrame Operations component",src:n(13533).A+"",width:"4000",height:"2120"})}),(0,r.jsxs)(t.p,{children:["If you want to use this example to test the ",(0,r.jsx)(t.strong,{children:"DataFrame Operations"})," component, do the following:"]}),(0,r.jsxs)(t.ol,{children:["\n",(0,r.jsxs)(t.li,{children:["\n",(0,r.jsx)(t.p,{children:"Create a flow with the following components:"}),"\n",(0,r.jsxs)(t.ul,{children:["\n",(0,r.jsx)(t.li,{children:(0,r.jsx)(t.strong,{children:"API Request"})}),"\n",(0,r.jsx)(t.li,{children:(0,r.jsx)(t.strong,{children:"Language Model"})}),"\n",(0,r.jsx)(t.li,{children:(0,r.jsx)(t.strong,{children:"Smart Function"})}),"\n",(0,r.jsx)(t.li,{children:(0,r.jsx)(t.strong,{children:"Type Convert"})}),"\n"]}),"\n"]}),"\n",(0,r.jsxs)(t.li,{children:["\n",(0,r.jsxs)(t.p,{children:["Configure the ",(0,r.jsxs)(t.a,{href:"#smart-transform",children:[(0,r.jsx)(t.strong,{children:"Smart Function"})," component"]})," and its dependencies:"]}),"\n",(0,r.jsxs)(t.ul,{children:["\n",(0,r.jsxs)(t.li,{children:[(0,r.jsx)(t.strong,{children:"API Request"}),": Configure the ",(0,r.jsxs)(t.a,{href:"/components-data#api-request",children:[(0,r.jsx)(t.strong,{children:"API Request"})," component"]})," to get JSON data from an endpoint of your choice, and then connect the ",(0,r.jsx)(t.strong,{children:"API Response"})," output to the ",(0,r.jsx)(t.strong,{children:"Smart Function"})," component's ",(0,r.jsx)(t.strong,{children:"Data"})," input."]}),"\n",(0,r.jsxs)(t.li,{children:[(0,r.jsx)(t.strong,{children:"Language Model"}),": Select your preferred provider and model, and then enter a valid API key.\nChange the output to ",(0,r.jsx)(t.strong,{children:"Language Model"}),", and then connect the ",(0,r.jsx)(t.code,{children:"LanguageModel"})," output to the ",(0,r.jsx)(t.strong,{children:"Smart Function"})," component's ",(0,r.jsx)(t.strong,{children:"Language Model"})," input."]}),"\n",(0,r.jsxs)(t.li,{children:[(0,r.jsx)(t.strong,{children:"Smart Function"}),": In the ",(0,r.jsx)(t.strong,{children:"Instructions"})," field, enter natural language instructions to extract data from the API response.\nYour instructions depend on the response content and desired outcome.\nFor example, if the response contains a large ",(0,r.jsx)(t.code,{children:"result"})," field, you might provide instructions like ",(0,r.jsx)(t.code,{children:"explode the result field out into a Data object"}),"."]}),"\n"]}),"\n"]}),"\n",(0,r.jsxs)(t.li,{children:["\n",(0,r.jsxs)(t.p,{children:["Convert the ",(0,r.jsx)(t.strong,{children:"Smart Function"})," component's ",(0,r.jsx)(t.code,{children:"Data"})," output to ",(0,r.jsx)(t.code,{children:"DataFrame"}),":"]}),"\n",(0,r.jsxs)(t.ol,{children:["\n",(0,r.jsxs)(t.li,{children:["Connect the ",(0,r.jsx)(t.strong,{children:"Filtered Data"})," output to the ",(0,r.jsx)(t.strong,{children:"Type Convert"})," component's ",(0,r.jsx)(t.strong,{children:"Data"})," input."]}),"\n",(0,r.jsxs)(t.li,{children:["Set the ",(0,r.jsx)(t.strong,{children:"Type Convert"})," component's ",(0,r.jsx)(t.strong,{children:"Output Type"})," to ",(0,r.jsx)(t.strong,{children:"DataFrame"}),"."]}),"\n"]}),"\n"]}),"\n"]}),(0,r.jsxs)(t.p,{children:["Now the flow is ready for you to add the ",(0,r.jsx)(t.strong,{children:"DataFrame Operations"})," component."]})]}),"\n"]}),"\n",(0,r.jsxs)(t.li,{children:["\n",(0,r.jsxs)(t.p,{children:["Add a ",(0,r.jsx)(t.strong,{children:"DataFrame Operations"})," component to the flow, and then connect ",(0,r.jsx)(t.code,{children:"DataFrame"})," output from another component to the ",(0,r.jsx)(t.strong,{children:"DataFrame"})," input."]}),"\n",(0,r.jsxs)(t.p,{children:["All operations in the ",(0,r.jsx)(t.strong,{children:"DataFrame Operations"})," component require at least one ",(0,r.jsx)(t.code,{children:"DataFrame"})," input from another component.\nIf a component doesn't produce ",(0,r.jsx)(t.code,{children:"DataFrame"})," output, you can use another component, such as the ",(0,r.jsx)(t.strong,{children:"Type Convert"})," component, to reformat the data before passing it to the ",(0,r.jsx)(t.strong,{children:"DataFrame Operations"})," component.\nAlternatively, you could consider using a component that is designed to process the original data type, such as the ",(0,r.jsx)(t.strong,{children:"Parser"})," or ",(0,r.jsx)(t.strong,{children:"Data Operations"})," components."]}),"\n",(0,r.jsxs)(t.p,{children:["If you are following along with the example flow, connect the ",(0,r.jsx)(t.strong,{children:"Type Convert"})," component's ",(0,r.jsx)(t.strong,{children:"DataFrame Output"})," port to the ",(0,r.jsx)(t.strong,{children:"DataFrame"})," input."]}),"\n"]}),"\n",(0,r.jsxs)(t.li,{children:["\n",(0,r.jsxs)(t.p,{children:["In the ",(0,r.jsx)(t.strong,{children:"Operations"})," field, select the operation you want to perform on the incoming ",(0,r.jsx)(t.code,{children:"DataFrame"}),".\nFor example, the ",(0,r.jsx)(t.strong,{children:"Filter"})," operation filters the rows based on a specified column and value."]}),"\n",(0,r.jsx)(t.admonition,{type:"tip",children:(0,r.jsxs)(t.p,{children:["You can select only one operation.\nIf you need to perform multiple operations on the data, you can chain multiple ",(0,r.jsx)(t.strong,{children:"DataFrame Operations"})," components together to execute each operation in sequence.\nFor more complex multi-step operations, like dramatic schema changes or pivots, consider using an LLM-powered component, like the ",(0,r.jsx)(t.strong,{children:"Structured Output"})," or ",(0,r.jsx)(t.strong,{children:"Smart Function"})," component, as a replacement or preparation for the ",(0,r.jsx)(t.strong,{children:"DataFrame Operations"})," component."]})}),"\n",(0,r.jsxs)(t.p,{children:["If you're following along with the example flow, select any operation that you want to apply to the data that was extracted by the ",(0,r.jsx)(t.strong,{children:"Smart Function"})," component.\nTo view the contents of the incoming ",(0,r.jsx)(t.code,{children:"DataFrame"}),", click ",(0,r.jsx)(i.A,{name:"Play","aria-hidden":"true"})," ",(0,r.jsx)(t.strong,{children:"Run component"})," on the ",(0,r.jsx)(t.strong,{children:"Type Convert"})," component, and then ",(0,r.jsx)(i.A,{name:"TextSearch","aria-hidden":"true"})," ",(0,r.jsx)(t.strong,{children:"Inspect output"}),".\nIf the ",(0,r.jsx)(t.code,{children:"DataFrame"})," seems malformed, click ",(0,r.jsx)(i.A,{name:"TextSearch","aria-hidden":"true"})," ",(0,r.jsx)(t.strong,{children:"Inspect output"})," on each upstream component to determine where the error occurs, and then modify your flow's configuration as needed.\nFor example, if the ",(0,r.jsx)(t.strong,{children:"Smart Function"})," component didn't extract the expected fields, modify your instructions or verify that the given fields are present in the ",(0,r.jsx)(t.strong,{children:"API Response"})," output."]}),"\n"]}),"\n",(0,r.jsxs)(t.li,{children:["\n",(0,r.jsxs)(t.p,{children:["Configure the operation's parameters.\nThe specific parameters depend on the selected operation.\nFor example, if you select the ",(0,r.jsx)(t.strong,{children:"Filter"})," operation, you must define a filter condition using the ",(0,r.jsx)(t.strong,{children:"Column Name"}),", ",(0,r.jsx)(t.strong,{children:"Filter Value"}),", and ",(0,r.jsx)(t.strong,{children:"Filter Operator"})," parameters.\nFor more information, see ",(0,r.jsx)(t.a,{href:"#dataframe-operations-parameters",children:"DataFrame Operations parameters"})]}),"\n"]}),"\n",(0,r.jsxs)(t.li,{children:["\n",(0,r.jsxs)(t.p,{children:["To test the flow, click ",(0,r.jsx)(i.A,{name:"Play","aria-hidden":"true"})," ",(0,r.jsx)(t.strong,{children:"Run component"})," on the ",(0,r.jsx)(t.strong,{children:"DataFrame Operations"})," component, and then click ",(0,r.jsx)(i.A,{name:"TextSearch","aria-hidden":"true"})," ",(0,r.jsx)(t.strong,{children:"Inspect output"})," to view the new ",(0,r.jsx)(t.code,{children:"DataFrame"})," created from the ",(0,r.jsx)(t.strong,{children:"Filter"})," operation."]}),"\n",(0,r.jsxs)(t.p,{children:["If you want to view the output in the ",(0,r.jsx)(t.strong,{children:"Playground"}),", connect the ",(0,r.jsx)(t.strong,{children:"DataFrame Operations"})," component's output to a ",(0,r.jsx)(t.strong,{children:"Chat Output"})," component, rerun the ",(0,r.jsx)(t.strong,{children:"DataFrame Operations"})," component, and then click ",(0,r.jsx)(t.strong,{children:"Playground"}),"."]}),"\n"]}),"\n"]}),"\n",(0,r.jsxs)(t.p,{children:["For another example, see ",(0,r.jsx)(t.a,{href:"/components-logic#conditional-looping",children:"Conditional looping"}),"."]}),"\n",(0,r.jsx)(t.h3,{id:"dataframe-operations-parameters",children:"DataFrame Operations parameters"}),"\n",(0,r.jsxs)(t.p,{children:["Most ",(0,r.jsx)(t.strong,{children:"DataFrame Operations"})," parameters are conditional because they only apply to specific operations."]}),"\n",(0,r.jsxs)(t.p,{children:["The only permanent parameters are ",(0,r.jsx)(t.strong,{children:"DataFrame"})," (",(0,r.jsx)(t.code,{children:"df"}),"), which is the ",(0,r.jsx)(t.code,{children:"DataFrame"})," input, and ",(0,r.jsx)(t.strong,{children:"Operation"})," (",(0,r.jsx)(t.code,{children:"operation"}),"), which is the operation to perform on the ",(0,r.jsx)(t.code,{children:"DataFrame"}),".\nOnce you select an operation, the conditional parameters for that operation appear on the ",(0,r.jsx)(t.strong,{children:"DataFrame Operations"})," component."]}),"\n",(0,r.jsxs)(c.A,{children:[(0,r.jsxs)(l.A,{value:"addcolumn",label:"Add Column",default:!0,children:[(0,r.jsxs)(t.p,{children:["The ",(0,r.jsx)(t.strong,{children:"Add Column"})," operation allows you to add a new column to the ",(0,r.jsx)(t.code,{children:"DataFrame"})," with a constant value."]}),(0,r.jsxs)(t.p,{children:["The parameters are ",(0,r.jsx)(t.strong,{children:"New Column Name"})," (",(0,r.jsx)(t.code,{children:"new_column_name"}),") and ",(0,r.jsx)(t.strong,{children:"New Column Value"})," (",(0,r.jsx)(t.code,{children:"new_column_value"}),")."]})]}),(0,r.jsx)(l.A,{value:"dropcolumn",label:"Drop Column",children:(0,r.jsxs)(t.p,{children:["The ",(0,r.jsx)(t.strong,{children:"Drop Column"})," operation allows you to remove a column from the ",(0,r.jsx)(t.code,{children:"DataFrame"}),", specified by ",(0,r.jsx)(t.strong,{children:"Column Name"})," (",(0,r.jsx)(t.code,{children:"column_name"}),")."]})}),(0,r.jsxs)(l.A,{value:"filter",label:"Filter",children:[(0,r.jsxs)(t.p,{children:["The ",(0,r.jsx)(t.strong,{children:"Filter"})," operation allows you to filter the ",(0,r.jsx)(t.code,{children:"DataFrame"})," based on a specified condition.\nThe output is a ",(0,r.jsx)(t.code,{children:"DataFrame"})," containing only the rows that matched the filter condition."]}),(0,r.jsx)(t.p,{children:"Provide the following parameters:"}),(0,r.jsxs)(t.ul,{children:["\n",(0,r.jsxs)(t.li,{children:[(0,r.jsx)(t.strong,{children:"Column Name"})," (",(0,r.jsx)(t.code,{children:"column_name"}),"): The name of the column to filter on."]}),"\n",(0,r.jsxs)(t.li,{children:[(0,r.jsx)(t.strong,{children:"Filter Value"})," (",(0,r.jsx)(t.code,{children:"filter_value"}),"): The value to filter on."]}),"\n",(0,r.jsxs)(t.li,{children:[(0,r.jsx)(t.strong,{children:"Filter Operator"})," (",(0,r.jsx)(t.code,{children:"filter_operator"}),"): The operator to use for filtering, one of ",(0,r.jsx)(t.code,{children:"equals"})," (default), ",(0,r.jsx)(t.code,{children:"not equals"}),", ",(0,r.jsx)(t.code,{children:"contains"}),", ",(0,r.jsx)(t.code,{children:"starts with"}),", ",(0,r.jsx)(t.code,{children:"ends with"}),", ",(0,r.jsx)(t.code,{children:"greater than"}),", or ",(0,r.jsx)(t.code,{children:"less than"}),"."]}),"\n"]})]}),(0,r.jsxs)(l.A,{value:"head",label:"Head",children:[(0,r.jsxs)(t.p,{children:["The ",(0,r.jsx)(t.strong,{children:"Head"})," operation allows you to retrieve the first ",(0,r.jsx)(t.code,{children:"n"})," rows of the ",(0,r.jsx)(t.code,{children:"DataFrame"}),", where ",(0,r.jsx)(t.code,{children:"n"})," is set in ",(0,r.jsx)(t.strong,{children:"Number of Rows"})," (",(0,r.jsx)(t.code,{children:"num_rows"}),").\nThe default is ",(0,r.jsx)(t.code,{children:"5"}),"."]}),(0,r.jsxs)(t.p,{children:["The output is a ",(0,r.jsx)(t.code,{children:"DataFrame"})," containing only the selected rows."]})]}),(0,r.jsxs)(l.A,{value:"renamecolumn",label:"Rename Column",children:[(0,r.jsxs)(t.p,{children:["The ",(0,r.jsx)(t.strong,{children:"Rename Column"})," operation allows you to rename an existing column in the ",(0,r.jsx)(t.code,{children:"DataFrame"}),"."]}),(0,r.jsxs)(t.p,{children:["The parameters are ",(0,r.jsx)(t.strong,{children:"Column Name"})," (",(0,r.jsx)(t.code,{children:"column_name"}),"), which is the current name, and ",(0,r.jsx)(t.strong,{children:"New Column Name"})," (",(0,r.jsx)(t.code,{children:"new_column_name"}),")."]})]}),(0,r.jsxs)(l.A,{value:"replacevalue",label:"Replace Value",children:[(0,r.jsxs)(t.p,{children:["The ",(0,r.jsx)(t.strong,{children:"Replace Value"})," operation allows you to replace values in a specific column of the ",(0,r.jsx)(t.code,{children:"DataFrame"}),".\nThis operation replaces a target value with a new value.\nAll cells matching the target value are replaced with the new value in the new ",(0,r.jsx)(t.code,{children:"DataFrame"})," output."]}),(0,r.jsx)(t.p,{children:"Provide the following parameters:"}),(0,r.jsxs)(t.ul,{children:["\n",(0,r.jsxs)(t.li,{children:[(0,r.jsx)(t.strong,{children:"Column Name"})," (",(0,r.jsx)(t.code,{children:"column_name"}),"): The name of the column to modify."]}),"\n",(0,r.jsxs)(t.li,{children:[(0,r.jsx)(t.strong,{children:"Value to Replace"})," (",(0,r.jsx)(t.code,{children:"replace_value"}),"): The value that you want to replace."]}),"\n",(0,r.jsxs)(t.li,{children:[(0,r.jsx)(t.strong,{children:"Replacement Value"})," (",(0,r.jsx)(t.code,{children:"replacement_value"}),"): The new value to use."]}),"\n"]})]}),(0,r.jsxs)(l.A,{value:"selectcolumns",label:"Select Columns",children:[(0,r.jsxs)(t.p,{children:["The ",(0,r.jsx)(t.strong,{children:"Select Columns"})," operation allows you to select one or more specific columns from the ",(0,r.jsx)(t.code,{children:"DataFrame"}),"."]}),(0,r.jsxs)(t.p,{children:["Provide a list of column names in ",(0,r.jsx)(t.strong,{children:"Columns to Select"})," (",(0,r.jsx)(t.code,{children:"columns_to_select"}),").\nIn the visual editor, click ",(0,r.jsx)(i.A,{name:"Plus","aria-hidden":"true"})," ",(0,r.jsx)(t.strong,{children:"Add More"})," to add multiple fields, and then enter one column name in each field."]}),(0,r.jsxs)(t.p,{children:["The output is a ",(0,r.jsx)(t.code,{children:"DataFrame"})," containing only the specified columns."]})]}),(0,r.jsxs)(l.A,{value:"sort",label:"Sort",children:[(0,r.jsxs)(t.p,{children:["The ",(0,r.jsx)(t.strong,{children:"Sort"})," operation allows you to sort the ",(0,r.jsx)(t.code,{children:"DataFrame"})," on a specific column in ascending or descending order."]}),(0,r.jsx)(t.p,{children:"Provide the following parameters:"}),(0,r.jsxs)(t.ul,{children:["\n",(0,r.jsxs)(t.li,{children:[(0,r.jsx)(t.strong,{children:"Column Name"})," (",(0,r.jsx)(t.code,{children:"column_name"}),"): The name of the column to sort on."]}),"\n",(0,r.jsxs)(t.li,{children:[(0,r.jsx)(t.strong,{children:"Sort Ascending"})," (",(0,r.jsx)(t.code,{children:"ascending"}),"): Whether to sort in ascending or descending order. If enabled (",(0,r.jsx)(t.code,{children:"true"}),"), sorts in ascending order; if disabled (",(0,r.jsx)(t.code,{children:"false"}),"), sorts in descending order. Default: Enabled (",(0,r.jsx)(t.code,{children:"true"}),")"]}),"\n"]})]}),(0,r.jsxs)(l.A,{value:"tail",label:"Tail",children:[(0,r.jsxs)(t.p,{children:["The ",(0,r.jsx)(t.strong,{children:"Tail"})," operation allows you to retrieve the last ",(0,r.jsx)(t.code,{children:"n"})," rows of the ",(0,r.jsx)(t.code,{children:"DataFrame"}),", where ",(0,r.jsx)(t.code,{children:"n"})," is set in ",(0,r.jsx)(t.strong,{children:"Number of Rows"})," (",(0,r.jsx)(t.code,{children:"num_rows"}),").\nThe default is ",(0,r.jsx)(t.code,{children:"5"}),"."]}),(0,r.jsxs)(t.p,{children:["The output is a ",(0,r.jsx)(t.code,{children:"DataFrame"})," containing only the selected rows."]})]}),(0,r.jsxs)(l.A,{value:"dropduplicates",label:"Drop Duplicates",children:[(0,r.jsxs)(t.p,{children:["The ",(0,r.jsx)(t.strong,{children:"Drop Duplicates"})," operation removes rows from the ",(0,r.jsx)(t.code,{children:"DataFrame"})," by identifying all duplicate values within a single column."]}),(0,r.jsxs)(t.p,{children:["The only parameter is the ",(0,r.jsx)(t.strong,{children:"Column Name"})," (",(0,r.jsx)(t.code,{children:"column_name"}),")."]}),(0,r.jsxs)(t.p,{children:["When the flow runs, all rows with duplicate values in the given column are removed.\nThe output is a ",(0,r.jsx)(t.code,{children:"DataFrame"})," containing all columns from the original ",(0,r.jsx)(t.code,{children:"DataFrame"}),", but only rows with non-duplicate values."]})]})]}),"\n",(0,r.jsx)(t.h2,{id:"llm-router",children:"LLM Router"}),"\n",(0,r.jsxs)(t.p,{children:["The ",(0,r.jsx)(t.strong,{children:"LLM Router"})," component routes requests to the most appropriate LLM based on ",(0,r.jsx)(t.a,{href:"https://openrouter.ai/docs/quickstart",children:"OpenRouter"})," model specifications."]}),"\n",(0,r.jsxs)(t.p,{children:["To use the component in a flow, you connect multiple language model components to the ",(0,r.jsx)(t.strong,{children:"LLM Router"})," components.\nOne model is the judge LLM that analyzes input messages to understand the evaluation context, selects the most appropriate model from the other attached LLMs, and then routes the input to the selected model.\nThe selected model processes the input, and then returns the generated response."]}),"\n",(0,r.jsx)(t.p,{children:"The following example flow has three language model components.\nOne is the judge LLM, and the other two are in the LLM pool for request routing.\nThe input and output components create a seamless chat interaction where you send a message and receive a response without any user awareness of the underlying routing."}),"\n",(0,r.jsx)(t.p,{children:(0,r.jsx)(t.img,{alt:"LLM Router component",src:n(9898).A+"",width:"3316",height:"2492"})}),"\n",(0,r.jsx)(t.h3,{id:"llm-router-parameters",children:"LLM Router parameters"}),"\n",(0,r.jsx)(d.Ay,{}),"\n",(0,r.jsxs)(t.table,{children:[(0,r.jsx)(t.thead,{children:(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.th,{children:"Name"}),(0,r.jsx)(t.th,{children:"Display Name"}),(0,r.jsx)(t.th,{children:"Info"})]})}),(0,r.jsxs)(t.tbody,{children:[(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:(0,r.jsx)(t.code,{children:"models"})}),(0,r.jsx)(t.td,{children:(0,r.jsx)(t.strong,{children:"Language Models"})}),(0,r.jsxs)(t.td,{children:["Input parameter. Connect ",(0,r.jsx)(t.a,{href:"/data-types#languagemodel",children:(0,r.jsx)(t.code,{children:"LanguageModel"})})," output from multiple ",(0,r.jsx)(t.a,{href:"/components-models",children:"language model components"})," to create a pool of models. The ",(0,r.jsx)(t.code,{children:"judge_llm"})," selects models from this pool when routing requests. The first model you connect is the default model if there is a problem with model selection or routing."]})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:(0,r.jsx)(t.code,{children:"input_value"})}),(0,r.jsx)(t.td,{children:(0,r.jsx)(t.strong,{children:"Input"})}),(0,r.jsx)(t.td,{children:"Input parameter. The incoming query to be routed to the model selected by the judge LLM."})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:(0,r.jsx)(t.code,{children:"judge_llm"})}),(0,r.jsx)(t.td,{children:(0,r.jsx)(t.strong,{children:"Judge LLM"})}),(0,r.jsxs)(t.td,{children:["Input parameter. Connect ",(0,r.jsx)(t.code,{children:"LanguageModel"})," output from ",(0,r.jsx)(t.em,{children:"one"})," ",(0,r.jsx)(t.strong,{children:"Language Model"})," component to serve as the judge LLM for request routing."]})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:(0,r.jsx)(t.code,{children:"optimization"})}),(0,r.jsx)(t.td,{children:(0,r.jsx)(t.strong,{children:"Optimization"})}),(0,r.jsxs)(t.td,{children:["Input parameter. Set a preferred characteristic for model selection by the judge LLM. The options are ",(0,r.jsx)(t.code,{children:"quality"})," (highest response quality), ",(0,r.jsx)(t.code,{children:"speed"})," (fastest response time), ",(0,r.jsx)(t.code,{children:"cost"})," (most cost-effective model), or ",(0,r.jsx)(t.code,{children:"balanced"})," (equal weight for quality, speed, and cost). Default: ",(0,r.jsx)(t.code,{children:"balanced"})]})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:(0,r.jsx)(t.code,{children:"use_openrouter_specs"})}),(0,r.jsx)(t.td,{children:(0,r.jsx)(t.strong,{children:"Use OpenRouter Specs"})}),(0,r.jsx)(t.td,{children:"Input parameter. Whether to fetch model specifications from the OpenRouter API."})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsxs)(t.td,{children:["If ",(0,r.jsx)(t.code,{children:"false"}),", only the model name is provided to the judge LLM. Default: Enabled (",(0,r.jsx)(t.code,{children:"true"}),")"]}),(0,r.jsx)(t.td,{}),(0,r.jsx)(t.td,{})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:(0,r.jsx)(t.code,{children:"timeout"})}),(0,r.jsx)(t.td,{children:(0,r.jsx)(t.strong,{children:"API Timeout"})}),(0,r.jsxs)(t.td,{children:["Input parameter. Set a timeout duration in seconds for API requests made by the router. Default: ",(0,r.jsx)(t.code,{children:"10"})]})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:(0,r.jsx)(t.code,{children:"fallback_to_first"})}),(0,r.jsx)(t.td,{children:(0,r.jsx)(t.strong,{children:"Fallback to First Model"})}),(0,r.jsxs)(t.td,{children:["Input parameter. Whether to use the first LLM in ",(0,r.jsx)(t.code,{children:"models"})," as a backup if routing fails to reach the selected model. Default: Enabled (",(0,r.jsx)(t.code,{children:"true"}),")"]})]})]})]}),"\n",(0,r.jsx)(t.h3,{id:"llm-router-outputs",children:"LLM Router outputs"}),"\n",(0,r.jsxs)(t.p,{children:["The ",(0,r.jsx)(t.strong,{children:"LLM Router"})," component provides three output options.\nYou can set the desired output type near the component's output port."]}),"\n",(0,r.jsxs)(t.ul,{children:["\n",(0,r.jsxs)(t.li,{children:["\n",(0,r.jsxs)(t.p,{children:[(0,r.jsx)(t.strong,{children:"Output"}),": A ",(0,r.jsx)(t.code,{children:"Message"})," containing the response to the original query as generated by the selected LLM.\nUse this output for regular chat interactions."]}),"\n"]}),"\n",(0,r.jsxs)(t.li,{children:["\n",(0,r.jsxs)(t.p,{children:[(0,r.jsx)(t.strong,{children:"Selected Model Info"}),": A ",(0,r.jsx)(t.code,{children:"Data"})," object containing information about the selected model, such as its name and version."]}),"\n"]}),"\n",(0,r.jsxs)(t.li,{children:["\n",(0,r.jsxs)(t.p,{children:[(0,r.jsx)(t.strong,{children:"Routing Decision"}),": A ",(0,r.jsx)(t.code,{children:"Message"})," containing the judge model's reasoning for selecting a particular model, including input query length and number of models considered.\nFor example:"]}),"\n",(0,r.jsx)(j.Code,{codeConfig:g,northPanel:{tabs:[""],active:"",heightRatio:1},files:[{name:"",focus:"",code:{lines:[{tokens:[{content:"Model Selection Decision:",props:{}}]},{tokens:[{content:"- Selected Model Index: 0",props:{}}]},{tokens:[{content:"- Selected Langflow Model Name: gpt-4o-mini",props:{}}]},{tokens:[{content:"- Selected API Model ID (if resolved): openai/gpt-4o-mini",props:{}}]},{tokens:[{content:"- Optimization Preference: cost",props:{}}]},{tokens:[{content:"- Input Query Length: 27 characters (~5 tokens)",props:{}}]},{tokens:[{content:"- Number of Models Considered: 2",props:{}}]},{tokens:[{content:"- Specifications Source: OpenRouter API",props:{}}]}],lang:"text"},annotations:[]}]}),"\n",(0,r.jsx)(t.p,{children:"This is useful for debugging if you feel the judge model isn't selecting the best model."}),"\n"]}),"\n"]}),"\n",(0,r.jsx)(t.h2,{id:"parser",children:"Parser"}),"\n",(0,r.jsxs)(t.p,{children:["The ",(0,r.jsx)(t.strong,{children:"Parser"})," component extracts text from structured data (",(0,r.jsx)(t.code,{children:"DataFrame"})," or ",(0,r.jsx)(t.code,{children:"Data"}),") using a template or direct stringification.\nThe output is a ",(0,r.jsx)(t.code,{children:"Message"})," containing the parsed text."]}),"\n",(0,r.jsxs)(t.p,{children:["This is a versatile component for data extraction and manipulation in your flows.\nFor examples of ",(0,r.jsx)(t.strong,{children:"Parser"})," components in flows, see the following:"]}),"\n",(0,r.jsxs)(t.ul,{children:["\n",(0,r.jsx)(t.li,{children:(0,r.jsxs)(t.a,{href:"#batch-run",children:[(0,r.jsx)(t.strong,{children:"Batch Run"})," component example"]})}),"\n",(0,r.jsx)(t.li,{children:(0,r.jsxs)(t.a,{href:"#structured-output",children:[(0,r.jsx)(t.strong,{children:"Structured Output"})," component example"]})}),"\n",(0,r.jsxs)(t.li,{children:[(0,r.jsx)(t.strong,{children:"Financial Report Parser"})," template"]}),"\n",(0,r.jsx)(t.li,{children:(0,r.jsx)(t.a,{href:"/webhook",children:"Trigger flows with webhooks"})}),"\n",(0,r.jsx)(t.li,{children:(0,r.jsx)(t.a,{href:"/chat-with-rag",children:"Create a vector RAG chatbot"})}),"\n"]}),"\n",(0,r.jsx)(t.p,{children:(0,r.jsx)(t.img,{alt:"A flow that uses a Parser component to extract text from a Structured Output component.",src:n(96218).A+"",width:"4000",height:"2202"})}),"\n",(0,r.jsx)(t.h3,{id:"parsing-modes",children:"Parsing modes"}),"\n",(0,r.jsxs)(t.p,{children:["The ",(0,r.jsx)(t.strong,{children:"Parser"})," component has two modes: ",(0,r.jsx)(t.strong,{children:"Parser"})," and ",(0,r.jsx)(t.strong,{children:"Stringify"}),"."]}),"\n",(0,r.jsxs)(c.A,{children:[(0,r.jsxs)(l.A,{value:"template",label:"Parser (template) mode",default:!0,children:[(0,r.jsxs)(t.p,{children:["In ",(0,r.jsx)(t.strong,{children:"Parser"})," mode, you create a template for text output that can include literal strings and variables for extracted keys."]}),(0,r.jsxs)(t.p,{children:["Use curly braces to define variables anywhere in the template.\nVariables must match keys in the ",(0,r.jsx)(t.code,{children:"DataFrame"})," or ",(0,r.jsx)(t.code,{children:"Data"})," input, such as column names.\nFor example, ",(0,r.jsx)(t.code,{children:"{name}"})," extracts the value of a ",(0,r.jsx)(t.code,{children:"name"})," key.\nFor more information about the content and structure of ",(0,r.jsx)(t.code,{children:"DataFrame"})," and ",(0,r.jsx)(t.code,{children:"Data"})," objects, see ",(0,r.jsx)(t.a,{href:"/data-types",children:"Langflow data types"}),"."]}),(0,r.jsx)(h.Ay,{}),(0,r.jsxs)(t.p,{children:["When the flow runs, the ",(0,r.jsx)(t.strong,{children:"Parser"})," component iterates over the input, producing a ",(0,r.jsx)(t.code,{children:"Message"})," for each parsed item.\nFor example, parsing a ",(0,r.jsx)(t.code,{children:"DataFrame"})," creates a ",(0,r.jsx)(t.code,{children:"Message"})," for each row, populated with the unique values from that row."]}),(0,r.jsxs)(s,{children:[(0,r.jsx)("summary",{children:"Employee summary template"}),(0,r.jsx)(t.p,{children:"This example template extracts employee data into a natural language summary about an employee's hire date and current role:"}),(0,r.jsx)(j.Code,{codeConfig:g,northPanel:{tabs:[""],active:"",heightRatio:1},files:[{name:"",focus:"",code:{lines:[{tokens:[{content:"{employee_first_name} {employee_last_name} was hired on {start_date}.",props:{}}]},{tokens:[{content:"Their current position is {job_title} ({grade}).",props:{}}]}],lang:"text"},annotations:[]}]}),(0,r.jsxs)(t.p,{children:["The resulting ",(0,r.jsx)(t.code,{children:"Message"})," output replaces the variables with the corresponding extracted values.\nFor example:"]}),(0,r.jsx)(j.Code,{codeConfig:g,northPanel:{tabs:[""],active:"",heightRatio:1},files:[{name:"",focus:"",code:{lines:[{tokens:[{content:"Renlo Kai was hired on 11-July-2017.",props:{}}]},{tokens:[{content:"Their current position is Software Engineer (Principal).",props:{}}]}],lang:"text"},annotations:[]}]})]}),(0,r.jsxs)(s,{children:[(0,r.jsx)("summary",{children:"Employee profile template"}),(0,r.jsx)(t.p,{children:"This example template uses Markdown syntax and extracted employee data to create an employee profile:"}),(0,r.jsx)(j.Code,{codeConfig:g,northPanel:{tabs:[""],active:"",heightRatio:1},files:[{name:"",focus:"",code:{lines:[{tokens:[{content:"# Employee Profile",props:{}}]},{tokens:[{content:"## Personal Information",props:{}}]},{tokens:[{content:"- **Name:** {name}",props:{}}]},{tokens:[{content:"- **ID:** {id}",props:{}}]},{tokens:[{content:"- **Email:** {email}",props:{}}]}],lang:"text"},annotations:[]}]}),(0,r.jsxs)(t.p,{children:["When the flow runs, the ",(0,r.jsx)(t.strong,{children:"Parser"})," component iterates over each row of the ",(0,r.jsx)(t.code,{children:"DataFrame"}),", populating the template's variables with the appropriate extracted values.\nThe resulting text for each row is output as a ",(0,r.jsx)(t.a,{href:"/data-types#message",children:(0,r.jsx)(t.code,{children:"Message"})}),"."]})]}),(0,r.jsxs)(t.p,{children:["The following parameters are available in ",(0,r.jsx)(t.strong,{children:"Parser"})," mode."]}),(0,r.jsx)(d.Ay,{}),(0,r.jsxs)(t.table,{children:[(0,r.jsx)(t.thead,{children:(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.th,{children:"Name"}),(0,r.jsx)(t.th,{children:"Display Name"}),(0,r.jsx)(t.th,{children:"Info"})]})}),(0,r.jsxs)(t.tbody,{children:[(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"input_data"}),(0,r.jsx)(t.td,{children:"Data or DataFrame"}),(0,r.jsxs)(t.td,{children:["Input parameter. The ",(0,r.jsx)(t.code,{children:"Data"})," or ",(0,r.jsx)(t.code,{children:"DataFrame"})," input to parse."]})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"pattern"}),(0,r.jsx)(t.td,{children:"Template"}),(0,r.jsxs)(t.td,{children:["Input parameter. The formatting template using plaintext and variables for keys (",(0,r.jsx)(t.code,{children:"{KEY_NAME}"}),"). See the preceding examples for more information."]})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"sep"}),(0,r.jsx)(t.td,{children:"Separator"}),(0,r.jsxs)(t.td,{children:["Input parameter. A string defining the separator for rows or lines. Default: ",(0,r.jsx)(t.code,{children:"\\n"})," (new line)."]})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"clean_data"}),(0,r.jsx)(t.td,{children:"Clean Data"}),(0,r.jsxs)(t.td,{children:["Whether to remove empty rows and lines in each cell or key of the ",(0,r.jsx)(t.code,{children:"DataFrame"})," or ",(0,r.jsx)(t.code,{children:"Data"})," input. Default: Enabled (",(0,r.jsx)(t.code,{children:"true"}),")"]})]})]})]})]}),(0,r.jsxs)(l.A,{value:"stringify",label:"Stringify mode",children:[(0,r.jsxs)(t.p,{children:["Use ",(0,r.jsx)(t.strong,{children:"Stringify"})," mode to convert the entire input directly to text.\nThis mode doesn't support templates or key selection."]}),(0,r.jsxs)(t.p,{children:["The following parameters are available in ",(0,r.jsx)(t.strong,{children:"Stringify"})," mode."]}),(0,r.jsx)(d.Ay,{}),(0,r.jsxs)(t.table,{children:[(0,r.jsx)(t.thead,{children:(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.th,{children:"Name"}),(0,r.jsx)(t.th,{children:"Display Name"}),(0,r.jsx)(t.th,{children:"Info"})]})}),(0,r.jsxs)(t.tbody,{children:[(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"input_data"}),(0,r.jsx)(t.td,{children:"Data or DataFrame"}),(0,r.jsxs)(t.td,{children:["Input parameter. The ",(0,r.jsx)(t.code,{children:"Data"})," or ",(0,r.jsx)(t.code,{children:"DataFrame"})," input to parse."]})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"sep"}),(0,r.jsx)(t.td,{children:"Separator"}),(0,r.jsxs)(t.td,{children:["Input parameter. A string defining the separator for rows or lines. Default: ",(0,r.jsx)(t.code,{children:"\\n"})," (new line)."]})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"clean_data"}),(0,r.jsx)(t.td,{children:"Clean Data"}),(0,r.jsxs)(t.td,{children:["Whether to remove empty rows and lines in each cell or key of the ",(0,r.jsx)(t.code,{children:"DataFrame"})," or ",(0,r.jsx)(t.code,{children:"Data"})," input. Default: Enabled (",(0,r.jsx)(t.code,{children:"true"}),")"]})]})]})]})]})]}),"\n",(0,r.jsx)(t.h3,{id:"test-and-troubleshoot-parsed-text",children:"Test and troubleshoot parsed text"}),"\n",(0,r.jsxs)(t.p,{children:["To test the ",(0,r.jsx)(t.strong,{children:"Parser"})," component, click ",(0,r.jsx)(i.A,{name:"Play","aria-hidden":"true"})," ",(0,r.jsx)(t.strong,{children:"Run component"}),", and then click ",(0,r.jsx)(i.A,{name:"TextSearch","aria-hidden":"true"})," ",(0,r.jsx)(t.strong,{children:"Inspect output"})," to see the ",(0,r.jsx)(t.code,{children:"Message"})," output with the parsed text.\nYou can also connect a ",(0,r.jsx)(t.strong,{children:"Chat Output"})," component if you want to view the output in the ",(0,r.jsx)(t.strong,{children:"Playground"}),"."]}),"\n",(0,r.jsxs)(t.p,{children:["If the ",(0,r.jsx)(t.code,{children:"Message"})," output from the ",(0,r.jsx)(t.strong,{children:"Parser"})," component has empty or unexpected values, there might be a mapping error between the input and the parsing mode, the input has empty values, or the input isn't suitable for plaintext extraction."]}),"\n",(0,r.jsxs)(t.p,{children:["For example, assume you use the following template to parse a ",(0,r.jsx)(t.code,{children:"DataFrame"}),":"]}),"\n",(0,r.jsx)(j.Code,{codeConfig:g,northPanel:{tabs:[""],active:"",heightRatio:1},files:[{name:"",focus:"",code:{lines:[{tokens:[{content:"{employee_first_name} {employee_last_name} is a {job_title} ({grade}).",props:{}}]}],lang:"text"},annotations:[]}]}),"\n",(0,r.jsxs)(t.p,{children:["The following ",(0,r.jsx)(t.code,{children:"Message"})," could result from parsing a row where ",(0,r.jsx)(t.code,{children:"employee_first_name"})," was empty and ",(0,r.jsx)(t.code,{children:"grade"})," was ",(0,r.jsx)(t.code,{children:"null"}),":"]}),"\n",(0,r.jsx)(j.Code,{codeConfig:g,northPanel:{tabs:[""],active:"",heightRatio:1},files:[{name:"",focus:"",code:{lines:[{tokens:[{content:" Smith is a Software Engineer (null).",props:{}}]}],lang:"text"},annotations:[]}]}),"\n",(0,r.jsx)(t.p,{children:"To troubleshoot missing or unexpected values, you can do the following:"}),"\n",(0,r.jsxs)(t.ul,{children:["\n",(0,r.jsxs)(t.li,{children:["\n",(0,r.jsxs)(t.p,{children:["Make sure the variables in your template map to keys in the incoming ",(0,r.jsx)(t.code,{children:"Data"})," or ",(0,r.jsx)(t.code,{children:"DataFrame"}),".\nTo see the data being passed directly to the ",(0,r.jsx)(t.strong,{children:"Parser"})," component, click ",(0,r.jsx)(i.A,{name:"TextSearch","aria-hidden":"true"})," ",(0,r.jsx)(t.strong,{children:"Inspect output"})," on the component that is sending data to the ",(0,r.jsx)(t.strong,{children:"Parser"})," component."]}),"\n"]}),"\n",(0,r.jsxs)(t.li,{children:["\n",(0,r.jsx)(t.p,{children:"Check the source data for missing or incorrect values.\nThere are several ways you can address these inconsistencies:"}),"\n",(0,r.jsxs)(t.ul,{children:["\n",(0,r.jsx)(t.li,{children:"Rectify the source data directly."}),"\n",(0,r.jsxs)(t.li,{children:["Use other components to amend or filter anomalies before passing the data to the ",(0,r.jsx)(t.strong,{children:"Parser"})," component.\nThere are many components you can use for this depending on your goal, such as the ",(0,r.jsx)(t.strong,{children:"Data Operations"}),", ",(0,r.jsx)(t.strong,{children:"Structured Output"}),", and ",(0,r.jsx)(t.strong,{children:"Smart Function"})," components."]}),"\n",(0,r.jsxs)(t.li,{children:["Enable the ",(0,r.jsx)(t.strong,{children:"Parser"})," component's ",(0,r.jsx)(t.strong,{children:"Clean Data"})," parameter to skip empty rows or lines."]}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,r.jsx)(t.h2,{id:"python-interpreter",children:"Python Interpreter"}),"\n",(0,r.jsx)(t.p,{children:"This component allows you to execute Python code with imported packages."}),"\n",(0,r.jsxs)(t.p,{children:["The ",(0,r.jsx)(t.strong,{children:"Python Interpreter"})," component can only import packages that are already installed in your Langflow environment.\nIf you encounter an ",(0,r.jsx)(t.code,{children:"ImportError"})," when trying to use a package, you need to install it first."]}),"\n",(0,r.jsxs)(t.p,{children:["To install custom packages, see ",(0,r.jsx)(t.a,{href:"/install-custom-dependencies",children:"Install custom dependencies"}),"."]}),"\n",(0,r.jsx)(t.h3,{id:"use-the-python-interpreter-in-a-flow",children:"Use the Python Interpreter in a flow"}),"\n",(0,r.jsxs)(t.ol,{children:["\n",(0,r.jsxs)(t.li,{children:["To use this component in a flow, in the ",(0,r.jsx)(t.strong,{children:"Global Imports"})," field, add the packages you want to import as a comma-separated list, such as ",(0,r.jsx)(t.code,{children:"math,pandas"}),".\nAt least one import is required."]}),"\n",(0,r.jsxs)(t.li,{children:["In the ",(0,r.jsx)(t.strong,{children:"Python Code"})," field, enter the Python code you want to execute. Use ",(0,r.jsx)(t.code,{children:"print()"})," to see the output."]}),"\n",(0,r.jsxs)(t.li,{children:["Optional: Enable ",(0,r.jsx)(t.strong,{children:"Tool Mode"}),", and then connect the ",(0,r.jsx)(t.strong,{children:"Python Interpreter"})," component to an ",(0,r.jsx)(t.strong,{children:"Agent"})," component as a tool.\nFor example, connect a ",(0,r.jsx)(t.strong,{children:"Python Interpreter"})," component and a ",(0,r.jsxs)(t.a,{href:"/components-helpers#calculator",children:[(0,r.jsx)(t.strong,{children:"Calculator"})," component"]})," as tools for an ",(0,r.jsx)(t.strong,{children:"Agent"})," component, and then test how it chooses different tools to solve math problems.\n",(0,r.jsx)(t.img,{alt:"Python Interpreter and Calculator components connected to an Agent component",src:n(99e3).A+"",width:"3988",height:"2928"})]}),"\n",(0,r.jsxs)(t.li,{children:["Ask the agent an easier math question.\nThe ",(0,r.jsx)(t.strong,{children:"Calculator"})," tool can add, subtract, multiple, divide, or perform exponentiation.\nThe agent executes the ",(0,r.jsx)(t.code,{children:"evaluate_expression"})," tool to correctly answer the question."]}),"\n"]}),"\n",(0,r.jsx)(t.p,{children:"Result:"}),"\n",(0,r.jsx)(j.Code,{codeConfig:g,northPanel:{tabs:[""],active:"",heightRatio:1},files:[{name:"",focus:"",code:{lines:[{tokens:[{content:"Executed evaluate_expression",props:{}}]},{tokens:[{content:"Input:",props:{}}]},{tokens:[{content:"{",props:{}}]},{tokens:[{content:' "expression": "2+5"',props:{}}]},{tokens:[{content:"}",props:{}}]},{tokens:[{content:"Output:",props:{}}]},{tokens:[{content:"{",props:{}}]},{tokens:[{content:' "result": "7"',props:{}}]},{tokens:[{content:"}",props:{}}]}],lang:"text"},annotations:[]}]}),"\n",(0,r.jsxs)(t.ol,{start:"5",children:["\n",(0,r.jsxs)(t.li,{children:["Give the agent complete Python code.\nThis example creates a Pandas DataFrame table with the imported ",(0,r.jsx)(t.code,{children:"pandas"})," packages, and returns the square root of the mean squares."]}),"\n"]}),"\n",(0,r.jsx)(j.Code,{codeConfig:g,northPanel:{tabs:[""],active:"",heightRatio:1},files:[{name:"",focus:"",code:{lines:[{tokens:[{content:"import",props:{style:{color:"#FF7B72"}}},{content:" pandas ",props:{style:{color:"#C9D1D9"}}},{content:"as",props:{style:{color:"#FF7B72"}}},{content:" pd",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:"import",props:{style:{color:"#FF7B72"}}},{content:" math",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:"",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:"# Create a simple DataFrame",props:{style:{color:"#8B949E"}}}]},{tokens:[{content:"df ",props:{style:{color:"#C9D1D9"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:" pd.DataFrame({",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" 'numbers'",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:"3",props:{style:{color:"#79C0FF"}}},{content:", ",props:{style:{color:"#C9D1D9"}}},{content:"4",props:{style:{color:"#79C0FF"}}},{content:", ",props:{style:{color:"#C9D1D9"}}},{content:"5",props:{style:{color:"#79C0FF"}}},{content:"],",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" 'squares'",props:{style:{color:"#A5D6FF"}}},{content:": [x",props:{style:{color:"#C9D1D9"}}},{content:"**",props:{style:{color:"#FF7B72"}}},{content:"2 ",props:{style:{color:"#79C0FF"}}},{content:"for",props:{style:{color:"#FF7B72"}}},{content:" x ",props:{style:{color:"#C9D1D9"}}},{content:"in ",props:{style:{color:"#FF7B72"}}},{content:"range",props:{style:{color:"#79C0FF"}}},{content:"(",props:{style:{color:"#C9D1D9"}}},{content:"1",props:{style:{color:"#79C0FF"}}},{content:", ",props:{style:{color:"#C9D1D9"}}},{content:"6",props:{style:{color:"#79C0FF"}}},{content:")]",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:"})",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:"",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:"# Calculate the square root of the mean",props:{style:{color:"#8B949E"}}}]},{tokens:[{content:"result ",props:{style:{color:"#C9D1D9"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:" math.sqrt(df[",props:{style:{color:"#C9D1D9"}}},{content:"'squares'",props:{style:{color:"#A5D6FF"}}},{content:"].mean())",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:"print",props:{style:{color:"#79C0FF"}}},{content:"(",props:{style:{color:"#C9D1D9"}}},{content:"f",props:{style:{color:"#FF7B72"}}},{content:'"Square root of mean squares: ',props:{style:{color:"#A5D6FF"}}},{content:"{",props:{style:{color:"#79C0FF"}}},{content:"result",props:{style:{color:"#C9D1D9"}}},{content:"}",props:{style:{color:"#79C0FF"}}},{content:'"',props:{style:{color:"#A5D6FF"}}},{content:")",props:{style:{color:"#C9D1D9"}}}]}],lang:"python"},annotations:[]}]}),"\n",(0,r.jsxs)(t.p,{children:["The agent correctly chooses the ",(0,r.jsx)(t.code,{children:"run_python_repl"})," tool to solve the problem."]}),"\n",(0,r.jsx)(t.p,{children:"Result:"}),"\n",(0,r.jsx)(j.Code,{codeConfig:g,northPanel:{tabs:[""],active:"",heightRatio:1},files:[{name:"",focus:"",code:{lines:[{tokens:[{content:"Executed run_python_repl",props:{}}]},{tokens:[{content:"",props:{}}]},{tokens:[{content:"Input:",props:{}}]},{tokens:[{content:"",props:{}}]},{tokens:[{content:"{",props:{}}]},{tokens:[{content:" \"python_code\": \"import pandas as pd\\nimport math\\n\\n# Create a simple DataFrame\\ndf = pd.DataFrame({\\n 'numbers': [1, 2, 3, 4, 5],\\n 'squares': [x**2 for x in range(1, 6)]\\n})\\n\\n# Calculate the square root of the mean\\nresult = math.sqrt(df['squares'].mean())\\nprint(f\\\"Square root of mean squares: {result}\\\")\"",props:{}}]},{tokens:[{content:"}",props:{}}]},{tokens:[{content:"Output:",props:{}}]},{tokens:[{content:"",props:{}}]},{tokens:[{content:"{",props:{}}]},{tokens:[{content:' "result": "Square root of mean squares: 3.3166247903554"',props:{}}]},{tokens:[{content:"}",props:{}}]}],lang:"text"},annotations:[]}]}),"\n",(0,r.jsxs)(t.p,{children:["If you don't include the package imports in the chat, the agent can still create the table using ",(0,r.jsx)(t.code,{children:"pd.DataFrame"}),", because the ",(0,r.jsx)(t.code,{children:"pandas"})," package is imported globally by the ",(0,r.jsx)(t.strong,{children:"Python Interpreter"})," component in the ",(0,r.jsx)(t.strong,{children:"Global Imports"})," field."]}),"\n",(0,r.jsx)(t.h3,{id:"python-interpreter-parameters",children:"Python Interpreter parameters"}),"\n",(0,r.jsxs)(t.table,{children:[(0,r.jsx)(t.thead,{children:(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.th,{children:"Name"}),(0,r.jsx)(t.th,{children:"Type"}),(0,r.jsx)(t.th,{children:"Description"})]})}),(0,r.jsxs)(t.tbody,{children:[(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"global_imports"}),(0,r.jsx)(t.td,{children:"String"}),(0,r.jsxs)(t.td,{children:["Input parameter. A comma-separated list of modules to import globally, such as ",(0,r.jsx)(t.code,{children:"math,pandas,numpy"}),"."]})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"python_code"}),(0,r.jsx)(t.td,{children:"Code"}),(0,r.jsx)(t.td,{children:"Input parameter. The Python code to execute. Only modules specified in Global Imports can be used."})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"results"}),(0,r.jsx)(t.td,{children:"Data"}),(0,r.jsx)(t.td,{children:"Output parameter. The output of the executed Python code, including any printed results or errors."})]})]})]}),"\n",(0,r.jsx)(t.h2,{id:"save-file",children:"Save File"}),"\n",(0,r.jsxs)(t.p,{children:["The ",(0,r.jsx)(t.strong,{children:"Save File"})," component creates a file containing data produced by another component.\nSeveral file formats are supported, and you can store files in ",(0,r.jsx)(t.a,{href:"/memory",children:"Langflow storage"})," or the local file system."]}),"\n",(0,r.jsxs)(t.p,{children:["To configure the ",(0,r.jsx)(t.strong,{children:"Save File"})," component and use it in a flow, do the following:"]}),"\n",(0,r.jsxs)(t.ol,{children:["\n",(0,r.jsxs)(t.li,{children:["\n",(0,r.jsxs)(t.p,{children:["Connect ",(0,r.jsx)(t.a,{href:"/data-types#dataframe",children:(0,r.jsx)(t.code,{children:"DataFrame"})}),", ",(0,r.jsx)(t.a,{href:"/data-types#data",children:(0,r.jsx)(t.code,{children:"Data"})}),", or ",(0,r.jsx)(t.a,{href:"/data-types#message",children:(0,r.jsx)(t.code,{children:"Message"})})," output from another component to the ",(0,r.jsx)(t.strong,{children:"Save File"})," component's ",(0,r.jsx)(t.strong,{children:"Input"})," port."]}),"\n",(0,r.jsxs)(t.p,{children:["You can connect the same output to multiple ",(0,r.jsx)(t.strong,{children:"Save File"})," components if you want to create multiple files, save the data in different file formats, or save files to multiple locations."]}),"\n"]}),"\n",(0,r.jsxs)(t.li,{children:["\n",(0,r.jsxs)(t.p,{children:["In ",(0,r.jsx)(t.strong,{children:"File Name"}),", enter a file name and an optional path."]}),"\n",(0,r.jsxs)(t.p,{children:["The ",(0,r.jsx)(t.strong,{children:"File Name"})," parameter controls where the file is saved.\nIt can contain a file name or an entire file path:"]}),"\n",(0,r.jsxs)(t.ul,{children:["\n",(0,r.jsxs)(t.li,{children:["\n",(0,r.jsxs)(t.p,{children:[(0,r.jsx)(t.strong,{children:"Default location"}),": If you only provide a file name, then the file is stored in the Langflow data directory. For example,",(0,r.jsx)(t.code,{children:"~/Library/Caches/langflow/data"})," on macOS."]}),"\n"]}),"\n",(0,r.jsxs)(t.li,{children:["\n",(0,r.jsxs)(t.p,{children:[(0,r.jsx)(t.strong,{children:"Subdirectory"}),": To store files in subdirectories, add the path to the ",(0,r.jsx)(t.strong,{children:"File Name"})," parameter.\nIf a given subdirectory doesn't already exist, Langflow automatically creates it.\nFor example, ",(0,r.jsx)(t.code,{children:"files/my_file"})," creates ",(0,r.jsx)(t.code,{children:"my_file"})," in ",(0,r.jsx)(t.code,{children:"/data/files"}),", and it creates the ",(0,r.jsx)(t.code,{children:"files"})," subdirectory if it doesn't already exist."]}),"\n"]}),"\n",(0,r.jsxs)(t.li,{children:["\n",(0,r.jsxs)(t.p,{children:[(0,r.jsx)(t.strong,{children:"Absolute or relative path"}),": To store files elsewhere in your environment or local file storage, provide the absolute or relative path to the desired location.\nFor example, ",(0,r.jsx)(t.code,{children:"~/Desktop/my_file"})," saves ",(0,r.jsx)(t.code,{children:"my_file"})," to the desktop."]}),"\n"]}),"\n"]}),"\n",(0,r.jsxs)(t.p,{children:["Don't include an extension in the file name.\nIf you do, the extension is treated as part of the file name; it has no impact on the ",(0,r.jsx)(t.strong,{children:"File Format"})," parameter."]}),"\n"]}),"\n",(0,r.jsxs)(t.li,{children:["\n",(0,r.jsxs)(t.p,{children:["In the ",(0,r.jsx)(t.a,{href:"/concepts-components#component-menus",children:"component's header menu"}),", click ",(0,r.jsx)(i.A,{name:"SlidersHorizontal","aria-hidden":"true"})," ",(0,r.jsx)(t.strong,{children:"Controls"}),", select the desired file format, and then click ",(0,r.jsx)(t.strong,{children:"Close"}),"."]}),"\n",(0,r.jsxs)(t.p,{children:["The available ",(0,r.jsx)(t.strong,{children:"File Format"})," options depend on the input data type:"]}),"\n",(0,r.jsxs)(t.ul,{children:["\n",(0,r.jsxs)(t.li,{children:["\n",(0,r.jsxs)(t.p,{children:[(0,r.jsx)(t.code,{children:"DataFrame"})," can be saved to CSV (default), Excel (requires ",(0,r.jsx)(t.code,{children:"openpyxl"})," ",(0,r.jsx)(t.a,{href:"/install-custom-dependencies",children:"custom dependency"}),"), JSON (fallback default), or Markdown."]}),"\n"]}),"\n",(0,r.jsxs)(t.li,{children:["\n",(0,r.jsxs)(t.p,{children:[(0,r.jsx)(t.code,{children:"Data"})," can be saved to CSV, Excel (requires ",(0,r.jsx)(t.code,{children:"openpyxl"})," ",(0,r.jsx)(t.a,{href:"/install-custom-dependencies",children:"custom dependency"}),"), JSON (default), or Markdown."]}),"\n"]}),"\n",(0,r.jsxs)(t.li,{children:["\n",(0,r.jsxs)(t.p,{children:[(0,r.jsx)(t.code,{children:"Message"})," can be saved to TXT, JSON (default), or Markdown."]}),"\n"]}),"\n"]}),"\n",(0,r.jsx)(t.admonition,{title:"Overwrites allowed",type:"warning",children:(0,r.jsxs)(t.p,{children:["If you have multiple ",(0,r.jsx)(t.strong,{children:"Save File"})," components, in one or more flows, with the same file name, path, and extension, the file contains the data from the most recent run only.\nLangflow doesn't block overwrites if a matching file already exists.\nTo avoid unintended overwrites, use unique file names and paths."]})}),"\n"]}),"\n",(0,r.jsxs)(t.li,{children:["\n",(0,r.jsxs)(t.p,{children:["To test the ",(0,r.jsx)(t.strong,{children:"Save File"})," component, click ",(0,r.jsx)(i.A,{name:"Play","aria-hidden":"true"})," ",(0,r.jsx)(t.strong,{children:"Run component"}),", and then click ",(0,r.jsx)(i.A,{name:"TextSearch","aria-hidden":"true"})," ",(0,r.jsx)(t.strong,{children:"Inspect output"})," to get the filepath where the file was saved."]}),"\n",(0,r.jsxs)(t.p,{children:["The component's literal output is a ",(0,r.jsx)(t.code,{children:"Message"})," containing the original data type, the file name and extension, and the absolute filepath to the file based on the ",(0,r.jsx)(t.strong,{children:"File Name"})," parameter.\nFor example:"]}),"\n",(0,r.jsx)(j.Code,{codeConfig:g,northPanel:{tabs:[""],active:"",heightRatio:1},files:[{name:"",focus:"",code:{lines:[{tokens:[{content:"DataFrame saved successfully as 'my_file.csv' at /Users/user.name/Library/Caches/langflow/data/my_file.csv",props:{}}]}],lang:"text"},annotations:[]}]}),"\n",(0,r.jsxs)(t.p,{children:["If the ",(0,r.jsx)(t.strong,{children:"File Name"})," contains a subdirectory or other non-default path, this is reflected in the ",(0,r.jsx)(t.code,{children:"Message"})," output.\nFor example, a CSV file with the file name ",(0,r.jsx)(t.code,{children:"~/Desktop/my_file"})," could produce the following output:"]}),"\n",(0,r.jsx)(j.Code,{codeConfig:g,northPanel:{tabs:[""],active:"",heightRatio:1},files:[{name:"",focus:"",code:{lines:[{tokens:[{content:"DataFrame saved successfully as '/Users/user.name/Desktop/my_file.csv' at /Users/user.name/Desktop/my_file.csv",props:{}}]}],lang:"text"},annotations:[]}]}),"\n"]}),"\n",(0,r.jsxs)(t.li,{children:["\n",(0,r.jsx)(t.p,{children:"Optional: If you want to use the saved file in a flow, you must use an API call or another component to retrieve the file from the given filepath."}),"\n"]}),"\n"]}),"\n",(0,r.jsx)(t.h2,{id:"smart-function",children:"Smart Function"}),"\n",(0,r.jsxs)(t.p,{children:["In Langflow version 1.5, this component was renamed from ",(0,r.jsx)(t.strong,{children:"Lambda Filter"})," to ",(0,r.jsx)(t.strong,{children:"Smart Function"}),"."]}),"\n",(0,r.jsxs)(t.p,{children:["The ",(0,r.jsx)(t.strong,{children:"Smart Function"})," component uses an LLM to generate a Lambda function to filter or transform structured data based on natural language instructions.\nYou must connect this component to a ",(0,r.jsx)(t.a,{href:"/components-models",children:"language model component"}),", which is used to generate a function based on the natural language instructions you provide in the ",(0,r.jsx)(t.strong,{children:"Instructions"})," parameter.\nThe LLM runs the function against the data input, and then outputs the results as ",(0,r.jsx)(t.a,{href:"/data-types#data",children:(0,r.jsx)(t.code,{children:"Data"})}),"."]}),"\n",(0,r.jsxs)(t.admonition,{type:"tip",children:[(0,r.jsxs)(t.p,{children:["Provide brief, clear instructions, focusing on the desired outcome or specific actions, such as ",(0,r.jsx)(t.code,{children:"Filter the data to only include items where the 'status' is 'active'"}),".\nOne sentence or less is preferred because end punctuation, like periods, can cause errors or unexpected behavior."]}),(0,r.jsxs)(t.p,{children:["If you need to provide more details instructions that aren't directly relevant to the Lambda function, you can input them in the ",(0,r.jsx)(t.strong,{children:"Language Model"})," component's ",(0,r.jsx)(t.strong,{children:"Input"})," field or through a ",(0,r.jsx)(t.strong,{children:"Prompt Template"})," component."]})]}),"\n",(0,r.jsxs)(t.p,{children:["The following example uses the ",(0,r.jsx)(t.strong,{children:"API Request"})," endpoint to pass JSON data from the ",(0,r.jsx)(t.code,{children:"https://jsonplaceholder.typicode.com/users"})," endpoint to the ",(0,r.jsx)(t.strong,{children:"Smart Function"})," component.\nThen, the ",(0,r.jsx)(t.strong,{children:"Smart Function"})," component passes the data and the instruction ",(0,r.jsx)(t.code,{children:"extract emails"})," to the attached ",(0,r.jsx)(t.strong,{children:"Language Model"})," component.\nFrom there, the LLM generates a filter function that extracts email addresses from the JSON data, returning the filtered data as chat output."]}),"\n",(0,r.jsx)(t.p,{children:(0,r.jsx)(t.img,{alt:"A small flow using a Smart Function component to extract data from an API response.",src:n(66539).A+"",width:"4000",height:"1796"})}),"\n",(0,r.jsx)(t.h3,{id:"smart-function-parameters",children:"Smart Function parameters"}),"\n",(0,r.jsx)(d.Ay,{}),"\n",(0,r.jsxs)(t.table,{children:[(0,r.jsx)(t.thead,{children:(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.th,{children:"Name"}),(0,r.jsx)(t.th,{children:"Display Name"}),(0,r.jsx)(t.th,{children:"Info"})]})}),(0,r.jsxs)(t.tbody,{children:[(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"data"}),(0,r.jsx)(t.td,{children:"Data"}),(0,r.jsx)(t.td,{children:"Input parameter. The structured data to filter or transform using a Lambda function."})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"llm"}),(0,r.jsx)(t.td,{children:"Language Model"}),(0,r.jsxs)(t.td,{children:["Input parameter. Connect ",(0,r.jsx)(t.a,{href:"/data-types#languagemodel",children:(0,r.jsx)(t.code,{children:"LanguageModel"})})," output from a ",(0,r.jsx)(t.strong,{children:"Language Model"})," component."]})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"filter_instruction"}),(0,r.jsx)(t.td,{children:"Instructions"}),(0,r.jsx)(t.td,{children:"Input parameter. The natural language instructions for how to filter or transform the data. The LLM uses these instructions to create a Lambda function."})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"sample_size"}),(0,r.jsx)(t.td,{children:"Sample Size"}),(0,r.jsxs)(t.td,{children:["Input parameter. For large datasets, the number of characters to sample from the dataset head and tail. Only applied if the dataset meets or exceeds ",(0,r.jsx)(t.code,{children:"max_size"}),". Default: ",(0,r.jsx)(t.code,{children:"1000"}),"."]})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"max_size"}),(0,r.jsx)(t.td,{children:"Max Size"}),(0,r.jsxs)(t.td,{children:["Input parameter. The number of characters for the dataset to be considered large, which triggers sampling by the ",(0,r.jsx)(t.code,{children:"sample_size"})," value. Default: ",(0,r.jsx)(t.code,{children:"30000"}),"."]})]})]})]}),"\n",(0,r.jsx)(t.h2,{id:"split-text",children:"Split Text"}),"\n",(0,r.jsxs)(t.p,{children:["The ",(0,r.jsx)(t.strong,{children:"Split Text"})," component splits data into chunks based on parameters like chunk size and separator.\nIt is often used to chunk data to be tokenized and embedded into vector databases.\nFor examples, see ",(0,r.jsx)(t.a,{href:"/components-embedding-models#use-embedding-model-components-in-a-flow",children:"Use embedding model components in a flow"})," and ",(0,r.jsx)(t.a,{href:"/chat-with-rag",children:"Create a Vector RAG chatbot"}),"."]}),"\n",(0,r.jsx)(t.p,{children:(0,r.jsx)(t.img,{alt:"An embedding generation flow that uses a Split Text component to chunk data.",src:n(49823).A+"",width:"4000",height:"2766"})}),"\n",(0,r.jsxs)(t.p,{children:["The component accepts ",(0,r.jsx)(t.code,{children:"Message"}),", ",(0,r.jsx)(t.code,{children:"Data"}),", or ",(0,r.jsx)(t.code,{children:"DataFrame"}),", and then outputs either ",(0,r.jsx)(t.strong,{children:"Chunks"})," or ",(0,r.jsx)(t.strong,{children:"DataFrame"}),".\nThe ",(0,r.jsx)(t.strong,{children:"Chunks"})," output returns a list of ",(0,r.jsx)(t.a,{href:"/data-types#data",children:(0,r.jsx)(t.code,{children:"Data"})})," objects containing individual text chunks.\nThe ",(0,r.jsx)(t.strong,{children:"DataFrame"})," output returns the list of chunks as a structured ",(0,r.jsx)(t.a,{href:"/data-types#dataframe",children:(0,r.jsx)(t.code,{children:"DataFrame"})})," with additional ",(0,r.jsx)(t.code,{children:"text"})," and ",(0,r.jsx)(t.code,{children:"metadata"})," columns."]}),"\n",(0,r.jsx)(t.h3,{id:"split-text-parameters",children:"Split Text parameters"}),"\n",(0,r.jsxs)(t.p,{children:["The ",(0,r.jsx)(t.strong,{children:"Split Text"})," component's parameters control how the text is split into chunks, specifically the ",(0,r.jsx)(t.code,{children:"chunk_size"}),", ",(0,r.jsx)(t.code,{children:"chunk_overlap"}),", and ",(0,r.jsx)(t.code,{children:"separator"})," parameters."]}),"\n",(0,r.jsxs)(t.p,{children:["To test the chunking behavior, add a ",(0,r.jsx)(t.strong,{children:"Text Input"})," or ",(0,r.jsx)(t.strong,{children:"File"})," component with some sample data to chunk, click ",(0,r.jsx)(i.A,{name:"Play","aria-hidden":"true"})," ",(0,r.jsx)(t.strong,{children:"Run component"})," on the ",(0,r.jsx)(t.strong,{children:"Split Text"})," component, and then click ",(0,r.jsx)(i.A,{name:"TextSearch","aria-hidden":"true"})," ",(0,r.jsx)(t.strong,{children:"Inspect output"})," to view the list of chunks and their metadata. The ",(0,r.jsx)(t.strong,{children:"text"})," column contains the actual text chunks created from your chunking settings.\nIf the chunks aren't split as you expect, adjust the parameters, rerun the component, and then inspect the new output."]}),"\n",(0,r.jsx)(d.Ay,{}),"\n",(0,r.jsxs)(t.table,{children:[(0,r.jsx)(t.thead,{children:(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.th,{children:"Name"}),(0,r.jsx)(t.th,{children:"Display Name"}),(0,r.jsx)(t.th,{children:"Info"})]})}),(0,r.jsxs)(t.tbody,{children:[(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"data_inputs"}),(0,r.jsx)(t.td,{children:"Input"}),(0,r.jsxs)(t.td,{children:["Input parameter. The data to split. Input must be in ",(0,r.jsx)(t.code,{children:"Message"}),", ",(0,r.jsx)(t.code,{children:"Data"}),", or ",(0,r.jsx)(t.code,{children:"DataFrame"})," format."]})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"chunk_overlap"}),(0,r.jsx)(t.td,{children:"Chunk Overlap"}),(0,r.jsxs)(t.td,{children:["Input parameter. The number of characters to overlap between chunks. This helps maintain context across chunks. When a separator is encountered, the overlap is applied at the point of the separator so that the subsequent chunk contains the last ",(0,r.jsx)(t.em,{children:"n"})," characters of the preceding chunk. Default: ",(0,r.jsx)(t.code,{children:"200"}),"."]})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"chunk_size"}),(0,r.jsx)(t.td,{children:"Chunk Size"}),(0,r.jsxs)(t.td,{children:["Input parameter. The target length for each chunk after splitting. The data is first split by separator, and then chunks smaller than the ",(0,r.jsx)(t.code,{children:"chunk_size"})," are merged up to this limit. However, if the initial separator split produces any chunks larger than the ",(0,r.jsx)(t.code,{children:"chunk_size"}),", those chunks are neither further subdivided nor combined with any smaller chunks; these chunks will be output as-is even though they exceed the ",(0,r.jsx)(t.code,{children:"chunk_size"}),". Default: ",(0,r.jsx)(t.code,{children:"1000"}),". See ",(0,r.jsx)(t.a,{href:"#chunk-size",children:"Tokenization errors due to chunk size"})," for important considerations."]})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"separator"}),(0,r.jsx)(t.td,{children:"Separator"}),(0,r.jsxs)(t.td,{children:["Input parameter. A string defining a character to split on, such as ",(0,r.jsx)(t.code,{children:"\\n"})," to split on new line characters, ",(0,r.jsx)(t.code,{children:"\\n\\n"})," to split at paragraph breaks, or ",(0,r.jsx)(t.code,{children:"},"})," to split at the end of JSON objects. You can directly provide the separator string, or pass a separator string from another component as ",(0,r.jsx)(t.code,{children:"Message"})," input."]})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"text_key"}),(0,r.jsx)(t.td,{children:"Text Key"}),(0,r.jsxs)(t.td,{children:["Input parameter. The key to use for the text column that is extracted from the input and then split. Default: ",(0,r.jsx)(t.code,{children:"text"}),"."]})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"keep_separator"}),(0,r.jsx)(t.td,{children:"Keep Separator"}),(0,r.jsxs)(t.td,{children:["Input parameter. Select how to handle separators in output chunks. If ",(0,r.jsx)(t.code,{children:"False"}),", separators are omitted from output chunks. Options include ",(0,r.jsx)(t.code,{children:"False"})," (remove separators), ",(0,r.jsx)(t.code,{children:"True"})," (keep separators in chunks without preference for placement), ",(0,r.jsx)(t.code,{children:"Start"})," (place separators at the beginning of chunks), or ",(0,r.jsx)(t.code,{children:"End"})," (place separators at the end of chunks). Default: ",(0,r.jsx)(t.code,{children:"False"}),"."]})]})]})]}),"\n",(0,r.jsx)(t.h3,{id:"chunk-size",children:"Tokenization errors due to chunk size"}),"\n",(0,r.jsxs)(t.p,{children:["When using ",(0,r.jsx)(t.strong,{children:"Split Text"})," with embedding models (especially NVIDIA models like ",(0,r.jsx)(t.code,{children:"nvidia/nv-embed-v1"}),"), you may need to use smaller chunk sizes (",(0,r.jsx)(t.code,{children:"500"})," or less) even though the model supports larger token limits.\nThe ",(0,r.jsx)(t.strong,{children:"Split Text"})," component doesn't always enforce the exact chunk size you set, and individual chunks may exceed your specified limit.\nIf you encounter tokenization errors, modify your text splitting strategy by reducing the chunk size, changing the overlap length, or using a more common separator.\nThen, test your configuration by running the flow and inspecting the component's output."]}),"\n",(0,r.jsx)(t.h3,{id:"other-text-splitters",children:"Other text splitters"}),"\n",(0,r.jsxs)(t.p,{children:["See ",(0,r.jsx)(t.a,{href:"/bundles-langchain#text-splitters",children:"LangChain text splitter components"}),"."]}),"\n",(0,r.jsx)(t.h2,{id:"structured-output",children:"Structured Output"}),"\n",(0,r.jsxs)(t.p,{children:["The ",(0,r.jsx)(t.strong,{children:"Structured Output"})," component uses an LLM to transform any input into structured data (",(0,r.jsx)(t.code,{children:"Data"})," or ",(0,r.jsx)(t.code,{children:"DataFrame"}),") using natural language formatting instructions and an output schema definition.\nFor example, you can extract specific details from documents, like email messages or scientific papers."]}),"\n",(0,r.jsx)(t.h3,{id:"use-the-structured-output-component-in-a-flow",children:"Use the Structured Output component in a flow"}),"\n",(0,r.jsxs)(t.p,{children:["To use the ",(0,r.jsx)(t.strong,{children:"Structured Output"})," component in a flow, do the following:"]}),"\n",(0,r.jsxs)(t.ol,{children:["\n",(0,r.jsxs)(t.li,{children:["\n",(0,r.jsxs)(t.p,{children:["Provide an ",(0,r.jsx)(t.strong,{children:"Input Message"}),", which is the source material from which you want to extract structured data.\nThis can come from practically any component, but it is typically a ",(0,r.jsx)(t.strong,{children:"Chat Input"}),", ",(0,r.jsx)(t.strong,{children:"File"}),", or other component that provides some unstructured or semi-structured input."]}),"\n",(0,r.jsx)(t.admonition,{type:"tip",children:(0,r.jsxs)(t.p,{children:["Not all source material has to become structured output.\nThe power of the ",(0,r.jsx)(t.strong,{children:"Structured Output"})," component is that you can specify the information you want to extract, even if that data isn't explicitly labeled or an exact keyword match.\nThen, the LLM can use your instructions to analyze the source material, extract the relevant data, and format it according to your specifications.\nAny irrelevant source material isn't included in the structured output."]})}),"\n"]}),"\n",(0,r.jsxs)(t.li,{children:["\n",(0,r.jsxs)(t.p,{children:["Define ",(0,r.jsx)(t.strong,{children:"Format Instructions"})," and an ",(0,r.jsx)(t.strong,{children:"Output Schema"})," to specify the data to extract from the source material and how to structure it in the final ",(0,r.jsx)(t.code,{children:"Data"})," or ",(0,r.jsx)(t.code,{children:"DataFrame"})," output."]}),"\n",(0,r.jsx)(t.p,{children:"The instructions are a prompt that tell the LLM what data to extract, how to format it, how to handle exceptions, and any other instructions relevant to preparing the structured data."}),"\n",(0,r.jsxs)(t.p,{children:["The schema is a table that defines the fields (keys) and data types to organize the data extracted by the LLM into a structured ",(0,r.jsx)(t.code,{children:"Data"})," or ",(0,r.jsx)(t.code,{children:"DataFrame"})," object.\nFor more information, see ",(0,r.jsx)(t.a,{href:"#output-schema-options",children:"Output Schema options"})]}),"\n"]}),"\n",(0,r.jsxs)(t.li,{children:["\n",(0,r.jsxs)(t.p,{children:["Attach a ",(0,r.jsx)(t.a,{href:"/components-models",children:"language model component"})," that is set to emit ",(0,r.jsx)(t.a,{href:"/data-types#languagemodel",children:(0,r.jsx)(t.code,{children:"LanguageModel"})})," output."]}),"\n",(0,r.jsxs)(t.p,{children:["The LLM uses the ",(0,r.jsx)(t.strong,{children:"Input Message"})," and ",(0,r.jsx)(t.strong,{children:"Format Instructions"})," from the ",(0,r.jsx)(t.strong,{children:"Structured Output"})," component to extract specific pieces of data from the input text.\nThe output schema is applied to the model's response to produce the final ",(0,r.jsx)(t.code,{children:"Data"})," or ",(0,r.jsx)(t.code,{children:"DataFrame"})," structured object."]}),"\n"]}),"\n",(0,r.jsxs)(t.li,{children:["\n",(0,r.jsxs)(t.p,{children:["Optional: Typically, the structured output is passed to downstream components that use the extracted data for other processes, such as the ",(0,r.jsx)(t.strong,{children:"Parser"})," or ",(0,r.jsx)(t.strong,{children:"Data Operations"})," components."]}),"\n"]}),"\n"]}),"\n",(0,r.jsx)(t.p,{children:(0,r.jsx)(t.img,{alt:"A basic flow with Structured Output, Language Model, Type Convert, and Chat Input and Output components.",src:n(82798).A+"",width:"4000",height:"1724"})}),"\n",(0,r.jsxs)(s,{children:[(0,r.jsx)("summary",{children:"Structured Output example: Financial Report Parser template"}),(0,r.jsxs)(t.p,{children:["The ",(0,r.jsx)(t.strong,{children:"Financial Report Parser"})," template provides an example of how the ",(0,r.jsx)(t.strong,{children:"Structured Output"})," component can be used to extract structured data from unstructured text."]}),(0,r.jsxs)(t.p,{children:["The template's ",(0,r.jsx)(t.strong,{children:"Structured Output"})," component has the following configuration:"]}),(0,r.jsxs)(t.ul,{children:["\n",(0,r.jsxs)(t.li,{children:["\n",(0,r.jsxs)(t.p,{children:["The ",(0,r.jsx)(t.strong,{children:"Input Message"})," comes from a ",(0,r.jsx)(t.strong,{children:"Chat Input"})," component that is preloaded with quotes from sample financial reports"]}),"\n"]}),"\n",(0,r.jsxs)(t.li,{children:["\n",(0,r.jsxs)(t.p,{children:["The ",(0,r.jsx)(t.strong,{children:"Format Instructions"})," are as follows:"]}),"\n",(0,r.jsx)(j.Code,{codeConfig:g,northPanel:{tabs:[""],active:"",heightRatio:1},files:[{name:"",focus:"",code:{lines:[{tokens:[{content:"You are an AI that extracts structured JSON objects from unstructured text.",props:{}}]},{tokens:[{content:"Use a predefined schema with expected types (str, int, float, bool, dict).",props:{}}]},{tokens:[{content:"Extract ALL relevant instances that match the schema - if multiple patterns exist, capture them all.",props:{}}]},{tokens:[{content:"Fill missing or ambiguous values with defaults: null for missing values.",props:{}}]},{tokens:[{content:"Remove exact duplicates but keep variations that have different field values.",props:{}}]},{tokens:[{content:"Always return valid JSON in the expected format, never throw errors.",props:{}}]},{tokens:[{content:"If multiple objects can be extracted, return them all in the structured format.",props:{}}]}],lang:"text"},annotations:[]}]}),"\n"]}),"\n",(0,r.jsxs)(t.li,{children:["\n",(0,r.jsxs)(t.p,{children:["The ",(0,r.jsx)(t.strong,{children:"Output Schema"})," includes keys for ",(0,r.jsx)(t.code,{children:"EBITDA"}),", ",(0,r.jsx)(t.code,{children:"NET_INCOME"}),", and ",(0,r.jsx)(t.code,{children:"GROSS_PROFIT"}),"."]}),"\n"]}),"\n"]}),(0,r.jsxs)(t.p,{children:["The structured ",(0,r.jsx)(t.code,{children:"Data"})," object is passed to a ",(0,r.jsx)(t.strong,{children:"Parser"})," component that produces a text string by mapping the schema keys to variables in the parsing template:"]}),(0,r.jsx)(j.Code,{codeConfig:g,northPanel:{tabs:[""],active:"",heightRatio:1},files:[{name:"",focus:"",code:{lines:[{tokens:[{content:"EBITDA: {EBITDA} , Net Income: {NET_INCOME} , GROSS_PROFIT: {GROSS_PROFIT}",props:{}}]}],lang:"text"},annotations:[]}]}),(0,r.jsxs)(t.p,{children:["When printed to the ",(0,r.jsx)(t.strong,{children:"Playground"}),", the resulting ",(0,r.jsx)(t.code,{children:"Message"})," replaces the variables with the actual values extracted by the ",(0,r.jsx)(t.strong,{children:"Structured Output"})," component. For example:"]}),(0,r.jsx)(j.Code,{codeConfig:g,northPanel:{tabs:[""],active:"",heightRatio:1},files:[{name:"",focus:"",code:{lines:[{tokens:[{content:"EBITDA: 900 million , Net Income: 500 million , GROSS_PROFIT: 1.2 billion",props:{}}]}],lang:"text"},annotations:[]}]})]}),"\n",(0,r.jsx)(t.h3,{id:"structured-output-parameters",children:"Structured Output parameters"}),"\n",(0,r.jsx)(d.Ay,{}),"\n",(0,r.jsxs)(t.table,{children:[(0,r.jsx)(t.thead,{children:(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.th,{children:"Name"}),(0,r.jsx)(t.th,{children:"Type"}),(0,r.jsx)(t.th,{children:"Description"})]})}),(0,r.jsxs)(t.tbody,{children:[(0,r.jsxs)(t.tr,{children:[(0,r.jsxs)(t.td,{children:["Language Model (",(0,r.jsx)(t.code,{children:"llm"}),")"]}),(0,r.jsx)(t.td,{children:(0,r.jsx)(t.code,{children:"LanguageModel"})}),(0,r.jsxs)(t.td,{children:["Input parameter. The ",(0,r.jsx)(t.a,{href:"/data-types#languagemodel",children:(0,r.jsx)(t.code,{children:"LanguageModel"})})," output from a ",(0,r.jsx)(t.strong,{children:"Language Model"})," component that defines the LLM to use to analyze, extract, and prepare the structured output."]})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsxs)(t.td,{children:["Input Message (",(0,r.jsx)(t.code,{children:"input_value"}),")"]}),(0,r.jsx)(t.td,{children:"String"}),(0,r.jsx)(t.td,{children:"Input parameter. The input message containing source material for extraction."})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsxs)(t.td,{children:["Format Instructions (",(0,r.jsx)(t.code,{children:"system_prompt"}),")"]}),(0,r.jsx)(t.td,{children:"String"}),(0,r.jsx)(t.td,{children:"Input parameter. The instructions to the language model for extracting and formatting the output."})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsxs)(t.td,{children:["Schema Name (",(0,r.jsx)(t.code,{children:"schema_name"}),")"]}),(0,r.jsx)(t.td,{children:"String"}),(0,r.jsxs)(t.td,{children:["Input parameter. An optional title for the ",(0,r.jsx)(t.strong,{children:"Output Schema"}),"."]})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsxs)(t.td,{children:["Output Schema (",(0,r.jsx)(t.code,{children:"output_schema"}),")"]}),(0,r.jsx)(t.td,{children:"Table"}),(0,r.jsxs)(t.td,{children:["Input parameter. A table describing the schema of the desired structured output, ultimately determining the content of the ",(0,r.jsx)(t.code,{children:"Data"})," or ",(0,r.jsx)(t.code,{children:"DataFrame"})," output. See ",(0,r.jsx)(t.a,{href:"#output-schema-options",children:"Output Schema options"}),"."]})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsxs)(t.td,{children:["Structured Output (",(0,r.jsx)(t.code,{children:"structured_output"}),")"]}),(0,r.jsxs)(t.td,{children:[(0,r.jsx)(t.code,{children:"Data"})," or ",(0,r.jsx)(t.code,{children:"DataFrame"})]}),(0,r.jsxs)(t.td,{children:["Output parameter. The final structured output produced by the component. Near the component's output port, you can select the output data type as either ",(0,r.jsx)(t.strong,{children:"Structured Output Data"})," or ",(0,r.jsx)(t.strong,{children:"Structured Output DataFrame"}),". The specific content and structure of the output depends on the input parameters."]})]})]})]}),"\n",(0,r.jsx)(t.h4,{id:"output-schema-options",children:"Output Schema options"}),"\n",(0,r.jsxs)(t.p,{children:["After the LLM extracts the relevant data from the ",(0,r.jsx)(t.strong,{children:"Input Message"})," and ",(0,r.jsx)(t.strong,{children:"Format Instructions"}),", the data is organized according to the ",(0,r.jsx)(t.strong,{children:"Output Schema"}),"."]}),"\n",(0,r.jsxs)(t.p,{children:["The schema is a table that defines the fields (keys) and data types for the final ",(0,r.jsx)(t.code,{children:"Data"})," or ",(0,r.jsx)(t.code,{children:"DataFrame"})," output from the ",(0,r.jsx)(t.strong,{children:"Structured Output"})," component."]}),"\n",(0,r.jsxs)(t.p,{children:["The default schema is a single ",(0,r.jsx)(t.code,{children:"field"})," string."]}),"\n",(0,r.jsxs)(t.p,{children:["To add a key to the schema, click ",(0,r.jsx)(i.A,{name:"Plus","aria-hidden":"true"})," ",(0,r.jsx)(t.strong,{children:"Add a new row"}),", and then edit each column to define the schema:"]}),"\n",(0,r.jsxs)(t.ul,{children:["\n",(0,r.jsxs)(t.li,{children:["\n",(0,r.jsxs)(t.p,{children:[(0,r.jsx)(t.strong,{children:"Name"}),": The name of the output field. Typically a specific key for which you want to extract a value."]}),"\n",(0,r.jsxs)(t.p,{children:["You can reference these keys as variables in downstream components, such as a ",(0,r.jsx)(t.strong,{children:"Parser"})," component's template.\nFor example, the schema key ",(0,r.jsx)(t.code,{children:"NET_INCOME"})," could be referenced by the variable ",(0,r.jsx)(t.code,{children:"{NET_INCOME}"}),"."]}),"\n"]}),"\n",(0,r.jsxs)(t.li,{children:["\n",(0,r.jsxs)(t.p,{children:[(0,r.jsx)(t.strong,{children:"Description"}),": An optional metadata description of the field's contents and purpose."]}),"\n"]}),"\n",(0,r.jsxs)(t.li,{children:["\n",(0,r.jsxs)(t.p,{children:[(0,r.jsx)(t.strong,{children:"Type"}),": The data type of the value stored in the field.\nSupported types are ",(0,r.jsx)(t.code,{children:"str"})," (default), ",(0,r.jsx)(t.code,{children:"int"}),", ",(0,r.jsx)(t.code,{children:"float"}),", ",(0,r.jsx)(t.code,{children:"bool"}),", and ",(0,r.jsx)(t.code,{children:"dict"}),"."]}),"\n"]}),"\n",(0,r.jsxs)(t.li,{children:["\n",(0,r.jsxs)(t.p,{children:[(0,r.jsx)(t.strong,{children:"As List"}),": Enable this setting if you want the field to contain a list of values rather than a single value."]}),"\n"]}),"\n"]}),"\n",(0,r.jsxs)(t.p,{children:["For simple schemas, you might only extract a few ",(0,r.jsx)(t.code,{children:"string"})," or ",(0,r.jsx)(t.code,{children:"int"})," fields.\nFor more complex schemas with lists and dictionaries, it might help to refer to the ",(0,r.jsx)(t.code,{children:"Data"})," and ",(0,r.jsx)(t.code,{children:"DataFrame"})," structures and attributes, as described in ",(0,r.jsx)(t.a,{href:"/data-types",children:"Langflow data types"}),".\nYou can also emit a rough ",(0,r.jsx)(t.code,{children:"Data"})," or ",(0,r.jsx)(t.code,{children:"DataFrame"}),", and then use downstream components for further refinement, such as a ",(0,r.jsx)(t.strong,{children:"Data Operations"})," component."]}),"\n",(0,r.jsx)(t.h2,{id:"type-convert",children:"Type Convert"}),"\n",(0,r.jsxs)(t.p,{children:["The ",(0,r.jsx)(t.strong,{children:"Type Convert"})," component converts data from one type to another.\nIt supports ",(0,r.jsx)(t.code,{children:"Data"}),", ",(0,r.jsx)(t.code,{children:"DataFrame"}),", and ",(0,r.jsx)(t.code,{children:"Message"})," data types."]}),"\n",(0,r.jsxs)(c.A,{children:[(0,r.jsxs)(l.A,{value:"data",label:"Data",default:!0,children:[(0,r.jsxs)(t.p,{children:["A ",(0,r.jsx)(t.code,{children:"Data"})," object is a structured object that contains a primary ",(0,r.jsx)(t.code,{children:"text"})," key and other key-value pairs:"]}),(0,r.jsx)(j.Code,{codeConfig:g,northPanel:{tabs:[""],active:"",heightRatio:1},files:[{name:"",focus:"",code:{lines:[{tokens:[{content:'"data"',props:{style:{color:"#A5D6FF"}}},{content:": {",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:' "text"',props:{style:{color:"#7EE787"}}},{content:": ",props:{style:{color:"#C9D1D9"}}},{content:'"User Profile"',props:{style:{color:"#A5D6FF"}}},{content:",",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:' "name"',props:{style:{color:"#7EE787"}}},{content:": ",props:{style:{color:"#C9D1D9"}}},{content:'"Charlie Lastname"',props:{style:{color:"#A5D6FF"}}},{content:",",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:' "age"',props:{style:{color:"#7EE787"}}},{content:": ",props:{style:{color:"#C9D1D9"}}},{content:"28",props:{style:{color:"#79C0FF"}}},{content:",",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:' "email"',props:{style:{color:"#7EE787"}}},{content:": ",props:{style:{color:"#C9D1D9"}}},{content:'"charlie.lastname@example.com"',props:{style:{color:"#A5D6FF"}}}]},{tokens:[{content:"},",props:{style:{color:"#C9D1D9"}}}]}],lang:"json"},annotations:[]}]}),(0,r.jsxs)(t.p,{children:["The larger context associated with a component's ",(0,r.jsx)(t.code,{children:"data"})," dictionary also identifies which key is the primary ",(0,r.jsx)(t.code,{children:"text_key"}),", and it can provide an optional default value if the primary key isn't specified.\nFor example:"]}),(0,r.jsx)(j.Code,{codeConfig:g,northPanel:{tabs:[""],active:"",heightRatio:1},files:[{name:"",focus:"",code:{lines:[{tokens:[{content:"{",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:' "text_key"',props:{style:{color:"#7EE787"}}},{content:": ",props:{style:{color:"#C9D1D9"}}},{content:'"text"',props:{style:{color:"#A5D6FF"}}},{content:",",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:' "data"',props:{style:{color:"#7EE787"}}},{content:": {",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:' "text"',props:{style:{color:"#7EE787"}}},{content:": ",props:{style:{color:"#C9D1D9"}}},{content:'"User Profile"',props:{style:{color:"#A5D6FF"}}},{content:",",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:' "name"',props:{style:{color:"#7EE787"}}},{content:": ",props:{style:{color:"#C9D1D9"}}},{content:'"Charlie Lastname"',props:{style:{color:"#A5D6FF"}}},{content:",",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:' "age"',props:{style:{color:"#7EE787"}}},{content:": ",props:{style:{color:"#C9D1D9"}}},{content:"28",props:{style:{color:"#79C0FF"}}},{content:",",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:' "email"',props:{style:{color:"#7EE787"}}},{content:": ",props:{style:{color:"#C9D1D9"}}},{content:'"charlie.lastname@example.com"',props:{style:{color:"#A5D6FF"}}}]},{tokens:[{content:" },",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:' "default_value"',props:{style:{color:"#7EE787"}}},{content:": ",props:{style:{color:"#C9D1D9"}}},{content:'""',props:{style:{color:"#A5D6FF"}}}]},{tokens:[{content:"}",props:{style:{color:"#C9D1D9"}}}]}],lang:"json"},annotations:[]}]})]}),(0,r.jsxs)(l.A,{value:"dataframe",label:"DataFrame",children:[(0,r.jsxs)(t.p,{children:["A ",(0,r.jsx)(t.code,{children:"DataFrame"})," is an array that represents a tabular data structure with rows and columns."]}),(0,r.jsxs)(t.p,{children:["It consists of a list (array) of dictionary objects, where each dictionary represents a row.\nEach key in the dictionaries corresponds to a column name.\nFor example, the following ",(0,r.jsx)(t.code,{children:"DataFrame"})," contains two rows with columns for ",(0,r.jsx)(t.code,{children:"name"}),", ",(0,r.jsx)(t.code,{children:"age"}),", and ",(0,r.jsx)(t.code,{children:"email"}),":"]}),(0,r.jsx)(j.Code,{codeConfig:g,northPanel:{tabs:[""],active:"",heightRatio:1},files:[{name:"",focus:"",code:{lines:[{tokens:[{content:"[",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" {",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:' "name"',props:{style:{color:"#7EE787"}}},{content:": ",props:{style:{color:"#C9D1D9"}}},{content:'"Charlie Lastname"',props:{style:{color:"#A5D6FF"}}},{content:",",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:' "age"',props:{style:{color:"#7EE787"}}},{content:": ",props:{style:{color:"#C9D1D9"}}},{content:"28",props:{style:{color:"#79C0FF"}}},{content:",",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:' "email"',props:{style:{color:"#7EE787"}}},{content:": ",props:{style:{color:"#C9D1D9"}}},{content:'"charlie.lastname@example.com"',props:{style:{color:"#A5D6FF"}}}]},{tokens:[{content:" },",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" {",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:' "name"',props:{style:{color:"#7EE787"}}},{content:": ",props:{style:{color:"#C9D1D9"}}},{content:'"Bobby Othername"',props:{style:{color:"#A5D6FF"}}},{content:",",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:' "age"',props:{style:{color:"#7EE787"}}},{content:": ",props:{style:{color:"#C9D1D9"}}},{content:"25",props:{style:{color:"#79C0FF"}}},{content:",",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:' "email"',props:{style:{color:"#7EE787"}}},{content:": ",props:{style:{color:"#C9D1D9"}}},{content:'"bobby.othername@example.com"',props:{style:{color:"#A5D6FF"}}}]},{tokens:[{content:" }",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:"]",props:{style:{color:"#C9D1D9"}}}]}],lang:"json"},annotations:[]}]})]}),(0,r.jsx)(l.A,{value:"message",label:"Message",children:(0,r.jsxs)(t.p,{children:["A ",(0,r.jsx)(t.code,{children:"Message"})," is primarily for passing a ",(0,r.jsx)(t.code,{children:"text"})," string, such as",(0,r.jsx)(t.code,{children:'"Name: Charlie Lastname, Age: 28, Email: charlie.lastname@example.com"'}),".\nHowever, the entire ",(0,r.jsx)(t.code,{children:"Message"})," object can include metadata about the message, particularly when used as chat input or output."]})})]}),"\n",(0,r.jsxs)(t.p,{children:["For more information, see ",(0,r.jsx)(t.a,{href:"/data-types",children:"Langflow data types"}),"."]}),"\n",(0,r.jsx)(t.h3,{id:"use-the-type-convert-component-in-a-flow",children:"Use the Type Convert component in a flow"}),"\n",(0,r.jsxs)(t.p,{children:["The ",(0,r.jsx)(t.strong,{children:"Type Convert"})," component is typically used to transform data into a format required by a downstream component.\nFor example, if a component outputs a ",(0,r.jsx)(t.code,{children:"Message"}),", but the following component requires ",(0,r.jsx)(t.code,{children:"Data"}),", then you can use the ",(0,r.jsx)(t.strong,{children:"Type Convert"})," component to reformat the ",(0,r.jsx)(t.code,{children:"Message"})," as ",(0,r.jsx)(t.code,{children:"Data"})," before passing it to the downstream component."]}),"\n",(0,r.jsxs)(t.p,{children:["The following example uses the ",(0,r.jsx)(t.strong,{children:"Type Convert"})," component to convert the ",(0,r.jsx)(t.code,{children:"DataFrame"})," output from a ",(0,r.jsx)(t.strong,{children:"Web Search"})," component into ",(0,r.jsx)(t.code,{children:"Message"})," data that is passed as text input for an LLM:"]}),"\n",(0,r.jsxs)(t.ol,{children:["\n",(0,r.jsxs)(t.li,{children:["\n",(0,r.jsxs)(t.p,{children:["Create a flow based on the ",(0,r.jsx)(t.strong,{children:"Basic prompting"})," template."]}),"\n"]}),"\n",(0,r.jsxs)(t.li,{children:["\n",(0,r.jsxs)(t.p,{children:["Add a ",(0,r.jsx)(t.strong,{children:"Web Search"})," component to the flow, and then enter a search query, such as ",(0,r.jsx)(t.code,{children:"environmental news"}),"."]}),"\n"]}),"\n",(0,r.jsxs)(t.li,{children:["\n",(0,r.jsxs)(t.p,{children:["In the ",(0,r.jsx)(t.strong,{children:"Prompt Template"})," component, replace the contents of the ",(0,r.jsx)(t.strong,{children:"Template"})," field with the following text:"]}),"\n",(0,r.jsx)(j.Code,{codeConfig:g,northPanel:{tabs:[""],active:"",heightRatio:1},files:[{name:"",focus:"",code:{lines:[{tokens:[{content:"Answer the user's question using the {context}",props:{}}]}],lang:"text"},annotations:[]}]}),"\n",(0,r.jsxs)(t.p,{children:["The curly braces define a ",(0,r.jsx)(t.a,{href:"/components-prompts#define-variables-in-prompts",children:"prompt variable"})," that becomes an input field on the ",(0,r.jsx)(t.strong,{children:"Prompt Template"})," component.\nIn this example, you will use the ",(0,r.jsx)(t.strong,{children:"context"})," field to pass the search results into the template, as explained in the next steps."]}),"\n"]}),"\n",(0,r.jsxs)(t.li,{children:["\n",(0,r.jsxs)(t.p,{children:["Add a ",(0,r.jsx)(t.strong,{children:"Type Convert"})," component to the flow, and then set the ",(0,r.jsx)(t.strong,{children:"Output Type"})," to ",(0,r.jsx)(t.strong,{children:"Message"}),"."]}),"\n",(0,r.jsxs)(t.p,{children:["Because the ",(0,r.jsx)(t.strong,{children:"Web Search"})," component's ",(0,r.jsx)(t.code,{children:"DataFrame"})," output is incompatible with the ",(0,r.jsx)(t.strong,{children:"context"})," variable's ",(0,r.jsx)(t.code,{children:"Message"})," input, you must use the ",(0,r.jsx)(t.strong,{children:"Type Convert"})," component to change the ",(0,r.jsx)(t.code,{children:"DataFrame"})," to a ",(0,r.jsx)(t.code,{children:"Message"})," in order to pass the search results to the ",(0,r.jsx)(t.strong,{children:"Prompt Template"})," component."]}),"\n"]}),"\n",(0,r.jsxs)(t.li,{children:["\n",(0,r.jsx)(t.p,{children:"Connect the additional components to the rest of the flow:"}),"\n",(0,r.jsxs)(t.ul,{children:["\n",(0,r.jsxs)(t.li,{children:["Connect the ",(0,r.jsx)(t.strong,{children:"Web Search"})," component's output to the ",(0,r.jsx)(t.strong,{children:"Type Convert"})," component's input."]}),"\n",(0,r.jsxs)(t.li,{children:["Connect the ",(0,r.jsx)(t.strong,{children:"Type Convert"})," component's output to the ",(0,r.jsx)(t.strong,{children:"Prompt Template"})," component's ",(0,r.jsx)(t.strong,{children:"context"})," input."]}),"\n"]}),"\n",(0,r.jsx)(t.p,{children:(0,r.jsx)(t.img,{alt:"Convert web search output to text input",src:n(42547).A+"",width:"4000",height:"1826"})}),"\n"]}),"\n",(0,r.jsxs)(t.li,{children:["\n",(0,r.jsxs)(t.p,{children:["In the ",(0,r.jsx)(t.strong,{children:"Language Model"})," component, add your OpenAI API key."]}),"\n",(0,r.jsxs)(t.p,{children:["If you want to use a different provider or model, edit the ",(0,r.jsx)(t.strong,{children:"Model Provider"}),", ",(0,r.jsx)(t.strong,{children:"Model Name"}),", and ",(0,r.jsx)(t.strong,{children:"API Key"})," fields accordingly."]}),"\n"]}),"\n",(0,r.jsxs)(t.li,{children:["\n",(0,r.jsxs)(t.p,{children:["Click ",(0,r.jsx)(t.strong,{children:"Playground"}),", and then ask something relevant to your search query, such as ",(0,r.jsx)(t.code,{children:"latest news"})," or ",(0,r.jsx)(t.code,{children:"what's the latest research on the environment?"}),"."]}),"\n",(0,r.jsxs)(s,{children:[(0,r.jsx)("summary",{children:"Result"}),(0,r.jsx)(t.p,{children:"The LLM uses the search results context, your chat message, and it's built-in training data to respond to your question.\nFor example:"}),(0,r.jsx)(j.Code,{codeConfig:g,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)(t.h3,{id:"type-convert-parameters",children:"Type Convert parameters"}),"\n",(0,r.jsxs)(t.table,{children:[(0,r.jsx)(t.thead,{children:(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.th,{children:"Name"}),(0,r.jsx)(t.th,{children:"Display Name"}),(0,r.jsx)(t.th,{children:"Info"})]})}),(0,r.jsxs)(t.tbody,{children:[(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"input_data"}),(0,r.jsx)(t.td,{children:"Input Data"}),(0,r.jsxs)(t.td,{children:["Input parameter. The data to convert. Accepts ",(0,r.jsx)(t.code,{children:"Data"}),", ",(0,r.jsx)(t.code,{children:"DataFrame"}),", or ",(0,r.jsx)(t.code,{children:"Message"})," input."]})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"output_type"}),(0,r.jsx)(t.td,{children:"Output Type"}),(0,r.jsxs)(t.td,{children:["Input parameter. The desired output type, as one of ",(0,r.jsx)(t.strong,{children:"Data"}),", ",(0,r.jsx)(t.strong,{children:"DataFrame"})," or ",(0,r.jsx)(t.strong,{children:"Message"}),"."]})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"output"}),(0,r.jsx)(t.td,{children:"Output"}),(0,r.jsxs)(t.td,{children:["Output parameter. The converted data in the specified format. The output port changes depending on the selected ",(0,r.jsx)(t.strong,{children:"Output Type"}),"."]})]})]})]}),"\n",(0,r.jsx)(t.h2,{id:"legacy-processing-components",children:"Legacy Processing components"}),"\n","\n",(0,r.jsx)(p.Ay,{}),"\n",(0,r.jsx)(t.p,{children:"The following Processing components are in legacy status:"}),"\n",(0,r.jsxs)(s,{children:[(0,r.jsx)("summary",{children:"Alter Metadata"}),(0,r.jsxs)(t.p,{children:["Replace this legacy component with the ",(0,r.jsxs)(t.a,{href:"#data-operations",children:[(0,r.jsx)(t.strong,{children:"Data Operations"})," component"]}),"."]}),(0,r.jsxs)(t.p,{children:["This component modifies metadata of input objects. It can add new metadata, update existing metadata, and remove specified metadata fields. The component works with both ",(0,r.jsx)(t.code,{children:"Message"})," and ",(0,r.jsx)(t.code,{children:"Data"})," objects, and can also create a new ",(0,r.jsx)(t.code,{children:"Data"})," object from user-provided text."]}),(0,r.jsx)(t.p,{children:"It accepts the following parameters:"}),(0,r.jsxs)(t.table,{children:[(0,r.jsx)(t.thead,{children:(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.th,{children:"Name"}),(0,r.jsx)(t.th,{children:"Display Name"}),(0,r.jsx)(t.th,{children:"Info"})]})}),(0,r.jsxs)(t.tbody,{children:[(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"input_value"}),(0,r.jsx)(t.td,{children:"Input"}),(0,r.jsx)(t.td,{children:"Input parameter. Objects to which Metadata should be added."})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"text_in"}),(0,r.jsx)(t.td,{children:"User Text"}),(0,r.jsxs)(t.td,{children:["Input parameter. Text input; the value is contained in the 'text' attribute of the ",(0,r.jsx)(t.code,{children:"Data"})," object. Empty text entries are ignored."]})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"metadata"}),(0,r.jsx)(t.td,{children:"Metadata"}),(0,r.jsx)(t.td,{children:"Input parameter. Metadata to add to each object."})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"remove_fields"}),(0,r.jsx)(t.td,{children:"Fields to Remove"}),(0,r.jsx)(t.td,{children:"Input parameter. Metadata fields to remove."})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"data"}),(0,r.jsx)(t.td,{children:"Data"}),(0,r.jsx)(t.td,{children:"Output parameter. List of Input objects, each with added metadata."})]})]})]})]}),"\n",(0,r.jsxs)(s,{children:[(0,r.jsx)("summary",{children:"Combine Data"}),(0,r.jsxs)(t.p,{children:["Replace this legacy component with the ",(0,r.jsxs)(t.a,{href:"#data-operations",children:[(0,r.jsx)(t.strong,{children:"Data Operations"})," component"]})," or the ",(0,r.jsxs)(t.a,{href:"/components-logic#loop",children:[(0,r.jsx)(t.strong,{children:"Loop"})," component"]}),"."]}),(0,r.jsxs)(t.p,{children:["This component combines multiple data sources into a single unified ",(0,r.jsx)(t.code,{children:"Data"})," object."]}),(0,r.jsxs)(t.p,{children:["The component iterates through a list of ",(0,r.jsx)(t.code,{children:"Data"})," objects, merging them into a single ",(0,r.jsx)(t.code,{children:"Data"})," object (",(0,r.jsx)(t.code,{children:"merged_data"}),").\nIf the input list is empty, it returns an empty data object.\nIf there's only one input data object, it returns that object unchanged."]}),(0,r.jsx)(t.p,{children:"The merging process uses the addition operator to combine data objects."})]}),"\n",(0,r.jsxs)(s,{children:[(0,r.jsx)("summary",{children:"Combine Text"}),(0,r.jsxs)(t.p,{children:["Replace this legacy component with the ",(0,r.jsxs)(t.a,{href:"#data-operations",children:[(0,r.jsx)(t.strong,{children:"Data Operations"})," component"]}),"."]}),(0,r.jsxs)(t.p,{children:["This component concatenates two text inputs into a single text chunk using a specified delimiter, outputting a ",(0,r.jsx)(t.code,{children:"Message"})," object with the combined text."]})]}),"\n",(0,r.jsxs)(s,{children:[(0,r.jsx)("summary",{children:"Create Data"}),(0,r.jsxs)(t.p,{children:["Replace this legacy component with the ",(0,r.jsxs)(t.a,{href:"#data-operations",children:[(0,r.jsx)(t.strong,{children:"Data Operations"})," component"]}),"."]}),(0,r.jsxs)(t.p,{children:["This component dynamically creates a ",(0,r.jsx)(t.code,{children:"Data"})," object with a specified number of fields and a text key."]}),(0,r.jsx)(t.p,{children:"It accepts the following parameters:"}),(0,r.jsxs)(t.table,{children:[(0,r.jsx)(t.thead,{children:(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.th,{children:"Name"}),(0,r.jsx)(t.th,{children:"Display Name"}),(0,r.jsx)(t.th,{children:"Info"})]})}),(0,r.jsxs)(t.tbody,{children:[(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"number_of_fields"}),(0,r.jsx)(t.td,{children:"Number of Fields"}),(0,r.jsx)(t.td,{children:"Input parameter. The number of fields to be added to the record."})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"text_key"}),(0,r.jsx)(t.td,{children:"Text Key"}),(0,r.jsx)(t.td,{children:"Input parameter. Key that identifies the field to be used as the text content."})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"text_key_validator"}),(0,r.jsx)(t.td,{children:"Text Key Validator"}),(0,r.jsxs)(t.td,{children:["Input parameter. If enabled, checks if the given ",(0,r.jsx)(t.code,{children:"Text Key"})," is present in the given ",(0,r.jsx)(t.code,{children:"Data"}),"."]})]})]})]})]}),"\n",(0,r.jsxs)(s,{children:[(0,r.jsx)("summary",{children:"Extract Key"}),(0,r.jsxs)(t.p,{children:["Replace this legacy component with the ",(0,r.jsxs)(t.a,{href:"#data-operations",children:[(0,r.jsx)(t.strong,{children:"Data Operations"})," component"]}),"."]}),(0,r.jsxs)(t.p,{children:["This component extracts a specific key from a ",(0,r.jsx)(t.code,{children:"Data"})," object and returns the value associated with that key."]})]}),"\n",(0,r.jsxs)(s,{children:[(0,r.jsx)("summary",{children:"Data to DataFrame/Data to Message"}),(0,r.jsxs)(t.p,{children:["Replace these legacy components with newer Processing components, such as the ",(0,r.jsxs)(t.a,{href:"#data-operations",children:[(0,r.jsx)(t.strong,{children:"Data Operations"})," component"]})," and ",(0,r.jsxs)(t.a,{href:"#type-convert",children:[(0,r.jsx)(t.strong,{children:"Type Convert"})," component"]}),"."]}),(0,r.jsxs)(t.p,{children:["These components converted one or more ",(0,r.jsx)(t.code,{children:"Data"})," objects into a ",(0,r.jsx)(t.code,{children:"DataFrame"})," or ",(0,r.jsx)(t.code,{children:"Message"})," object."]}),(0,r.jsxs)(t.p,{children:["For the ",(0,r.jsx)(t.strong,{children:"Data to DataFrame"})," component, each ",(0,r.jsx)(t.code,{children:"Data"})," object corresponds to one row in the resulting ",(0,r.jsx)(t.code,{children:"DataFrame"}),".\nFields from the ",(0,r.jsx)(t.code,{children:".data"})," attribute become columns, and the ",(0,r.jsx)(t.code,{children:".text"})," field (if present) is placed in a ",(0,r.jsx)(t.code,{children:"text"})," column."]})]}),"\n",(0,r.jsxs)(s,{children:[(0,r.jsx)("summary",{children:"Filter Data"}),(0,r.jsxs)(t.p,{children:["Replace this legacy component with the ",(0,r.jsxs)(t.a,{href:"#data-operations",children:[(0,r.jsx)(t.strong,{children:"Data Operations"})," component"]}),"."]}),(0,r.jsxs)(t.p,{children:["This component filters a ",(0,r.jsx)(t.code,{children:"Data"})," object based on a list of keys (",(0,r.jsx)(t.code,{children:"filter_criteria"}),"), returning a new ",(0,r.jsx)(t.code,{children:"Data"})," object (",(0,r.jsx)(t.code,{children:"filtered_data"}),") that contains only the key-value pairs that match the filter criteria."]})]}),"\n",(0,r.jsxs)(s,{children:[(0,r.jsx)("summary",{children:"Filter Values"}),(0,r.jsxs)(t.p,{children:["Replace this legacy component with the ",(0,r.jsxs)(t.a,{href:"#data-operations",children:[(0,r.jsx)(t.strong,{children:"Data Operations"})," component"]}),"."]}),(0,r.jsx)(t.p,{children:"The Filter values component filters a list of data items based on a specified key, filter value, and comparison operator."}),(0,r.jsx)(t.p,{children:"It accepts the following parameters:"}),(0,r.jsxs)(t.table,{children:[(0,r.jsx)(t.thead,{children:(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.th,{children:"Name"}),(0,r.jsx)(t.th,{children:"Display Name"}),(0,r.jsx)(t.th,{children:"Info"})]})}),(0,r.jsxs)(t.tbody,{children:[(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"input_data"}),(0,r.jsx)(t.td,{children:"Input data"}),(0,r.jsx)(t.td,{children:"Input parameter. The list of data items to filter."})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"filter_key"}),(0,r.jsx)(t.td,{children:"Filter Key"}),(0,r.jsx)(t.td,{children:"Input parameter. The key to filter on."})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"filter_value"}),(0,r.jsx)(t.td,{children:"Filter Value"}),(0,r.jsx)(t.td,{children:"Input parameter. The value to filter by."})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"operator"}),(0,r.jsx)(t.td,{children:"Comparison Operator"}),(0,r.jsx)(t.td,{children:"Input parameter. The operator to apply for comparing the values."})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"filtered_data"}),(0,r.jsx)(t.td,{children:"Filtered data"}),(0,r.jsx)(t.td,{children:"Output parameter. The resulting list of filtered data items."})]})]})]})]}),"\n",(0,r.jsxs)(s,{children:[(0,r.jsx)("summary",{children:"JSON Cleaner"}),(0,r.jsxs)(t.p,{children:["Replace this legacy component with the ",(0,r.jsxs)(t.a,{href:"#parser",children:[(0,r.jsx)(t.strong,{children:"Parser"})," component"]}),"."]}),(0,r.jsx)(t.p,{children:"This component cleans JSON strings to ensure they are fully compliant with the JSON specification."}),(0,r.jsx)(t.p,{children:"It accepts the following parameters:"}),(0,r.jsxs)(t.table,{children:[(0,r.jsx)(t.thead,{children:(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.th,{children:"Name"}),(0,r.jsx)(t.th,{children:"Display Name"}),(0,r.jsx)(t.th,{children:"Info"})]})}),(0,r.jsxs)(t.tbody,{children:[(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"json_str"}),(0,r.jsx)(t.td,{children:"JSON String"}),(0,r.jsx)(t.td,{children:"Input parameter. The JSON string to be cleaned. This can be a raw, potentially malformed JSON string produced by language models or other sources that may not fully comply with JSON specifications."})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"remove_control_chars"}),(0,r.jsx)(t.td,{children:"Remove Control Characters"}),(0,r.jsxs)(t.td,{children:["Input parameter. If set to ",(0,r.jsx)(t.code,{children:"True"}),", this option removes control characters (ASCII characters 0-31 and 127) from the JSON string. This can help eliminate invisible characters that might cause parsing issues or make the JSON invalid."]})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"normalize_unicode"}),(0,r.jsx)(t.td,{children:"Normalize Unicode"}),(0,r.jsx)(t.td,{children:"Input parameter. When enabled, this option normalizes Unicode characters in the JSON string to their canonical composition form (NFC). This ensures consistent representation of Unicode characters across different systems and prevents potential issues with character encoding."})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"validate_json"}),(0,r.jsx)(t.td,{children:"Validate JSON"}),(0,r.jsxs)(t.td,{children:["Input parameter. If set to ",(0,r.jsx)(t.code,{children:"True"}),", this option attempts to parse the JSON string to ensure it is well-formed before applying the final repair operation. It raises a ValueError if the JSON is invalid, allowing for early detection of major structural issues in the JSON."]})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"output"}),(0,r.jsx)(t.td,{children:"Cleaned JSON String"}),(0,r.jsx)(t.td,{children:"Output parameter. The resulting cleaned, repaired, and validated JSON string that fully complies with the JSON specification."})]})]})]})]}),"\n",(0,r.jsxs)(s,{children:[(0,r.jsx)("summary",{children:"Message to Data"}),(0,r.jsxs)(t.p,{children:["Replace this legacy component with the ",(0,r.jsxs)(t.a,{href:"#type-convert",children:[(0,r.jsx)(t.strong,{children:"Type Convert"})," component"]}),"."]}),(0,r.jsxs)(t.p,{children:["This component converts ",(0,r.jsx)(t.code,{children:"Message"})," objects to ",(0,r.jsx)(t.code,{children:"Data"})," objects."]})]}),"\n",(0,r.jsxs)(s,{children:[(0,r.jsx)("summary",{children:"Parse DataFrame"}),(0,r.jsxs)(t.p,{children:["Replace this legacy component with the ",(0,r.jsxs)(t.a,{href:"#dataframe-operations",children:[(0,r.jsx)(t.strong,{children:"DataFrame Operations"})," component"]})," or ",(0,r.jsxs)(t.a,{href:"#parser",children:[(0,r.jsx)(t.strong,{children:"Parser"})," component"]}),"."]}),(0,r.jsxs)(t.p,{children:["This component converts ",(0,r.jsx)(t.code,{children:"DataFrame"})," objects into plain text using templates."]}),(0,r.jsx)(t.p,{children:"It accepts the following parameters:"}),(0,r.jsxs)(t.table,{children:[(0,r.jsx)(t.thead,{children:(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.th,{children:"Name"}),(0,r.jsx)(t.th,{children:"Display Name"}),(0,r.jsx)(t.th,{children:"Info"})]})}),(0,r.jsxs)(t.tbody,{children:[(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"df"}),(0,r.jsx)(t.td,{children:"DataFrame"}),(0,r.jsx)(t.td,{children:"Input parameter. The DataFrame to convert to text rows."})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"template"}),(0,r.jsx)(t.td,{children:"Template"}),(0,r.jsxs)(t.td,{children:["Input parameter. Template for formatting (use ",(0,r.jsx)(t.code,{children:"{column_name}"})," placeholders)."]})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"sep"}),(0,r.jsx)(t.td,{children:"Separator"}),(0,r.jsx)(t.td,{children:"Input parameter. String to join rows in output."})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"text"}),(0,r.jsx)(t.td,{children:"Text"}),(0,r.jsx)(t.td,{children:"Output parameter. All rows combined into single text."})]})]})]})]}),"\n",(0,r.jsxs)(s,{children:[(0,r.jsx)("summary",{children:"Parse JSON"}),(0,r.jsxs)(t.p,{children:["Replace this legacy component with the ",(0,r.jsxs)(t.a,{href:"#parser",children:[(0,r.jsx)(t.strong,{children:"Parser"})," component"]}),"."]}),(0,r.jsxs)(t.p,{children:["This component converts and extracts JSON fields in ",(0,r.jsx)(t.code,{children:"Message"})," and ",(0,r.jsx)(t.code,{children:"Data"})," objects using JQ queries, then returns ",(0,r.jsx)(t.code,{children:"filtered_data"}),", which is a list of ",(0,r.jsx)(t.code,{children:"Data"})," objects."]})]}),"\n",(0,r.jsxs)(s,{children:[(0,r.jsx)("summary",{children:"Regex Extractor"}),(0,r.jsxs)(t.p,{children:["Replace this legacy component with the ",(0,r.jsxs)(t.a,{href:"#parser",children:[(0,r.jsx)(t.strong,{children:"Parser"})," component"]}),"."]}),(0,r.jsx)(t.p,{children:"This component extracts patterns in text using regular expressions. It can be used to find and extract specific patterns or information in text."})]}),"\n",(0,r.jsxs)(s,{children:[(0,r.jsx)("summary",{children:"Select Data"}),(0,r.jsxs)(t.p,{children:["Replace this legacy component with the ",(0,r.jsxs)(t.a,{href:"#data-operations",children:[(0,r.jsx)(t.strong,{children:"Data Operations"})," component"]}),"."]}),(0,r.jsxs)(t.p,{children:["This component selects a single ",(0,r.jsx)(t.code,{children:"Data"})," object from a list."]}),(0,r.jsx)(t.p,{children:"It accepts the following parameters:"}),(0,r.jsxs)(t.table,{children:[(0,r.jsx)(t.thead,{children:(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.th,{children:"Name"}),(0,r.jsx)(t.th,{children:"Display Name"}),(0,r.jsx)(t.th,{children:"Info"})]})}),(0,r.jsxs)(t.tbody,{children:[(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"data_list"}),(0,r.jsx)(t.td,{children:"Data List"}),(0,r.jsx)(t.td,{children:"Input parameter. List of data to select from"})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"data_index"}),(0,r.jsx)(t.td,{children:"Data Index"}),(0,r.jsx)(t.td,{children:"Input parameter. Index of the data to select"})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"selected_data"}),(0,r.jsx)(t.td,{children:"Selected Data"}),(0,r.jsxs)(t.td,{children:["Output parameter. The selected ",(0,r.jsx)(t.code,{children:"Data"})," object."]})]})]})]})]}),"\n",(0,r.jsxs)(s,{children:[(0,r.jsx)("summary",{children:"Update Data"}),(0,r.jsxs)(t.p,{children:["Replace this legacy component with the ",(0,r.jsxs)(t.a,{href:"#data-operations",children:[(0,r.jsx)(t.strong,{children:"Data Operations"})," component"]}),"."]}),(0,r.jsx)(t.p,{children:"This component dynamically updates or appends data with specified fields."}),(0,r.jsx)(t.p,{children:"It accepts the following parameters:"}),(0,r.jsxs)(t.table,{children:[(0,r.jsx)(t.thead,{children:(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.th,{children:"Name"}),(0,r.jsx)(t.th,{children:"Display Name"}),(0,r.jsx)(t.th,{children:"Info"})]})}),(0,r.jsxs)(t.tbody,{children:[(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"old_data"}),(0,r.jsx)(t.td,{children:"Data"}),(0,r.jsx)(t.td,{children:"Input parameter. The records to update."})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"number_of_fields"}),(0,r.jsx)(t.td,{children:"Number of Fields"}),(0,r.jsx)(t.td,{children:"Input parameter. The number of fields to add. The maximum is 15."})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"text_key"}),(0,r.jsx)(t.td,{children:"Text Key"}),(0,r.jsx)(t.td,{children:"Input parameter. The key for text content."})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"text_key_validator"}),(0,r.jsx)(t.td,{children:"Text Key Validator"}),(0,r.jsx)(t.td,{children:"Input parameter. Validates the text key presence."})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"data"}),(0,r.jsx)(t.td,{children:"Data"}),(0,r.jsx)(t.td,{children:"Output parameter. The updated Data objects."})]})]})]})]})]})}function b(e={}){const{wrapper:t}={...(0,o.R)(),...e.components};return t?(0,r.jsx)(t,{...e,children:(0,r.jsx)(y,{...e})}):y(e)}function D(e,t){throw new Error("Expected "+(t?"component":"object")+" `"+e+"` to be defined: you likely forgot to import, pass, or provide it.")}},42547:(e,t,n)=>{n.d(t,{A:()=>s});const s=n.p+"assets/images/component-type-convert-and-web-search-1eef7b9a7c1a243f4a08d9717728d0e1.png"},46445:(e,t,n)=>{n.d(t,{A:()=>s});const s=n.p+"assets/images/component-data-operations-select-key-80bade862d29f2851b01ee26413d495f.png"},49823:(e,t,n)=>{n.d(t,{A:()=>s});const s=n.p+"assets/images/component-split-text-fec2b1abb28e0852c8a172bbeb164b2c.png"},66539:(e,t,n)=>{n.d(t,{A:()=>s});const s=n.p+"assets/images/component-lambda-filter-76cd345c52fa41a59dcfac0205dc3068.png"},72736:(e,t,n)=>{n.d(t,{Ay:()=>i,RM:()=>o});var s=n(74848),r=n(28453);const o=[];function a(e){const t={code:"code",p:"p",...(0,r.R)(),...e.components};return(0,s.jsxs)(t.p,{children:["If your template includes literal text and variables, you can use double curly braces to escape literal curly braces in the template and prevent interpretation of that text as a variable.\nFor example: ",(0,s.jsx)(t.code,{children:"This is a template with {{literal text in curly braces}} and a {variable}"}),"."]})}function i(e={}){const{wrapper:t}={...(0,r.R)(),...e.components};return t?(0,s.jsx)(t,{...e,children:(0,s.jsx)(a,{...e})}):a(e)}},82798:(e,t,n)=>{n.d(t,{A:()=>s});const s=n.p+"assets/images/component-structured-output-23458b0d29eed6d092b557c7aaf6ab2c.png"},88103:(e,t,n)=>{n.d(t,{A:()=>s});const s=n.p+"assets/images/component-batch-run-19c94fbb0646b2731b37013b84dff1f6.png"},96218:(e,t,n)=>{n.d(t,{A:()=>s});const s=n.p+"assets/images/component-parser-1d1d72593f02991e5b14b6b1c112a744.png"},99e3:(e,t,n)=>{n.d(t,{A:()=>s});const s=n.p+"assets/images/component-python-interpreter-1ef9e7dec643a216fd5e83c2139d09c9.png"}}]); \ No newline at end of file diff --git a/assets/js/7819cc1c.5afda6b4.js b/assets/js/7819cc1c.5afda6b4.js new file mode 100644 index 0000000000..938f0f47cf --- /dev/null +++ b/assets/js/7819cc1c.5afda6b4.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunklangflow_docs=self.webpackChunklangflow_docs||[]).push([[6006],{9898:(e,t,n)=>{n.d(t,{A:()=>s});const s=n.p+"assets/images/component-llm-router-1b417082a0208a70065bc177a78fab67.png"},11470:(e,t,n)=>{n.d(t,{A:()=>v});var s=n(96540),r=n(18215),o=n(23104),a=n(56347),i=n(205),c=n(57485),l=n(31682),d=n(70679);function h(e){return s.Children.toArray(e).filter(e=>"\n"!==e).map(e=>{if(!e||(0,s.isValidElement)(e)&&function(e){const{props:t}=e;return!!t&&"object"==typeof t&&"value"in t}(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 p(e){const{values:t,children:n}=e;return(0,s.useMemo)(()=>{const e=t??function(e){return h(e).map(({props:{value:e,label:t,attributes:n,default:s}})=>({value:e,label:t,attributes:n,default:s}))}(n);return function(e){const t=(0,l.XI)(e,(e,t)=>e.value===t.value);if(t.length>0)throw new Error(`Docusaurus error: Duplicate values "${t.map(e=>e.value).join(", ")}" found in . Every value needs to be unique.`)}(e),e},[t,n])}function u({value:e,tabValues:t}){return t.some(t=>t.value===e)}function x({queryString:e=!1,groupId:t}){const n=(0,a.W6)(),r=function({queryString:e=!1,groupId:t}){if("string"==typeof e)return e;if(!1===e)return null;if(!0===e&&!t)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 t??null}({queryString:e,groupId:t});return[(0,c.aZ)(r),(0,s.useCallback)(e=>{if(!r)return;const t=new URLSearchParams(n.location.search);t.set(r,e),n.replace({...n.location,search:t.toString()})},[r,n])]}function m(e){const{defaultValue:t,queryString:n=!1,groupId:r}=e,o=p(e),[a,c]=(0,s.useState)(()=>function({defaultValue:e,tabValues:t}){if(0===t.length)throw new Error("Docusaurus error: the component requires at least one children component");if(e){if(!u({value:e,tabValues:t}))throw new Error(`Docusaurus error: The has a defaultValue "${e}" but none of its children has the corresponding value. Available values are: ${t.map(e=>e.value).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return e}const n=t.find(e=>e.default)??t[0];if(!n)throw new Error("Unexpected error: 0 tabValues");return n.value}({defaultValue:t,tabValues:o})),[l,h]=x({queryString:n,groupId:r}),[m,j]=function({groupId:e}){const t=function(e){return e?`docusaurus.tab.${e}`:null}(e),[n,r]=(0,d.Dv)(t);return[n,(0,s.useCallback)(e=>{t&&r.set(e)},[t,r])]}({groupId:r}),g=(()=>{const e=l??m;return u({value:e,tabValues:o})?e:null})();(0,i.A)(()=>{g&&c(g)},[g]);return{selectedValue:a,selectValue:(0,s.useCallback)(e=>{if(!u({value:e,tabValues:o}))throw new Error(`Can't select invalid tab value=${e}`);c(e),h(e),j(e)},[h,j,o]),tabValues:o}}var j=n(92303);const g={tabList:"tabList__CuJ",tabItem:"tabItem_LNqP"};var f=n(74848);function y({className:e,block:t,selectedValue:n,selectValue:s,tabValues:a}){const i=[],{blockElementScrollPositionUntilNextRender:c}=(0,o.a_)(),l=e=>{const t=e.currentTarget,r=i.indexOf(t),o=a[r].value;o!==n&&(c(t),s(o))},d=e=>{let t=null;switch(e.key){case"Enter":l(e);break;case"ArrowRight":{const n=i.indexOf(e.currentTarget)+1;t=i[n]??i[0];break}case"ArrowLeft":{const n=i.indexOf(e.currentTarget)-1;t=i[n]??i[i.length-1];break}}t?.focus()};return(0,f.jsx)("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,r.A)("tabs",{"tabs--block":t},e),children:a.map(({value:e,label:t,attributes:s})=>(0,f.jsx)("li",{role:"tab",tabIndex:n===e?0:-1,"aria-selected":n===e,ref:e=>{i.push(e)},onKeyDown:d,onClick:l,...s,className:(0,r.A)("tabs__item",g.tabItem,s?.className,{"tabs__item--active":n===e}),children:t??e},e))})}function b({lazy:e,children:t,selectedValue:n}){const o=(Array.isArray(t)?t:[t]).filter(Boolean);if(e){const e=o.find(e=>e.props.value===n);return e?(0,s.cloneElement)(e,{className:(0,r.A)("margin-top--md",e.props.className)}):null}return(0,f.jsx)("div",{className:"margin-top--md",children:o.map((e,t)=>(0,s.cloneElement)(e,{key:t,hidden:e.props.value!==n}))})}function D(e){const t=m(e);return(0,f.jsxs)("div",{className:(0,r.A)("tabs-container",g.tabList),children:[(0,f.jsx)(y,{...t,...e}),(0,f.jsx)(b,{...t,...e})]})}function v(e){const t=(0,j.A)();return(0,f.jsx)(D,{...e,children:h(e.children)},String(t))}},13533:(e,t,n)=>{n.d(t,{A:()=>s});const s=n.p+"assets/images/component-dataframe-operations-031488ccf4e3d3378f8842f0ea10682c.png"},17886:(e,t,n)=>{n.d(t,{A:()=>o});n(96540);var s=n(64058),r=n(74848);function o({name:e,...t}){const n=s[e];return n?(0,r.jsx)(n,{...t}):null}},19365:(e,t,n)=>{n.d(t,{A:()=>a});n(96540);var s=n(18215);const r={tabItem:"tabItem_Ymn6"};var o=n(74848);function a({children:e,hidden:t,className:n}){return(0,o.jsx)("div",{role:"tabpanel",className:(0,s.A)(r.tabItem,n),hidden:t,children:e})}},31929:(e,t,n)=>{n.d(t,{Ay:()=>c,RM:()=>a});var s=n(74848),r=n(28453),o=n(17886);const a=[];function i(e){const t={a:"a",p:"p",strong:"strong",...(0,r.R)(),...e.components};return(0,s.jsxs)(t.p,{children:["Some parameters are hidden by default in the visual editor.\nYou can modify all parameters through the ",(0,s.jsx)(o.A,{name:"SlidersHorizontal","aria-hidden":"true"})," ",(0,s.jsx)(t.strong,{children:"Controls"})," in the ",(0,s.jsx)(t.a,{href:"/concepts-components#component-menus",children:"component's header menu"}),"."]})}function c(e={}){const{wrapper:t}={...(0,r.R)(),...e.components};return t?(0,s.jsx)(t,{...e,children:(0,s.jsx)(i,{...e})}):i(e)}},36813:(e,t,n)=>{n.d(t,{Ay:()=>c,RM:()=>a});var s=n(74848),r=n(28453),o=n(17886);const a=[];function i(e){const t={a:"a",p:"p",strong:"strong",...(0,r.R)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsxs)(t.p,{children:["Legacy components are longer supported and can be removed in a future release.\nYou can continue to use them in existing flows, but it is recommended that you replace them with supported components as soon as possible.\nSuggested replacements are included in the ",(0,s.jsx)(t.strong,{children:"Legacy"})," banner on components in your flows.\nThey are also given in release notes and Langflow documentation whenever possible."]}),"\n",(0,s.jsxs)(t.p,{children:["If you aren't sure how to replace a legacy component, ",(0,s.jsx)(o.A,{name:"Search","aria-hidden":"true"})," ",(0,s.jsx)(t.strong,{children:"Search"})," for components by provider, service, or component name.\nThe component may have been deprecated in favor of a completely new component, a similar component, or a new version of the same component in a different category."]}),"\n",(0,s.jsxs)(t.p,{children:["If there is no obvious replacement, consider whether another component can be adapted to your use case.\nFor example, many ",(0,s.jsx)(o.A,{name:"Component","aria-hidden":"true"})," ",(0,s.jsx)(t.strong,{children:"Core components"})," provide generic functionality that can support multiple providers and use cases, such as the ",(0,s.jsxs)(t.a,{href:"/components-data#api-request",children:[(0,s.jsx)(t.strong,{children:"API Request"})," component"]}),"."]}),"\n",(0,s.jsxs)(t.p,{children:["If neither of these options are viable, you could use the legacy component's code to create your own custom component, or ",(0,s.jsx)(t.a,{href:"/contributing-github-issues",children:"start a discussion"})," about the legacy component."]}),"\n",(0,s.jsxs)(t.p,{children:["To discourage use of legacy components in new flows, these components are hidden by default.\nIn the visual editor, you can click ",(0,s.jsx)(o.A,{name:"SlidersHorizontal","aria-hidden":"true"})," ",(0,s.jsx)(t.strong,{children:"Component settings"})," to toggle the ",(0,s.jsx)(t.strong,{children:"Legacy"})," filter."]})]})}function c(e={}){const{wrapper:t}={...(0,r.R)(),...e.components};return t?(0,s.jsx)(t,{...e,children:(0,s.jsx)(i,{...e})}):i(e)}},40966:(e,t,n)=>{n.r(t),n.d(t,{CH:()=>j,assets:()=>m,chCodeConfig:()=>g,contentTitle:()=>x,default:()=>b,frontMatter:()=>u,metadata:()=>s,toc:()=>f});const s=JSON.parse('{"id":"Components/components-processing","title":"Processing components","description":"Processing components process and transform data within a flow.","source":"@site/docs/Components/components-processing.mdx","sourceDirName":"Components","slug":"/components-processing","permalink":"/components-processing","draft":false,"unlisted":false,"tags":[],"version":"current","frontMatter":{"title":"Processing components","slug":"/components-processing"},"sidebar":"docs","previous":{"title":"Data","permalink":"/components-data"},"next":{"title":"Prompt Template","permalink":"/components-prompts"}}');var r=n(74848),o=n(28453),a=n(24754),i=n(17886),c=n(11470),l=n(19365),d=n(31929),h=n(72736),p=n(36813);const u={title:"Processing components",slug:"/components-processing"},x=void 0,m={},j={annotations:a.hk,Code:a.Cy},g={staticMediaQuery:"not screen, (max-width: 768px)",lineNumbers:!0,showCopyButton:!0,themeName:"github-dark"},f=[{value:"Prompt Template",id:"prompt-template",level:2},{value:"Batch Run",id:"batch-run",level:2},{value:"Use the Batch Run component in a flow",id:"use-the-batch-run-component-in-a-flow",level:3},{value:"Batch Run parameters",id:"batch-run-parameters",level:3},...d.RM,{value:"Data Operations",id:"data-operations",level:2},{value:"Use the Data Operations component in a flow",id:"use-the-data-operations-component-in-a-flow",level:3},{value:"Data Operations parameters",id:"data-operations-parameters",level:3},{value:"Available data operations",id:"available-data-operations",level:4},{value:"DataFrame Operations",id:"dataframe-operations",level:2},{value:"Use the DataFrame Operations component in a flow",id:"use-the-dataframe-operations-component-in-a-flow",level:3},{value:"DataFrame Operations parameters",id:"dataframe-operations-parameters",level:3},{value:"LLM Router",id:"llm-router",level:2},{value:"LLM Router parameters",id:"llm-router-parameters",level:3},...d.RM,{value:"LLM Router outputs",id:"llm-router-outputs",level:3},{value:"Parser",id:"parser",level:2},{value:"Parsing modes",id:"parsing-modes",level:3},...h.RM,...d.RM,...d.RM,{value:"Test and troubleshoot parsed text",id:"test-and-troubleshoot-parsed-text",level:3},{value:"Python Interpreter",id:"python-interpreter",level:2},{value:"Use the Python Interpreter in a flow",id:"use-the-python-interpreter-in-a-flow",level:3},{value:"Python Interpreter parameters",id:"python-interpreter-parameters",level:3},{value:"Save File",id:"save-file",level:2},{value:"Smart Function",id:"smart-transform",level:2},{value:"Smart Function parameters",id:"smart-function-parameters",level:3},...d.RM,{value:"Split Text",id:"split-text",level:2},{value:"Split Text parameters",id:"split-text-parameters",level:3},...d.RM,{value:"Tokenization errors due to chunk size",id:"chunk-size",level:3},{value:"Other text splitters",id:"other-text-splitters",level:3},{value:"Structured Output",id:"structured-output",level:2},{value:"Use the Structured Output component in a flow",id:"use-the-structured-output-component-in-a-flow",level:3},{value:"Structured Output parameters",id:"structured-output-parameters",level:3},...d.RM,{value:"Output Schema options",id:"output-schema-options",level:4},{value:"Type Convert",id:"type-convert",level:2},{value:"Use the Type Convert component in a flow",id:"use-the-type-convert-component-in-a-flow",level:3},{value:"Type Convert parameters",id:"type-convert-parameters",level:3},{value:"Legacy Processing components",id:"legacy-processing-components",level:2},...p.RM];function y(e){const t={a:"a",admonition:"admonition",code:"code",em:"em",h2:"h2",h3:"h3",h4:"h4",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}=t;return j||D("CH",!1),j.Code||D("CH.Code",!0),s||D("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.jsx)(t.p,{children:"Processing components process and transform data within a flow.\nThey have many uses, including:"}),"\n",(0,r.jsxs)(t.ul,{children:["\n",(0,r.jsxs)(t.li,{children:["Feed instructions and context to your LLMs and agents with the ",(0,r.jsxs)(t.a,{href:"#prompt-template",children:[(0,r.jsx)(t.strong,{children:"Prompt Template"})," component"]}),"."]}),"\n",(0,r.jsxs)(t.li,{children:["Extract content from larger chunks of data with a ",(0,r.jsxs)(t.a,{href:"#parser",children:[(0,r.jsx)(t.strong,{children:"Parser"})," component"]}),"."]}),"\n",(0,r.jsxs)(t.li,{children:["Filter data with natural language with the ",(0,r.jsxs)(t.a,{href:"#smart-transform",children:[(0,r.jsx)(t.strong,{children:"Smart Function"})," component"]}),"."]}),"\n",(0,r.jsxs)(t.li,{children:["Save data to your local machine with the ",(0,r.jsxs)(t.a,{href:"#save-file",children:[(0,r.jsx)(t.strong,{children:"Save File"})," component"]}),"."]}),"\n",(0,r.jsxs)(t.li,{children:["Transform data into a different data type with the ",(0,r.jsxs)(t.a,{href:"#type-convert",children:[(0,r.jsx)(t.strong,{children:"Type Convert"})," component"]})," to pass it between incompatible components."]}),"\n"]}),"\n",(0,r.jsx)(t.h2,{id:"prompt-template",children:"Prompt Template"}),"\n",(0,r.jsxs)(t.p,{children:["See ",(0,r.jsxs)(t.a,{href:"/components-prompts",children:[(0,r.jsx)(t.strong,{children:"Prompt Template"})," component"]}),"."]}),"\n",(0,r.jsx)(t.h2,{id:"batch-run",children:"Batch Run"}),"\n",(0,r.jsxs)(t.p,{children:["The ",(0,r.jsx)(t.strong,{children:"Batch Run"})," component runs a language model over ",(0,r.jsx)(t.em,{children:"each row of one text column"})," in a ",(0,r.jsx)(t.a,{href:"/data-types#dataframe",children:(0,r.jsx)(t.code,{children:"DataFrame"})}),", and then returns a new ",(0,r.jsx)(t.code,{children:"DataFrame"})," with the original text and an LLM response.\nThe output contains the following columns:"]}),"\n",(0,r.jsxs)(t.ul,{children:["\n",(0,r.jsxs)(t.li,{children:[(0,r.jsx)(t.code,{children:"text_input"}),": The original text from the input ",(0,r.jsx)(t.code,{children:"DataFrame"})]}),"\n",(0,r.jsxs)(t.li,{children:[(0,r.jsx)(t.code,{children:"model_response"}),": The model's response for each input"]}),"\n",(0,r.jsxs)(t.li,{children:[(0,r.jsx)(t.code,{children:"batch_index"}),": The 0-indexed processing order for all rows in the ",(0,r.jsx)(t.code,{children:"DataFrame"})]}),"\n",(0,r.jsxs)(t.li,{children:[(0,r.jsx)(t.code,{children:"metadata"})," (optional): Additional information about the processing"]}),"\n"]}),"\n",(0,r.jsx)(t.h3,{id:"use-the-batch-run-component-in-a-flow",children:"Use the Batch Run component in a flow"}),"\n",(0,r.jsxs)(t.p,{children:["If you pass the ",(0,r.jsx)(t.strong,{children:"Batch Run"})," output to a ",(0,r.jsxs)(t.a,{href:"/components-processing#parser",children:[(0,r.jsx)(t.strong,{children:"Parser"})," component"]}),", you can use variables in the parsing template to reference these keys, such as ",(0,r.jsx)(t.code,{children:"{text_input}"})," and ",(0,r.jsx)(t.code,{children:"{model_response}"}),".\nThis is demonstrated in the following example."]}),"\n",(0,r.jsx)(t.p,{children:(0,r.jsx)(t.img,{alt:"A batch run component connected to OpenAI and a Parser",src:n(88103).A+"",width:"4000",height:"2728"})}),"\n",(0,r.jsxs)(t.ol,{children:["\n",(0,r.jsxs)(t.li,{children:["\n",(0,r.jsxs)(t.p,{children:["Connect any language model component to a ",(0,r.jsx)(t.strong,{children:"Batch Run"})," component's ",(0,r.jsx)(t.strong,{children:"Language model"})," port."]}),"\n"]}),"\n",(0,r.jsxs)(t.li,{children:["\n",(0,r.jsxs)(t.p,{children:["Connect ",(0,r.jsx)(t.code,{children:"DataFrame"})," output from another component to the ",(0,r.jsx)(t.strong,{children:"Batch Run"})," component's ",(0,r.jsx)(t.strong,{children:"DataFrame"})," input.\nFor example, you could connect a ",(0,r.jsx)(t.strong,{children:"File"})," component with a CSV file."]}),"\n"]}),"\n",(0,r.jsxs)(t.li,{children:["\n",(0,r.jsxs)(t.p,{children:["In the ",(0,r.jsx)(t.strong,{children:"Batch Run"})," component's ",(0,r.jsx)(t.strong,{children:"Column Name"})," field, enter the name of the column in the incoming ",(0,r.jsx)(t.code,{children:"DataFrame"})," that contains the text to process.\nFor example, if you want to extract text from a ",(0,r.jsx)(t.code,{children:"name"})," column in a CSV file, enter ",(0,r.jsx)(t.code,{children:"name"})," in the ",(0,r.jsx)(t.strong,{children:"Column Name"})," field."]}),"\n"]}),"\n",(0,r.jsxs)(t.li,{children:["\n",(0,r.jsxs)(t.p,{children:["Connect the ",(0,r.jsx)(t.strong,{children:"Batch Run"})," component's ",(0,r.jsx)(t.strong,{children:"Batch Results"})," output to a ",(0,r.jsx)(t.strong,{children:"Parser"})," component's ",(0,r.jsx)(t.strong,{children:"DataFrame"})," input."]}),"\n"]}),"\n",(0,r.jsxs)(t.li,{children:["\n",(0,r.jsxs)(t.p,{children:["Optional: In the ",(0,r.jsx)(t.strong,{children:"Batch Run"})," ",(0,r.jsx)(t.a,{href:"/concepts-components#component-menus",children:"component's header menu"}),", click ",(0,r.jsx)(i.A,{name:"SlidersHorizontal","aria-hidden":"true"})," ",(0,r.jsx)(t.strong,{children:"Controls"}),", enable the ",(0,r.jsx)(t.strong,{children:"System Message"})," parameter, click ",(0,r.jsx)(t.strong,{children:"Close"}),", and then enter an instruction for how you want the LLM to process each cell extracted from the file.\nFor example, ",(0,r.jsx)(t.code,{children:"Create a business card for each name."})]}),"\n"]}),"\n",(0,r.jsxs)(t.li,{children:["\n",(0,r.jsxs)(t.p,{children:["In the ",(0,r.jsx)(t.strong,{children:"Parser"})," component's ",(0,r.jsx)(t.strong,{children:"Template"})," field, enter a template for processing the ",(0,r.jsx)(t.strong,{children:"Batch Run"})," component's new ",(0,r.jsx)(t.code,{children:"DataFrame"})," columns (",(0,r.jsx)(t.code,{children:"text_input"}),", ",(0,r.jsx)(t.code,{children:"model_response"}),", and ",(0,r.jsx)(t.code,{children:"batch_index"}),"):"]}),"\n",(0,r.jsxs)(t.p,{children:["For example, this template uses three columns from the resulting, post-batch ",(0,r.jsx)(t.code,{children:"DataFrame"}),":"]}),"\n",(0,r.jsx)(j.Code,{codeConfig:g,northPanel:{tabs:[""],active:"",heightRatio:1},files:[{name:"",focus:"",code:{lines:[{tokens:[{content:"record_number: {batch_index}, name: {text_input}, summary: {model_response}",props:{}}]}],lang:"text"},annotations:[]}]}),"\n"]}),"\n",(0,r.jsxs)(t.li,{children:["\n",(0,r.jsxs)(t.p,{children:["To test the processing, click the ",(0,r.jsx)(t.strong,{children:"Parser"})," component, click ",(0,r.jsx)(i.A,{name:"Play","aria-hidden":"true"})," ",(0,r.jsx)(t.strong,{children:"Run component"}),", and then click ",(0,r.jsx)(i.A,{name:"TextSearch","aria-hidden":"true"})," ",(0,r.jsx)(t.strong,{children:"Inspect output"})," to view the final ",(0,r.jsx)(t.code,{children:"DataFrame"}),"."]}),"\n",(0,r.jsxs)(t.p,{children:["You can also connect a ",(0,r.jsx)(t.strong,{children:"Chat Output"})," component to the ",(0,r.jsx)(t.strong,{children:"Parser"})," component if you want to see the output in the ",(0,r.jsx)(t.strong,{children:"Playground"}),"."]}),"\n"]}),"\n"]}),"\n",(0,r.jsx)(t.h3,{id:"batch-run-parameters",children:"Batch Run parameters"}),"\n",(0,r.jsx)(d.Ay,{}),"\n",(0,r.jsxs)(t.table,{children:[(0,r.jsx)(t.thead,{children:(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.th,{children:"Name"}),(0,r.jsx)(t.th,{children:"Type"}),(0,r.jsx)(t.th,{children:"Description"})]})}),(0,r.jsxs)(t.tbody,{children:[(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"model"}),(0,r.jsx)(t.td,{children:"HandleInput"}),(0,r.jsx)(t.td,{children:"Input parameter. Connect the 'Language Model' output from a language model component. Required."})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"system_message"}),(0,r.jsx)(t.td,{children:"MultilineInput"}),(0,r.jsx)(t.td,{children:"Input parameter. A multi-line system instruction for all rows in the DataFrame."})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"df"}),(0,r.jsx)(t.td,{children:"DataFrameInput"}),(0,r.jsx)(t.td,{children:"Input parameter. The DataFrame whose column is treated as text messages, as specified by 'column_name'. Required."})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"column_name"}),(0,r.jsx)(t.td,{children:"MessageTextInput"}),(0,r.jsx)(t.td,{children:"Input parameter. The name of the DataFrame column to treat as text messages. If empty, all columns are formatted in TOML."})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"output_column_name"}),(0,r.jsx)(t.td,{children:"MessageTextInput"}),(0,r.jsxs)(t.td,{children:["Input parameter. Name of the column where the model's response is stored. Default=",(0,r.jsx)(t.code,{children:"model_response"}),"."]})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"enable_metadata"}),(0,r.jsx)(t.td,{children:"BoolInput"}),(0,r.jsxs)(t.td,{children:["Input parameter. If ",(0,r.jsx)(t.code,{children:"True"}),", add metadata to the output DataFrame."]})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"batch_results"}),(0,r.jsx)(t.td,{children:"DataFrame"}),(0,r.jsx)(t.td,{children:"Output parameter. A DataFrame with all original columns plus the model's response column."})]})]})]}),"\n",(0,r.jsx)(t.h2,{id:"data-operations",children:"Data Operations"}),"\n",(0,r.jsxs)(t.p,{children:["The ",(0,r.jsx)(t.strong,{children:"Data Operations"})," component performs operations on ",(0,r.jsx)(t.a,{href:"/data-types#data",children:(0,r.jsx)(t.code,{children:"Data"})})," objects, including extracting, filtering, and editing keys and values in the ",(0,r.jsx)(t.code,{children:"Data"}),".\nFor all options, see ",(0,r.jsx)(t.a,{href:"#available-data-operations",children:"Available data operations"}),".\nThe output is a new ",(0,r.jsx)(t.code,{children:"Data"})," object containing the modified data after running the selected operation."]}),"\n",(0,r.jsx)(t.h3,{id:"use-the-data-operations-component-in-a-flow",children:"Use the Data Operations component in a flow"}),"\n",(0,r.jsxs)(t.p,{children:["The following example demonstrates how to use a ",(0,r.jsx)(t.strong,{children:"Data Operations"})," component in a flow using data from a webhook payload:"]}),"\n",(0,r.jsxs)(t.ol,{children:["\n",(0,r.jsxs)(t.li,{children:["\n",(0,r.jsxs)(t.p,{children:["Create a flow with a ",(0,r.jsx)(t.strong,{children:"Webhook"})," component and a ",(0,r.jsx)(t.strong,{children:"Data Operations"})," component, and then connect the ",(0,r.jsx)(t.strong,{children:"Webhook"})," component's output to the ",(0,r.jsx)(t.strong,{children:"Data Operations"})," component's ",(0,r.jsx)(t.strong,{children:"Data"})," input."]}),"\n",(0,r.jsxs)(t.p,{children:["All operations in the ",(0,r.jsx)(t.strong,{children:"Data Operations"})," component require at least one ",(0,r.jsx)(t.code,{children:"Data"})," input from another component.\nIf the preceding component doesn't produce ",(0,r.jsx)(t.code,{children:"Data"})," output, you can use another component, such as the ",(0,r.jsx)(t.strong,{children:"Type Convert"})," component, to reformat the data before passing it to the ",(0,r.jsx)(t.strong,{children:"Data Operations"})," component.\nAlternatively, you could consider using a component that is designed to process the original data type, such as the ",(0,r.jsx)(t.strong,{children:"Parser"})," or ",(0,r.jsx)(t.strong,{children:"DataFrame Operations"})," components."]}),"\n"]}),"\n",(0,r.jsxs)(t.li,{children:["\n",(0,r.jsxs)(t.p,{children:["In the ",(0,r.jsx)(t.strong,{children:"Operations"})," field, select the operation you want to perform on the incoming ",(0,r.jsx)(t.code,{children:"Data"}),".\nFor this example, select the ",(0,r.jsx)(t.strong,{children:"Select Keys"})," operation."]}),"\n",(0,r.jsx)(t.admonition,{type:"tip",children:(0,r.jsxs)(t.p,{children:["You can select only one operation.\nIf you need to perform multiple operations on the data, you can chain multiple ",(0,r.jsx)(t.strong,{children:"Data Operations"})," components together to execute each operation in sequence.\nFor more complex multi-step operations, consider using a component like the ",(0,r.jsx)(t.strong,{children:"Smart Function"})," component."]})}),"\n"]}),"\n",(0,r.jsxs)(t.li,{children:["\n",(0,r.jsxs)(t.p,{children:["Under ",(0,r.jsx)(t.strong,{children:"Select Keys"}),", add keys for ",(0,r.jsx)(t.code,{children:"name"}),", ",(0,r.jsx)(t.code,{children:"username"}),", and ",(0,r.jsx)(t.code,{children:"email"}),".\nClick ",(0,r.jsx)(i.A,{name:"Plus","aria-hidden":"true"})," ",(0,r.jsx)(t.strong,{children:"Add more"})," to add a field for each key."]}),"\n",(0,r.jsxs)(t.p,{children:["For this example, assume that the webhook will receive consistent payloads that always contain ",(0,r.jsx)(t.code,{children:"name"}),", ",(0,r.jsx)(t.code,{children:"username"}),", and ",(0,r.jsx)(t.code,{children:"email"})," keys.\nThe ",(0,r.jsx)(t.strong,{children:"Select Keys"})," operation extracts the value of these keys from each incoming payload."]}),"\n"]}),"\n",(0,r.jsxs)(t.li,{children:["\n",(0,r.jsxs)(t.p,{children:["Optional: If you want to view the output in the ",(0,r.jsx)(t.strong,{children:"Playground"}),", connect the ",(0,r.jsx)(t.strong,{children:"Data Operations"})," component's output to a ",(0,r.jsx)(t.strong,{children:"Chat Output"})," component."]}),"\n",(0,r.jsx)(t.p,{children:(0,r.jsx)(t.img,{alt:"A flow with Webhook, Data Operations, and Chat Output components",src:n(46445).A+"",width:"4000",height:"1920"})}),"\n"]}),"\n",(0,r.jsxs)(t.li,{children:["\n",(0,r.jsxs)(t.p,{children:["To test the flow, send the following request to your flow's webhook endpoint.\nFor more information about the webhook endpoint, see ",(0,r.jsx)(t.a,{href:"/webhook",children:"Trigger flows with webhooks"}),"."]}),"\n",(0,r.jsx)(j.Code,{codeConfig:g,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_URL",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:"#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:' "id": 1,',props:{style:{color:"#A5D6FF"}}}]},{tokens:[{content:' "name": "Leanne Graham",',props:{style:{color:"#A5D6FF"}}}]},{tokens:[{content:' "username": "Bret",',props:{style:{color:"#A5D6FF"}}}]},{tokens:[{content:' "email": "Sincere@april.biz",',props:{style:{color:"#A5D6FF"}}}]},{tokens:[{content:' "address": {',props:{style:{color:"#A5D6FF"}}}]},{tokens:[{content:' "street": "Main Street",',props:{style:{color:"#A5D6FF"}}}]},{tokens:[{content:' "suite": "Apt. 556",',props:{style:{color:"#A5D6FF"}}}]},{tokens:[{content:' "city": "Springfield",',props:{style:{color:"#A5D6FF"}}}]},{tokens:[{content:' "zipcode": "92998-3874",',props:{style:{color:"#A5D6FF"}}}]},{tokens:[{content:' "geo": {',props:{style:{color:"#A5D6FF"}}}]},{tokens:[{content:' "lat": "-37.3159",',props:{style:{color:"#A5D6FF"}}}]},{tokens:[{content:' "lng": "81.1496"',props:{style:{color:"#A5D6FF"}}}]},{tokens:[{content:" }",props:{style:{color:"#A5D6FF"}}}]},{tokens:[{content:" },",props:{style:{color:"#A5D6FF"}}}]},{tokens:[{content:' "phone": "1-770-736-8031 x56442",',props:{style:{color:"#A5D6FF"}}}]},{tokens:[{content:' "website": "hildegard.org",',props:{style:{color:"#A5D6FF"}}}]},{tokens:[{content:' "company": {',props:{style:{color:"#A5D6FF"}}}]},{tokens:[{content:' "name": "Acme-Corp",',props:{style:{color:"#A5D6FF"}}}]},{tokens:[{content:' "catchPhrase": "Multi-layered client-server neural-net",',props:{style:{color:"#A5D6FF"}}}]},{tokens:[{content:' "bs": "harness real-time e-markets"',props:{style:{color:"#A5D6FF"}}}]},{tokens:[{content:" }",props:{style:{color:"#A5D6FF"}}}]},{tokens:[{content:"}'",props:{style:{color:"#A5D6FF"}}}]}],lang:"bash"},annotations:[]}]}),"\n"]}),"\n",(0,r.jsxs)(t.li,{children:["\n",(0,r.jsxs)(t.p,{children:["To view the ",(0,r.jsx)(t.code,{children:"Data"})," resulting from the ",(0,r.jsx)(t.strong,{children:"Select Keys"})," operation, do one of the following:"]}),"\n",(0,r.jsxs)(t.ul,{children:["\n",(0,r.jsxs)(t.li,{children:["If you attached a ",(0,r.jsx)(t.strong,{children:"Chat Output"})," component, open the ",(0,r.jsx)(t.strong,{children:"Playground"})," to see the result as a chat message."]}),"\n",(0,r.jsxs)(t.li,{children:["Click ",(0,r.jsx)(i.A,{name:"TextSearch","aria-hidden":"true"})," ",(0,r.jsx)(t.strong,{children:"Inspect output"})," on the ",(0,r.jsx)(t.strong,{children:"Data Operations"})," component."]}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,r.jsx)(t.h3,{id:"data-operations-parameters",children:"Data Operations parameters"}),"\n",(0,r.jsxs)(t.p,{children:["Many parameters are conditional based on the selected ",(0,r.jsx)(t.strong,{children:"Operation"})," (",(0,r.jsx)(t.code,{children:"operation"}),")."]}),"\n",(0,r.jsxs)(t.table,{children:[(0,r.jsx)(t.thead,{children:(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.th,{children:"Name"}),(0,r.jsx)(t.th,{children:"Display Name"}),(0,r.jsx)(t.th,{children:"Info"})]})}),(0,r.jsxs)(t.tbody,{children:[(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"data"}),(0,r.jsx)(t.td,{children:"Data"}),(0,r.jsxs)(t.td,{children:["Input parameter. The ",(0,r.jsx)(t.code,{children:"Data"})," object to operate on."]})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"operation"}),(0,r.jsx)(t.td,{children:"Operation"}),(0,r.jsxs)(t.td,{children:["Input parameter. The operation to perform on the data. See ",(0,r.jsx)(t.a,{href:"#available-data-operations",children:"Available data operations"})]})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"select_keys_input"}),(0,r.jsx)(t.td,{children:"Select Keys"}),(0,r.jsx)(t.td,{children:"Input parameter. A list of keys to select from the data."})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"filter_key"}),(0,r.jsx)(t.td,{children:"Filter Key"}),(0,r.jsx)(t.td,{children:"Input parameter. The key to filter by."})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"operator"}),(0,r.jsx)(t.td,{children:"Comparison Operator"}),(0,r.jsx)(t.td,{children:"Input parameter. The operator to apply for comparing values."})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"filter_values"}),(0,r.jsx)(t.td,{children:"Filter Values"}),(0,r.jsx)(t.td,{children:"Input parameter. A list of values to filter by."})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"append_update_data"}),(0,r.jsx)(t.td,{children:"Append or Update"}),(0,r.jsx)(t.td,{children:"Input parameter. The data to append or update the existing data with."})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"remove_keys_input"}),(0,r.jsx)(t.td,{children:"Remove Keys"}),(0,r.jsx)(t.td,{children:"Input parameter. A list of keys to remove from the data."})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"rename_keys_input"}),(0,r.jsx)(t.td,{children:"Rename Keys"}),(0,r.jsx)(t.td,{children:"Input parameter. A list of keys to rename in the data."})]})]})]}),"\n",(0,r.jsx)(t.h4,{id:"available-data-operations",children:"Available data operations"}),"\n",(0,r.jsxs)(t.p,{children:["Options for the ",(0,r.jsx)(t.code,{children:"operations"})," input parameter are as follows.\nAll operations act on an incoming ",(0,r.jsx)(t.code,{children:"Data"})," object."]}),"\n",(0,r.jsxs)(t.table,{children:[(0,r.jsx)(t.thead,{children:(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.th,{children:"Name"}),(0,r.jsx)(t.th,{children:"Required Inputs"}),(0,r.jsx)(t.th,{children:"Process"})]})}),(0,r.jsxs)(t.tbody,{children:[(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"Select Keys"}),(0,r.jsx)(t.td,{children:(0,r.jsx)(t.code,{children:"select_keys_input"})}),(0,r.jsx)(t.td,{children:"Selects specific keys from the data."})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"Literal Eval"}),(0,r.jsx)(t.td,{children:"None"}),(0,r.jsx)(t.td,{children:"Evaluates string values as Python literals."})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"Combine"}),(0,r.jsx)(t.td,{children:"None"}),(0,r.jsx)(t.td,{children:"Combines multiple data objects into one."})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"Filter Values"}),(0,r.jsxs)(t.td,{children:[(0,r.jsx)(t.code,{children:"filter_key"}),", ",(0,r.jsx)(t.code,{children:"filter_values"}),", ",(0,r.jsx)(t.code,{children:"operator"})]}),(0,r.jsx)(t.td,{children:"Filters data based on key-value pair."})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"Append or Update"}),(0,r.jsx)(t.td,{children:(0,r.jsx)(t.code,{children:"append_update_data"})}),(0,r.jsx)(t.td,{children:"Adds or updates key-value pairs."})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"Remove Keys"}),(0,r.jsx)(t.td,{children:(0,r.jsx)(t.code,{children:"remove_keys_input"})}),(0,r.jsx)(t.td,{children:"Removes specified keys from the data."})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"Rename Keys"}),(0,r.jsx)(t.td,{children:(0,r.jsx)(t.code,{children:"rename_keys_input"})}),(0,r.jsx)(t.td,{children:"Renames keys in the data."})]})]})]}),"\n",(0,r.jsx)(t.h2,{id:"dataframe-operations",children:"DataFrame Operations"}),"\n",(0,r.jsxs)(t.p,{children:["The ",(0,r.jsx)(t.strong,{children:"DataFrame Operations"})," component performs operations on ",(0,r.jsx)(t.a,{href:"/data-types#dataframe",children:(0,r.jsx)(t.code,{children:"DataFrame"})})," (table) rows and columns, including schema changes, record changes, sorting, and filtering.\nFor all options, see ",(0,r.jsx)(t.a,{href:"#dataframe-operations-parameters",children:"DataFrame Operations parameters"}),"."]}),"\n",(0,r.jsxs)(t.p,{children:["The output is a new ",(0,r.jsx)(t.code,{children:"DataFrame"})," containing the modified data after running the selected operation."]}),"\n",(0,r.jsx)(t.h3,{id:"use-the-dataframe-operations-component-in-a-flow",children:"Use the DataFrame Operations component in a flow"}),"\n",(0,r.jsxs)(t.p,{children:["The following steps explain how to configure a ",(0,r.jsx)(t.strong,{children:"DataFrame Operations"})," component in a flow.\nYou can follow along with an example or use your own flow.\nThe only requirement is that the preceding component must create ",(0,r.jsx)(t.code,{children:"DataFrame"})," output that you can pass to the ",(0,r.jsx)(t.strong,{children:"DataFrame Operations"})," component."]}),"\n",(0,r.jsxs)(t.ol,{children:["\n",(0,r.jsxs)(t.li,{children:["\n",(0,r.jsx)(t.p,{children:"Create a new flow or use an existing flow."}),"\n",(0,r.jsxs)(s,{children:[(0,r.jsx)("summary",{children:"Example: API response extraction flow"}),(0,r.jsxs)(t.p,{children:["The following example flow uses five components to extract ",(0,r.jsx)(t.code,{children:"Data"})," from an API response, transform it to a ",(0,r.jsx)(t.code,{children:"DataFrame"}),", and then perform further processing on the tabular data using a ",(0,r.jsx)(t.strong,{children:"DataFrame Operations"})," component.\nThe sixth component, ",(0,r.jsx)(t.strong,{children:"Chat Output"}),", is optional in this example.\nIt only serves as a convenient way for you to view the final output in the ",(0,r.jsx)(t.strong,{children:"Playground"}),", rather than inspecting the component logs."]}),(0,r.jsx)(t.p,{children:(0,r.jsx)(t.img,{alt:"A flow that ingests an API response, extracts it to a DataFrame with a Smart Function component, and the processes it through a DataFrame Operations component",src:n(13533).A+"",width:"4000",height:"2120"})}),(0,r.jsxs)(t.p,{children:["If you want to use this example to test the ",(0,r.jsx)(t.strong,{children:"DataFrame Operations"})," component, do the following:"]}),(0,r.jsxs)(t.ol,{children:["\n",(0,r.jsxs)(t.li,{children:["\n",(0,r.jsx)(t.p,{children:"Create a flow with the following components:"}),"\n",(0,r.jsxs)(t.ul,{children:["\n",(0,r.jsx)(t.li,{children:(0,r.jsx)(t.strong,{children:"API Request"})}),"\n",(0,r.jsx)(t.li,{children:(0,r.jsx)(t.strong,{children:"Language Model"})}),"\n",(0,r.jsx)(t.li,{children:(0,r.jsx)(t.strong,{children:"Smart Function"})}),"\n",(0,r.jsx)(t.li,{children:(0,r.jsx)(t.strong,{children:"Type Convert"})}),"\n"]}),"\n"]}),"\n",(0,r.jsxs)(t.li,{children:["\n",(0,r.jsxs)(t.p,{children:["Configure the ",(0,r.jsxs)(t.a,{href:"#smart-transform",children:[(0,r.jsx)(t.strong,{children:"Smart Function"})," component"]})," and its dependencies:"]}),"\n",(0,r.jsxs)(t.ul,{children:["\n",(0,r.jsxs)(t.li,{children:[(0,r.jsx)(t.strong,{children:"API Request"}),": Configure the ",(0,r.jsxs)(t.a,{href:"/components-data#api-request",children:[(0,r.jsx)(t.strong,{children:"API Request"})," component"]})," to get JSON data from an endpoint of your choice, and then connect the ",(0,r.jsx)(t.strong,{children:"API Response"})," output to the ",(0,r.jsx)(t.strong,{children:"Smart Function"})," component's ",(0,r.jsx)(t.strong,{children:"Data"})," input."]}),"\n",(0,r.jsxs)(t.li,{children:[(0,r.jsx)(t.strong,{children:"Language Model"}),": Select your preferred provider and model, and then enter a valid API key.\nChange the output to ",(0,r.jsx)(t.strong,{children:"Language Model"}),", and then connect the ",(0,r.jsx)(t.code,{children:"LanguageModel"})," output to the ",(0,r.jsx)(t.strong,{children:"Smart Function"})," component's ",(0,r.jsx)(t.strong,{children:"Language Model"})," input."]}),"\n",(0,r.jsxs)(t.li,{children:[(0,r.jsx)(t.strong,{children:"Smart Function"}),": In the ",(0,r.jsx)(t.strong,{children:"Instructions"})," field, enter natural language instructions to extract data from the API response.\nYour instructions depend on the response content and desired outcome.\nFor example, if the response contains a large ",(0,r.jsx)(t.code,{children:"result"})," field, you might provide instructions like ",(0,r.jsx)(t.code,{children:"explode the result field out into a Data object"}),"."]}),"\n"]}),"\n"]}),"\n",(0,r.jsxs)(t.li,{children:["\n",(0,r.jsxs)(t.p,{children:["Convert the ",(0,r.jsx)(t.strong,{children:"Smart Function"})," component's ",(0,r.jsx)(t.code,{children:"Data"})," output to ",(0,r.jsx)(t.code,{children:"DataFrame"}),":"]}),"\n",(0,r.jsxs)(t.ol,{children:["\n",(0,r.jsxs)(t.li,{children:["Connect the ",(0,r.jsx)(t.strong,{children:"Filtered Data"})," output to the ",(0,r.jsx)(t.strong,{children:"Type Convert"})," component's ",(0,r.jsx)(t.strong,{children:"Data"})," input."]}),"\n",(0,r.jsxs)(t.li,{children:["Set the ",(0,r.jsx)(t.strong,{children:"Type Convert"})," component's ",(0,r.jsx)(t.strong,{children:"Output Type"})," to ",(0,r.jsx)(t.strong,{children:"DataFrame"}),"."]}),"\n"]}),"\n"]}),"\n"]}),(0,r.jsxs)(t.p,{children:["Now the flow is ready for you to add the ",(0,r.jsx)(t.strong,{children:"DataFrame Operations"})," component."]})]}),"\n"]}),"\n",(0,r.jsxs)(t.li,{children:["\n",(0,r.jsxs)(t.p,{children:["Add a ",(0,r.jsx)(t.strong,{children:"DataFrame Operations"})," component to the flow, and then connect ",(0,r.jsx)(t.code,{children:"DataFrame"})," output from another component to the ",(0,r.jsx)(t.strong,{children:"DataFrame"})," input."]}),"\n",(0,r.jsxs)(t.p,{children:["All operations in the ",(0,r.jsx)(t.strong,{children:"DataFrame Operations"})," component require at least one ",(0,r.jsx)(t.code,{children:"DataFrame"})," input from another component.\nIf a component doesn't produce ",(0,r.jsx)(t.code,{children:"DataFrame"})," output, you can use another component, such as the ",(0,r.jsx)(t.strong,{children:"Type Convert"})," component, to reformat the data before passing it to the ",(0,r.jsx)(t.strong,{children:"DataFrame Operations"})," component.\nAlternatively, you could consider using a component that is designed to process the original data type, such as the ",(0,r.jsx)(t.strong,{children:"Parser"})," or ",(0,r.jsx)(t.strong,{children:"Data Operations"})," components."]}),"\n",(0,r.jsxs)(t.p,{children:["If you are following along with the example flow, connect the ",(0,r.jsx)(t.strong,{children:"Type Convert"})," component's ",(0,r.jsx)(t.strong,{children:"DataFrame Output"})," port to the ",(0,r.jsx)(t.strong,{children:"DataFrame"})," input."]}),"\n"]}),"\n",(0,r.jsxs)(t.li,{children:["\n",(0,r.jsxs)(t.p,{children:["In the ",(0,r.jsx)(t.strong,{children:"Operations"})," field, select the operation you want to perform on the incoming ",(0,r.jsx)(t.code,{children:"DataFrame"}),".\nFor example, the ",(0,r.jsx)(t.strong,{children:"Filter"})," operation filters the rows based on a specified column and value."]}),"\n",(0,r.jsx)(t.admonition,{type:"tip",children:(0,r.jsxs)(t.p,{children:["You can select only one operation.\nIf you need to perform multiple operations on the data, you can chain multiple ",(0,r.jsx)(t.strong,{children:"DataFrame Operations"})," components together to execute each operation in sequence.\nFor more complex multi-step operations, like dramatic schema changes or pivots, consider using an LLM-powered component, like the ",(0,r.jsx)(t.strong,{children:"Structured Output"})," or ",(0,r.jsx)(t.strong,{children:"Smart Function"})," component, as a replacement or preparation for the ",(0,r.jsx)(t.strong,{children:"DataFrame Operations"})," component."]})}),"\n",(0,r.jsxs)(t.p,{children:["If you're following along with the example flow, select any operation that you want to apply to the data that was extracted by the ",(0,r.jsx)(t.strong,{children:"Smart Function"})," component.\nTo view the contents of the incoming ",(0,r.jsx)(t.code,{children:"DataFrame"}),", click ",(0,r.jsx)(i.A,{name:"Play","aria-hidden":"true"})," ",(0,r.jsx)(t.strong,{children:"Run component"})," on the ",(0,r.jsx)(t.strong,{children:"Type Convert"})," component, and then ",(0,r.jsx)(i.A,{name:"TextSearch","aria-hidden":"true"})," ",(0,r.jsx)(t.strong,{children:"Inspect output"}),".\nIf the ",(0,r.jsx)(t.code,{children:"DataFrame"})," seems malformed, click ",(0,r.jsx)(i.A,{name:"TextSearch","aria-hidden":"true"})," ",(0,r.jsx)(t.strong,{children:"Inspect output"})," on each upstream component to determine where the error occurs, and then modify your flow's configuration as needed.\nFor example, if the ",(0,r.jsx)(t.strong,{children:"Smart Function"})," component didn't extract the expected fields, modify your instructions or verify that the given fields are present in the ",(0,r.jsx)(t.strong,{children:"API Response"})," output."]}),"\n"]}),"\n",(0,r.jsxs)(t.li,{children:["\n",(0,r.jsxs)(t.p,{children:["Configure the operation's parameters.\nThe specific parameters depend on the selected operation.\nFor example, if you select the ",(0,r.jsx)(t.strong,{children:"Filter"})," operation, you must define a filter condition using the ",(0,r.jsx)(t.strong,{children:"Column Name"}),", ",(0,r.jsx)(t.strong,{children:"Filter Value"}),", and ",(0,r.jsx)(t.strong,{children:"Filter Operator"})," parameters.\nFor more information, see ",(0,r.jsx)(t.a,{href:"#dataframe-operations-parameters",children:"DataFrame Operations parameters"})]}),"\n"]}),"\n",(0,r.jsxs)(t.li,{children:["\n",(0,r.jsxs)(t.p,{children:["To test the flow, click ",(0,r.jsx)(i.A,{name:"Play","aria-hidden":"true"})," ",(0,r.jsx)(t.strong,{children:"Run component"})," on the ",(0,r.jsx)(t.strong,{children:"DataFrame Operations"})," component, and then click ",(0,r.jsx)(i.A,{name:"TextSearch","aria-hidden":"true"})," ",(0,r.jsx)(t.strong,{children:"Inspect output"})," to view the new ",(0,r.jsx)(t.code,{children:"DataFrame"})," created from the ",(0,r.jsx)(t.strong,{children:"Filter"})," operation."]}),"\n",(0,r.jsxs)(t.p,{children:["If you want to view the output in the ",(0,r.jsx)(t.strong,{children:"Playground"}),", connect the ",(0,r.jsx)(t.strong,{children:"DataFrame Operations"})," component's output to a ",(0,r.jsx)(t.strong,{children:"Chat Output"})," component, rerun the ",(0,r.jsx)(t.strong,{children:"DataFrame Operations"})," component, and then click ",(0,r.jsx)(t.strong,{children:"Playground"}),"."]}),"\n"]}),"\n"]}),"\n",(0,r.jsxs)(t.p,{children:["For another example, see ",(0,r.jsx)(t.a,{href:"/components-logic#conditional-looping",children:"Conditional looping"}),"."]}),"\n",(0,r.jsx)(t.h3,{id:"dataframe-operations-parameters",children:"DataFrame Operations parameters"}),"\n",(0,r.jsxs)(t.p,{children:["Most ",(0,r.jsx)(t.strong,{children:"DataFrame Operations"})," parameters are conditional because they only apply to specific operations."]}),"\n",(0,r.jsxs)(t.p,{children:["The only permanent parameters are ",(0,r.jsx)(t.strong,{children:"DataFrame"})," (",(0,r.jsx)(t.code,{children:"df"}),"), which is the ",(0,r.jsx)(t.code,{children:"DataFrame"})," input, and ",(0,r.jsx)(t.strong,{children:"Operation"})," (",(0,r.jsx)(t.code,{children:"operation"}),"), which is the operation to perform on the ",(0,r.jsx)(t.code,{children:"DataFrame"}),".\nOnce you select an operation, the conditional parameters for that operation appear on the ",(0,r.jsx)(t.strong,{children:"DataFrame Operations"})," component."]}),"\n",(0,r.jsxs)(c.A,{children:[(0,r.jsxs)(l.A,{value:"addcolumn",label:"Add Column",default:!0,children:[(0,r.jsxs)(t.p,{children:["The ",(0,r.jsx)(t.strong,{children:"Add Column"})," operation allows you to add a new column to the ",(0,r.jsx)(t.code,{children:"DataFrame"})," with a constant value."]}),(0,r.jsxs)(t.p,{children:["The parameters are ",(0,r.jsx)(t.strong,{children:"New Column Name"})," (",(0,r.jsx)(t.code,{children:"new_column_name"}),") and ",(0,r.jsx)(t.strong,{children:"New Column Value"})," (",(0,r.jsx)(t.code,{children:"new_column_value"}),")."]})]}),(0,r.jsx)(l.A,{value:"dropcolumn",label:"Drop Column",children:(0,r.jsxs)(t.p,{children:["The ",(0,r.jsx)(t.strong,{children:"Drop Column"})," operation allows you to remove a column from the ",(0,r.jsx)(t.code,{children:"DataFrame"}),", specified by ",(0,r.jsx)(t.strong,{children:"Column Name"})," (",(0,r.jsx)(t.code,{children:"column_name"}),")."]})}),(0,r.jsxs)(l.A,{value:"filter",label:"Filter",children:[(0,r.jsxs)(t.p,{children:["The ",(0,r.jsx)(t.strong,{children:"Filter"})," operation allows you to filter the ",(0,r.jsx)(t.code,{children:"DataFrame"})," based on a specified condition.\nThe output is a ",(0,r.jsx)(t.code,{children:"DataFrame"})," containing only the rows that matched the filter condition."]}),(0,r.jsx)(t.p,{children:"Provide the following parameters:"}),(0,r.jsxs)(t.ul,{children:["\n",(0,r.jsxs)(t.li,{children:[(0,r.jsx)(t.strong,{children:"Column Name"})," (",(0,r.jsx)(t.code,{children:"column_name"}),"): The name of the column to filter on."]}),"\n",(0,r.jsxs)(t.li,{children:[(0,r.jsx)(t.strong,{children:"Filter Value"})," (",(0,r.jsx)(t.code,{children:"filter_value"}),"): The value to filter on."]}),"\n",(0,r.jsxs)(t.li,{children:[(0,r.jsx)(t.strong,{children:"Filter Operator"})," (",(0,r.jsx)(t.code,{children:"filter_operator"}),"): The operator to use for filtering, one of ",(0,r.jsx)(t.code,{children:"equals"})," (default), ",(0,r.jsx)(t.code,{children:"not equals"}),", ",(0,r.jsx)(t.code,{children:"contains"}),", ",(0,r.jsx)(t.code,{children:"starts with"}),", ",(0,r.jsx)(t.code,{children:"ends with"}),", ",(0,r.jsx)(t.code,{children:"greater than"}),", or ",(0,r.jsx)(t.code,{children:"less than"}),"."]}),"\n"]})]}),(0,r.jsxs)(l.A,{value:"head",label:"Head",children:[(0,r.jsxs)(t.p,{children:["The ",(0,r.jsx)(t.strong,{children:"Head"})," operation allows you to retrieve the first ",(0,r.jsx)(t.code,{children:"n"})," rows of the ",(0,r.jsx)(t.code,{children:"DataFrame"}),", where ",(0,r.jsx)(t.code,{children:"n"})," is set in ",(0,r.jsx)(t.strong,{children:"Number of Rows"})," (",(0,r.jsx)(t.code,{children:"num_rows"}),").\nThe default is ",(0,r.jsx)(t.code,{children:"5"}),"."]}),(0,r.jsxs)(t.p,{children:["The output is a ",(0,r.jsx)(t.code,{children:"DataFrame"})," containing only the selected rows."]})]}),(0,r.jsxs)(l.A,{value:"renamecolumn",label:"Rename Column",children:[(0,r.jsxs)(t.p,{children:["The ",(0,r.jsx)(t.strong,{children:"Rename Column"})," operation allows you to rename an existing column in the ",(0,r.jsx)(t.code,{children:"DataFrame"}),"."]}),(0,r.jsxs)(t.p,{children:["The parameters are ",(0,r.jsx)(t.strong,{children:"Column Name"})," (",(0,r.jsx)(t.code,{children:"column_name"}),"), which is the current name, and ",(0,r.jsx)(t.strong,{children:"New Column Name"})," (",(0,r.jsx)(t.code,{children:"new_column_name"}),")."]})]}),(0,r.jsxs)(l.A,{value:"replacevalue",label:"Replace Value",children:[(0,r.jsxs)(t.p,{children:["The ",(0,r.jsx)(t.strong,{children:"Replace Value"})," operation allows you to replace values in a specific column of the ",(0,r.jsx)(t.code,{children:"DataFrame"}),".\nThis operation replaces a target value with a new value.\nAll cells matching the target value are replaced with the new value in the new ",(0,r.jsx)(t.code,{children:"DataFrame"})," output."]}),(0,r.jsx)(t.p,{children:"Provide the following parameters:"}),(0,r.jsxs)(t.ul,{children:["\n",(0,r.jsxs)(t.li,{children:[(0,r.jsx)(t.strong,{children:"Column Name"})," (",(0,r.jsx)(t.code,{children:"column_name"}),"): The name of the column to modify."]}),"\n",(0,r.jsxs)(t.li,{children:[(0,r.jsx)(t.strong,{children:"Value to Replace"})," (",(0,r.jsx)(t.code,{children:"replace_value"}),"): The value that you want to replace."]}),"\n",(0,r.jsxs)(t.li,{children:[(0,r.jsx)(t.strong,{children:"Replacement Value"})," (",(0,r.jsx)(t.code,{children:"replacement_value"}),"): The new value to use."]}),"\n"]})]}),(0,r.jsxs)(l.A,{value:"selectcolumns",label:"Select Columns",children:[(0,r.jsxs)(t.p,{children:["The ",(0,r.jsx)(t.strong,{children:"Select Columns"})," operation allows you to select one or more specific columns from the ",(0,r.jsx)(t.code,{children:"DataFrame"}),"."]}),(0,r.jsxs)(t.p,{children:["Provide a list of column names in ",(0,r.jsx)(t.strong,{children:"Columns to Select"})," (",(0,r.jsx)(t.code,{children:"columns_to_select"}),").\nIn the visual editor, click ",(0,r.jsx)(i.A,{name:"Plus","aria-hidden":"true"})," ",(0,r.jsx)(t.strong,{children:"Add More"})," to add multiple fields, and then enter one column name in each field."]}),(0,r.jsxs)(t.p,{children:["The output is a ",(0,r.jsx)(t.code,{children:"DataFrame"})," containing only the specified columns."]})]}),(0,r.jsxs)(l.A,{value:"sort",label:"Sort",children:[(0,r.jsxs)(t.p,{children:["The ",(0,r.jsx)(t.strong,{children:"Sort"})," operation allows you to sort the ",(0,r.jsx)(t.code,{children:"DataFrame"})," on a specific column in ascending or descending order."]}),(0,r.jsx)(t.p,{children:"Provide the following parameters:"}),(0,r.jsxs)(t.ul,{children:["\n",(0,r.jsxs)(t.li,{children:[(0,r.jsx)(t.strong,{children:"Column Name"})," (",(0,r.jsx)(t.code,{children:"column_name"}),"): The name of the column to sort on."]}),"\n",(0,r.jsxs)(t.li,{children:[(0,r.jsx)(t.strong,{children:"Sort Ascending"})," (",(0,r.jsx)(t.code,{children:"ascending"}),"): Whether to sort in ascending or descending order. If enabled (",(0,r.jsx)(t.code,{children:"true"}),"), sorts in ascending order; if disabled (",(0,r.jsx)(t.code,{children:"false"}),"), sorts in descending order. Default: Enabled (",(0,r.jsx)(t.code,{children:"true"}),")"]}),"\n"]})]}),(0,r.jsxs)(l.A,{value:"tail",label:"Tail",children:[(0,r.jsxs)(t.p,{children:["The ",(0,r.jsx)(t.strong,{children:"Tail"})," operation allows you to retrieve the last ",(0,r.jsx)(t.code,{children:"n"})," rows of the ",(0,r.jsx)(t.code,{children:"DataFrame"}),", where ",(0,r.jsx)(t.code,{children:"n"})," is set in ",(0,r.jsx)(t.strong,{children:"Number of Rows"})," (",(0,r.jsx)(t.code,{children:"num_rows"}),").\nThe default is ",(0,r.jsx)(t.code,{children:"5"}),"."]}),(0,r.jsxs)(t.p,{children:["The output is a ",(0,r.jsx)(t.code,{children:"DataFrame"})," containing only the selected rows."]})]}),(0,r.jsxs)(l.A,{value:"dropduplicates",label:"Drop Duplicates",children:[(0,r.jsxs)(t.p,{children:["The ",(0,r.jsx)(t.strong,{children:"Drop Duplicates"})," operation removes rows from the ",(0,r.jsx)(t.code,{children:"DataFrame"})," by identifying all duplicate values within a single column."]}),(0,r.jsxs)(t.p,{children:["The only parameter is the ",(0,r.jsx)(t.strong,{children:"Column Name"})," (",(0,r.jsx)(t.code,{children:"column_name"}),")."]}),(0,r.jsxs)(t.p,{children:["When the flow runs, all rows with duplicate values in the given column are removed.\nThe output is a ",(0,r.jsx)(t.code,{children:"DataFrame"})," containing all columns from the original ",(0,r.jsx)(t.code,{children:"DataFrame"}),", but only rows with non-duplicate values."]})]})]}),"\n",(0,r.jsx)(t.h2,{id:"llm-router",children:"LLM Router"}),"\n",(0,r.jsxs)(t.p,{children:["The ",(0,r.jsx)(t.strong,{children:"LLM Router"})," component routes requests to the most appropriate LLM based on ",(0,r.jsx)(t.a,{href:"https://openrouter.ai/docs/quickstart",children:"OpenRouter"})," model specifications."]}),"\n",(0,r.jsxs)(t.p,{children:["To use the component in a flow, you connect multiple language model components to the ",(0,r.jsx)(t.strong,{children:"LLM Router"})," components.\nOne model is the judge LLM that analyzes input messages to understand the evaluation context, selects the most appropriate model from the other attached LLMs, and then routes the input to the selected model.\nThe selected model processes the input, and then returns the generated response."]}),"\n",(0,r.jsx)(t.p,{children:"The following example flow has three language model components.\nOne is the judge LLM, and the other two are in the LLM pool for request routing.\nThe input and output components create a seamless chat interaction where you send a message and receive a response without any user awareness of the underlying routing."}),"\n",(0,r.jsx)(t.p,{children:(0,r.jsx)(t.img,{alt:"LLM Router component",src:n(9898).A+"",width:"3316",height:"2492"})}),"\n",(0,r.jsx)(t.h3,{id:"llm-router-parameters",children:"LLM Router parameters"}),"\n",(0,r.jsx)(d.Ay,{}),"\n",(0,r.jsxs)(t.table,{children:[(0,r.jsx)(t.thead,{children:(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.th,{children:"Name"}),(0,r.jsx)(t.th,{children:"Display Name"}),(0,r.jsx)(t.th,{children:"Info"})]})}),(0,r.jsxs)(t.tbody,{children:[(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:(0,r.jsx)(t.code,{children:"models"})}),(0,r.jsx)(t.td,{children:(0,r.jsx)(t.strong,{children:"Language Models"})}),(0,r.jsxs)(t.td,{children:["Input parameter. Connect ",(0,r.jsx)(t.a,{href:"/data-types#languagemodel",children:(0,r.jsx)(t.code,{children:"LanguageModel"})})," output from multiple ",(0,r.jsx)(t.a,{href:"/components-models",children:"language model components"})," to create a pool of models. The ",(0,r.jsx)(t.code,{children:"judge_llm"})," selects models from this pool when routing requests. The first model you connect is the default model if there is a problem with model selection or routing."]})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:(0,r.jsx)(t.code,{children:"input_value"})}),(0,r.jsx)(t.td,{children:(0,r.jsx)(t.strong,{children:"Input"})}),(0,r.jsx)(t.td,{children:"Input parameter. The incoming query to be routed to the model selected by the judge LLM."})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:(0,r.jsx)(t.code,{children:"judge_llm"})}),(0,r.jsx)(t.td,{children:(0,r.jsx)(t.strong,{children:"Judge LLM"})}),(0,r.jsxs)(t.td,{children:["Input parameter. Connect ",(0,r.jsx)(t.code,{children:"LanguageModel"})," output from ",(0,r.jsx)(t.em,{children:"one"})," ",(0,r.jsx)(t.strong,{children:"Language Model"})," component to serve as the judge LLM for request routing."]})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:(0,r.jsx)(t.code,{children:"optimization"})}),(0,r.jsx)(t.td,{children:(0,r.jsx)(t.strong,{children:"Optimization"})}),(0,r.jsxs)(t.td,{children:["Input parameter. Set a preferred characteristic for model selection by the judge LLM. The options are ",(0,r.jsx)(t.code,{children:"quality"})," (highest response quality), ",(0,r.jsx)(t.code,{children:"speed"})," (fastest response time), ",(0,r.jsx)(t.code,{children:"cost"})," (most cost-effective model), or ",(0,r.jsx)(t.code,{children:"balanced"})," (equal weight for quality, speed, and cost). Default: ",(0,r.jsx)(t.code,{children:"balanced"})]})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:(0,r.jsx)(t.code,{children:"use_openrouter_specs"})}),(0,r.jsx)(t.td,{children:(0,r.jsx)(t.strong,{children:"Use OpenRouter Specs"})}),(0,r.jsx)(t.td,{children:"Input parameter. Whether to fetch model specifications from the OpenRouter API."})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsxs)(t.td,{children:["If ",(0,r.jsx)(t.code,{children:"false"}),", only the model name is provided to the judge LLM. Default: Enabled (",(0,r.jsx)(t.code,{children:"true"}),")"]}),(0,r.jsx)(t.td,{}),(0,r.jsx)(t.td,{})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:(0,r.jsx)(t.code,{children:"timeout"})}),(0,r.jsx)(t.td,{children:(0,r.jsx)(t.strong,{children:"API Timeout"})}),(0,r.jsxs)(t.td,{children:["Input parameter. Set a timeout duration in seconds for API requests made by the router. Default: ",(0,r.jsx)(t.code,{children:"10"})]})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:(0,r.jsx)(t.code,{children:"fallback_to_first"})}),(0,r.jsx)(t.td,{children:(0,r.jsx)(t.strong,{children:"Fallback to First Model"})}),(0,r.jsxs)(t.td,{children:["Input parameter. Whether to use the first LLM in ",(0,r.jsx)(t.code,{children:"models"})," as a backup if routing fails to reach the selected model. Default: Enabled (",(0,r.jsx)(t.code,{children:"true"}),")"]})]})]})]}),"\n",(0,r.jsx)(t.h3,{id:"llm-router-outputs",children:"LLM Router outputs"}),"\n",(0,r.jsxs)(t.p,{children:["The ",(0,r.jsx)(t.strong,{children:"LLM Router"})," component provides three output options.\nYou can set the desired output type near the component's output port."]}),"\n",(0,r.jsxs)(t.ul,{children:["\n",(0,r.jsxs)(t.li,{children:["\n",(0,r.jsxs)(t.p,{children:[(0,r.jsx)(t.strong,{children:"Output"}),": A ",(0,r.jsx)(t.code,{children:"Message"})," containing the response to the original query as generated by the selected LLM.\nUse this output for regular chat interactions."]}),"\n"]}),"\n",(0,r.jsxs)(t.li,{children:["\n",(0,r.jsxs)(t.p,{children:[(0,r.jsx)(t.strong,{children:"Selected Model Info"}),": A ",(0,r.jsx)(t.code,{children:"Data"})," object containing information about the selected model, such as its name and version."]}),"\n"]}),"\n",(0,r.jsxs)(t.li,{children:["\n",(0,r.jsxs)(t.p,{children:[(0,r.jsx)(t.strong,{children:"Routing Decision"}),": A ",(0,r.jsx)(t.code,{children:"Message"})," containing the judge model's reasoning for selecting a particular model, including input query length and number of models considered.\nFor example:"]}),"\n",(0,r.jsx)(j.Code,{codeConfig:g,northPanel:{tabs:[""],active:"",heightRatio:1},files:[{name:"",focus:"",code:{lines:[{tokens:[{content:"Model Selection Decision:",props:{}}]},{tokens:[{content:"- Selected Model Index: 0",props:{}}]},{tokens:[{content:"- Selected Langflow Model Name: gpt-4o-mini",props:{}}]},{tokens:[{content:"- Selected API Model ID (if resolved): openai/gpt-4o-mini",props:{}}]},{tokens:[{content:"- Optimization Preference: cost",props:{}}]},{tokens:[{content:"- Input Query Length: 27 characters (~5 tokens)",props:{}}]},{tokens:[{content:"- Number of Models Considered: 2",props:{}}]},{tokens:[{content:"- Specifications Source: OpenRouter API",props:{}}]}],lang:"text"},annotations:[]}]}),"\n",(0,r.jsx)(t.p,{children:"This is useful for debugging if you feel the judge model isn't selecting the best model."}),"\n"]}),"\n"]}),"\n",(0,r.jsx)(t.h2,{id:"parser",children:"Parser"}),"\n",(0,r.jsxs)(t.p,{children:["The ",(0,r.jsx)(t.strong,{children:"Parser"})," component extracts text from structured data (",(0,r.jsx)(t.code,{children:"DataFrame"})," or ",(0,r.jsx)(t.code,{children:"Data"}),") using a template or direct stringification.\nThe output is a ",(0,r.jsx)(t.code,{children:"Message"})," containing the parsed text."]}),"\n",(0,r.jsxs)(t.p,{children:["This is a versatile component for data extraction and manipulation in your flows.\nFor examples of ",(0,r.jsx)(t.strong,{children:"Parser"})," components in flows, see the following:"]}),"\n",(0,r.jsxs)(t.ul,{children:["\n",(0,r.jsx)(t.li,{children:(0,r.jsxs)(t.a,{href:"#batch-run",children:[(0,r.jsx)(t.strong,{children:"Batch Run"})," component example"]})}),"\n",(0,r.jsx)(t.li,{children:(0,r.jsxs)(t.a,{href:"#structured-output",children:[(0,r.jsx)(t.strong,{children:"Structured Output"})," component example"]})}),"\n",(0,r.jsxs)(t.li,{children:[(0,r.jsx)(t.strong,{children:"Financial Report Parser"})," template"]}),"\n",(0,r.jsx)(t.li,{children:(0,r.jsx)(t.a,{href:"/webhook",children:"Trigger flows with webhooks"})}),"\n",(0,r.jsx)(t.li,{children:(0,r.jsx)(t.a,{href:"/chat-with-rag",children:"Create a vector RAG chatbot"})}),"\n"]}),"\n",(0,r.jsx)(t.p,{children:(0,r.jsx)(t.img,{alt:"A flow that uses a Parser component to extract text from a Structured Output component.",src:n(96218).A+"",width:"4000",height:"2202"})}),"\n",(0,r.jsx)(t.h3,{id:"parsing-modes",children:"Parsing modes"}),"\n",(0,r.jsxs)(t.p,{children:["The ",(0,r.jsx)(t.strong,{children:"Parser"})," component has two modes: ",(0,r.jsx)(t.strong,{children:"Parser"})," and ",(0,r.jsx)(t.strong,{children:"Stringify"}),"."]}),"\n",(0,r.jsxs)(c.A,{children:[(0,r.jsxs)(l.A,{value:"template",label:"Parser (template) mode",default:!0,children:[(0,r.jsxs)(t.p,{children:["In ",(0,r.jsx)(t.strong,{children:"Parser"})," mode, you create a template for text output that can include literal strings and variables for extracted keys."]}),(0,r.jsxs)(t.p,{children:["Use curly braces to define variables anywhere in the template.\nVariables must match keys in the ",(0,r.jsx)(t.code,{children:"DataFrame"})," or ",(0,r.jsx)(t.code,{children:"Data"})," input, such as column names.\nFor example, ",(0,r.jsx)(t.code,{children:"{name}"})," extracts the value of a ",(0,r.jsx)(t.code,{children:"name"})," key.\nFor more information about the content and structure of ",(0,r.jsx)(t.code,{children:"DataFrame"})," and ",(0,r.jsx)(t.code,{children:"Data"})," objects, see ",(0,r.jsx)(t.a,{href:"/data-types",children:"Langflow data types"}),"."]}),(0,r.jsx)(h.Ay,{}),(0,r.jsxs)(t.p,{children:["When the flow runs, the ",(0,r.jsx)(t.strong,{children:"Parser"})," component iterates over the input, producing a ",(0,r.jsx)(t.code,{children:"Message"})," for each parsed item.\nFor example, parsing a ",(0,r.jsx)(t.code,{children:"DataFrame"})," creates a ",(0,r.jsx)(t.code,{children:"Message"})," for each row, populated with the unique values from that row."]}),(0,r.jsxs)(s,{children:[(0,r.jsx)("summary",{children:"Employee summary template"}),(0,r.jsx)(t.p,{children:"This example template extracts employee data into a natural language summary about an employee's hire date and current role:"}),(0,r.jsx)(j.Code,{codeConfig:g,northPanel:{tabs:[""],active:"",heightRatio:1},files:[{name:"",focus:"",code:{lines:[{tokens:[{content:"{employee_first_name} {employee_last_name} was hired on {start_date}.",props:{}}]},{tokens:[{content:"Their current position is {job_title} ({grade}).",props:{}}]}],lang:"text"},annotations:[]}]}),(0,r.jsxs)(t.p,{children:["The resulting ",(0,r.jsx)(t.code,{children:"Message"})," output replaces the variables with the corresponding extracted values.\nFor example:"]}),(0,r.jsx)(j.Code,{codeConfig:g,northPanel:{tabs:[""],active:"",heightRatio:1},files:[{name:"",focus:"",code:{lines:[{tokens:[{content:"Renlo Kai was hired on 11-July-2017.",props:{}}]},{tokens:[{content:"Their current position is Software Engineer (Principal).",props:{}}]}],lang:"text"},annotations:[]}]})]}),(0,r.jsxs)(s,{children:[(0,r.jsx)("summary",{children:"Employee profile template"}),(0,r.jsx)(t.p,{children:"This example template uses Markdown syntax and extracted employee data to create an employee profile:"}),(0,r.jsx)(j.Code,{codeConfig:g,northPanel:{tabs:[""],active:"",heightRatio:1},files:[{name:"",focus:"",code:{lines:[{tokens:[{content:"# Employee Profile",props:{}}]},{tokens:[{content:"## Personal Information",props:{}}]},{tokens:[{content:"- **Name:** {name}",props:{}}]},{tokens:[{content:"- **ID:** {id}",props:{}}]},{tokens:[{content:"- **Email:** {email}",props:{}}]}],lang:"text"},annotations:[]}]}),(0,r.jsxs)(t.p,{children:["When the flow runs, the ",(0,r.jsx)(t.strong,{children:"Parser"})," component iterates over each row of the ",(0,r.jsx)(t.code,{children:"DataFrame"}),", populating the template's variables with the appropriate extracted values.\nThe resulting text for each row is output as a ",(0,r.jsx)(t.a,{href:"/data-types#message",children:(0,r.jsx)(t.code,{children:"Message"})}),"."]})]}),(0,r.jsxs)(t.p,{children:["The following parameters are available in ",(0,r.jsx)(t.strong,{children:"Parser"})," mode."]}),(0,r.jsx)(d.Ay,{}),(0,r.jsxs)(t.table,{children:[(0,r.jsx)(t.thead,{children:(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.th,{children:"Name"}),(0,r.jsx)(t.th,{children:"Display Name"}),(0,r.jsx)(t.th,{children:"Info"})]})}),(0,r.jsxs)(t.tbody,{children:[(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"input_data"}),(0,r.jsx)(t.td,{children:"Data or DataFrame"}),(0,r.jsxs)(t.td,{children:["Input parameter. The ",(0,r.jsx)(t.code,{children:"Data"})," or ",(0,r.jsx)(t.code,{children:"DataFrame"})," input to parse."]})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"pattern"}),(0,r.jsx)(t.td,{children:"Template"}),(0,r.jsxs)(t.td,{children:["Input parameter. The formatting template using plaintext and variables for keys (",(0,r.jsx)(t.code,{children:"{KEY_NAME}"}),"). See the preceding examples for more information."]})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"sep"}),(0,r.jsx)(t.td,{children:"Separator"}),(0,r.jsxs)(t.td,{children:["Input parameter. A string defining the separator for rows or lines. Default: ",(0,r.jsx)(t.code,{children:"\\n"})," (new line)."]})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"clean_data"}),(0,r.jsx)(t.td,{children:"Clean Data"}),(0,r.jsxs)(t.td,{children:["Whether to remove empty rows and lines in each cell or key of the ",(0,r.jsx)(t.code,{children:"DataFrame"})," or ",(0,r.jsx)(t.code,{children:"Data"})," input. Default: Enabled (",(0,r.jsx)(t.code,{children:"true"}),")"]})]})]})]})]}),(0,r.jsxs)(l.A,{value:"stringify",label:"Stringify mode",children:[(0,r.jsxs)(t.p,{children:["Use ",(0,r.jsx)(t.strong,{children:"Stringify"})," mode to convert the entire input directly to text.\nThis mode doesn't support templates or key selection."]}),(0,r.jsxs)(t.p,{children:["The following parameters are available in ",(0,r.jsx)(t.strong,{children:"Stringify"})," mode."]}),(0,r.jsx)(d.Ay,{}),(0,r.jsxs)(t.table,{children:[(0,r.jsx)(t.thead,{children:(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.th,{children:"Name"}),(0,r.jsx)(t.th,{children:"Display Name"}),(0,r.jsx)(t.th,{children:"Info"})]})}),(0,r.jsxs)(t.tbody,{children:[(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"input_data"}),(0,r.jsx)(t.td,{children:"Data or DataFrame"}),(0,r.jsxs)(t.td,{children:["Input parameter. The ",(0,r.jsx)(t.code,{children:"Data"})," or ",(0,r.jsx)(t.code,{children:"DataFrame"})," input to parse."]})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"sep"}),(0,r.jsx)(t.td,{children:"Separator"}),(0,r.jsxs)(t.td,{children:["Input parameter. A string defining the separator for rows or lines. Default: ",(0,r.jsx)(t.code,{children:"\\n"})," (new line)."]})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"clean_data"}),(0,r.jsx)(t.td,{children:"Clean Data"}),(0,r.jsxs)(t.td,{children:["Whether to remove empty rows and lines in each cell or key of the ",(0,r.jsx)(t.code,{children:"DataFrame"})," or ",(0,r.jsx)(t.code,{children:"Data"})," input. Default: Enabled (",(0,r.jsx)(t.code,{children:"true"}),")"]})]})]})]})]})]}),"\n",(0,r.jsx)(t.h3,{id:"test-and-troubleshoot-parsed-text",children:"Test and troubleshoot parsed text"}),"\n",(0,r.jsxs)(t.p,{children:["To test the ",(0,r.jsx)(t.strong,{children:"Parser"})," component, click ",(0,r.jsx)(i.A,{name:"Play","aria-hidden":"true"})," ",(0,r.jsx)(t.strong,{children:"Run component"}),", and then click ",(0,r.jsx)(i.A,{name:"TextSearch","aria-hidden":"true"})," ",(0,r.jsx)(t.strong,{children:"Inspect output"})," to see the ",(0,r.jsx)(t.code,{children:"Message"})," output with the parsed text.\nYou can also connect a ",(0,r.jsx)(t.strong,{children:"Chat Output"})," component if you want to view the output in the ",(0,r.jsx)(t.strong,{children:"Playground"}),"."]}),"\n",(0,r.jsxs)(t.p,{children:["If the ",(0,r.jsx)(t.code,{children:"Message"})," output from the ",(0,r.jsx)(t.strong,{children:"Parser"})," component has empty or unexpected values, there might be a mapping error between the input and the parsing mode, the input has empty values, or the input isn't suitable for plaintext extraction."]}),"\n",(0,r.jsxs)(t.p,{children:["For example, assume you use the following template to parse a ",(0,r.jsx)(t.code,{children:"DataFrame"}),":"]}),"\n",(0,r.jsx)(j.Code,{codeConfig:g,northPanel:{tabs:[""],active:"",heightRatio:1},files:[{name:"",focus:"",code:{lines:[{tokens:[{content:"{employee_first_name} {employee_last_name} is a {job_title} ({grade}).",props:{}}]}],lang:"text"},annotations:[]}]}),"\n",(0,r.jsxs)(t.p,{children:["The following ",(0,r.jsx)(t.code,{children:"Message"})," could result from parsing a row where ",(0,r.jsx)(t.code,{children:"employee_first_name"})," was empty and ",(0,r.jsx)(t.code,{children:"grade"})," was ",(0,r.jsx)(t.code,{children:"null"}),":"]}),"\n",(0,r.jsx)(j.Code,{codeConfig:g,northPanel:{tabs:[""],active:"",heightRatio:1},files:[{name:"",focus:"",code:{lines:[{tokens:[{content:" Smith is a Software Engineer (null).",props:{}}]}],lang:"text"},annotations:[]}]}),"\n",(0,r.jsx)(t.p,{children:"To troubleshoot missing or unexpected values, you can do the following:"}),"\n",(0,r.jsxs)(t.ul,{children:["\n",(0,r.jsxs)(t.li,{children:["\n",(0,r.jsxs)(t.p,{children:["Make sure the variables in your template map to keys in the incoming ",(0,r.jsx)(t.code,{children:"Data"})," or ",(0,r.jsx)(t.code,{children:"DataFrame"}),".\nTo see the data being passed directly to the ",(0,r.jsx)(t.strong,{children:"Parser"})," component, click ",(0,r.jsx)(i.A,{name:"TextSearch","aria-hidden":"true"})," ",(0,r.jsx)(t.strong,{children:"Inspect output"})," on the component that is sending data to the ",(0,r.jsx)(t.strong,{children:"Parser"})," component."]}),"\n"]}),"\n",(0,r.jsxs)(t.li,{children:["\n",(0,r.jsx)(t.p,{children:"Check the source data for missing or incorrect values.\nThere are several ways you can address these inconsistencies:"}),"\n",(0,r.jsxs)(t.ul,{children:["\n",(0,r.jsx)(t.li,{children:"Rectify the source data directly."}),"\n",(0,r.jsxs)(t.li,{children:["Use other components to amend or filter anomalies before passing the data to the ",(0,r.jsx)(t.strong,{children:"Parser"})," component.\nThere are many components you can use for this depending on your goal, such as the ",(0,r.jsx)(t.strong,{children:"Data Operations"}),", ",(0,r.jsx)(t.strong,{children:"Structured Output"}),", and ",(0,r.jsx)(t.strong,{children:"Smart Function"})," components."]}),"\n",(0,r.jsxs)(t.li,{children:["Enable the ",(0,r.jsx)(t.strong,{children:"Parser"})," component's ",(0,r.jsx)(t.strong,{children:"Clean Data"})," parameter to skip empty rows or lines."]}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,r.jsx)(t.h2,{id:"python-interpreter",children:"Python Interpreter"}),"\n",(0,r.jsx)(t.p,{children:"This component allows you to execute Python code with imported packages."}),"\n",(0,r.jsxs)(t.p,{children:["The ",(0,r.jsx)(t.strong,{children:"Python Interpreter"})," component can only import packages that are already installed in your Langflow environment.\nIf you encounter an ",(0,r.jsx)(t.code,{children:"ImportError"})," when trying to use a package, you need to install it first."]}),"\n",(0,r.jsxs)(t.p,{children:["To install custom packages, see ",(0,r.jsx)(t.a,{href:"/install-custom-dependencies",children:"Install custom dependencies"}),"."]}),"\n",(0,r.jsx)(t.h3,{id:"use-the-python-interpreter-in-a-flow",children:"Use the Python Interpreter in a flow"}),"\n",(0,r.jsxs)(t.ol,{children:["\n",(0,r.jsxs)(t.li,{children:["To use this component in a flow, in the ",(0,r.jsx)(t.strong,{children:"Global Imports"})," field, add the packages you want to import as a comma-separated list, such as ",(0,r.jsx)(t.code,{children:"math,pandas"}),".\nAt least one import is required."]}),"\n",(0,r.jsxs)(t.li,{children:["In the ",(0,r.jsx)(t.strong,{children:"Python Code"})," field, enter the Python code you want to execute. Use ",(0,r.jsx)(t.code,{children:"print()"})," to see the output."]}),"\n",(0,r.jsxs)(t.li,{children:["Optional: Enable ",(0,r.jsx)(t.strong,{children:"Tool Mode"}),", and then connect the ",(0,r.jsx)(t.strong,{children:"Python Interpreter"})," component to an ",(0,r.jsx)(t.strong,{children:"Agent"})," component as a tool.\nFor example, connect a ",(0,r.jsx)(t.strong,{children:"Python Interpreter"})," component and a ",(0,r.jsxs)(t.a,{href:"/components-helpers#calculator",children:[(0,r.jsx)(t.strong,{children:"Calculator"})," component"]})," as tools for an ",(0,r.jsx)(t.strong,{children:"Agent"})," component, and then test how it chooses different tools to solve math problems.\n",(0,r.jsx)(t.img,{alt:"Python Interpreter and Calculator components connected to an Agent component",src:n(99e3).A+"",width:"3988",height:"2928"})]}),"\n",(0,r.jsxs)(t.li,{children:["Ask the agent an easier math question.\nThe ",(0,r.jsx)(t.strong,{children:"Calculator"})," tool can add, subtract, multiple, divide, or perform exponentiation.\nThe agent executes the ",(0,r.jsx)(t.code,{children:"evaluate_expression"})," tool to correctly answer the question."]}),"\n"]}),"\n",(0,r.jsx)(t.p,{children:"Result:"}),"\n",(0,r.jsx)(j.Code,{codeConfig:g,northPanel:{tabs:[""],active:"",heightRatio:1},files:[{name:"",focus:"",code:{lines:[{tokens:[{content:"Executed evaluate_expression",props:{}}]},{tokens:[{content:"Input:",props:{}}]},{tokens:[{content:"{",props:{}}]},{tokens:[{content:' "expression": "2+5"',props:{}}]},{tokens:[{content:"}",props:{}}]},{tokens:[{content:"Output:",props:{}}]},{tokens:[{content:"{",props:{}}]},{tokens:[{content:' "result": "7"',props:{}}]},{tokens:[{content:"}",props:{}}]}],lang:"text"},annotations:[]}]}),"\n",(0,r.jsxs)(t.ol,{start:"5",children:["\n",(0,r.jsxs)(t.li,{children:["Give the agent complete Python code.\nThis example creates a Pandas DataFrame table with the imported ",(0,r.jsx)(t.code,{children:"pandas"})," packages, and returns the square root of the mean squares."]}),"\n"]}),"\n",(0,r.jsx)(j.Code,{codeConfig:g,northPanel:{tabs:[""],active:"",heightRatio:1},files:[{name:"",focus:"",code:{lines:[{tokens:[{content:"import",props:{style:{color:"#FF7B72"}}},{content:" pandas ",props:{style:{color:"#C9D1D9"}}},{content:"as",props:{style:{color:"#FF7B72"}}},{content:" pd",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:"import",props:{style:{color:"#FF7B72"}}},{content:" math",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:"",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:"# Create a simple DataFrame",props:{style:{color:"#8B949E"}}}]},{tokens:[{content:"df ",props:{style:{color:"#C9D1D9"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:" pd.DataFrame({",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" 'numbers'",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:"3",props:{style:{color:"#79C0FF"}}},{content:", ",props:{style:{color:"#C9D1D9"}}},{content:"4",props:{style:{color:"#79C0FF"}}},{content:", ",props:{style:{color:"#C9D1D9"}}},{content:"5",props:{style:{color:"#79C0FF"}}},{content:"],",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" 'squares'",props:{style:{color:"#A5D6FF"}}},{content:": [x",props:{style:{color:"#C9D1D9"}}},{content:"**",props:{style:{color:"#FF7B72"}}},{content:"2 ",props:{style:{color:"#79C0FF"}}},{content:"for",props:{style:{color:"#FF7B72"}}},{content:" x ",props:{style:{color:"#C9D1D9"}}},{content:"in ",props:{style:{color:"#FF7B72"}}},{content:"range",props:{style:{color:"#79C0FF"}}},{content:"(",props:{style:{color:"#C9D1D9"}}},{content:"1",props:{style:{color:"#79C0FF"}}},{content:", ",props:{style:{color:"#C9D1D9"}}},{content:"6",props:{style:{color:"#79C0FF"}}},{content:")]",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:"})",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:"",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:"# Calculate the square root of the mean",props:{style:{color:"#8B949E"}}}]},{tokens:[{content:"result ",props:{style:{color:"#C9D1D9"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:" math.sqrt(df[",props:{style:{color:"#C9D1D9"}}},{content:"'squares'",props:{style:{color:"#A5D6FF"}}},{content:"].mean())",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:"print",props:{style:{color:"#79C0FF"}}},{content:"(",props:{style:{color:"#C9D1D9"}}},{content:"f",props:{style:{color:"#FF7B72"}}},{content:'"Square root of mean squares: ',props:{style:{color:"#A5D6FF"}}},{content:"{",props:{style:{color:"#79C0FF"}}},{content:"result",props:{style:{color:"#C9D1D9"}}},{content:"}",props:{style:{color:"#79C0FF"}}},{content:'"',props:{style:{color:"#A5D6FF"}}},{content:")",props:{style:{color:"#C9D1D9"}}}]}],lang:"python"},annotations:[]}]}),"\n",(0,r.jsxs)(t.p,{children:["The agent correctly chooses the ",(0,r.jsx)(t.code,{children:"run_python_repl"})," tool to solve the problem."]}),"\n",(0,r.jsx)(t.p,{children:"Result:"}),"\n",(0,r.jsx)(j.Code,{codeConfig:g,northPanel:{tabs:[""],active:"",heightRatio:1},files:[{name:"",focus:"",code:{lines:[{tokens:[{content:"Executed run_python_repl",props:{}}]},{tokens:[{content:"",props:{}}]},{tokens:[{content:"Input:",props:{}}]},{tokens:[{content:"",props:{}}]},{tokens:[{content:"{",props:{}}]},{tokens:[{content:" \"python_code\": \"import pandas as pd\\nimport math\\n\\n# Create a simple DataFrame\\ndf = pd.DataFrame({\\n 'numbers': [1, 2, 3, 4, 5],\\n 'squares': [x**2 for x in range(1, 6)]\\n})\\n\\n# Calculate the square root of the mean\\nresult = math.sqrt(df['squares'].mean())\\nprint(f\\\"Square root of mean squares: {result}\\\")\"",props:{}}]},{tokens:[{content:"}",props:{}}]},{tokens:[{content:"Output:",props:{}}]},{tokens:[{content:"",props:{}}]},{tokens:[{content:"{",props:{}}]},{tokens:[{content:' "result": "Square root of mean squares: 3.3166247903554"',props:{}}]},{tokens:[{content:"}",props:{}}]}],lang:"text"},annotations:[]}]}),"\n",(0,r.jsxs)(t.p,{children:["If you don't include the package imports in the chat, the agent can still create the table using ",(0,r.jsx)(t.code,{children:"pd.DataFrame"}),", because the ",(0,r.jsx)(t.code,{children:"pandas"})," package is imported globally by the ",(0,r.jsx)(t.strong,{children:"Python Interpreter"})," component in the ",(0,r.jsx)(t.strong,{children:"Global Imports"})," field."]}),"\n",(0,r.jsx)(t.h3,{id:"python-interpreter-parameters",children:"Python Interpreter parameters"}),"\n",(0,r.jsxs)(t.table,{children:[(0,r.jsx)(t.thead,{children:(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.th,{children:"Name"}),(0,r.jsx)(t.th,{children:"Type"}),(0,r.jsx)(t.th,{children:"Description"})]})}),(0,r.jsxs)(t.tbody,{children:[(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"global_imports"}),(0,r.jsx)(t.td,{children:"String"}),(0,r.jsxs)(t.td,{children:["Input parameter. A comma-separated list of modules to import globally, such as ",(0,r.jsx)(t.code,{children:"math,pandas,numpy"}),"."]})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"python_code"}),(0,r.jsx)(t.td,{children:"Code"}),(0,r.jsx)(t.td,{children:"Input parameter. The Python code to execute. Only modules specified in Global Imports can be used."})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"results"}),(0,r.jsx)(t.td,{children:"Data"}),(0,r.jsx)(t.td,{children:"Output parameter. The output of the executed Python code, including any printed results or errors."})]})]})]}),"\n",(0,r.jsx)(t.h2,{id:"save-file",children:"Save File"}),"\n",(0,r.jsxs)(t.p,{children:["The ",(0,r.jsx)(t.strong,{children:"Save File"})," component creates a file containing data produced by another component.\nSeveral file formats are supported, and you can store files in ",(0,r.jsx)(t.a,{href:"/memory",children:"Langflow storage"})," or the local file system."]}),"\n",(0,r.jsxs)(t.p,{children:["To configure the ",(0,r.jsx)(t.strong,{children:"Save File"})," component and use it in a flow, do the following:"]}),"\n",(0,r.jsxs)(t.ol,{children:["\n",(0,r.jsxs)(t.li,{children:["\n",(0,r.jsxs)(t.p,{children:["Connect ",(0,r.jsx)(t.a,{href:"/data-types#dataframe",children:(0,r.jsx)(t.code,{children:"DataFrame"})}),", ",(0,r.jsx)(t.a,{href:"/data-types#data",children:(0,r.jsx)(t.code,{children:"Data"})}),", or ",(0,r.jsx)(t.a,{href:"/data-types#message",children:(0,r.jsx)(t.code,{children:"Message"})})," output from another component to the ",(0,r.jsx)(t.strong,{children:"Save File"})," component's ",(0,r.jsx)(t.strong,{children:"Input"})," port."]}),"\n",(0,r.jsxs)(t.p,{children:["You can connect the same output to multiple ",(0,r.jsx)(t.strong,{children:"Save File"})," components if you want to create multiple files, save the data in different file formats, or save files to multiple locations."]}),"\n"]}),"\n",(0,r.jsxs)(t.li,{children:["\n",(0,r.jsxs)(t.p,{children:["In ",(0,r.jsx)(t.strong,{children:"File Name"}),", enter a file name and an optional path."]}),"\n",(0,r.jsxs)(t.p,{children:["The ",(0,r.jsx)(t.strong,{children:"File Name"})," parameter controls where the file is saved.\nIt can contain a file name or an entire file path:"]}),"\n",(0,r.jsxs)(t.ul,{children:["\n",(0,r.jsxs)(t.li,{children:["\n",(0,r.jsxs)(t.p,{children:[(0,r.jsx)(t.strong,{children:"Default location"}),": If you only provide a file name, then the file is stored in the Langflow data directory. For example,",(0,r.jsx)(t.code,{children:"~/Library/Caches/langflow/data"})," on macOS."]}),"\n"]}),"\n",(0,r.jsxs)(t.li,{children:["\n",(0,r.jsxs)(t.p,{children:[(0,r.jsx)(t.strong,{children:"Subdirectory"}),": To store files in subdirectories, add the path to the ",(0,r.jsx)(t.strong,{children:"File Name"})," parameter.\nIf a given subdirectory doesn't already exist, Langflow automatically creates it.\nFor example, ",(0,r.jsx)(t.code,{children:"files/my_file"})," creates ",(0,r.jsx)(t.code,{children:"my_file"})," in ",(0,r.jsx)(t.code,{children:"/data/files"}),", and it creates the ",(0,r.jsx)(t.code,{children:"files"})," subdirectory if it doesn't already exist."]}),"\n"]}),"\n",(0,r.jsxs)(t.li,{children:["\n",(0,r.jsxs)(t.p,{children:[(0,r.jsx)(t.strong,{children:"Absolute or relative path"}),": To store files elsewhere in your environment or local file storage, provide the absolute or relative path to the desired location.\nFor example, ",(0,r.jsx)(t.code,{children:"~/Desktop/my_file"})," saves ",(0,r.jsx)(t.code,{children:"my_file"})," to the desktop."]}),"\n"]}),"\n"]}),"\n",(0,r.jsxs)(t.p,{children:["Don't include an extension in the file name.\nIf you do, the extension is treated as part of the file name; it has no impact on the ",(0,r.jsx)(t.strong,{children:"File Format"})," parameter."]}),"\n"]}),"\n",(0,r.jsxs)(t.li,{children:["\n",(0,r.jsxs)(t.p,{children:["In the ",(0,r.jsx)(t.a,{href:"/concepts-components#component-menus",children:"component's header menu"}),", click ",(0,r.jsx)(i.A,{name:"SlidersHorizontal","aria-hidden":"true"})," ",(0,r.jsx)(t.strong,{children:"Controls"}),", select the desired file format, and then click ",(0,r.jsx)(t.strong,{children:"Close"}),"."]}),"\n",(0,r.jsxs)(t.p,{children:["The available ",(0,r.jsx)(t.strong,{children:"File Format"})," options depend on the input data type:"]}),"\n",(0,r.jsxs)(t.ul,{children:["\n",(0,r.jsxs)(t.li,{children:["\n",(0,r.jsxs)(t.p,{children:[(0,r.jsx)(t.code,{children:"DataFrame"})," can be saved to CSV (default), Excel (requires ",(0,r.jsx)(t.code,{children:"openpyxl"})," ",(0,r.jsx)(t.a,{href:"/install-custom-dependencies",children:"custom dependency"}),"), JSON (fallback default), or Markdown."]}),"\n"]}),"\n",(0,r.jsxs)(t.li,{children:["\n",(0,r.jsxs)(t.p,{children:[(0,r.jsx)(t.code,{children:"Data"})," can be saved to CSV, Excel (requires ",(0,r.jsx)(t.code,{children:"openpyxl"})," ",(0,r.jsx)(t.a,{href:"/install-custom-dependencies",children:"custom dependency"}),"), JSON (default), or Markdown."]}),"\n"]}),"\n",(0,r.jsxs)(t.li,{children:["\n",(0,r.jsxs)(t.p,{children:[(0,r.jsx)(t.code,{children:"Message"})," can be saved to TXT, JSON (default), or Markdown."]}),"\n"]}),"\n"]}),"\n",(0,r.jsx)(t.admonition,{title:"Overwrites allowed",type:"warning",children:(0,r.jsxs)(t.p,{children:["If you have multiple ",(0,r.jsx)(t.strong,{children:"Save File"})," components, in one or more flows, with the same file name, path, and extension, the file contains the data from the most recent run only.\nLangflow doesn't block overwrites if a matching file already exists.\nTo avoid unintended overwrites, use unique file names and paths."]})}),"\n"]}),"\n",(0,r.jsxs)(t.li,{children:["\n",(0,r.jsxs)(t.p,{children:["To test the ",(0,r.jsx)(t.strong,{children:"Save File"})," component, click ",(0,r.jsx)(i.A,{name:"Play","aria-hidden":"true"})," ",(0,r.jsx)(t.strong,{children:"Run component"}),", and then click ",(0,r.jsx)(i.A,{name:"TextSearch","aria-hidden":"true"})," ",(0,r.jsx)(t.strong,{children:"Inspect output"})," to get the filepath where the file was saved."]}),"\n",(0,r.jsxs)(t.p,{children:["The component's literal output is a ",(0,r.jsx)(t.code,{children:"Message"})," containing the original data type, the file name and extension, and the absolute filepath to the file based on the ",(0,r.jsx)(t.strong,{children:"File Name"})," parameter.\nFor example:"]}),"\n",(0,r.jsx)(j.Code,{codeConfig:g,northPanel:{tabs:[""],active:"",heightRatio:1},files:[{name:"",focus:"",code:{lines:[{tokens:[{content:"DataFrame saved successfully as 'my_file.csv' at /Users/user.name/Library/Caches/langflow/data/my_file.csv",props:{}}]}],lang:"text"},annotations:[]}]}),"\n",(0,r.jsxs)(t.p,{children:["If the ",(0,r.jsx)(t.strong,{children:"File Name"})," contains a subdirectory or other non-default path, this is reflected in the ",(0,r.jsx)(t.code,{children:"Message"})," output.\nFor example, a CSV file with the file name ",(0,r.jsx)(t.code,{children:"~/Desktop/my_file"})," could produce the following output:"]}),"\n",(0,r.jsx)(j.Code,{codeConfig:g,northPanel:{tabs:[""],active:"",heightRatio:1},files:[{name:"",focus:"",code:{lines:[{tokens:[{content:"DataFrame saved successfully as '/Users/user.name/Desktop/my_file.csv' at /Users/user.name/Desktop/my_file.csv",props:{}}]}],lang:"text"},annotations:[]}]}),"\n"]}),"\n",(0,r.jsxs)(t.li,{children:["\n",(0,r.jsx)(t.p,{children:"Optional: If you want to use the saved file in a flow, you must use an API call or another component to retrieve the file from the given filepath."}),"\n"]}),"\n"]}),"\n",(0,r.jsx)(t.h2,{id:"smart-transform",children:"Smart Function"}),"\n",(0,r.jsxs)(t.p,{children:["In Langflow version 1.5, this component was renamed from ",(0,r.jsx)(t.strong,{children:"Lambda Filter"})," to ",(0,r.jsx)(t.strong,{children:"Smart Function"}),"."]}),"\n",(0,r.jsxs)(t.p,{children:["The ",(0,r.jsx)(t.strong,{children:"Smart Function"})," component uses an LLM to generate a Lambda function to filter or transform structured data based on natural language instructions.\nYou must connect this component to a ",(0,r.jsx)(t.a,{href:"/components-models",children:"language model component"}),", which is used to generate a function based on the natural language instructions you provide in the ",(0,r.jsx)(t.strong,{children:"Instructions"})," parameter.\nThe LLM runs the function against the data input, and then outputs the results as ",(0,r.jsx)(t.a,{href:"/data-types#data",children:(0,r.jsx)(t.code,{children:"Data"})}),"."]}),"\n",(0,r.jsxs)(t.admonition,{type:"tip",children:[(0,r.jsxs)(t.p,{children:["Provide brief, clear instructions, focusing on the desired outcome or specific actions, such as ",(0,r.jsx)(t.code,{children:"Filter the data to only include items where the 'status' is 'active'"}),".\nOne sentence or less is preferred because end punctuation, like periods, can cause errors or unexpected behavior."]}),(0,r.jsxs)(t.p,{children:["If you need to provide more details instructions that aren't directly relevant to the Lambda function, you can input them in the ",(0,r.jsx)(t.strong,{children:"Language Model"})," component's ",(0,r.jsx)(t.strong,{children:"Input"})," field or through a ",(0,r.jsx)(t.strong,{children:"Prompt Template"})," component."]})]}),"\n",(0,r.jsxs)(t.p,{children:["The following example uses the ",(0,r.jsx)(t.strong,{children:"API Request"})," endpoint to pass JSON data from the ",(0,r.jsx)(t.code,{children:"https://jsonplaceholder.typicode.com/users"})," endpoint to the ",(0,r.jsx)(t.strong,{children:"Smart Function"})," component.\nThen, the ",(0,r.jsx)(t.strong,{children:"Smart Function"})," component passes the data and the instruction ",(0,r.jsx)(t.code,{children:"extract emails"})," to the attached ",(0,r.jsx)(t.strong,{children:"Language Model"})," component.\nFrom there, the LLM generates a filter function that extracts email addresses from the JSON data, returning the filtered data as chat output."]}),"\n",(0,r.jsx)(t.p,{children:(0,r.jsx)(t.img,{alt:"A small flow using a Smart Function component to extract data from an API response.",src:n(66539).A+"",width:"4000",height:"1796"})}),"\n",(0,r.jsx)(t.h3,{id:"smart-function-parameters",children:"Smart Function parameters"}),"\n",(0,r.jsx)(d.Ay,{}),"\n",(0,r.jsxs)(t.table,{children:[(0,r.jsx)(t.thead,{children:(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.th,{children:"Name"}),(0,r.jsx)(t.th,{children:"Display Name"}),(0,r.jsx)(t.th,{children:"Info"})]})}),(0,r.jsxs)(t.tbody,{children:[(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"data"}),(0,r.jsx)(t.td,{children:"Data"}),(0,r.jsx)(t.td,{children:"Input parameter. The structured data to filter or transform using a Lambda function."})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"llm"}),(0,r.jsx)(t.td,{children:"Language Model"}),(0,r.jsxs)(t.td,{children:["Input parameter. Connect ",(0,r.jsx)(t.a,{href:"/data-types#languagemodel",children:(0,r.jsx)(t.code,{children:"LanguageModel"})})," output from a ",(0,r.jsx)(t.strong,{children:"Language Model"})," component."]})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"filter_instruction"}),(0,r.jsx)(t.td,{children:"Instructions"}),(0,r.jsx)(t.td,{children:"Input parameter. The natural language instructions for how to filter or transform the data. The LLM uses these instructions to create a Lambda function."})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"sample_size"}),(0,r.jsx)(t.td,{children:"Sample Size"}),(0,r.jsxs)(t.td,{children:["Input parameter. For large datasets, the number of characters to sample from the dataset head and tail. Only applied if the dataset meets or exceeds ",(0,r.jsx)(t.code,{children:"max_size"}),". Default: ",(0,r.jsx)(t.code,{children:"1000"}),"."]})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"max_size"}),(0,r.jsx)(t.td,{children:"Max Size"}),(0,r.jsxs)(t.td,{children:["Input parameter. The number of characters for the dataset to be considered large, which triggers sampling by the ",(0,r.jsx)(t.code,{children:"sample_size"})," value. Default: ",(0,r.jsx)(t.code,{children:"30000"}),"."]})]})]})]}),"\n",(0,r.jsx)(t.h2,{id:"split-text",children:"Split Text"}),"\n",(0,r.jsxs)(t.p,{children:["The ",(0,r.jsx)(t.strong,{children:"Split Text"})," component splits data into chunks based on parameters like chunk size and separator.\nIt is often used to chunk data to be tokenized and embedded into vector databases.\nFor examples, see ",(0,r.jsx)(t.a,{href:"/components-embedding-models#use-embedding-model-components-in-a-flow",children:"Use embedding model components in a flow"})," and ",(0,r.jsx)(t.a,{href:"/chat-with-rag",children:"Create a Vector RAG chatbot"}),"."]}),"\n",(0,r.jsx)(t.p,{children:(0,r.jsx)(t.img,{alt:"An embedding generation flow that uses a Split Text component to chunk data.",src:n(49823).A+"",width:"4000",height:"2766"})}),"\n",(0,r.jsxs)(t.p,{children:["The component accepts ",(0,r.jsx)(t.code,{children:"Message"}),", ",(0,r.jsx)(t.code,{children:"Data"}),", or ",(0,r.jsx)(t.code,{children:"DataFrame"}),", and then outputs either ",(0,r.jsx)(t.strong,{children:"Chunks"})," or ",(0,r.jsx)(t.strong,{children:"DataFrame"}),".\nThe ",(0,r.jsx)(t.strong,{children:"Chunks"})," output returns a list of ",(0,r.jsx)(t.a,{href:"/data-types#data",children:(0,r.jsx)(t.code,{children:"Data"})})," objects containing individual text chunks.\nThe ",(0,r.jsx)(t.strong,{children:"DataFrame"})," output returns the list of chunks as a structured ",(0,r.jsx)(t.a,{href:"/data-types#dataframe",children:(0,r.jsx)(t.code,{children:"DataFrame"})})," with additional ",(0,r.jsx)(t.code,{children:"text"})," and ",(0,r.jsx)(t.code,{children:"metadata"})," columns."]}),"\n",(0,r.jsx)(t.h3,{id:"split-text-parameters",children:"Split Text parameters"}),"\n",(0,r.jsxs)(t.p,{children:["The ",(0,r.jsx)(t.strong,{children:"Split Text"})," component's parameters control how the text is split into chunks, specifically the ",(0,r.jsx)(t.code,{children:"chunk_size"}),", ",(0,r.jsx)(t.code,{children:"chunk_overlap"}),", and ",(0,r.jsx)(t.code,{children:"separator"})," parameters."]}),"\n",(0,r.jsxs)(t.p,{children:["To test the chunking behavior, add a ",(0,r.jsx)(t.strong,{children:"Text Input"})," or ",(0,r.jsx)(t.strong,{children:"File"})," component with some sample data to chunk, click ",(0,r.jsx)(i.A,{name:"Play","aria-hidden":"true"})," ",(0,r.jsx)(t.strong,{children:"Run component"})," on the ",(0,r.jsx)(t.strong,{children:"Split Text"})," component, and then click ",(0,r.jsx)(i.A,{name:"TextSearch","aria-hidden":"true"})," ",(0,r.jsx)(t.strong,{children:"Inspect output"})," to view the list of chunks and their metadata. The ",(0,r.jsx)(t.strong,{children:"text"})," column contains the actual text chunks created from your chunking settings.\nIf the chunks aren't split as you expect, adjust the parameters, rerun the component, and then inspect the new output."]}),"\n",(0,r.jsx)(d.Ay,{}),"\n",(0,r.jsxs)(t.table,{children:[(0,r.jsx)(t.thead,{children:(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.th,{children:"Name"}),(0,r.jsx)(t.th,{children:"Display Name"}),(0,r.jsx)(t.th,{children:"Info"})]})}),(0,r.jsxs)(t.tbody,{children:[(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"data_inputs"}),(0,r.jsx)(t.td,{children:"Input"}),(0,r.jsxs)(t.td,{children:["Input parameter. The data to split. Input must be in ",(0,r.jsx)(t.code,{children:"Message"}),", ",(0,r.jsx)(t.code,{children:"Data"}),", or ",(0,r.jsx)(t.code,{children:"DataFrame"})," format."]})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"chunk_overlap"}),(0,r.jsx)(t.td,{children:"Chunk Overlap"}),(0,r.jsxs)(t.td,{children:["Input parameter. The number of characters to overlap between chunks. This helps maintain context across chunks. When a separator is encountered, the overlap is applied at the point of the separator so that the subsequent chunk contains the last ",(0,r.jsx)(t.em,{children:"n"})," characters of the preceding chunk. Default: ",(0,r.jsx)(t.code,{children:"200"}),"."]})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"chunk_size"}),(0,r.jsx)(t.td,{children:"Chunk Size"}),(0,r.jsxs)(t.td,{children:["Input parameter. The target length for each chunk after splitting. The data is first split by separator, and then chunks smaller than the ",(0,r.jsx)(t.code,{children:"chunk_size"})," are merged up to this limit. However, if the initial separator split produces any chunks larger than the ",(0,r.jsx)(t.code,{children:"chunk_size"}),", those chunks are neither further subdivided nor combined with any smaller chunks; these chunks will be output as-is even though they exceed the ",(0,r.jsx)(t.code,{children:"chunk_size"}),". Default: ",(0,r.jsx)(t.code,{children:"1000"}),". See ",(0,r.jsx)(t.a,{href:"#chunk-size",children:"Tokenization errors due to chunk size"})," for important considerations."]})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"separator"}),(0,r.jsx)(t.td,{children:"Separator"}),(0,r.jsxs)(t.td,{children:["Input parameter. A string defining a character to split on, such as ",(0,r.jsx)(t.code,{children:"\\n"})," to split on new line characters, ",(0,r.jsx)(t.code,{children:"\\n\\n"})," to split at paragraph breaks, or ",(0,r.jsx)(t.code,{children:"},"})," to split at the end of JSON objects. You can directly provide the separator string, or pass a separator string from another component as ",(0,r.jsx)(t.code,{children:"Message"})," input."]})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"text_key"}),(0,r.jsx)(t.td,{children:"Text Key"}),(0,r.jsxs)(t.td,{children:["Input parameter. The key to use for the text column that is extracted from the input and then split. Default: ",(0,r.jsx)(t.code,{children:"text"}),"."]})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"keep_separator"}),(0,r.jsx)(t.td,{children:"Keep Separator"}),(0,r.jsxs)(t.td,{children:["Input parameter. Select how to handle separators in output chunks. If ",(0,r.jsx)(t.code,{children:"False"}),", separators are omitted from output chunks. Options include ",(0,r.jsx)(t.code,{children:"False"})," (remove separators), ",(0,r.jsx)(t.code,{children:"True"})," (keep separators in chunks without preference for placement), ",(0,r.jsx)(t.code,{children:"Start"})," (place separators at the beginning of chunks), or ",(0,r.jsx)(t.code,{children:"End"})," (place separators at the end of chunks). Default: ",(0,r.jsx)(t.code,{children:"False"}),"."]})]})]})]}),"\n",(0,r.jsx)(t.h3,{id:"chunk-size",children:"Tokenization errors due to chunk size"}),"\n",(0,r.jsxs)(t.p,{children:["When using ",(0,r.jsx)(t.strong,{children:"Split Text"})," with embedding models (especially NVIDIA models like ",(0,r.jsx)(t.code,{children:"nvidia/nv-embed-v1"}),"), you may need to use smaller chunk sizes (",(0,r.jsx)(t.code,{children:"500"})," or less) even though the model supports larger token limits.\nThe ",(0,r.jsx)(t.strong,{children:"Split Text"})," component doesn't always enforce the exact chunk size you set, and individual chunks may exceed your specified limit.\nIf you encounter tokenization errors, modify your text splitting strategy by reducing the chunk size, changing the overlap length, or using a more common separator.\nThen, test your configuration by running the flow and inspecting the component's output."]}),"\n",(0,r.jsx)(t.h3,{id:"other-text-splitters",children:"Other text splitters"}),"\n",(0,r.jsxs)(t.p,{children:["See ",(0,r.jsx)(t.a,{href:"/bundles-langchain#text-splitters",children:"LangChain text splitter components"}),"."]}),"\n",(0,r.jsx)(t.h2,{id:"structured-output",children:"Structured Output"}),"\n",(0,r.jsxs)(t.p,{children:["The ",(0,r.jsx)(t.strong,{children:"Structured Output"})," component uses an LLM to transform any input into structured data (",(0,r.jsx)(t.code,{children:"Data"})," or ",(0,r.jsx)(t.code,{children:"DataFrame"}),") using natural language formatting instructions and an output schema definition.\nFor example, you can extract specific details from documents, like email messages or scientific papers."]}),"\n",(0,r.jsx)(t.h3,{id:"use-the-structured-output-component-in-a-flow",children:"Use the Structured Output component in a flow"}),"\n",(0,r.jsxs)(t.p,{children:["To use the ",(0,r.jsx)(t.strong,{children:"Structured Output"})," component in a flow, do the following:"]}),"\n",(0,r.jsxs)(t.ol,{children:["\n",(0,r.jsxs)(t.li,{children:["\n",(0,r.jsxs)(t.p,{children:["Provide an ",(0,r.jsx)(t.strong,{children:"Input Message"}),", which is the source material from which you want to extract structured data.\nThis can come from practically any component, but it is typically a ",(0,r.jsx)(t.strong,{children:"Chat Input"}),", ",(0,r.jsx)(t.strong,{children:"File"}),", or other component that provides some unstructured or semi-structured input."]}),"\n",(0,r.jsx)(t.admonition,{type:"tip",children:(0,r.jsxs)(t.p,{children:["Not all source material has to become structured output.\nThe power of the ",(0,r.jsx)(t.strong,{children:"Structured Output"})," component is that you can specify the information you want to extract, even if that data isn't explicitly labeled or an exact keyword match.\nThen, the LLM can use your instructions to analyze the source material, extract the relevant data, and format it according to your specifications.\nAny irrelevant source material isn't included in the structured output."]})}),"\n"]}),"\n",(0,r.jsxs)(t.li,{children:["\n",(0,r.jsxs)(t.p,{children:["Define ",(0,r.jsx)(t.strong,{children:"Format Instructions"})," and an ",(0,r.jsx)(t.strong,{children:"Output Schema"})," to specify the data to extract from the source material and how to structure it in the final ",(0,r.jsx)(t.code,{children:"Data"})," or ",(0,r.jsx)(t.code,{children:"DataFrame"})," output."]}),"\n",(0,r.jsx)(t.p,{children:"The instructions are a prompt that tell the LLM what data to extract, how to format it, how to handle exceptions, and any other instructions relevant to preparing the structured data."}),"\n",(0,r.jsxs)(t.p,{children:["The schema is a table that defines the fields (keys) and data types to organize the data extracted by the LLM into a structured ",(0,r.jsx)(t.code,{children:"Data"})," or ",(0,r.jsx)(t.code,{children:"DataFrame"})," object.\nFor more information, see ",(0,r.jsx)(t.a,{href:"#output-schema-options",children:"Output Schema options"})]}),"\n"]}),"\n",(0,r.jsxs)(t.li,{children:["\n",(0,r.jsxs)(t.p,{children:["Attach a ",(0,r.jsx)(t.a,{href:"/components-models",children:"language model component"})," that is set to emit ",(0,r.jsx)(t.a,{href:"/data-types#languagemodel",children:(0,r.jsx)(t.code,{children:"LanguageModel"})})," output."]}),"\n",(0,r.jsxs)(t.p,{children:["The LLM uses the ",(0,r.jsx)(t.strong,{children:"Input Message"})," and ",(0,r.jsx)(t.strong,{children:"Format Instructions"})," from the ",(0,r.jsx)(t.strong,{children:"Structured Output"})," component to extract specific pieces of data from the input text.\nThe output schema is applied to the model's response to produce the final ",(0,r.jsx)(t.code,{children:"Data"})," or ",(0,r.jsx)(t.code,{children:"DataFrame"})," structured object."]}),"\n"]}),"\n",(0,r.jsxs)(t.li,{children:["\n",(0,r.jsxs)(t.p,{children:["Optional: Typically, the structured output is passed to downstream components that use the extracted data for other processes, such as the ",(0,r.jsx)(t.strong,{children:"Parser"})," or ",(0,r.jsx)(t.strong,{children:"Data Operations"})," components."]}),"\n"]}),"\n"]}),"\n",(0,r.jsx)(t.p,{children:(0,r.jsx)(t.img,{alt:"A basic flow with Structured Output, Language Model, Type Convert, and Chat Input and Output components.",src:n(82798).A+"",width:"4000",height:"1724"})}),"\n",(0,r.jsxs)(s,{children:[(0,r.jsx)("summary",{children:"Structured Output example: Financial Report Parser template"}),(0,r.jsxs)(t.p,{children:["The ",(0,r.jsx)(t.strong,{children:"Financial Report Parser"})," template provides an example of how the ",(0,r.jsx)(t.strong,{children:"Structured Output"})," component can be used to extract structured data from unstructured text."]}),(0,r.jsxs)(t.p,{children:["The template's ",(0,r.jsx)(t.strong,{children:"Structured Output"})," component has the following configuration:"]}),(0,r.jsxs)(t.ul,{children:["\n",(0,r.jsxs)(t.li,{children:["\n",(0,r.jsxs)(t.p,{children:["The ",(0,r.jsx)(t.strong,{children:"Input Message"})," comes from a ",(0,r.jsx)(t.strong,{children:"Chat Input"})," component that is preloaded with quotes from sample financial reports"]}),"\n"]}),"\n",(0,r.jsxs)(t.li,{children:["\n",(0,r.jsxs)(t.p,{children:["The ",(0,r.jsx)(t.strong,{children:"Format Instructions"})," are as follows:"]}),"\n",(0,r.jsx)(j.Code,{codeConfig:g,northPanel:{tabs:[""],active:"",heightRatio:1},files:[{name:"",focus:"",code:{lines:[{tokens:[{content:"You are an AI that extracts structured JSON objects from unstructured text.",props:{}}]},{tokens:[{content:"Use a predefined schema with expected types (str, int, float, bool, dict).",props:{}}]},{tokens:[{content:"Extract ALL relevant instances that match the schema - if multiple patterns exist, capture them all.",props:{}}]},{tokens:[{content:"Fill missing or ambiguous values with defaults: null for missing values.",props:{}}]},{tokens:[{content:"Remove exact duplicates but keep variations that have different field values.",props:{}}]},{tokens:[{content:"Always return valid JSON in the expected format, never throw errors.",props:{}}]},{tokens:[{content:"If multiple objects can be extracted, return them all in the structured format.",props:{}}]}],lang:"text"},annotations:[]}]}),"\n"]}),"\n",(0,r.jsxs)(t.li,{children:["\n",(0,r.jsxs)(t.p,{children:["The ",(0,r.jsx)(t.strong,{children:"Output Schema"})," includes keys for ",(0,r.jsx)(t.code,{children:"EBITDA"}),", ",(0,r.jsx)(t.code,{children:"NET_INCOME"}),", and ",(0,r.jsx)(t.code,{children:"GROSS_PROFIT"}),"."]}),"\n"]}),"\n"]}),(0,r.jsxs)(t.p,{children:["The structured ",(0,r.jsx)(t.code,{children:"Data"})," object is passed to a ",(0,r.jsx)(t.strong,{children:"Parser"})," component that produces a text string by mapping the schema keys to variables in the parsing template:"]}),(0,r.jsx)(j.Code,{codeConfig:g,northPanel:{tabs:[""],active:"",heightRatio:1},files:[{name:"",focus:"",code:{lines:[{tokens:[{content:"EBITDA: {EBITDA} , Net Income: {NET_INCOME} , GROSS_PROFIT: {GROSS_PROFIT}",props:{}}]}],lang:"text"},annotations:[]}]}),(0,r.jsxs)(t.p,{children:["When printed to the ",(0,r.jsx)(t.strong,{children:"Playground"}),", the resulting ",(0,r.jsx)(t.code,{children:"Message"})," replaces the variables with the actual values extracted by the ",(0,r.jsx)(t.strong,{children:"Structured Output"})," component. For example:"]}),(0,r.jsx)(j.Code,{codeConfig:g,northPanel:{tabs:[""],active:"",heightRatio:1},files:[{name:"",focus:"",code:{lines:[{tokens:[{content:"EBITDA: 900 million , Net Income: 500 million , GROSS_PROFIT: 1.2 billion",props:{}}]}],lang:"text"},annotations:[]}]})]}),"\n",(0,r.jsx)(t.h3,{id:"structured-output-parameters",children:"Structured Output parameters"}),"\n",(0,r.jsx)(d.Ay,{}),"\n",(0,r.jsxs)(t.table,{children:[(0,r.jsx)(t.thead,{children:(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.th,{children:"Name"}),(0,r.jsx)(t.th,{children:"Type"}),(0,r.jsx)(t.th,{children:"Description"})]})}),(0,r.jsxs)(t.tbody,{children:[(0,r.jsxs)(t.tr,{children:[(0,r.jsxs)(t.td,{children:["Language Model (",(0,r.jsx)(t.code,{children:"llm"}),")"]}),(0,r.jsx)(t.td,{children:(0,r.jsx)(t.code,{children:"LanguageModel"})}),(0,r.jsxs)(t.td,{children:["Input parameter. The ",(0,r.jsx)(t.a,{href:"/data-types#languagemodel",children:(0,r.jsx)(t.code,{children:"LanguageModel"})})," output from a ",(0,r.jsx)(t.strong,{children:"Language Model"})," component that defines the LLM to use to analyze, extract, and prepare the structured output."]})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsxs)(t.td,{children:["Input Message (",(0,r.jsx)(t.code,{children:"input_value"}),")"]}),(0,r.jsx)(t.td,{children:"String"}),(0,r.jsx)(t.td,{children:"Input parameter. The input message containing source material for extraction."})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsxs)(t.td,{children:["Format Instructions (",(0,r.jsx)(t.code,{children:"system_prompt"}),")"]}),(0,r.jsx)(t.td,{children:"String"}),(0,r.jsx)(t.td,{children:"Input parameter. The instructions to the language model for extracting and formatting the output."})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsxs)(t.td,{children:["Schema Name (",(0,r.jsx)(t.code,{children:"schema_name"}),")"]}),(0,r.jsx)(t.td,{children:"String"}),(0,r.jsxs)(t.td,{children:["Input parameter. An optional title for the ",(0,r.jsx)(t.strong,{children:"Output Schema"}),"."]})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsxs)(t.td,{children:["Output Schema (",(0,r.jsx)(t.code,{children:"output_schema"}),")"]}),(0,r.jsx)(t.td,{children:"Table"}),(0,r.jsxs)(t.td,{children:["Input parameter. A table describing the schema of the desired structured output, ultimately determining the content of the ",(0,r.jsx)(t.code,{children:"Data"})," or ",(0,r.jsx)(t.code,{children:"DataFrame"})," output. See ",(0,r.jsx)(t.a,{href:"#output-schema-options",children:"Output Schema options"}),"."]})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsxs)(t.td,{children:["Structured Output (",(0,r.jsx)(t.code,{children:"structured_output"}),")"]}),(0,r.jsxs)(t.td,{children:[(0,r.jsx)(t.code,{children:"Data"})," or ",(0,r.jsx)(t.code,{children:"DataFrame"})]}),(0,r.jsxs)(t.td,{children:["Output parameter. The final structured output produced by the component. Near the component's output port, you can select the output data type as either ",(0,r.jsx)(t.strong,{children:"Structured Output Data"})," or ",(0,r.jsx)(t.strong,{children:"Structured Output DataFrame"}),". The specific content and structure of the output depends on the input parameters."]})]})]})]}),"\n",(0,r.jsx)(t.h4,{id:"output-schema-options",children:"Output Schema options"}),"\n",(0,r.jsxs)(t.p,{children:["After the LLM extracts the relevant data from the ",(0,r.jsx)(t.strong,{children:"Input Message"})," and ",(0,r.jsx)(t.strong,{children:"Format Instructions"}),", the data is organized according to the ",(0,r.jsx)(t.strong,{children:"Output Schema"}),"."]}),"\n",(0,r.jsxs)(t.p,{children:["The schema is a table that defines the fields (keys) and data types for the final ",(0,r.jsx)(t.code,{children:"Data"})," or ",(0,r.jsx)(t.code,{children:"DataFrame"})," output from the ",(0,r.jsx)(t.strong,{children:"Structured Output"})," component."]}),"\n",(0,r.jsxs)(t.p,{children:["The default schema is a single ",(0,r.jsx)(t.code,{children:"field"})," string."]}),"\n",(0,r.jsxs)(t.p,{children:["To add a key to the schema, click ",(0,r.jsx)(i.A,{name:"Plus","aria-hidden":"true"})," ",(0,r.jsx)(t.strong,{children:"Add a new row"}),", and then edit each column to define the schema:"]}),"\n",(0,r.jsxs)(t.ul,{children:["\n",(0,r.jsxs)(t.li,{children:["\n",(0,r.jsxs)(t.p,{children:[(0,r.jsx)(t.strong,{children:"Name"}),": The name of the output field. Typically a specific key for which you want to extract a value."]}),"\n",(0,r.jsxs)(t.p,{children:["You can reference these keys as variables in downstream components, such as a ",(0,r.jsx)(t.strong,{children:"Parser"})," component's template.\nFor example, the schema key ",(0,r.jsx)(t.code,{children:"NET_INCOME"})," could be referenced by the variable ",(0,r.jsx)(t.code,{children:"{NET_INCOME}"}),"."]}),"\n"]}),"\n",(0,r.jsxs)(t.li,{children:["\n",(0,r.jsxs)(t.p,{children:[(0,r.jsx)(t.strong,{children:"Description"}),": An optional metadata description of the field's contents and purpose."]}),"\n"]}),"\n",(0,r.jsxs)(t.li,{children:["\n",(0,r.jsxs)(t.p,{children:[(0,r.jsx)(t.strong,{children:"Type"}),": The data type of the value stored in the field.\nSupported types are ",(0,r.jsx)(t.code,{children:"str"})," (default), ",(0,r.jsx)(t.code,{children:"int"}),", ",(0,r.jsx)(t.code,{children:"float"}),", ",(0,r.jsx)(t.code,{children:"bool"}),", and ",(0,r.jsx)(t.code,{children:"dict"}),"."]}),"\n"]}),"\n",(0,r.jsxs)(t.li,{children:["\n",(0,r.jsxs)(t.p,{children:[(0,r.jsx)(t.strong,{children:"As List"}),": Enable this setting if you want the field to contain a list of values rather than a single value."]}),"\n"]}),"\n"]}),"\n",(0,r.jsxs)(t.p,{children:["For simple schemas, you might only extract a few ",(0,r.jsx)(t.code,{children:"string"})," or ",(0,r.jsx)(t.code,{children:"int"})," fields.\nFor more complex schemas with lists and dictionaries, it might help to refer to the ",(0,r.jsx)(t.code,{children:"Data"})," and ",(0,r.jsx)(t.code,{children:"DataFrame"})," structures and attributes, as described in ",(0,r.jsx)(t.a,{href:"/data-types",children:"Langflow data types"}),".\nYou can also emit a rough ",(0,r.jsx)(t.code,{children:"Data"})," or ",(0,r.jsx)(t.code,{children:"DataFrame"}),", and then use downstream components for further refinement, such as a ",(0,r.jsx)(t.strong,{children:"Data Operations"})," component."]}),"\n",(0,r.jsx)(t.h2,{id:"type-convert",children:"Type Convert"}),"\n",(0,r.jsxs)(t.p,{children:["The ",(0,r.jsx)(t.strong,{children:"Type Convert"})," component converts data from one type to another.\nIt supports ",(0,r.jsx)(t.code,{children:"Data"}),", ",(0,r.jsx)(t.code,{children:"DataFrame"}),", and ",(0,r.jsx)(t.code,{children:"Message"})," data types."]}),"\n",(0,r.jsxs)(c.A,{children:[(0,r.jsxs)(l.A,{value:"data",label:"Data",default:!0,children:[(0,r.jsxs)(t.p,{children:["A ",(0,r.jsx)(t.code,{children:"Data"})," object is a structured object that contains a primary ",(0,r.jsx)(t.code,{children:"text"})," key and other key-value pairs:"]}),(0,r.jsx)(j.Code,{codeConfig:g,northPanel:{tabs:[""],active:"",heightRatio:1},files:[{name:"",focus:"",code:{lines:[{tokens:[{content:'"data"',props:{style:{color:"#A5D6FF"}}},{content:": {",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:' "text"',props:{style:{color:"#7EE787"}}},{content:": ",props:{style:{color:"#C9D1D9"}}},{content:'"User Profile"',props:{style:{color:"#A5D6FF"}}},{content:",",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:' "name"',props:{style:{color:"#7EE787"}}},{content:": ",props:{style:{color:"#C9D1D9"}}},{content:'"Charlie Lastname"',props:{style:{color:"#A5D6FF"}}},{content:",",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:' "age"',props:{style:{color:"#7EE787"}}},{content:": ",props:{style:{color:"#C9D1D9"}}},{content:"28",props:{style:{color:"#79C0FF"}}},{content:",",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:' "email"',props:{style:{color:"#7EE787"}}},{content:": ",props:{style:{color:"#C9D1D9"}}},{content:'"charlie.lastname@example.com"',props:{style:{color:"#A5D6FF"}}}]},{tokens:[{content:"},",props:{style:{color:"#C9D1D9"}}}]}],lang:"json"},annotations:[]}]}),(0,r.jsxs)(t.p,{children:["The larger context associated with a component's ",(0,r.jsx)(t.code,{children:"data"})," dictionary also identifies which key is the primary ",(0,r.jsx)(t.code,{children:"text_key"}),", and it can provide an optional default value if the primary key isn't specified.\nFor example:"]}),(0,r.jsx)(j.Code,{codeConfig:g,northPanel:{tabs:[""],active:"",heightRatio:1},files:[{name:"",focus:"",code:{lines:[{tokens:[{content:"{",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:' "text_key"',props:{style:{color:"#7EE787"}}},{content:": ",props:{style:{color:"#C9D1D9"}}},{content:'"text"',props:{style:{color:"#A5D6FF"}}},{content:",",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:' "data"',props:{style:{color:"#7EE787"}}},{content:": {",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:' "text"',props:{style:{color:"#7EE787"}}},{content:": ",props:{style:{color:"#C9D1D9"}}},{content:'"User Profile"',props:{style:{color:"#A5D6FF"}}},{content:",",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:' "name"',props:{style:{color:"#7EE787"}}},{content:": ",props:{style:{color:"#C9D1D9"}}},{content:'"Charlie Lastname"',props:{style:{color:"#A5D6FF"}}},{content:",",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:' "age"',props:{style:{color:"#7EE787"}}},{content:": ",props:{style:{color:"#C9D1D9"}}},{content:"28",props:{style:{color:"#79C0FF"}}},{content:",",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:' "email"',props:{style:{color:"#7EE787"}}},{content:": ",props:{style:{color:"#C9D1D9"}}},{content:'"charlie.lastname@example.com"',props:{style:{color:"#A5D6FF"}}}]},{tokens:[{content:" },",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:' "default_value"',props:{style:{color:"#7EE787"}}},{content:": ",props:{style:{color:"#C9D1D9"}}},{content:'""',props:{style:{color:"#A5D6FF"}}}]},{tokens:[{content:"}",props:{style:{color:"#C9D1D9"}}}]}],lang:"json"},annotations:[]}]})]}),(0,r.jsxs)(l.A,{value:"dataframe",label:"DataFrame",children:[(0,r.jsxs)(t.p,{children:["A ",(0,r.jsx)(t.code,{children:"DataFrame"})," is an array that represents a tabular data structure with rows and columns."]}),(0,r.jsxs)(t.p,{children:["It consists of a list (array) of dictionary objects, where each dictionary represents a row.\nEach key in the dictionaries corresponds to a column name.\nFor example, the following ",(0,r.jsx)(t.code,{children:"DataFrame"})," contains two rows with columns for ",(0,r.jsx)(t.code,{children:"name"}),", ",(0,r.jsx)(t.code,{children:"age"}),", and ",(0,r.jsx)(t.code,{children:"email"}),":"]}),(0,r.jsx)(j.Code,{codeConfig:g,northPanel:{tabs:[""],active:"",heightRatio:1},files:[{name:"",focus:"",code:{lines:[{tokens:[{content:"[",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" {",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:' "name"',props:{style:{color:"#7EE787"}}},{content:": ",props:{style:{color:"#C9D1D9"}}},{content:'"Charlie Lastname"',props:{style:{color:"#A5D6FF"}}},{content:",",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:' "age"',props:{style:{color:"#7EE787"}}},{content:": ",props:{style:{color:"#C9D1D9"}}},{content:"28",props:{style:{color:"#79C0FF"}}},{content:",",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:' "email"',props:{style:{color:"#7EE787"}}},{content:": ",props:{style:{color:"#C9D1D9"}}},{content:'"charlie.lastname@example.com"',props:{style:{color:"#A5D6FF"}}}]},{tokens:[{content:" },",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" {",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:' "name"',props:{style:{color:"#7EE787"}}},{content:": ",props:{style:{color:"#C9D1D9"}}},{content:'"Bobby Othername"',props:{style:{color:"#A5D6FF"}}},{content:",",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:' "age"',props:{style:{color:"#7EE787"}}},{content:": ",props:{style:{color:"#C9D1D9"}}},{content:"25",props:{style:{color:"#79C0FF"}}},{content:",",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:' "email"',props:{style:{color:"#7EE787"}}},{content:": ",props:{style:{color:"#C9D1D9"}}},{content:'"bobby.othername@example.com"',props:{style:{color:"#A5D6FF"}}}]},{tokens:[{content:" }",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:"]",props:{style:{color:"#C9D1D9"}}}]}],lang:"json"},annotations:[]}]})]}),(0,r.jsx)(l.A,{value:"message",label:"Message",children:(0,r.jsxs)(t.p,{children:["A ",(0,r.jsx)(t.code,{children:"Message"})," is primarily for passing a ",(0,r.jsx)(t.code,{children:"text"})," string, such as",(0,r.jsx)(t.code,{children:'"Name: Charlie Lastname, Age: 28, Email: charlie.lastname@example.com"'}),".\nHowever, the entire ",(0,r.jsx)(t.code,{children:"Message"})," object can include metadata about the message, particularly when used as chat input or output."]})})]}),"\n",(0,r.jsxs)(t.p,{children:["For more information, see ",(0,r.jsx)(t.a,{href:"/data-types",children:"Langflow data types"}),"."]}),"\n",(0,r.jsx)(t.h3,{id:"use-the-type-convert-component-in-a-flow",children:"Use the Type Convert component in a flow"}),"\n",(0,r.jsxs)(t.p,{children:["The ",(0,r.jsx)(t.strong,{children:"Type Convert"})," component is typically used to transform data into a format required by a downstream component.\nFor example, if a component outputs a ",(0,r.jsx)(t.code,{children:"Message"}),", but the following component requires ",(0,r.jsx)(t.code,{children:"Data"}),", then you can use the ",(0,r.jsx)(t.strong,{children:"Type Convert"})," component to reformat the ",(0,r.jsx)(t.code,{children:"Message"})," as ",(0,r.jsx)(t.code,{children:"Data"})," before passing it to the downstream component."]}),"\n",(0,r.jsxs)(t.p,{children:["The following example uses the ",(0,r.jsx)(t.strong,{children:"Type Convert"})," component to convert the ",(0,r.jsx)(t.code,{children:"DataFrame"})," output from a ",(0,r.jsx)(t.strong,{children:"Web Search"})," component into ",(0,r.jsx)(t.code,{children:"Message"})," data that is passed as text input for an LLM:"]}),"\n",(0,r.jsxs)(t.ol,{children:["\n",(0,r.jsxs)(t.li,{children:["\n",(0,r.jsxs)(t.p,{children:["Create a flow based on the ",(0,r.jsx)(t.strong,{children:"Basic prompting"})," template."]}),"\n"]}),"\n",(0,r.jsxs)(t.li,{children:["\n",(0,r.jsxs)(t.p,{children:["Add a ",(0,r.jsx)(t.strong,{children:"Web Search"})," component to the flow, and then enter a search query, such as ",(0,r.jsx)(t.code,{children:"environmental news"}),"."]}),"\n"]}),"\n",(0,r.jsxs)(t.li,{children:["\n",(0,r.jsxs)(t.p,{children:["In the ",(0,r.jsx)(t.strong,{children:"Prompt Template"})," component, replace the contents of the ",(0,r.jsx)(t.strong,{children:"Template"})," field with the following text:"]}),"\n",(0,r.jsx)(j.Code,{codeConfig:g,northPanel:{tabs:[""],active:"",heightRatio:1},files:[{name:"",focus:"",code:{lines:[{tokens:[{content:"Answer the user's question using the {context}",props:{}}]}],lang:"text"},annotations:[]}]}),"\n",(0,r.jsxs)(t.p,{children:["The curly braces define a ",(0,r.jsx)(t.a,{href:"/components-prompts#define-variables-in-prompts",children:"prompt variable"})," that becomes an input field on the ",(0,r.jsx)(t.strong,{children:"Prompt Template"})," component.\nIn this example, you will use the ",(0,r.jsx)(t.strong,{children:"context"})," field to pass the search results into the template, as explained in the next steps."]}),"\n"]}),"\n",(0,r.jsxs)(t.li,{children:["\n",(0,r.jsxs)(t.p,{children:["Add a ",(0,r.jsx)(t.strong,{children:"Type Convert"})," component to the flow, and then set the ",(0,r.jsx)(t.strong,{children:"Output Type"})," to ",(0,r.jsx)(t.strong,{children:"Message"}),"."]}),"\n",(0,r.jsxs)(t.p,{children:["Because the ",(0,r.jsx)(t.strong,{children:"Web Search"})," component's ",(0,r.jsx)(t.code,{children:"DataFrame"})," output is incompatible with the ",(0,r.jsx)(t.strong,{children:"context"})," variable's ",(0,r.jsx)(t.code,{children:"Message"})," input, you must use the ",(0,r.jsx)(t.strong,{children:"Type Convert"})," component to change the ",(0,r.jsx)(t.code,{children:"DataFrame"})," to a ",(0,r.jsx)(t.code,{children:"Message"})," in order to pass the search results to the ",(0,r.jsx)(t.strong,{children:"Prompt Template"})," component."]}),"\n"]}),"\n",(0,r.jsxs)(t.li,{children:["\n",(0,r.jsx)(t.p,{children:"Connect the additional components to the rest of the flow:"}),"\n",(0,r.jsxs)(t.ul,{children:["\n",(0,r.jsxs)(t.li,{children:["Connect the ",(0,r.jsx)(t.strong,{children:"Web Search"})," component's output to the ",(0,r.jsx)(t.strong,{children:"Type Convert"})," component's input."]}),"\n",(0,r.jsxs)(t.li,{children:["Connect the ",(0,r.jsx)(t.strong,{children:"Type Convert"})," component's output to the ",(0,r.jsx)(t.strong,{children:"Prompt Template"})," component's ",(0,r.jsx)(t.strong,{children:"context"})," input."]}),"\n"]}),"\n",(0,r.jsx)(t.p,{children:(0,r.jsx)(t.img,{alt:"Convert web search output to text input",src:n(42547).A+"",width:"4000",height:"1826"})}),"\n"]}),"\n",(0,r.jsxs)(t.li,{children:["\n",(0,r.jsxs)(t.p,{children:["In the ",(0,r.jsx)(t.strong,{children:"Language Model"})," component, add your OpenAI API key."]}),"\n",(0,r.jsxs)(t.p,{children:["If you want to use a different provider or model, edit the ",(0,r.jsx)(t.strong,{children:"Model Provider"}),", ",(0,r.jsx)(t.strong,{children:"Model Name"}),", and ",(0,r.jsx)(t.strong,{children:"API Key"})," fields accordingly."]}),"\n"]}),"\n",(0,r.jsxs)(t.li,{children:["\n",(0,r.jsxs)(t.p,{children:["Click ",(0,r.jsx)(t.strong,{children:"Playground"}),", and then ask something relevant to your search query, such as ",(0,r.jsx)(t.code,{children:"latest news"})," or ",(0,r.jsx)(t.code,{children:"what's the latest research on the environment?"}),"."]}),"\n",(0,r.jsxs)(s,{children:[(0,r.jsx)("summary",{children:"Result"}),(0,r.jsx)(t.p,{children:"The LLM uses the search results context, your chat message, and it's built-in training data to respond to your question.\nFor example:"}),(0,r.jsx)(j.Code,{codeConfig:g,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)(t.h3,{id:"type-convert-parameters",children:"Type Convert parameters"}),"\n",(0,r.jsxs)(t.table,{children:[(0,r.jsx)(t.thead,{children:(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.th,{children:"Name"}),(0,r.jsx)(t.th,{children:"Display Name"}),(0,r.jsx)(t.th,{children:"Info"})]})}),(0,r.jsxs)(t.tbody,{children:[(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"input_data"}),(0,r.jsx)(t.td,{children:"Input Data"}),(0,r.jsxs)(t.td,{children:["Input parameter. The data to convert. Accepts ",(0,r.jsx)(t.code,{children:"Data"}),", ",(0,r.jsx)(t.code,{children:"DataFrame"}),", or ",(0,r.jsx)(t.code,{children:"Message"})," input."]})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"output_type"}),(0,r.jsx)(t.td,{children:"Output Type"}),(0,r.jsxs)(t.td,{children:["Input parameter. The desired output type, as one of ",(0,r.jsx)(t.strong,{children:"Data"}),", ",(0,r.jsx)(t.strong,{children:"DataFrame"})," or ",(0,r.jsx)(t.strong,{children:"Message"}),"."]})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"output"}),(0,r.jsx)(t.td,{children:"Output"}),(0,r.jsxs)(t.td,{children:["Output parameter. The converted data in the specified format. The output port changes depending on the selected ",(0,r.jsx)(t.strong,{children:"Output Type"}),"."]})]})]})]}),"\n",(0,r.jsx)(t.h2,{id:"legacy-processing-components",children:"Legacy Processing components"}),"\n","\n",(0,r.jsx)(p.Ay,{}),"\n",(0,r.jsx)(t.p,{children:"The following Processing components are in legacy status:"}),"\n",(0,r.jsxs)(s,{children:[(0,r.jsx)("summary",{children:"Alter Metadata"}),(0,r.jsxs)(t.p,{children:["Replace this legacy component with the ",(0,r.jsxs)(t.a,{href:"#data-operations",children:[(0,r.jsx)(t.strong,{children:"Data Operations"})," component"]}),"."]}),(0,r.jsxs)(t.p,{children:["This component modifies metadata of input objects. It can add new metadata, update existing metadata, and remove specified metadata fields. The component works with both ",(0,r.jsx)(t.code,{children:"Message"})," and ",(0,r.jsx)(t.code,{children:"Data"})," objects, and can also create a new ",(0,r.jsx)(t.code,{children:"Data"})," object from user-provided text."]}),(0,r.jsx)(t.p,{children:"It accepts the following parameters:"}),(0,r.jsxs)(t.table,{children:[(0,r.jsx)(t.thead,{children:(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.th,{children:"Name"}),(0,r.jsx)(t.th,{children:"Display Name"}),(0,r.jsx)(t.th,{children:"Info"})]})}),(0,r.jsxs)(t.tbody,{children:[(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"input_value"}),(0,r.jsx)(t.td,{children:"Input"}),(0,r.jsx)(t.td,{children:"Input parameter. Objects to which Metadata should be added."})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"text_in"}),(0,r.jsx)(t.td,{children:"User Text"}),(0,r.jsxs)(t.td,{children:["Input parameter. Text input; the value is contained in the 'text' attribute of the ",(0,r.jsx)(t.code,{children:"Data"})," object. Empty text entries are ignored."]})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"metadata"}),(0,r.jsx)(t.td,{children:"Metadata"}),(0,r.jsx)(t.td,{children:"Input parameter. Metadata to add to each object."})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"remove_fields"}),(0,r.jsx)(t.td,{children:"Fields to Remove"}),(0,r.jsx)(t.td,{children:"Input parameter. Metadata fields to remove."})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"data"}),(0,r.jsx)(t.td,{children:"Data"}),(0,r.jsx)(t.td,{children:"Output parameter. List of Input objects, each with added metadata."})]})]})]})]}),"\n",(0,r.jsxs)(s,{children:[(0,r.jsx)("summary",{children:"Combine Data"}),(0,r.jsxs)(t.p,{children:["Replace this legacy component with the ",(0,r.jsxs)(t.a,{href:"#data-operations",children:[(0,r.jsx)(t.strong,{children:"Data Operations"})," component"]})," or the ",(0,r.jsxs)(t.a,{href:"/components-logic#loop",children:[(0,r.jsx)(t.strong,{children:"Loop"})," component"]}),"."]}),(0,r.jsxs)(t.p,{children:["This component combines multiple data sources into a single unified ",(0,r.jsx)(t.code,{children:"Data"})," object."]}),(0,r.jsxs)(t.p,{children:["The component iterates through a list of ",(0,r.jsx)(t.code,{children:"Data"})," objects, merging them into a single ",(0,r.jsx)(t.code,{children:"Data"})," object (",(0,r.jsx)(t.code,{children:"merged_data"}),").\nIf the input list is empty, it returns an empty data object.\nIf there's only one input data object, it returns that object unchanged."]}),(0,r.jsx)(t.p,{children:"The merging process uses the addition operator to combine data objects."})]}),"\n",(0,r.jsxs)(s,{children:[(0,r.jsx)("summary",{children:"Combine Text"}),(0,r.jsxs)(t.p,{children:["Replace this legacy component with the ",(0,r.jsxs)(t.a,{href:"#data-operations",children:[(0,r.jsx)(t.strong,{children:"Data Operations"})," component"]}),"."]}),(0,r.jsxs)(t.p,{children:["This component concatenates two text inputs into a single text chunk using a specified delimiter, outputting a ",(0,r.jsx)(t.code,{children:"Message"})," object with the combined text."]})]}),"\n",(0,r.jsxs)(s,{children:[(0,r.jsx)("summary",{children:"Create Data"}),(0,r.jsxs)(t.p,{children:["Replace this legacy component with the ",(0,r.jsxs)(t.a,{href:"#data-operations",children:[(0,r.jsx)(t.strong,{children:"Data Operations"})," component"]}),"."]}),(0,r.jsxs)(t.p,{children:["This component dynamically creates a ",(0,r.jsx)(t.code,{children:"Data"})," object with a specified number of fields and a text key."]}),(0,r.jsx)(t.p,{children:"It accepts the following parameters:"}),(0,r.jsxs)(t.table,{children:[(0,r.jsx)(t.thead,{children:(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.th,{children:"Name"}),(0,r.jsx)(t.th,{children:"Display Name"}),(0,r.jsx)(t.th,{children:"Info"})]})}),(0,r.jsxs)(t.tbody,{children:[(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"number_of_fields"}),(0,r.jsx)(t.td,{children:"Number of Fields"}),(0,r.jsx)(t.td,{children:"Input parameter. The number of fields to be added to the record."})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"text_key"}),(0,r.jsx)(t.td,{children:"Text Key"}),(0,r.jsx)(t.td,{children:"Input parameter. Key that identifies the field to be used as the text content."})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"text_key_validator"}),(0,r.jsx)(t.td,{children:"Text Key Validator"}),(0,r.jsxs)(t.td,{children:["Input parameter. If enabled, checks if the given ",(0,r.jsx)(t.code,{children:"Text Key"})," is present in the given ",(0,r.jsx)(t.code,{children:"Data"}),"."]})]})]})]})]}),"\n",(0,r.jsxs)(s,{children:[(0,r.jsx)("summary",{children:"Extract Key"}),(0,r.jsxs)(t.p,{children:["Replace this legacy component with the ",(0,r.jsxs)(t.a,{href:"#data-operations",children:[(0,r.jsx)(t.strong,{children:"Data Operations"})," component"]}),"."]}),(0,r.jsxs)(t.p,{children:["This component extracts a specific key from a ",(0,r.jsx)(t.code,{children:"Data"})," object and returns the value associated with that key."]})]}),"\n",(0,r.jsxs)(s,{children:[(0,r.jsx)("summary",{children:"Data to DataFrame/Data to Message"}),(0,r.jsxs)(t.p,{children:["Replace these legacy components with newer Processing components, such as the ",(0,r.jsxs)(t.a,{href:"#data-operations",children:[(0,r.jsx)(t.strong,{children:"Data Operations"})," component"]})," and ",(0,r.jsxs)(t.a,{href:"#type-convert",children:[(0,r.jsx)(t.strong,{children:"Type Convert"})," component"]}),"."]}),(0,r.jsxs)(t.p,{children:["These components converted one or more ",(0,r.jsx)(t.code,{children:"Data"})," objects into a ",(0,r.jsx)(t.code,{children:"DataFrame"})," or ",(0,r.jsx)(t.code,{children:"Message"})," object."]}),(0,r.jsxs)(t.p,{children:["For the ",(0,r.jsx)(t.strong,{children:"Data to DataFrame"})," component, each ",(0,r.jsx)(t.code,{children:"Data"})," object corresponds to one row in the resulting ",(0,r.jsx)(t.code,{children:"DataFrame"}),".\nFields from the ",(0,r.jsx)(t.code,{children:".data"})," attribute become columns, and the ",(0,r.jsx)(t.code,{children:".text"})," field (if present) is placed in a ",(0,r.jsx)(t.code,{children:"text"})," column."]})]}),"\n",(0,r.jsxs)(s,{children:[(0,r.jsx)("summary",{children:"Filter Data"}),(0,r.jsxs)(t.p,{children:["Replace this legacy component with the ",(0,r.jsxs)(t.a,{href:"#data-operations",children:[(0,r.jsx)(t.strong,{children:"Data Operations"})," component"]}),"."]}),(0,r.jsxs)(t.p,{children:["This component filters a ",(0,r.jsx)(t.code,{children:"Data"})," object based on a list of keys (",(0,r.jsx)(t.code,{children:"filter_criteria"}),"), returning a new ",(0,r.jsx)(t.code,{children:"Data"})," object (",(0,r.jsx)(t.code,{children:"filtered_data"}),") that contains only the key-value pairs that match the filter criteria."]})]}),"\n",(0,r.jsxs)(s,{children:[(0,r.jsx)("summary",{children:"Filter Values"}),(0,r.jsxs)(t.p,{children:["Replace this legacy component with the ",(0,r.jsxs)(t.a,{href:"#data-operations",children:[(0,r.jsx)(t.strong,{children:"Data Operations"})," component"]}),"."]}),(0,r.jsx)(t.p,{children:"The Filter values component filters a list of data items based on a specified key, filter value, and comparison operator."}),(0,r.jsx)(t.p,{children:"It accepts the following parameters:"}),(0,r.jsxs)(t.table,{children:[(0,r.jsx)(t.thead,{children:(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.th,{children:"Name"}),(0,r.jsx)(t.th,{children:"Display Name"}),(0,r.jsx)(t.th,{children:"Info"})]})}),(0,r.jsxs)(t.tbody,{children:[(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"input_data"}),(0,r.jsx)(t.td,{children:"Input data"}),(0,r.jsx)(t.td,{children:"Input parameter. The list of data items to filter."})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"filter_key"}),(0,r.jsx)(t.td,{children:"Filter Key"}),(0,r.jsx)(t.td,{children:"Input parameter. The key to filter on."})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"filter_value"}),(0,r.jsx)(t.td,{children:"Filter Value"}),(0,r.jsx)(t.td,{children:"Input parameter. The value to filter by."})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"operator"}),(0,r.jsx)(t.td,{children:"Comparison Operator"}),(0,r.jsx)(t.td,{children:"Input parameter. The operator to apply for comparing the values."})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"filtered_data"}),(0,r.jsx)(t.td,{children:"Filtered data"}),(0,r.jsx)(t.td,{children:"Output parameter. The resulting list of filtered data items."})]})]})]})]}),"\n",(0,r.jsxs)(s,{children:[(0,r.jsx)("summary",{children:"JSON Cleaner"}),(0,r.jsxs)(t.p,{children:["Replace this legacy component with the ",(0,r.jsxs)(t.a,{href:"#parser",children:[(0,r.jsx)(t.strong,{children:"Parser"})," component"]}),"."]}),(0,r.jsx)(t.p,{children:"This component cleans JSON strings to ensure they are fully compliant with the JSON specification."}),(0,r.jsx)(t.p,{children:"It accepts the following parameters:"}),(0,r.jsxs)(t.table,{children:[(0,r.jsx)(t.thead,{children:(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.th,{children:"Name"}),(0,r.jsx)(t.th,{children:"Display Name"}),(0,r.jsx)(t.th,{children:"Info"})]})}),(0,r.jsxs)(t.tbody,{children:[(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"json_str"}),(0,r.jsx)(t.td,{children:"JSON String"}),(0,r.jsx)(t.td,{children:"Input parameter. The JSON string to be cleaned. This can be a raw, potentially malformed JSON string produced by language models or other sources that may not fully comply with JSON specifications."})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"remove_control_chars"}),(0,r.jsx)(t.td,{children:"Remove Control Characters"}),(0,r.jsxs)(t.td,{children:["Input parameter. If set to ",(0,r.jsx)(t.code,{children:"True"}),", this option removes control characters (ASCII characters 0-31 and 127) from the JSON string. This can help eliminate invisible characters that might cause parsing issues or make the JSON invalid."]})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"normalize_unicode"}),(0,r.jsx)(t.td,{children:"Normalize Unicode"}),(0,r.jsx)(t.td,{children:"Input parameter. When enabled, this option normalizes Unicode characters in the JSON string to their canonical composition form (NFC). This ensures consistent representation of Unicode characters across different systems and prevents potential issues with character encoding."})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"validate_json"}),(0,r.jsx)(t.td,{children:"Validate JSON"}),(0,r.jsxs)(t.td,{children:["Input parameter. If set to ",(0,r.jsx)(t.code,{children:"True"}),", this option attempts to parse the JSON string to ensure it is well-formed before applying the final repair operation. It raises a ValueError if the JSON is invalid, allowing for early detection of major structural issues in the JSON."]})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"output"}),(0,r.jsx)(t.td,{children:"Cleaned JSON String"}),(0,r.jsx)(t.td,{children:"Output parameter. The resulting cleaned, repaired, and validated JSON string that fully complies with the JSON specification."})]})]})]})]}),"\n",(0,r.jsxs)(s,{children:[(0,r.jsx)("summary",{children:"Message to Data"}),(0,r.jsxs)(t.p,{children:["Replace this legacy component with the ",(0,r.jsxs)(t.a,{href:"#type-convert",children:[(0,r.jsx)(t.strong,{children:"Type Convert"})," component"]}),"."]}),(0,r.jsxs)(t.p,{children:["This component converts ",(0,r.jsx)(t.code,{children:"Message"})," objects to ",(0,r.jsx)(t.code,{children:"Data"})," objects."]})]}),"\n",(0,r.jsxs)(s,{children:[(0,r.jsx)("summary",{children:"Parse DataFrame"}),(0,r.jsxs)(t.p,{children:["Replace this legacy component with the ",(0,r.jsxs)(t.a,{href:"#dataframe-operations",children:[(0,r.jsx)(t.strong,{children:"DataFrame Operations"})," component"]})," or ",(0,r.jsxs)(t.a,{href:"#parser",children:[(0,r.jsx)(t.strong,{children:"Parser"})," component"]}),"."]}),(0,r.jsxs)(t.p,{children:["This component converts ",(0,r.jsx)(t.code,{children:"DataFrame"})," objects into plain text using templates."]}),(0,r.jsx)(t.p,{children:"It accepts the following parameters:"}),(0,r.jsxs)(t.table,{children:[(0,r.jsx)(t.thead,{children:(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.th,{children:"Name"}),(0,r.jsx)(t.th,{children:"Display Name"}),(0,r.jsx)(t.th,{children:"Info"})]})}),(0,r.jsxs)(t.tbody,{children:[(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"df"}),(0,r.jsx)(t.td,{children:"DataFrame"}),(0,r.jsx)(t.td,{children:"Input parameter. The DataFrame to convert to text rows."})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"template"}),(0,r.jsx)(t.td,{children:"Template"}),(0,r.jsxs)(t.td,{children:["Input parameter. Template for formatting (use ",(0,r.jsx)(t.code,{children:"{column_name}"})," placeholders)."]})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"sep"}),(0,r.jsx)(t.td,{children:"Separator"}),(0,r.jsx)(t.td,{children:"Input parameter. String to join rows in output."})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"text"}),(0,r.jsx)(t.td,{children:"Text"}),(0,r.jsx)(t.td,{children:"Output parameter. All rows combined into single text."})]})]})]})]}),"\n",(0,r.jsxs)(s,{children:[(0,r.jsx)("summary",{children:"Parse JSON"}),(0,r.jsxs)(t.p,{children:["Replace this legacy component with the ",(0,r.jsxs)(t.a,{href:"#parser",children:[(0,r.jsx)(t.strong,{children:"Parser"})," component"]}),"."]}),(0,r.jsxs)(t.p,{children:["This component converts and extracts JSON fields in ",(0,r.jsx)(t.code,{children:"Message"})," and ",(0,r.jsx)(t.code,{children:"Data"})," objects using JQ queries, then returns ",(0,r.jsx)(t.code,{children:"filtered_data"}),", which is a list of ",(0,r.jsx)(t.code,{children:"Data"})," objects."]})]}),"\n",(0,r.jsxs)(s,{children:[(0,r.jsx)("summary",{children:"Regex Extractor"}),(0,r.jsxs)(t.p,{children:["Replace this legacy component with the ",(0,r.jsxs)(t.a,{href:"#parser",children:[(0,r.jsx)(t.strong,{children:"Parser"})," component"]}),"."]}),(0,r.jsx)(t.p,{children:"This component extracts patterns in text using regular expressions. It can be used to find and extract specific patterns or information in text."})]}),"\n",(0,r.jsxs)(s,{children:[(0,r.jsx)("summary",{children:"Select Data"}),(0,r.jsxs)(t.p,{children:["Replace this legacy component with the ",(0,r.jsxs)(t.a,{href:"#data-operations",children:[(0,r.jsx)(t.strong,{children:"Data Operations"})," component"]}),"."]}),(0,r.jsxs)(t.p,{children:["This component selects a single ",(0,r.jsx)(t.code,{children:"Data"})," object from a list."]}),(0,r.jsx)(t.p,{children:"It accepts the following parameters:"}),(0,r.jsxs)(t.table,{children:[(0,r.jsx)(t.thead,{children:(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.th,{children:"Name"}),(0,r.jsx)(t.th,{children:"Display Name"}),(0,r.jsx)(t.th,{children:"Info"})]})}),(0,r.jsxs)(t.tbody,{children:[(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"data_list"}),(0,r.jsx)(t.td,{children:"Data List"}),(0,r.jsx)(t.td,{children:"Input parameter. List of data to select from"})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"data_index"}),(0,r.jsx)(t.td,{children:"Data Index"}),(0,r.jsx)(t.td,{children:"Input parameter. Index of the data to select"})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"selected_data"}),(0,r.jsx)(t.td,{children:"Selected Data"}),(0,r.jsxs)(t.td,{children:["Output parameter. The selected ",(0,r.jsx)(t.code,{children:"Data"})," object."]})]})]})]})]}),"\n",(0,r.jsxs)(s,{children:[(0,r.jsx)("summary",{children:"Update Data"}),(0,r.jsxs)(t.p,{children:["Replace this legacy component with the ",(0,r.jsxs)(t.a,{href:"#data-operations",children:[(0,r.jsx)(t.strong,{children:"Data Operations"})," component"]}),"."]}),(0,r.jsx)(t.p,{children:"This component dynamically updates or appends data with specified fields."}),(0,r.jsx)(t.p,{children:"It accepts the following parameters:"}),(0,r.jsxs)(t.table,{children:[(0,r.jsx)(t.thead,{children:(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.th,{children:"Name"}),(0,r.jsx)(t.th,{children:"Display Name"}),(0,r.jsx)(t.th,{children:"Info"})]})}),(0,r.jsxs)(t.tbody,{children:[(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"old_data"}),(0,r.jsx)(t.td,{children:"Data"}),(0,r.jsx)(t.td,{children:"Input parameter. The records to update."})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"number_of_fields"}),(0,r.jsx)(t.td,{children:"Number of Fields"}),(0,r.jsx)(t.td,{children:"Input parameter. The number of fields to add. The maximum is 15."})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"text_key"}),(0,r.jsx)(t.td,{children:"Text Key"}),(0,r.jsx)(t.td,{children:"Input parameter. The key for text content."})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"text_key_validator"}),(0,r.jsx)(t.td,{children:"Text Key Validator"}),(0,r.jsx)(t.td,{children:"Input parameter. Validates the text key presence."})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"data"}),(0,r.jsx)(t.td,{children:"Data"}),(0,r.jsx)(t.td,{children:"Output parameter. The updated Data objects."})]})]})]})]})]})}function b(e={}){const{wrapper:t}={...(0,o.R)(),...e.components};return t?(0,r.jsx)(t,{...e,children:(0,r.jsx)(y,{...e})}):y(e)}function D(e,t){throw new Error("Expected "+(t?"component":"object")+" `"+e+"` to be defined: you likely forgot to import, pass, or provide it.")}},42547:(e,t,n)=>{n.d(t,{A:()=>s});const s=n.p+"assets/images/component-type-convert-and-web-search-1eef7b9a7c1a243f4a08d9717728d0e1.png"},46445:(e,t,n)=>{n.d(t,{A:()=>s});const s=n.p+"assets/images/component-data-operations-select-key-80bade862d29f2851b01ee26413d495f.png"},49823:(e,t,n)=>{n.d(t,{A:()=>s});const s=n.p+"assets/images/component-split-text-fec2b1abb28e0852c8a172bbeb164b2c.png"},66539:(e,t,n)=>{n.d(t,{A:()=>s});const s=n.p+"assets/images/component-lambda-filter-76cd345c52fa41a59dcfac0205dc3068.png"},72736:(e,t,n)=>{n.d(t,{Ay:()=>i,RM:()=>o});var s=n(74848),r=n(28453);const o=[];function a(e){const t={code:"code",p:"p",...(0,r.R)(),...e.components};return(0,s.jsxs)(t.p,{children:["If your template includes literal text and variables, you can use double curly braces to escape literal curly braces in the template and prevent interpretation of that text as a variable.\nFor example: ",(0,s.jsx)(t.code,{children:"This is a template with {{literal text in curly braces}} and a {variable}"}),"."]})}function i(e={}){const{wrapper:t}={...(0,r.R)(),...e.components};return t?(0,s.jsx)(t,{...e,children:(0,s.jsx)(a,{...e})}):a(e)}},82798:(e,t,n)=>{n.d(t,{A:()=>s});const s=n.p+"assets/images/component-structured-output-23458b0d29eed6d092b557c7aaf6ab2c.png"},88103:(e,t,n)=>{n.d(t,{A:()=>s});const s=n.p+"assets/images/component-batch-run-19c94fbb0646b2731b37013b84dff1f6.png"},96218:(e,t,n)=>{n.d(t,{A:()=>s});const s=n.p+"assets/images/component-parser-1d1d72593f02991e5b14b6b1c112a744.png"},99e3:(e,t,n)=>{n.d(t,{A:()=>s});const s=n.p+"assets/images/component-python-interpreter-1ef9e7dec643a216fd5e83c2139d09c9.png"}}]); \ No newline at end of file diff --git a/assets/js/e6c6a4d2.f307d36f.js b/assets/js/e6c6a4d2.2d21ef43.js similarity index 55% rename from assets/js/e6c6a4d2.f307d36f.js rename to assets/js/e6c6a4d2.2d21ef43.js index e8e6331cc4..cd28a0ac6f 100644 --- a/assets/js/e6c6a4d2.f307d36f.js +++ b/assets/js/e6c6a4d2.2d21ef43.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.6.0"},"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 \\"mollit__\\": \\"\\",\\n \\"dolore_4\\": \\"\\",\\n \\"nulla_7\\": \\"\\"\\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.6.0"},"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 \\"in700\\": \\"\\",\\n \\"cupidatatde6\\": \\"\\",\\n \\"consectetur_2c2\\": \\"\\",\\n \\"dolor932\\": \\"\\"\\n },\\n \\"stream\\": false,\\n \\"session_id\\": \\"\\"\\n}","options":{"raw":{"language":"json"}}},"auth":{"type":"apikey","apikey":[{"type":"any","value":"x-api-key","key":"key"},{"type":"any","value":"{{apiKey}}","key":"value"},{"type":"any","value":"query","key":"in"}]}}},"source":"@site/openapi.json","sourceDirName":".","permalink":"/api/experimental-run-flow","previous":{"title":"Webhook Run Flow","permalink":"/api/webhook-run-flow"},"next":{"title":"Process","permalink":"/api/process"}}');var i=n(74848),o=n(28453);const a={},l="Experimental Run Flow",r=[{value:"Parameters:",id:"parameters",level:3},{value:"Returns:",id:"returns",level:3},{value:"Raises:",id:"raises",level:3},{value:"Example usage:",id:"example-usage",level:3}];function p(e){const t={code:"code",h1:"h1",h3:"h3",header:"header",li:"li",p:"p",pre:"pre",ul:"ul",...(0,o.R)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(t.header,{children:(0,i.jsx)(t.h1,{id:"experimental-run-flow",children:"Experimental Run Flow"})}),"\n",(0,i.jsx)(t.p,{children:"Executes a specified flow by ID with optional input values, output selection, tweaks, and streaming capability."}),"\n",(0,i.jsx)(t.p,{children:"This endpoint supports running flows with caching to enhance performance and efficiency."}),"\n",(0,i.jsx)(t.h3,{id:"parameters",children:"Parameters:"}),"\n",(0,i.jsxs)(t.ul,{children:["\n",(0,i.jsxs)(t.li,{children:[(0,i.jsx)(t.code,{children:"flow_id"})," (str): The unique identifier of the flow to be executed."]}),"\n",(0,i.jsxs)(t.li,{children:[(0,i.jsx)(t.code,{children:"inputs"})," (List[InputValueRequest], optional): A list of inputs specifying the input values and components\nfor the flow. Each input can target specific components and provide custom values."]}),"\n",(0,i.jsxs)(t.li,{children:[(0,i.jsx)(t.code,{children:"outputs"})," (List[str], optional): A list of output names to retrieve from the executed flow.\nIf not provided, all outputs are returned."]}),"\n",(0,i.jsxs)(t.li,{children:[(0,i.jsx)(t.code,{children:"tweaks"})," (Optional[Tweaks], optional): A dictionary of tweaks to customize the flow execution.\nThe tweaks can be used to modify the flow's parameters and components.\nTweaks can be overridden by the input values."]}),"\n",(0,i.jsxs)(t.li,{children:[(0,i.jsx)(t.code,{children:"stream"})," (bool, optional): Specifies whether the results should be streamed. Defaults to False."]}),"\n",(0,i.jsxs)(t.li,{children:[(0,i.jsx)(t.code,{children:"session_id"})," (Union[None, str], optional): An optional session ID to utilize existing session data for the flow\nexecution."]}),"\n",(0,i.jsxs)(t.li,{children:[(0,i.jsx)(t.code,{children:"api_key_user"})," (User): The user associated with the current API key. Automatically resolved from the API key."]}),"\n"]}),"\n",(0,i.jsx)(t.h3,{id:"returns",children:"Returns:"}),"\n",(0,i.jsxs)(t.p,{children:["A ",(0,i.jsx)(t.code,{children:"RunResponse"})," object containing the selected outputs (or all if not specified) of the executed flow\nand the session ID.\nThe structure of the response accommodates multiple inputs, providing a nested list of outputs for each input."]}),"\n",(0,i.jsx)(t.h3,{id:"raises",children:"Raises:"}),"\n",(0,i.jsx)(t.p,{children:"HTTPException: Indicates issues with finding the specified flow, invalid input formats, or internal errors during\nflow execution."}),"\n",(0,i.jsx)(t.h3,{id:"example-usage",children:"Example usage:"}),"\n",(0,i.jsx)(t.pre,{children:(0,i.jsx)(t.code,{className:"language-json",children:'POST /run/flow_id\nx-api-key: YOUR_API_KEY\nPayload:\n{\n "inputs": [\n {"components": ["component1"], "input_value": "value1"},\n {"components": ["component3"], "input_value": "value2"}\n ],\n "outputs": ["Component Name", "component_id"],\n "tweaks": {"parameter_name": "value", "Component Name": {"parameter_name": "value"}, "component_id": {"parameter_name": "value"}}\n "stream": false\n}\n'})}),"\n",(0,i.jsx)(t.p,{children:"This endpoint facilitates complex flow executions with customized inputs, outputs, and configurations,\ncatering to diverse application requirements."}),"\n",(0,i.jsxs)("table",{style:{display:"table",width:"100%"},children:[(0,i.jsx)("thead",{children:(0,i.jsx)("tr",{children:(0,i.jsx)("th",{style:{textAlign:"left"},children:"Path Parameters"})})}),(0,i.jsx)("tbody",{children:(0,i.jsx)("tr",{children:(0,i.jsxs)("td",{children:[(0,i.jsx)("code",{children:"flow_id"}),(0,i.jsx)("span",{style:{opacity:"0.6"},children:" uuid"}),(0,i.jsx)("span",{style:{opacity:"0.6"},children:" \u2014 "}),(0,i.jsx)("strong",{style:{fontSize:"var(--ifm-code-font-size)",color:"var(--openapi-required)"},children:" REQUIRED"})]})})})]}),"\n",(0,i.jsxs)("table",{style:{display:"table",width:"100%"},children:[(0,i.jsx)("thead",{children:(0,i.jsx)("tr",{children:(0,i.jsxs)("th",{style:{textAlign:"left"},children:[(0,i.jsx)("span",{children:"Request Body "}),(0,i.jsx)("div",{})]})})}),(0,i.jsxs)("tbody",{children:[(0,i.jsx)("tr",{children:(0,i.jsxs)("td",{children:[(0,i.jsx)("code",{children:"inputs"}),(0,i.jsx)("span",{style:{opacity:"0.6"},children:" Inputs"})]})}),(0,i.jsx)("tr",{children:(0,i.jsxs)("td",{children:[(0,i.jsx)("code",{children:"outputs"}),(0,i.jsx)("span",{style:{opacity:"0.6"},children:" Outputs"})]})}),(0,i.jsx)("tr",{children:(0,i.jsxs)("td",{children:[(0,i.jsx)("code",{children:"tweaks"}),(0,i.jsx)("span",{style:{opacity:"0.6"}})]})}),(0,i.jsx)("tr",{children:(0,i.jsxs)("td",{children:[(0,i.jsx)("code",{children:"stream"}),(0,i.jsx)("span",{style:{opacity:"0.6"},children:" Stream"})]})}),(0,i.jsx)("tr",{children:(0,i.jsxs)("td",{children:[(0,i.jsx)("code",{children:"session_id"}),(0,i.jsx)("span",{style:{opacity:"0.6"},children:" Session Id"})]})})]})]}),"\n",(0,i.jsxs)("table",{style:{display:"table",width:"100%"},children:[(0,i.jsx)("thead",{children:(0,i.jsx)("tr",{children:(0,i.jsx)("th",{style:{textAlign:"left"},children:"Responses"})})}),(0,i.jsxs)("tbody",{children:[(0,i.jsx)("tr",{children:(0,i.jsxs)("td",{children:[(0,i.jsxs)("div",{style:{display:"flex"},children:[(0,i.jsx)("div",{style:{marginRight:"var(--ifm-table-cell-padding)"},children:(0,i.jsx)("code",{children:"200"})}),(0,i.jsx)("div",{children:(0,i.jsx)(t.p,{children:"Successful Response"})})]}),(0,i.jsx)("div",{children:(0,i.jsxs)("table",{style:{display:"table",width:"100%",marginTop:"var(--ifm-table-cell-padding)",marginBottom:"0px"},children:[(0,i.jsx)("thead",{children:(0,i.jsx)("tr",{children:(0,i.jsxs)("th",{style:{textAlign:"left"},children:[(0,i.jsx)("span",{children:"Schema "}),(0,i.jsx)("span",{style:{opacity:"0.6"},children:" \u2014 "}),(0,i.jsx)("strong",{style:{fontSize:"var(--ifm-code-font-size)",color:"var(--openapi-optional)"},children:" OPTIONAL"}),(0,i.jsx)("div",{})]})})}),(0,i.jsxs)("tbody",{children:[(0,i.jsx)("tr",{children:(0,i.jsxs)("td",{children:[(0,i.jsx)("code",{children:"outputs"}),(0,i.jsx)("span",{style:{opacity:"0.6"},children:" Outputs"}),(0,i.jsx)("span",{style:{opacity:"0.6"},children:" \u2014 "}),(0,i.jsx)("strong",{style:{fontSize:"var(--ifm-code-font-size)",color:"var(--openapi-optional)"},children:" OPTIONAL"})]})}),(0,i.jsx)("tr",{children:(0,i.jsxs)("td",{children:[(0,i.jsx)("code",{children:"session_id"}),(0,i.jsx)("span",{style:{opacity:"0.6"},children:" Session Id"}),(0,i.jsx)("span",{style:{opacity:"0.6"},children:" \u2014 "}),(0,i.jsx)("strong",{style:{fontSize:"var(--ifm-code-font-size)",color:"var(--openapi-optional)"},children:" OPTIONAL"})]})})]})]})})]})}),(0,i.jsx)("tr",{children:(0,i.jsxs)("td",{children:[(0,i.jsxs)("div",{style:{display:"flex"},children:[(0,i.jsx)("div",{style:{marginRight:"var(--ifm-table-cell-padding)"},children:(0,i.jsx)("code",{children:"422"})}),(0,i.jsx)("div",{children:(0,i.jsx)(t.p,{children:"Validation Error"})})]}),(0,i.jsx)("div",{children:(0,i.jsxs)("table",{style:{display:"table",width:"100%",marginTop:"var(--ifm-table-cell-padding)",marginBottom:"0px"},children:[(0,i.jsx)("thead",{children:(0,i.jsx)("tr",{children:(0,i.jsxs)("th",{style:{textAlign:"left"},children:[(0,i.jsx)("span",{children:"Schema "}),(0,i.jsx)("span",{style:{opacity:"0.6"},children:" \u2014 "}),(0,i.jsx)("strong",{style:{fontSize:"var(--ifm-code-font-size)",color:"var(--openapi-optional)"},children:" OPTIONAL"}),(0,i.jsx)("div",{})]})})}),(0,i.jsx)("tbody",{children:(0,i.jsx)("tr",{children:(0,i.jsxs)("td",{children:[(0,i.jsx)("code",{children:"detail"}),(0,i.jsx)("span",{style:{opacity:"0.6"},children:" object[]"}),(0,i.jsx)("span",{style:{opacity:"0.6"},children:" \u2014 "}),(0,i.jsx)("strong",{style:{fontSize:"var(--ifm-code-font-size)",color:"var(--openapi-optional)"},children:" OPTIONAL"}),(0,i.jsx)("table",{style:{display:"table",width:"100%",marginTop:"var(--ifm-table-cell-padding)",marginBottom:"0px"},children:(0,i.jsxs)("tbody",{children:[(0,i.jsx)("tr",{children:(0,i.jsxs)("td",{children:[(0,i.jsx)("code",{children:"loc"}),(0,i.jsx)("span",{style:{opacity:"0.6"},children:" undefined[]"})]})}),(0,i.jsx)("tr",{children:(0,i.jsxs)("td",{children:[(0,i.jsx)("code",{children:"msg"}),(0,i.jsx)("span",{style:{opacity:"0.6"},children:" Message"})]})}),(0,i.jsx)("tr",{children:(0,i.jsxs)("td",{children:[(0,i.jsx)("code",{children:"type"}),(0,i.jsx)("span",{style:{opacity:"0.6"},children:" Error Type"})]})})]})})]})})})]})})]})})]})]})]})}function d(e={}){const{wrapper:t}={...(0,o.R)(),...e.components};return t?(0,i.jsx)(t,{...e,children:(0,i.jsx)(p,{...e})}):p(e)}}}]); \ No newline at end of file diff --git a/assets/js/runtime~main.f22b4702.js b/assets/js/runtime~main.0d7ea05f.js similarity index 84% rename from assets/js/runtime~main.f22b4702.js rename to assets/js/runtime~main.0d7ea05f.js index 2a0e8216f2..3d6b5816cb 100644 --- a/assets/js/runtime~main.f22b4702.js +++ b/assets/js/runtime~main.0d7ea05f.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",30:"db8c087e",31:"03e862ce",38:"a99a45c9",44:"e3f369d5",78:"b768a3a5",93:"a3702f61",126:"ae70dfbf",129:"dfa3dc90",188:"7f7a8893",191:"c643a6d5",230:"bc63ae25",253:"bb45d4f9",299:"9b5a408c",351:"b9acb8d9",368:"07c30ae4",375:"3d81f1cf",417:"93e16042",446:"a4232cf8",598:"db4f3bbd",600:"ee87c775",750:"33b5ee95",768:"6d684b63",787:"672a0eba",800:"a4c0ff01",824:"5015646b",879:"8bee5443",956:"03735ec1",957:"c141421f",964:"05d835b4",1006:"47e58a89",1022:"8a61012d",1035:"24d32e91",1162:"f7e6b9d6",1185:"c2de64b8",1193:"444a6da6",1303:"41d45d82",1308:"ec030ab7",1345:"fe6d5b4f",1361:"ff296c8d",1408:"2fc7e024",1446:"c78349fc",1488:"ac3cc3f5",1490:"0f761898",1500:"1e9025f7",1542:"1ad8fbad",1556:"264ffc80",1567:"22dd74f7",1625:"92852ade",1690:"41a97a99",1845:"2ab0d4f5",1861:"8ad67c3b",1876:"5c3b537a",1895:"d375ca1d",1956:"fe6f9601",2073:"7b7db446",2100:"9cc9f218",2102:"755d162a",2138:"1a4e3797",2272:"ca5faf5d",2273:"e756fa26",2278:"c4280da9",2348:"f2da9399",2360:"017d425f",2394:"c2ea283c",2423:"19bcb67f",2440:"14381459",2457:"46abd5bb",2460:"954b19af",2469:"cd086441",2475:"1ab69cbd",2551:"394022bb",2565:"622fd833",2624:"5aaddd60",2642:"ad13630c",2651:"8cd0650d",2741:"43ad9ba4",2752:"e14655eb",2777:"b3ba68b4",2818:"a9b73094",2888:"32270e71",2990:"1d50b418",3164:"67f2dc6c",3225:"99a4401d",3240:"b079b393",3247:"f0b67137",3263:"730da84e",3274:"564a0250",3345:"040305fb",3347:"b5257597",3353:"2b4d41d7",3361:"8f633f11",3368:"efa0f9ee",3387:"3d67876e",3468:"c76bd485",3500:"c3c63498",3536:"2eb731bc",3576:"64045095",3694:"c2b1730c",3795:"c85076de",3832:"c3d82421",3859:"7679ca6e",4036:"fbcfc90d",4085:"cb17b4e0",4218:"d5bb0e16",4314:"f6a246db",4341:"e1a0f423",4384:"622bdc6f",4573:"baacc2a1",4612:"6a9eca1a",4614:"e55b8e98",4638:"d40b4c6f",4644:"d3e886ab",4645:"fef056e9",4706:"281c8344",4763:"f5eaeff2",4778:"e189eece",4784:"438e4337",4841:"8298c1cb",4867:"d73246f8",4876:"44691977",4891:"ca67d85f",4907:"86116998",4954:"a71efd4a",4995:"62266e9d",5048:"3c440e04",5107:"10156854",5110:"e9fe1d10",5138:"309383dc",5144:"944c5f91",5179:"41e3c105",5200:"ff7f32ba",5281:"a0511a5b",5284:"64ca91f1",5333:"70909872",5339:"9447891f",5412:"a6d50436",5467:"40d13080",5474:"d175aa8b",5513:"20d49d07",5514:"02955c09",5628:"bd7ab245",5663:"b1379b2b",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",5903:"69d616f2",6003:"4d983c8e",6006:"7819cc1c",6010:"60c70af6",6053:"dfc50084",6080:"4d15791b",6108:"2fed9fb3",6214:"b1220dbd",6224:"ef9aa223",6256:"6888b60e",6281:"c96ce3ed",6311:"cce672fb",6332:"873508e7",6350:"188ee668",6419:"96eb0e67",6445:"9fb9a766",6473:"4c5e977b",6513:"f13693f0",6538:"719cba95",6559:"6f13807a",6601:"81bb6a5c",6649:"02e43f39",6682:"5a6d6120",6688:"388c3769",6752:"acc00ab9",6753:"ff349d2f",6757:"86bd0a2e",6801:"acefda8b",6920:"c817e236",6934:"d745f4e6",6949:"b36bb719",6999:"d5ec984b",7098:"a7bd4aaa",7108:"688feaef",7118:"7996108c",7142:"d0c1f670",7165:"547df4a1",7243:"5d9d4350",7257:"8321259f",7339:"7a774ddf",7356:"2ea623f2",7472:"744aaf8b",7484:"ad01e028",7507:"651ef245",7512:"4c09a7b3",7713:"3a82b27e",7720:"3bfbe7c9",7774:"8e9a8774",7807:"1a8a0a64",7824:"2b56b65e",7829:"7c27dc91",7841:"0132780e",7859:"593d9d00",7894:"0f44198a",7902:"619c7267",7964:"ff35961a",7968:"9b0af131",8064:"274fd934",8085:"cc44357e",8090:"6e85978c",8102:"019dbd1f",8184:"222029a9",8188:"ecd67556",8196:"75a9e1e0",8208:"216e3ed7",8267:"02f8077b",8268:"a4b6c971",8294:"f2bedfce",8298:"153f2b62",8304:"73d1a090",8336:"e7fd9095",8374:"261f8123",8392:"20177945",8401:"17896441",8504:"e6c6a4d2",8571:"da1ad91e",8593:"56350599",8607:"681e5335",8649:"7de42fc9",8667:"4bc8c03c",8679:"3705a9c0",8702:"42962acd",8750:"8a484c94",8765:"1a2eaade",8790:"bfca1e36",8810:"4f40ab5a",8822:"555ae514",8963:"56c23a02",8990:"5f1a63c6",9033:"9f55b2fc",9036:"850d3674",9048:"a94703ab",9099:"b1bc5ffe",9126:"169603ea",9170:"e05c0680",9213:"62d1268c",9227:"7e40e6b3",9264:"c7f32161",9315:"16faf8bf",9331:"ffcd190c",9363:"f3312674",9371:"991799c5",9431:"cd8dccb5",9459:"97254d1d",9476:"57c9a2b8",9479:"4e038a6a",9482:"a9c1003f",9483:"7823fa72",9509:"49311ca0",9555:"dedd5914",9610:"453ae64a",9619:"29b8e27a",9640:"3b25a2ae",9647:"5e95c892",9674:"feac1fba",9705:"ee3b5967",9712:"d8c8efb9",9731:"52edee88",9751:"25255263",9752:"72d61395",9763:"aece522a",9781:"b796be74",9857:"09f5326a",9888:"be76515e",9897:"f0eeb72e",9905:"43df3697",9976:"230d5fdc",9986:"d1f3cfe5"}[e]||e)+"."+{11:"7535ea4e",15:"3c9bfad4",30:"b4c45960",31:"4c52487f",38:"0b0bb081",44:"665dcbe1",78:"4574df70",93:"79c68fde",126:"d694de98",129:"9ee1baf1",188:"ab062521",191:"1dc448ca",230:"e9d5cf67",253:"88866337",299:"bc5d64d9",351:"95edea98",368:"34a10e49",375:"a83d6e9e",416:"3c613765",417:"cd0ddd5a",446:"711a3527",598:"723b23a6",600:"1bfc2e56",750:"b97cd5b1",768:"b77428d6",787:"a6a451d4",800:"32aed4bf",824:"e6ec1d45",879:"d6480029",956:"7e72f81a",957:"da9e1d2b",964:"be41d2ff",1006:"4bfe7d6e",1022:"403c52a3",1035:"cc26804f",1162:"846917f8",1185:"03bd9764",1193:"bbc5980d",1303:"9e3798b4",1308:"5c14cd9a",1345:"3ff8cb8f",1361:"318648bc",1408:"51cd7413",1446:"b635b41b",1488:"feb8009a",1490:"6c645c9b",1500:"eaff0303",1542:"86c0c556",1556:"118cb47f",1567:"7d7e37d2",1625:"14cdddbe",1690:"288a667f",1845:"ffb9c13f",1861:"53f120bc",1876:"d729f827",1895:"5ee6b671",1956:"b8856888",2073:"6c7cda9a",2100:"afd8f376",2102:"9329bc60",2138:"f62f93d0",2237:"8bc4ac99",2272:"6cc0e60c",2273:"44b994c5",2278:"485740c6",2348:"d3bfb9cb",2360:"d868b3f5",2394:"ac14eef1",2423:"8b04bffc",2440:"986975a1",2457:"5a4650d9",2460:"8ce45567",2469:"e6f2f1a0",2475:"a4ec1cf3",2551:"67d2eaf8",2565:"7fe87656",2624:"00825dc5",2642:"91d22876",2651:"bfa64c6e",2741:"2508328a",2752:"615c674c",2777:"44e50fed",2818:"cb272f1f",2888:"37fc0309",2990:"61e9fbb1",3164:"c41fea74",3225:"a08bfb27",3240:"240925ec",3247:"9424ae74",3263:"d9743680",3274:"61775522",3345:"fc2ce836",3347:"ed9eb139",3353:"6e44ca78",3361:"14e378b0",3368:"d78be2e8",3387:"3801b523",3468:"ca115d4b",3477:"a7eba177",3500:"4ed2898e",3536:"0c7aaa2a",3576:"20fe69b3",3694:"164f0b53",3795:"6945095c",3832:"9b4fc0f0",3859:"6bc699bd",4036:"021e5445",4085:"0ff35994",4218:"f56e6e1b",4314:"499c51f9",4341:"e7d0ae98",4384:"4a1bed8a",4573:"a0d9ec5c",4612:"92ce55f5",4614:"20cacbad",4638:"a7836231",4644:"44dca449",4645:"e766f36d",4706:"a5f283cf",4754:"5b9f9c4a",4763:"2d7ed358",4778:"0f246115",4784:"aa3645d6",4841:"8fa351a4",4867:"23b9f296",4876:"400afc77",4891:"1d24c297",4907:"7b9e861a",4954:"81160209",4995:"1e8db07a",5048:"af24b62c",5107:"d0fba644",5110:"95c2f2b7",5138:"425686f2",5144:"34cdb9e6",5179:"e8547d7b",5200:"66120317",5281:"a7b94daf",5284:"2a8efb5d",5333:"005761f4",5339:"12dc5243",5412:"2d86bc82",5467:"c62b0788",5474:"753cfbbc",5513:"a1bd7832",5514:"09b288f1",5628:"8be8cca7",5663:"d0bf87ba",5673:"251b8a2d",5716:"306ccb16",5739:"fc012235",5742:"60b1d5b2",5757:"618b9154",5761:"5f50e35e",5772:"6c2359b5",5799:"0bb4a625",5838:"a06b1dfb",5865:"0c617772",5866:"84a7b519",5883:"c4686d06",5894:"6bfbe353",5903:"0f758b14",6003:"34e0f6ab",6006:"0becd7a6",6010:"8b033097",6053:"ec06d572",6080:"5f87d90c",6108:"84298e7b",6214:"b8e15d85",6224:"55f80104",6256:"54351616",6281:"fd3b2058",6311:"3917f33f",6332:"ea4bab27",6350:"3d9c862f",6419:"cdbc216e",6445:"ccc8b99a",6473:"b5e32ff9",6513:"7eadceee",6538:"6f5c14e0",6559:"0c454bf8",6601:"37bda0f7",6649:"c4341b5c",6682:"1d1c591e",6688:"d1eaac87",6752:"260b1798",6753:"72d6b927",6757:"3be90edc",6801:"0bc5f127",6920:"035e88c2",6934:"c2255e7e",6949:"5d8a6f09",6999:"66a7cd37",7098:"fc1f6434",7108:"8b4a706f",7118:"e261e76b",7142:"bde4cbc4",7165:"6b8584c0",7243:"296e8a61",7257:"8e6ae225",7339:"0f369e49",7356:"71fb0ad4",7397:"385da999",7472:"63af5563",7484:"3fd92905",7507:"fb338600",7512:"e8c30b47",7713:"cc38a18f",7720:"9c9e52b3",7774:"f5f2d629",7807:"d522f6ff",7824:"d13a17e9",7829:"ebe7e0da",7841:"e353fb9b",7859:"bfb7b6ef",7894:"a55f0514",7902:"ccc9a6ea",7964:"849a2552",7968:"c9a8f1d4",8064:"c9a775c4",8085:"e1986413",8090:"c9d242d1",8102:"9accf22f",8158:"20de8b80",8184:"4a3b4060",8188:"519dd5a5",8196:"95230909",8208:"301426d8",8267:"dcdffe42",8268:"afde5c28",8294:"b38f02c9",8298:"29f678e5",8304:"25efae09",8336:"f07fe83f",8374:"f190aa79",8392:"653e9358",8401:"23c55f2d",8504:"f307d36f",8571:"da8dce60",8593:"2889cadd",8607:"546221af",8649:"a75579dc",8667:"30b16c19",8679:"ff760d64",8702:"3a92390f",8750:"241135ef",8765:"333e2cda",8790:"19345819",8810:"4bbcdad5",8822:"e09cf857",8913:"47209f3b",8963:"f13de791",8990:"73dcef67",9033:"b425bc83",9036:"aec7a0e7",9048:"bdc69ee3",9099:"3af6b43c",9126:"6f9e3101",9148:"2b76b49f",9170:"b292e02b",9213:"5ef98d36",9227:"6f06eaf4",9264:"9ed8b3f4",9315:"06370702",9331:"ae254b82",9363:"9fe9d801",9371:"42ffb4dc",9431:"679a7398",9459:"9d7b254b",9476:"7811c9d6",9479:"ebab20a6",9482:"3a03726b",9483:"25a2c300",9495:"49162ef8",9509:"daadba3a",9555:"77bc5375",9610:"b82df516",9619:"3d4eaff7",9640:"b4e56f6c",9647:"5cb928a1",9674:"5e841d2a",9705:"926bf843",9712:"5d2e519a",9731:"09dbde0e",9751:"b4dca678",9752:"262bf7fa",9763:"4718169e",9781:"c582fb19",9857:"6f05a131",9888:"b2a9bcab",9897:"da7686fd",9905:"e4babc48",9976:"72bfd912",9986:"c86f00ba"}[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",14381459:"2440",17896441:"8401",20177945:"8392",25255263:"9751",44691977:"4876",56350599:"8593",64045095:"3576",69079906:"5739",70909872:"5333",86116998:"4907",d2df9b4e:"11",d803fa53:"15",db8c087e:"30","03e862ce":"31",a99a45c9:"38",e3f369d5:"44",b768a3a5:"78",a3702f61:"93",ae70dfbf:"126",dfa3dc90:"129","7f7a8893":"188",c643a6d5:"191",bc63ae25:"230",bb45d4f9:"253","9b5a408c":"299",b9acb8d9:"351","07c30ae4":"368","3d81f1cf":"375","93e16042":"417",a4232cf8:"446",db4f3bbd:"598",ee87c775:"600","33b5ee95":"750","6d684b63":"768","672a0eba":"787",a4c0ff01:"800","5015646b":"824","8bee5443":"879","03735ec1":"956",c141421f:"957","05d835b4":"964","47e58a89":"1006","8a61012d":"1022","24d32e91":"1035",f7e6b9d6:"1162",c2de64b8:"1185","444a6da6":"1193","41d45d82":"1303",ec030ab7:"1308",fe6d5b4f:"1345",ff296c8d:"1361","2fc7e024":"1408",c78349fc:"1446",ac3cc3f5:"1488","0f761898":"1490","1e9025f7":"1500","1ad8fbad":"1542","264ffc80":"1556","22dd74f7":"1567","92852ade":"1625","41a97a99":"1690","2ab0d4f5":"1845","8ad67c3b":"1861","5c3b537a":"1876",d375ca1d:"1895",fe6f9601:"1956","7b7db446":"2073","9cc9f218":"2100","755d162a":"2102","1a4e3797":"2138",ca5faf5d:"2272",e756fa26:"2273",c4280da9:"2278",f2da9399:"2348","017d425f":"2360",c2ea283c:"2394","19bcb67f":"2423","46abd5bb":"2457","954b19af":"2460",cd086441:"2469","1ab69cbd":"2475","394022bb":"2551","622fd833":"2565","5aaddd60":"2624",ad13630c:"2642","8cd0650d":"2651","43ad9ba4":"2741",e14655eb:"2752",b3ba68b4:"2777",a9b73094:"2818","32270e71":"2888","1d50b418":"2990","67f2dc6c":"3164","99a4401d":"3225",b079b393:"3240",f0b67137:"3247","730da84e":"3263","564a0250":"3274","040305fb":"3345",b5257597:"3347","2b4d41d7":"3353","8f633f11":"3361",efa0f9ee:"3368","3d67876e":"3387",c76bd485:"3468",c3c63498:"3500","2eb731bc":"3536",c2b1730c:"3694",c85076de:"3795",c3d82421:"3832","7679ca6e":"3859",fbcfc90d:"4036",cb17b4e0:"4085",d5bb0e16:"4218",f6a246db:"4314",e1a0f423:"4341","622bdc6f":"4384",baacc2a1:"4573","6a9eca1a":"4612",e55b8e98:"4614",d40b4c6f:"4638",d3e886ab:"4644",fef056e9:"4645","281c8344":"4706",f5eaeff2:"4763",e189eece:"4778","438e4337":"4784","8298c1cb":"4841",d73246f8:"4867",ca67d85f:"4891",a71efd4a:"4954","62266e9d":"4995","3c440e04":"5048",e9fe1d10:"5110","309383dc":"5138","944c5f91":"5144","41e3c105":"5179",ff7f32ba:"5200",a0511a5b:"5281","64ca91f1":"5284","9447891f":"5339",a6d50436:"5412","40d13080":"5467",d175aa8b:"5474","20d49d07":"5513","02955c09":"5514",bd7ab245:"5628",b1379b2b:"5663","73af8c33":"5673","946d1cee":"5716",aba21aa0:"5742",ad42ff54:"5757","7f193c41":"5761","4e7126f8":"5772","364e949f":"5799",bbb8ec1d:"5838",e1766139:"5865","3b577cbb":"5866","61cfab8e":"5883",f178e9b3:"5894","69d616f2":"5903","4d983c8e":"6003","7819cc1c":"6006","60c70af6":"6010",dfc50084:"6053","4d15791b":"6080","2fed9fb3":"6108",b1220dbd:"6214",ef9aa223:"6224","6888b60e":"6256",c96ce3ed:"6281",cce672fb:"6311","873508e7":"6332","188ee668":"6350","96eb0e67":"6419","9fb9a766":"6445","4c5e977b":"6473",f13693f0:"6513","719cba95":"6538","6f13807a":"6559","81bb6a5c":"6601","02e43f39":"6649","5a6d6120":"6682","388c3769":"6688",acc00ab9:"6752",ff349d2f:"6753","86bd0a2e":"6757",acefda8b:"6801",c817e236:"6920",d745f4e6:"6934",b36bb719:"6949",d5ec984b:"6999",a7bd4aaa:"7098","688feaef":"7108","7996108c":"7118",d0c1f670:"7142","547df4a1":"7165","5d9d4350":"7243","8321259f":"7257","7a774ddf":"7339","2ea623f2":"7356","744aaf8b":"7472",ad01e028:"7484","651ef245":"7507","4c09a7b3":"7512","3a82b27e":"7713","3bfbe7c9":"7720","8e9a8774":"7774","1a8a0a64":"7807","2b56b65e":"7824","7c27dc91":"7829","0132780e":"7841","593d9d00":"7859","0f44198a":"7894","619c7267":"7902",ff35961a:"7964","9b0af131":"7968","274fd934":"8064",cc44357e:"8085","6e85978c":"8090","019dbd1f":"8102","222029a9":"8184",ecd67556:"8188","75a9e1e0":"8196","216e3ed7":"8208","02f8077b":"8267",a4b6c971:"8268",f2bedfce:"8294","153f2b62":"8298","73d1a090":"8304",e7fd9095:"8336","261f8123":"8374",e6c6a4d2:"8504",da1ad91e:"8571","681e5335":"8607","7de42fc9":"8649","4bc8c03c":"8667","3705a9c0":"8679","42962acd":"8702","8a484c94":"8750","1a2eaade":"8765",bfca1e36:"8790","4f40ab5a":"8810","555ae514":"8822","56c23a02":"8963","5f1a63c6":"8990","9f55b2fc":"9033","850d3674":"9036",a94703ab:"9048",b1bc5ffe:"9099","169603ea":"9126",e05c0680:"9170","62d1268c":"9213","7e40e6b3":"9227",c7f32161:"9264","16faf8bf":"9315",ffcd190c:"9331",f3312674:"9363","991799c5":"9371",cd8dccb5:"9431","97254d1d":"9459","57c9a2b8":"9476","4e038a6a":"9479",a9c1003f:"9482","7823fa72":"9483","49311ca0":"9509",dedd5914:"9555","453ae64a":"9610","29b8e27a":"9619","3b25a2ae":"9640","5e95c892":"9647",feac1fba:"9674",ee3b5967:"9705",d8c8efb9:"9712","52edee88":"9731","72d61395":"9752",aece522a:"9763",b796be74:"9781","09f5326a":"9857",be76515e:"9888",f0eeb72e:"9897","43df3697":"9905","230d5fdc":"9976",d1f3cfe5:"9986"}[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,d,f,c,b={},t={};function r(e){var a=t[e];if(void 0!==a)return a.exports;var d=t[e]={id:e,loaded:!1,exports:{}};return b[e].call(d.exports,d,d.exports,r),d.loaded=!0,d.exports}r.m=b,r.c=t,e=[],r.O=(a,d,f,c)=>{if(!d){var b=1/0;for(i=0;i=c)&&Object.keys(r.O).every(e=>r.O[e](d[o]))?d.splice(o--,1):(t=!1,c0&&e[i-1][2]>c;i--)e[i]=e[i-1];e[i]=[d,f,c]},r.n=e=>{var a=e&&e.__esModule?()=>e.default:()=>e;return r.d(a,{a:a}),a},d=Object.getPrototypeOf?e=>Object.getPrototypeOf(e):e=>e.__proto__,r.t=function(e,f){if(1&f&&(e=this(e)),8&f)return e;if("object"==typeof e&&e){if(4&f&&e.__esModule)return e;if(16&f&&"function"==typeof e.then)return e}var c=Object.create(null);r.r(c);var b={};a=a||[null,d({}),d([]),d(d)];for(var t=2&f&&e;"object"==typeof t&&!~a.indexOf(t);t=d(t))Object.getOwnPropertyNames(t).forEach(a=>b[a]=()=>e[a]);return b.default=()=>e,r.d(c,b),c},r.d=(e,a)=>{for(var d in a)r.o(a,d)&&!r.o(e,d)&&Object.defineProperty(e,d,{enumerable:!0,get:a[d]})},r.f={},r.e=e=>Promise.all(Object.keys(r.f).reduce((a,d)=>(r.f[d](e,a),a),[])),r.u=e=>"assets/js/"+({11:"d2df9b4e",15:"d803fa53",30:"db8c087e",31:"03e862ce",38:"a99a45c9",44:"e3f369d5",78:"b768a3a5",93:"a3702f61",126:"ae70dfbf",129:"dfa3dc90",188:"7f7a8893",191:"c643a6d5",230:"bc63ae25",253:"bb45d4f9",299:"9b5a408c",351:"b9acb8d9",368:"07c30ae4",375:"3d81f1cf",417:"93e16042",446:"a4232cf8",598:"db4f3bbd",600:"ee87c775",750:"33b5ee95",768:"6d684b63",787:"672a0eba",800:"a4c0ff01",824:"5015646b",879:"8bee5443",956:"03735ec1",957:"c141421f",964:"05d835b4",1006:"47e58a89",1022:"8a61012d",1035:"24d32e91",1162:"f7e6b9d6",1185:"c2de64b8",1193:"444a6da6",1303:"41d45d82",1308:"ec030ab7",1345:"fe6d5b4f",1361:"ff296c8d",1408:"2fc7e024",1446:"c78349fc",1488:"ac3cc3f5",1490:"0f761898",1500:"1e9025f7",1542:"1ad8fbad",1556:"264ffc80",1567:"22dd74f7",1625:"92852ade",1690:"41a97a99",1845:"2ab0d4f5",1861:"8ad67c3b",1876:"5c3b537a",1895:"d375ca1d",1956:"fe6f9601",2073:"7b7db446",2100:"9cc9f218",2102:"755d162a",2138:"1a4e3797",2272:"ca5faf5d",2273:"e756fa26",2278:"c4280da9",2348:"f2da9399",2360:"017d425f",2394:"c2ea283c",2423:"19bcb67f",2440:"14381459",2457:"46abd5bb",2460:"954b19af",2469:"cd086441",2475:"1ab69cbd",2551:"394022bb",2565:"622fd833",2624:"5aaddd60",2642:"ad13630c",2651:"8cd0650d",2741:"43ad9ba4",2752:"e14655eb",2777:"b3ba68b4",2818:"a9b73094",2888:"32270e71",2990:"1d50b418",3164:"67f2dc6c",3225:"99a4401d",3240:"b079b393",3247:"f0b67137",3263:"730da84e",3274:"564a0250",3345:"040305fb",3347:"b5257597",3353:"2b4d41d7",3361:"8f633f11",3368:"efa0f9ee",3387:"3d67876e",3468:"c76bd485",3500:"c3c63498",3536:"2eb731bc",3576:"64045095",3694:"c2b1730c",3795:"c85076de",3832:"c3d82421",3859:"7679ca6e",4036:"fbcfc90d",4085:"cb17b4e0",4218:"d5bb0e16",4314:"f6a246db",4341:"e1a0f423",4384:"622bdc6f",4573:"baacc2a1",4612:"6a9eca1a",4614:"e55b8e98",4638:"d40b4c6f",4644:"d3e886ab",4645:"fef056e9",4706:"281c8344",4763:"f5eaeff2",4778:"e189eece",4784:"438e4337",4841:"8298c1cb",4867:"d73246f8",4876:"44691977",4891:"ca67d85f",4907:"86116998",4954:"a71efd4a",4995:"62266e9d",5048:"3c440e04",5107:"10156854",5110:"e9fe1d10",5138:"309383dc",5144:"944c5f91",5179:"41e3c105",5200:"ff7f32ba",5281:"a0511a5b",5284:"64ca91f1",5333:"70909872",5339:"9447891f",5412:"a6d50436",5467:"40d13080",5474:"d175aa8b",5513:"20d49d07",5514:"02955c09",5628:"bd7ab245",5663:"b1379b2b",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",5903:"69d616f2",6003:"4d983c8e",6006:"7819cc1c",6010:"60c70af6",6053:"dfc50084",6080:"4d15791b",6108:"2fed9fb3",6214:"b1220dbd",6224:"ef9aa223",6256:"6888b60e",6281:"c96ce3ed",6311:"cce672fb",6332:"873508e7",6350:"188ee668",6419:"96eb0e67",6445:"9fb9a766",6473:"4c5e977b",6513:"f13693f0",6538:"719cba95",6559:"6f13807a",6601:"81bb6a5c",6649:"02e43f39",6682:"5a6d6120",6688:"388c3769",6752:"acc00ab9",6753:"ff349d2f",6757:"86bd0a2e",6801:"acefda8b",6920:"c817e236",6934:"d745f4e6",6949:"b36bb719",6999:"d5ec984b",7098:"a7bd4aaa",7108:"688feaef",7118:"7996108c",7142:"d0c1f670",7165:"547df4a1",7243:"5d9d4350",7257:"8321259f",7339:"7a774ddf",7356:"2ea623f2",7472:"744aaf8b",7484:"ad01e028",7507:"651ef245",7512:"4c09a7b3",7713:"3a82b27e",7720:"3bfbe7c9",7774:"8e9a8774",7807:"1a8a0a64",7824:"2b56b65e",7829:"7c27dc91",7841:"0132780e",7859:"593d9d00",7894:"0f44198a",7902:"619c7267",7964:"ff35961a",7968:"9b0af131",8064:"274fd934",8085:"cc44357e",8090:"6e85978c",8102:"019dbd1f",8184:"222029a9",8188:"ecd67556",8196:"75a9e1e0",8208:"216e3ed7",8267:"02f8077b",8268:"a4b6c971",8294:"f2bedfce",8298:"153f2b62",8304:"73d1a090",8336:"e7fd9095",8374:"261f8123",8392:"20177945",8401:"17896441",8504:"e6c6a4d2",8571:"da1ad91e",8593:"56350599",8607:"681e5335",8649:"7de42fc9",8667:"4bc8c03c",8679:"3705a9c0",8702:"42962acd",8750:"8a484c94",8765:"1a2eaade",8790:"bfca1e36",8810:"4f40ab5a",8822:"555ae514",8963:"56c23a02",8990:"5f1a63c6",9033:"9f55b2fc",9036:"850d3674",9048:"a94703ab",9099:"b1bc5ffe",9126:"169603ea",9170:"e05c0680",9213:"62d1268c",9227:"7e40e6b3",9264:"c7f32161",9315:"16faf8bf",9331:"ffcd190c",9363:"f3312674",9371:"991799c5",9431:"cd8dccb5",9459:"97254d1d",9476:"57c9a2b8",9479:"4e038a6a",9482:"a9c1003f",9483:"7823fa72",9509:"49311ca0",9555:"dedd5914",9610:"453ae64a",9619:"29b8e27a",9640:"3b25a2ae",9647:"5e95c892",9674:"feac1fba",9705:"ee3b5967",9712:"d8c8efb9",9731:"52edee88",9751:"25255263",9752:"72d61395",9763:"aece522a",9781:"b796be74",9857:"09f5326a",9888:"be76515e",9897:"f0eeb72e",9905:"43df3697",9976:"230d5fdc",9986:"d1f3cfe5"}[e]||e)+"."+{11:"7535ea4e",15:"3c9bfad4",30:"b4c45960",31:"4c52487f",38:"0b0bb081",44:"665dcbe1",78:"4574df70",93:"79c68fde",126:"d694de98",129:"9ee1baf1",188:"ab062521",191:"1dc448ca",230:"e9d5cf67",253:"88866337",299:"bc5d64d9",351:"95edea98",368:"34a10e49",375:"a83d6e9e",416:"3c613765",417:"cd0ddd5a",446:"711a3527",598:"723b23a6",600:"1bfc2e56",750:"b97cd5b1",768:"b77428d6",787:"a6a451d4",800:"32aed4bf",824:"e6ec1d45",879:"d6480029",956:"7e72f81a",957:"da9e1d2b",964:"be41d2ff",1006:"4bfe7d6e",1022:"403c52a3",1035:"cc26804f",1162:"846917f8",1185:"03bd9764",1193:"bbc5980d",1303:"9e3798b4",1308:"5c14cd9a",1345:"3ff8cb8f",1361:"318648bc",1408:"51cd7413",1446:"b635b41b",1488:"feb8009a",1490:"6c645c9b",1500:"eaff0303",1542:"86c0c556",1556:"118cb47f",1567:"7d7e37d2",1625:"14cdddbe",1690:"288a667f",1845:"279b0589",1861:"53f120bc",1876:"d729f827",1895:"5ee6b671",1956:"b8856888",2073:"6c7cda9a",2100:"afd8f376",2102:"9329bc60",2138:"f62f93d0",2237:"8bc4ac99",2272:"6cc0e60c",2273:"44b994c5",2278:"485740c6",2348:"d3bfb9cb",2360:"d868b3f5",2394:"ac14eef1",2423:"8b04bffc",2440:"986975a1",2457:"5a4650d9",2460:"8ce45567",2469:"e6f2f1a0",2475:"a4ec1cf3",2551:"67d2eaf8",2565:"7fe87656",2624:"00825dc5",2642:"91d22876",2651:"bfa64c6e",2741:"2508328a",2752:"615c674c",2777:"44e50fed",2818:"cb272f1f",2888:"37fc0309",2990:"61e9fbb1",3164:"c41fea74",3225:"a08bfb27",3240:"240925ec",3247:"9424ae74",3263:"d9743680",3274:"61775522",3345:"fc2ce836",3347:"ed9eb139",3353:"6e44ca78",3361:"14e378b0",3368:"d78be2e8",3387:"3801b523",3468:"ca115d4b",3477:"a7eba177",3500:"4ed2898e",3536:"0c7aaa2a",3576:"20fe69b3",3694:"164f0b53",3795:"6945095c",3832:"9b4fc0f0",3859:"6bc699bd",4036:"021e5445",4085:"0ff35994",4218:"f56e6e1b",4314:"499c51f9",4341:"e7d0ae98",4384:"4a1bed8a",4573:"a0d9ec5c",4612:"92ce55f5",4614:"20cacbad",4638:"a7836231",4644:"44dca449",4645:"e766f36d",4706:"a5f283cf",4754:"5b9f9c4a",4763:"2d7ed358",4778:"0f246115",4784:"aa3645d6",4841:"8fa351a4",4867:"23b9f296",4876:"400afc77",4891:"1d24c297",4907:"7b9e861a",4954:"81160209",4995:"1e8db07a",5048:"af24b62c",5107:"d0fba644",5110:"95c2f2b7",5138:"425686f2",5144:"34cdb9e6",5179:"e8547d7b",5200:"66120317",5281:"a7b94daf",5284:"2a8efb5d",5333:"005761f4",5339:"12dc5243",5412:"2d86bc82",5467:"c62b0788",5474:"753cfbbc",5513:"a1bd7832",5514:"09b288f1",5628:"8be8cca7",5663:"d0bf87ba",5673:"251b8a2d",5716:"306ccb16",5739:"fc012235",5742:"60b1d5b2",5757:"618b9154",5761:"5f50e35e",5772:"6c2359b5",5799:"0bb4a625",5838:"a06b1dfb",5865:"0c617772",5866:"84a7b519",5883:"c4686d06",5894:"6bfbe353",5903:"0f758b14",6003:"34e0f6ab",6006:"5afda6b4",6010:"8b033097",6053:"ec06d572",6080:"5f87d90c",6108:"84298e7b",6214:"b8e15d85",6224:"55f80104",6256:"54351616",6281:"fd3b2058",6311:"3917f33f",6332:"ea4bab27",6350:"3d9c862f",6419:"cdbc216e",6445:"ccc8b99a",6473:"b5e32ff9",6513:"7eadceee",6538:"6f5c14e0",6559:"0c454bf8",6601:"37bda0f7",6649:"c4341b5c",6682:"1d1c591e",6688:"d1eaac87",6752:"260b1798",6753:"72d6b927",6757:"3be90edc",6801:"0bc5f127",6920:"035e88c2",6934:"c2255e7e",6949:"5d8a6f09",6999:"66a7cd37",7098:"fc1f6434",7108:"8b4a706f",7118:"e261e76b",7142:"bde4cbc4",7165:"6b8584c0",7243:"296e8a61",7257:"8e6ae225",7339:"0f369e49",7356:"71fb0ad4",7397:"385da999",7472:"63af5563",7484:"3fd92905",7507:"fb338600",7512:"e8c30b47",7713:"cc38a18f",7720:"9c9e52b3",7774:"f5f2d629",7807:"d522f6ff",7824:"d13a17e9",7829:"ebe7e0da",7841:"e353fb9b",7859:"bfb7b6ef",7894:"a55f0514",7902:"ccc9a6ea",7964:"849a2552",7968:"c9a8f1d4",8064:"c9a775c4",8085:"e1986413",8090:"c9d242d1",8102:"9accf22f",8158:"20de8b80",8184:"4a3b4060",8188:"519dd5a5",8196:"95230909",8208:"301426d8",8267:"dcdffe42",8268:"afde5c28",8294:"b38f02c9",8298:"29f678e5",8304:"25efae09",8336:"f07fe83f",8374:"f190aa79",8392:"653e9358",8401:"23c55f2d",8504:"2d21ef43",8571:"da8dce60",8593:"2889cadd",8607:"546221af",8649:"a75579dc",8667:"30b16c19",8679:"ff760d64",8702:"3a92390f",8750:"241135ef",8765:"333e2cda",8790:"19345819",8810:"4bbcdad5",8822:"e09cf857",8913:"47209f3b",8963:"f13de791",8990:"73dcef67",9033:"b425bc83",9036:"aec7a0e7",9048:"bdc69ee3",9099:"3af6b43c",9126:"6f9e3101",9148:"2b76b49f",9170:"b292e02b",9213:"5ef98d36",9227:"6f06eaf4",9264:"9ed8b3f4",9315:"06370702",9331:"ae254b82",9363:"9fe9d801",9371:"42ffb4dc",9431:"679a7398",9459:"9d7b254b",9476:"7811c9d6",9479:"ebab20a6",9482:"3a03726b",9483:"25a2c300",9495:"49162ef8",9509:"daadba3a",9555:"77bc5375",9610:"b82df516",9619:"3d4eaff7",9640:"b4e56f6c",9647:"5cb928a1",9674:"5e841d2a",9705:"926bf843",9712:"5d2e519a",9731:"09dbde0e",9751:"b4dca678",9752:"262bf7fa",9763:"4718169e",9781:"c582fb19",9857:"6f05a131",9888:"b2a9bcab",9897:"da7686fd",9905:"e4babc48",9976:"72bfd912",9986:"c86f00ba"}[e]+".js",r.miniCssF=e=>{},r.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),r.o=(e,a)=>Object.prototype.hasOwnProperty.call(e,a),f={},c="langflow-docs:",r.l=(e,a,d,b)=>{if(f[e])f[e].push(a);else{var t,o;if(void 0!==d)for(var n=document.getElementsByTagName("script"),i=0;i{t.onerror=t.onload=null,clearTimeout(s);var c=f[e];if(delete f[e],t.parentNode&&t.parentNode.removeChild(t),c&&c.forEach(e=>e(d)),a)return a(d)},s=setTimeout(u.bind(null,void 0,{type:"timeout",target:t}),12e4);t.onerror=u.bind(null,t.onerror),t.onload=u.bind(null,t.onload),o&&document.head.appendChild(t)}},r.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},r.nmd=e=>(e.paths=[],e.children||(e.children=[]),e),r.p="/",r.gca=function(e){return e={10156854:"5107",14381459:"2440",17896441:"8401",20177945:"8392",25255263:"9751",44691977:"4876",56350599:"8593",64045095:"3576",69079906:"5739",70909872:"5333",86116998:"4907",d2df9b4e:"11",d803fa53:"15",db8c087e:"30","03e862ce":"31",a99a45c9:"38",e3f369d5:"44",b768a3a5:"78",a3702f61:"93",ae70dfbf:"126",dfa3dc90:"129","7f7a8893":"188",c643a6d5:"191",bc63ae25:"230",bb45d4f9:"253","9b5a408c":"299",b9acb8d9:"351","07c30ae4":"368","3d81f1cf":"375","93e16042":"417",a4232cf8:"446",db4f3bbd:"598",ee87c775:"600","33b5ee95":"750","6d684b63":"768","672a0eba":"787",a4c0ff01:"800","5015646b":"824","8bee5443":"879","03735ec1":"956",c141421f:"957","05d835b4":"964","47e58a89":"1006","8a61012d":"1022","24d32e91":"1035",f7e6b9d6:"1162",c2de64b8:"1185","444a6da6":"1193","41d45d82":"1303",ec030ab7:"1308",fe6d5b4f:"1345",ff296c8d:"1361","2fc7e024":"1408",c78349fc:"1446",ac3cc3f5:"1488","0f761898":"1490","1e9025f7":"1500","1ad8fbad":"1542","264ffc80":"1556","22dd74f7":"1567","92852ade":"1625","41a97a99":"1690","2ab0d4f5":"1845","8ad67c3b":"1861","5c3b537a":"1876",d375ca1d:"1895",fe6f9601:"1956","7b7db446":"2073","9cc9f218":"2100","755d162a":"2102","1a4e3797":"2138",ca5faf5d:"2272",e756fa26:"2273",c4280da9:"2278",f2da9399:"2348","017d425f":"2360",c2ea283c:"2394","19bcb67f":"2423","46abd5bb":"2457","954b19af":"2460",cd086441:"2469","1ab69cbd":"2475","394022bb":"2551","622fd833":"2565","5aaddd60":"2624",ad13630c:"2642","8cd0650d":"2651","43ad9ba4":"2741",e14655eb:"2752",b3ba68b4:"2777",a9b73094:"2818","32270e71":"2888","1d50b418":"2990","67f2dc6c":"3164","99a4401d":"3225",b079b393:"3240",f0b67137:"3247","730da84e":"3263","564a0250":"3274","040305fb":"3345",b5257597:"3347","2b4d41d7":"3353","8f633f11":"3361",efa0f9ee:"3368","3d67876e":"3387",c76bd485:"3468",c3c63498:"3500","2eb731bc":"3536",c2b1730c:"3694",c85076de:"3795",c3d82421:"3832","7679ca6e":"3859",fbcfc90d:"4036",cb17b4e0:"4085",d5bb0e16:"4218",f6a246db:"4314",e1a0f423:"4341","622bdc6f":"4384",baacc2a1:"4573","6a9eca1a":"4612",e55b8e98:"4614",d40b4c6f:"4638",d3e886ab:"4644",fef056e9:"4645","281c8344":"4706",f5eaeff2:"4763",e189eece:"4778","438e4337":"4784","8298c1cb":"4841",d73246f8:"4867",ca67d85f:"4891",a71efd4a:"4954","62266e9d":"4995","3c440e04":"5048",e9fe1d10:"5110","309383dc":"5138","944c5f91":"5144","41e3c105":"5179",ff7f32ba:"5200",a0511a5b:"5281","64ca91f1":"5284","9447891f":"5339",a6d50436:"5412","40d13080":"5467",d175aa8b:"5474","20d49d07":"5513","02955c09":"5514",bd7ab245:"5628",b1379b2b:"5663","73af8c33":"5673","946d1cee":"5716",aba21aa0:"5742",ad42ff54:"5757","7f193c41":"5761","4e7126f8":"5772","364e949f":"5799",bbb8ec1d:"5838",e1766139:"5865","3b577cbb":"5866","61cfab8e":"5883",f178e9b3:"5894","69d616f2":"5903","4d983c8e":"6003","7819cc1c":"6006","60c70af6":"6010",dfc50084:"6053","4d15791b":"6080","2fed9fb3":"6108",b1220dbd:"6214",ef9aa223:"6224","6888b60e":"6256",c96ce3ed:"6281",cce672fb:"6311","873508e7":"6332","188ee668":"6350","96eb0e67":"6419","9fb9a766":"6445","4c5e977b":"6473",f13693f0:"6513","719cba95":"6538","6f13807a":"6559","81bb6a5c":"6601","02e43f39":"6649","5a6d6120":"6682","388c3769":"6688",acc00ab9:"6752",ff349d2f:"6753","86bd0a2e":"6757",acefda8b:"6801",c817e236:"6920",d745f4e6:"6934",b36bb719:"6949",d5ec984b:"6999",a7bd4aaa:"7098","688feaef":"7108","7996108c":"7118",d0c1f670:"7142","547df4a1":"7165","5d9d4350":"7243","8321259f":"7257","7a774ddf":"7339","2ea623f2":"7356","744aaf8b":"7472",ad01e028:"7484","651ef245":"7507","4c09a7b3":"7512","3a82b27e":"7713","3bfbe7c9":"7720","8e9a8774":"7774","1a8a0a64":"7807","2b56b65e":"7824","7c27dc91":"7829","0132780e":"7841","593d9d00":"7859","0f44198a":"7894","619c7267":"7902",ff35961a:"7964","9b0af131":"7968","274fd934":"8064",cc44357e:"8085","6e85978c":"8090","019dbd1f":"8102","222029a9":"8184",ecd67556:"8188","75a9e1e0":"8196","216e3ed7":"8208","02f8077b":"8267",a4b6c971:"8268",f2bedfce:"8294","153f2b62":"8298","73d1a090":"8304",e7fd9095:"8336","261f8123":"8374",e6c6a4d2:"8504",da1ad91e:"8571","681e5335":"8607","7de42fc9":"8649","4bc8c03c":"8667","3705a9c0":"8679","42962acd":"8702","8a484c94":"8750","1a2eaade":"8765",bfca1e36:"8790","4f40ab5a":"8810","555ae514":"8822","56c23a02":"8963","5f1a63c6":"8990","9f55b2fc":"9033","850d3674":"9036",a94703ab:"9048",b1bc5ffe:"9099","169603ea":"9126",e05c0680:"9170","62d1268c":"9213","7e40e6b3":"9227",c7f32161:"9264","16faf8bf":"9315",ffcd190c:"9331",f3312674:"9363","991799c5":"9371",cd8dccb5:"9431","97254d1d":"9459","57c9a2b8":"9476","4e038a6a":"9479",a9c1003f:"9482","7823fa72":"9483","49311ca0":"9509",dedd5914:"9555","453ae64a":"9610","29b8e27a":"9619","3b25a2ae":"9640","5e95c892":"9647",feac1fba:"9674",ee3b5967:"9705",d8c8efb9:"9712","52edee88":"9731","72d61395":"9752",aece522a:"9763",b796be74:"9781","09f5326a":"9857",be76515e:"9888",f0eeb72e:"9897","43df3697":"9905","230d5fdc":"9976",d1f3cfe5:"9986"}[e]||e,r.p+r.u(e)},(()=>{var e={5354:0,1869:0};r.f.j=(a,d)=>{var f=r.o(e,a)?e[a]:void 0;if(0!==f)if(f)d.push(f[2]);else if(/^(1869|5354)$/.test(a))e[a]=0;else{var c=new Promise((d,c)=>f=e[a]=[d,c]);d.push(f[2]=c);var b=r.p+r.u(a),t=new Error;r.l(b,d=>{if(r.o(e,a)&&(0!==(f=e[a])&&(e[a]=void 0),f)){var c=d&&("load"===d.type?"missing":d.type),b=d&&d.target&&d.target.src;t.message="Loading chunk "+a+" failed.\n("+c+": "+b+")",t.name="ChunkLoadError",t.type=c,t.request=b,f[1](t)}},"chunk-"+a,a)}},r.O.j=a=>0===e[a];var a=(a,d)=>{var f,c,b=d[0],t=d[1],o=d[2],n=0;if(b.some(a=>0!==e[a])){for(f in t)r.o(t,f)&&(r.m[f]=t[f]);if(o)var i=o(r)}for(a&&a(d);n - + diff --git a/bundles-amazon.html b/bundles-amazon.html index d0a27d0db0..4c9973318d 100644 --- a/bundles-amazon.html +++ b/bundles-amazon.html @@ -23,7 +23,7 @@ - + diff --git a/bundles-anthropic.html b/bundles-anthropic.html index b7d65492f0..ef33c7e080 100644 --- a/bundles-anthropic.html +++ b/bundles-anthropic.html @@ -23,7 +23,7 @@ - + diff --git a/bundles-apify.html b/bundles-apify.html index 59615b65ab..e5e02619cf 100644 --- a/bundles-apify.html +++ b/bundles-apify.html @@ -23,7 +23,7 @@ - + diff --git a/bundles-arxiv.html b/bundles-arxiv.html index 0cd46b7af3..5d73510d1c 100644 --- a/bundles-arxiv.html +++ b/bundles-arxiv.html @@ -23,7 +23,7 @@ - + diff --git a/bundles-assemblyai.html b/bundles-assemblyai.html index 12384609f2..0f1e17cb0b 100644 --- a/bundles-assemblyai.html +++ b/bundles-assemblyai.html @@ -23,7 +23,7 @@ - + diff --git a/bundles-azure.html b/bundles-azure.html index 93738b61a1..019d7084b4 100644 --- a/bundles-azure.html +++ b/bundles-azure.html @@ -23,7 +23,7 @@ - + diff --git a/bundles-baidu.html b/bundles-baidu.html index 4d38749f42..e96b55ea90 100644 --- a/bundles-baidu.html +++ b/bundles-baidu.html @@ -23,7 +23,7 @@ - + diff --git a/bundles-bing.html b/bundles-bing.html index d7982149b8..3c0539103e 100644 --- a/bundles-bing.html +++ b/bundles-bing.html @@ -23,7 +23,7 @@ - + diff --git a/bundles-cassandra.html b/bundles-cassandra.html index 0bc416885f..06f2412c2f 100644 --- a/bundles-cassandra.html +++ b/bundles-cassandra.html @@ -23,7 +23,7 @@ - + diff --git a/bundles-chroma.html b/bundles-chroma.html index d625151aee..06adaf9c37 100644 --- a/bundles-chroma.html +++ b/bundles-chroma.html @@ -23,7 +23,7 @@ - + diff --git a/bundles-cleanlab.html b/bundles-cleanlab.html index b190e42672..6439228f7c 100644 --- a/bundles-cleanlab.html +++ b/bundles-cleanlab.html @@ -23,7 +23,7 @@ - + diff --git a/bundles-clickhouse.html b/bundles-clickhouse.html index 6ce6b803ea..065837c7d2 100644 --- a/bundles-clickhouse.html +++ b/bundles-clickhouse.html @@ -23,7 +23,7 @@ - + diff --git a/bundles-cloudflare.html b/bundles-cloudflare.html index 1b7a93ee4c..bdbf3526b5 100644 --- a/bundles-cloudflare.html +++ b/bundles-cloudflare.html @@ -23,7 +23,7 @@ - + diff --git a/bundles-cohere.html b/bundles-cohere.html index 2c46fe985e..def844a61a 100644 --- a/bundles-cohere.html +++ b/bundles-cohere.html @@ -23,7 +23,7 @@ - + diff --git a/bundles-composio.html b/bundles-composio.html index 9badf3c60e..ebf8344715 100644 --- a/bundles-composio.html +++ b/bundles-composio.html @@ -23,7 +23,7 @@ - + diff --git a/bundles-couchbase.html b/bundles-couchbase.html index 8972562010..478740c7f7 100644 --- a/bundles-couchbase.html +++ b/bundles-couchbase.html @@ -23,7 +23,7 @@ - + diff --git a/bundles-datastax.html b/bundles-datastax.html index d1a1abafc4..b6dfb1f762 100644 --- a/bundles-datastax.html +++ b/bundles-datastax.html @@ -23,7 +23,7 @@ - + diff --git a/bundles-deepseek.html b/bundles-deepseek.html index 1fc2e03735..b2f5934247 100644 --- a/bundles-deepseek.html +++ b/bundles-deepseek.html @@ -23,7 +23,7 @@ - + diff --git a/bundles-docling.html b/bundles-docling.html index cbba671f57..158c279b22 100644 --- a/bundles-docling.html +++ b/bundles-docling.html @@ -23,7 +23,7 @@ - + diff --git a/bundles-duckduckgo.html b/bundles-duckduckgo.html index 503a1571ee..87a8d9d046 100644 --- a/bundles-duckduckgo.html +++ b/bundles-duckduckgo.html @@ -23,7 +23,7 @@ - + diff --git a/bundles-elastic.html b/bundles-elastic.html index 04c12dba30..fd737222ff 100644 --- a/bundles-elastic.html +++ b/bundles-elastic.html @@ -23,7 +23,7 @@ - + diff --git a/bundles-exa.html b/bundles-exa.html index e943f15778..118d7558c7 100644 --- a/bundles-exa.html +++ b/bundles-exa.html @@ -23,7 +23,7 @@ - + diff --git a/bundles-faiss.html b/bundles-faiss.html index 71ebf0687a..1e2511be5c 100644 --- a/bundles-faiss.html +++ b/bundles-faiss.html @@ -23,7 +23,7 @@ - + diff --git a/bundles-glean.html b/bundles-glean.html index fa14d274d6..27b9f9fa41 100644 --- a/bundles-glean.html +++ b/bundles-glean.html @@ -23,7 +23,7 @@ - + diff --git a/bundles-google.html b/bundles-google.html index ac381d3b06..6781c191a1 100644 --- a/bundles-google.html +++ b/bundles-google.html @@ -23,7 +23,7 @@ - + diff --git a/bundles-groq.html b/bundles-groq.html index a3d30904fb..e44eee26f8 100644 --- a/bundles-groq.html +++ b/bundles-groq.html @@ -23,7 +23,7 @@ - + diff --git a/bundles-huggingface.html b/bundles-huggingface.html index 730d401dac..413c77f9f7 100644 --- a/bundles-huggingface.html +++ b/bundles-huggingface.html @@ -23,7 +23,7 @@ - + diff --git a/bundles-ibm.html b/bundles-ibm.html index 6b441bbed4..31fe7b7e04 100644 --- a/bundles-ibm.html +++ b/bundles-ibm.html @@ -23,7 +23,7 @@ - + diff --git a/bundles-icosacomputing.html b/bundles-icosacomputing.html index ed16eb98ef..f332cea09c 100644 --- a/bundles-icosacomputing.html +++ b/bundles-icosacomputing.html @@ -23,7 +23,7 @@ - + diff --git a/bundles-langchain.html b/bundles-langchain.html index 01dfc49627..171893707f 100644 --- a/bundles-langchain.html +++ b/bundles-langchain.html @@ -23,7 +23,7 @@ - + diff --git a/bundles-lmstudio.html b/bundles-lmstudio.html index d1013c0a3e..7682dfcb24 100644 --- a/bundles-lmstudio.html +++ b/bundles-lmstudio.html @@ -23,7 +23,7 @@ - + diff --git a/bundles-maritalk.html b/bundles-maritalk.html index b09a8e94ca..97aab71da8 100644 --- a/bundles-maritalk.html +++ b/bundles-maritalk.html @@ -23,7 +23,7 @@ - + diff --git a/bundles-mem0.html b/bundles-mem0.html index 453cc0ce02..474b1a13d1 100644 --- a/bundles-mem0.html +++ b/bundles-mem0.html @@ -23,7 +23,7 @@ - + diff --git a/bundles-milvus.html b/bundles-milvus.html index e1da616bc1..82c7824b6f 100644 --- a/bundles-milvus.html +++ b/bundles-milvus.html @@ -23,7 +23,7 @@ - + diff --git a/bundles-mistralai.html b/bundles-mistralai.html index 53b64ebd67..27d426755f 100644 --- a/bundles-mistralai.html +++ b/bundles-mistralai.html @@ -23,7 +23,7 @@ - + diff --git a/bundles-mongodb.html b/bundles-mongodb.html index 4219342cba..5ff45a0ceb 100644 --- a/bundles-mongodb.html +++ b/bundles-mongodb.html @@ -23,7 +23,7 @@ - + diff --git a/bundles-notion.html b/bundles-notion.html index 8aeec9227d..8692d674c6 100644 --- a/bundles-notion.html +++ b/bundles-notion.html @@ -23,7 +23,7 @@ - + diff --git a/bundles-novita.html b/bundles-novita.html index 9936c48368..f47bd0972a 100644 --- a/bundles-novita.html +++ b/bundles-novita.html @@ -23,7 +23,7 @@ - + diff --git a/bundles-nvidia.html b/bundles-nvidia.html index 7d1e02a4e8..03ca0efc14 100644 --- a/bundles-nvidia.html +++ b/bundles-nvidia.html @@ -23,7 +23,7 @@ - + diff --git a/bundles-ollama.html b/bundles-ollama.html index 9a332400af..8efa6932ea 100644 --- a/bundles-ollama.html +++ b/bundles-ollama.html @@ -23,7 +23,7 @@ - + diff --git a/bundles-openai.html b/bundles-openai.html index 9c01bb53b6..8b6e1b1990 100644 --- a/bundles-openai.html +++ b/bundles-openai.html @@ -23,7 +23,7 @@ - + diff --git a/bundles-openrouter.html b/bundles-openrouter.html index cb5fd6fe13..0209154a4e 100644 --- a/bundles-openrouter.html +++ b/bundles-openrouter.html @@ -23,7 +23,7 @@ - + diff --git a/bundles-perplexity.html b/bundles-perplexity.html index e70b5526d0..b5e7c69b59 100644 --- a/bundles-perplexity.html +++ b/bundles-perplexity.html @@ -23,7 +23,7 @@ - + diff --git a/bundles-pgvector.html b/bundles-pgvector.html index 0d62e50f51..a3f23c6cd4 100644 --- a/bundles-pgvector.html +++ b/bundles-pgvector.html @@ -23,7 +23,7 @@ - + diff --git a/bundles-pinecone.html b/bundles-pinecone.html index 033ea7def6..c2459276a6 100644 --- a/bundles-pinecone.html +++ b/bundles-pinecone.html @@ -23,7 +23,7 @@ - + diff --git a/bundles-qdrant.html b/bundles-qdrant.html index d3d97dde0a..570aa0064b 100644 --- a/bundles-qdrant.html +++ b/bundles-qdrant.html @@ -23,7 +23,7 @@ - + diff --git a/bundles-redis.html b/bundles-redis.html index 48ee18a0cb..4b713ea4e1 100644 --- a/bundles-redis.html +++ b/bundles-redis.html @@ -23,7 +23,7 @@ - + diff --git a/bundles-sambanova.html b/bundles-sambanova.html index 18827bed1c..1d14ec743e 100644 --- a/bundles-sambanova.html +++ b/bundles-sambanova.html @@ -23,7 +23,7 @@ - + diff --git a/bundles-searchapi.html b/bundles-searchapi.html index cd03e1c806..cde3497d3d 100644 --- a/bundles-searchapi.html +++ b/bundles-searchapi.html @@ -23,7 +23,7 @@ - + diff --git a/bundles-serper.html b/bundles-serper.html index 1e2d04c6f9..4f9f2a94d5 100644 --- a/bundles-serper.html +++ b/bundles-serper.html @@ -23,7 +23,7 @@ - + diff --git a/bundles-supabase.html b/bundles-supabase.html index 89ac8c9ee1..7327ddbb0b 100644 --- a/bundles-supabase.html +++ b/bundles-supabase.html @@ -23,7 +23,7 @@ - + diff --git a/bundles-upstash.html b/bundles-upstash.html index 1932f710d8..65fe1cfc21 100644 --- a/bundles-upstash.html +++ b/bundles-upstash.html @@ -23,7 +23,7 @@ - + diff --git a/bundles-vectara.html b/bundles-vectara.html index deb843c1a0..038089021b 100644 --- a/bundles-vectara.html +++ b/bundles-vectara.html @@ -23,7 +23,7 @@ - + diff --git a/bundles-vertexai.html b/bundles-vertexai.html index dec10cd914..e0cb900f5a 100644 --- a/bundles-vertexai.html +++ b/bundles-vertexai.html @@ -23,7 +23,7 @@ - + diff --git a/bundles-weaviate.html b/bundles-weaviate.html index e3c5c11459..7dde380630 100644 --- a/bundles-weaviate.html +++ b/bundles-weaviate.html @@ -23,7 +23,7 @@ - + diff --git a/bundles-wikipedia.html b/bundles-wikipedia.html index deb6ba771e..8f03f022fa 100644 --- a/bundles-wikipedia.html +++ b/bundles-wikipedia.html @@ -23,7 +23,7 @@ - + diff --git a/bundles-xai.html b/bundles-xai.html index 78e6b8d0e4..d11516648b 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 a6eaedf9ae..5c1152f19a 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 744f2be40f..9e6d8fd5ca 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 9f49c71d49..740b5bdf94 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 bf75b1ff5e..3cba44aa86 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 b45aa2ab7e..784116c35a 100644 --- a/components-custom-components.html +++ b/components-custom-components.html @@ -23,7 +23,7 @@ - + diff --git a/components-data.html b/components-data.html index 8bc520590f..3b38dc7858 100644 --- a/components-data.html +++ b/components-data.html @@ -23,7 +23,7 @@ - + diff --git a/components-embedding-models.html b/components-embedding-models.html index b3aabd8f0f..88198e04cf 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 69771ba6e6..85713ae843 100644 --- a/components-helpers.html +++ b/components-helpers.html @@ -23,7 +23,7 @@ - + diff --git a/components-io.html b/components-io.html index 74b939ee5b..2779952ec7 100644 --- a/components-io.html +++ b/components-io.html @@ -23,7 +23,7 @@ - + diff --git a/components-logic.html b/components-logic.html index 6bc2096c20..f21fc44f72 100644 --- a/components-logic.html +++ b/components-logic.html @@ -23,7 +23,7 @@ - + diff --git a/components-models.html b/components-models.html index 112ac87b77..20e4588183 100644 --- a/components-models.html +++ b/components-models.html @@ -23,7 +23,7 @@ - + diff --git a/components-processing.html b/components-processing.html index 59e69585a2..f37c2163d9 100644 --- a/components-processing.html +++ b/components-processing.html @@ -23,7 +23,7 @@ - + @@ -425,7 +425,7 @@ For example, a CSV file with the file name ~/Desktop/my_file could

Optional: If you want to use the saved file in a flow, you must use an API call or another component to retrieve the file from the given filepath.

-

Smart Function​

+

Smart Function​

In Langflow version 1.5, this component was renamed from Lambda Filter to Smart Function.

The Smart Function component uses an LLM to generate a Lambda function to filter or transform structured data based on natural language instructions. You must connect this component to a language model component, which is used to generate a function based on the natural language instructions you provide in the Instructions parameter. @@ -614,7 +614,7 @@ Fields from the .data attribute become columns, and the .text

Parse JSON

Replace this legacy component with the Parser component.

This component converts and extracts JSON fields in Message and Data objects using JQ queries, then returns filtered_data, which is a list of Data objects.

Regex Extractor

Replace this legacy component with the Parser component.

This component extracts patterns in text using regular expressions. It can be used to find and extract specific patterns or information in text.

Select Data

Replace this legacy component with the Data Operations component.

This component selects a single Data object from a list.

It accepts the following parameters:

NameDisplay NameInfo
data_listData ListInput parameter. List of data to select from
data_indexData IndexInput parameter. Index of the data to select
selected_dataSelected DataOutput parameter. The selected Data object.
-
Update Data

Replace this legacy component with the Data Operations component.

This component dynamically updates or appends data with specified fields.

It accepts the following parameters:

NameDisplay NameInfo
old_dataDataInput parameter. The records to update.
number_of_fieldsNumber of FieldsInput parameter. The number of fields to add. The maximum is 15.
text_keyText KeyInput parameter. The key for text content.
text_key_validatorText Key ValidatorInput parameter. Validates the text key presence.
dataDataOutput parameter. The updated Data objects.