From 5d87137fbb6898de76d5c8df8ec5ffb5bcb2f3c2 Mon Sep 17 00:00:00 2001 From: "github-merge-queue[bot]" Date: Fri, 9 May 2025 21:58:35 +0000 Subject: [PATCH] deploy: 06a74bdffd13940ec4490d7840213c2e8f57e227 --- 404.html | 2 +- agents-overview.html | 2 +- agents-tool-calling-agent-component.html | 2 +- api-reference-api-examples.html | 2 +- api.html | 2 +- api/add-user.html | 2 +- api/auto-login.html | 2 +- api/build-flow.html | 2 +- api/build-public-tmp.html | 2 +- api/build-vertex-stream.html | 2 +- api/build-vertex.html | 2 +- api/cancel-build.html | 2 +- api/check-if-store-has-api-key.html | 2 +- api/check-if-store-is-enabled.html | 2 +- api/create-api-key-route.html | 2 +- api/create-flow.html | 2 +- api/create-flows.html | 2 +- api/create-folder-redirect.html | 2 +- api/create-project.html | 2 +- api/create-upload-file.html | 2 +- api/create-variable.html | 2 +- api/custom-component-update.html | 2 +- api/custom-component.html | 2 +- api/delete-all-files-1.html | 2 +- api/delete-all-files.html | 2 +- api/delete-api-key-route.html | 2 +- api/delete-file-1.html | 2 +- api/delete-file.html | 2 +- api/delete-flow.html | 2 +- api/delete-folder-redirect.html | 2 +- api/delete-messages-session.html | 2 +- api/delete-messages.html | 2 +- api/delete-multiple-flows.html | 2 +- api/delete-project.html | 2 +- api/delete-user.html | 2 +- api/delete-variable.html | 2 +- api/delete-vertex-builds.html | 2 +- api/download-component.html | 2 +- api/download-file-1.html | 2 +- api/download-file-2.html | 2 +- api/download-file-redirect.html | 2 +- api/download-file.html | 2 +- api/download-image.html | 2 +- api/download-multiple-file.html | 2 +- api/download-profile-picture.html | 2 +- api/edit-file-name.html | 2 +- api/experimental-run-flow.html | 2 +- api/get-all.html | 2 +- api/get-api-keys-route.html | 2 +- api/get-build-events.html | 2 +- api/get-components.html | 2 +- api/get-config.html | 2 +- api/get-elevenlabs-voice-ids.html | 2 +- api/get-list-of-components-liked-by-user.html | 2 +- api/get-messages.html | 2 +- api/get-starter-projects.html | 2 +- api/get-tags.html | 2 +- api/get-task-status.html | 2 +- api/get-transactions.html | 2 +- api/get-version.html | 2 +- api/get-vertex-builds.html | 2 +- api/handle-messages-1.html | 2 +- api/handle-messages.html | 2 +- api/handle-project-messages-with-slash.html | 2 +- api/handle-project-messages.html | 2 +- api/handle-project-sse.html | 2 +- api/handle-sse-1.html | 2 +- api/handle-sse.html | 2 +- api/health-check.html | 2 +- api/health.html | 2 +- api/like-component.html | 2 +- api/list-files-1.html | 2 +- api/list-files-2.html | 2 +- api/list-files.html | 2 +- api/list-profile-pictures.html | 2 +- api/list-project-tools.html | 2 +- api/login-to-get-access-token.html | 2 +- api/logout.html | 2 +- api/logs.html | 2 +- api/patch-user.html | 2 +- api/post-validate-code.html | 2 +- api/post-validate-prompt.html | 2 +- api/process-1.html | 2 +- api/process.html | 2 +- api/read-all-users.html | 2 +- api/read-basic-examples.html | 2 +- api/read-current-user.html | 2 +- api/read-flow.html | 2 +- api/read-flows.html | 2 +- api/read-folder-redirect.html | 2 +- api/read-folders-redirect.html | 2 +- api/read-project.html | 2 +- api/read-projects.html | 2 +- api/read-public-flow.html | 2 +- api/read-variables.html | 2 +- api/refresh-token.html | 2 +- api/reset-password.html | 2 +- api/retrieve-vertices-order.html | 2 +- api/save-store-api-key.html | 2 +- api/share-component.html | 2 +- api/simplified-run-flow.html | 2 +- api/stream-logs.html | 2 +- api/update-flow.html | 2 +- api/update-folder-redirect.html | 2 +- api/update-message.html | 2 +- api/update-project-mcp-settings.html | 2 +- api/update-project.html | 2 +- api/update-session-id.html | 2 +- api/update-shared-component.html | 2 +- api/update-variable.html | 2 +- api/upload-file-1.html | 2 +- api/upload-file-2.html | 2 +- api/upload-file-redirect.html | 2 +- api/upload-file.html | 2 +- api/upload-user-file-1.html | 2 +- api/upload-user-file.html | 2 +- api/webhook-run-flow.html | 2 +- ...-file-67ebbb733732670897bedd9fd1b87583.png | Bin 0 -> 278862 bytes assets/js/0be1d5fe.9d54f496.js | 1 - assets/js/0be1d5fe.b571522a.js | 1 + assets/js/22dd74f7.1d02fab2.js | 1 - assets/js/22dd74f7.f52a55a9.js | 1 + ...0d4f5.d354f8ad.js => 2ab0d4f5.29af1518.js} | 2 +- assets/js/3ae94ad4.23b1699f.js | 1 - assets/js/3ae94ad4.e49d3ad7.js | 1 + assets/js/647965d5.9389c053.js | 1 + assets/js/647965d5.efa89a5e.js | 1 - assets/js/6aa941bb.6cf4daa5.js | 1 + assets/js/6aa941bb.ea2cd923.js | 1 - assets/js/6e1a9721.3ffaf0d0.js | 1 - assets/js/6e1a9721.b2f38580.js | 1 + ...eb549.5304d422.js => 885eb549.b5bc7ea1.js} | 2 +- assets/js/8f774222.d1261411.js | 1 - assets/js/8f774222.d4baa7a3.js | 1 + assets/js/921b5fc1.4fa35110.js | 1 + assets/js/921b5fc1.5b0d7c49.js | 1 - assets/js/adef6868.7239ff5d.js | 1 + assets/js/adef6868.f5324ebd.js | 1 - assets/js/ae68aa8b.4c824b91.js | 1 + assets/js/ae68aa8b.9d9ff467.js | 1 - assets/js/c39b795e.e7a7ebbf.js | 1 + assets/js/c39b795e.ead0f1d0.js | 1 - ...6a4d2.3b926452.js => e6c6a4d2.4a7e2d69.js} | 2 +- assets/js/f66238ae.20b884ca.js | 1 - assets/js/f66238ae.bba50808.js | 1 + assets/js/fdefa9a8.40dce170.js | 1 + assets/js/fdefa9a8.94ce1e19.js | 1 - ...n.aa121d7a.js => runtime~main.ac9da146.js} | 2 +- blog-writer.html | 2 +- components-agents.html | 136 +++++---------- components-bundle-components.html | 2 +- components-custom-components.html | 2 +- components-data.html | 90 +++------- components-embedding-models.html | 98 +++-------- components-helpers.html | 42 +---- components-io.html | 26 +-- components-loaders.html | 17 +- components-logic.html | 50 ++---- components-memories.html | 29 +--- components-models.html | 119 +++---------- components-processing.html | 164 +++++++++--------- components-prompts.html | 13 +- components-tools.html | 2 +- components-vector-stores.html | 131 +++----------- concepts-components.html | 4 +- concepts-file-management.html | 2 +- concepts-flows.html | 2 +- concepts-objects.html | 2 +- concepts-overview.html | 2 +- concepts-playground.html | 2 +- concepts-publish.html | 2 +- concepts-voice-mode.html | 2 +- configuration-api-keys.html | 2 +- configuration-authentication.html | 2 +- configuration-cli.html | 2 +- configuration-custom-database.html | 2 +- configuration-global-variables.html | 2 +- contributing-community.html | 2 +- contributing-component-tests.html | 2 +- contributing-components.html | 2 +- contributing-github-discussions.html | 2 +- contributing-github-issues.html | 2 +- contributing-how-to-contribute.html | 2 +- contributing-telemetry.html | 2 +- deployment-docker.html | 2 +- deployment-gcp.html | 2 +- deployment-hugging-face-spaces.html | 2 +- deployment-kubernetes-dev.html | 2 +- deployment-kubernetes-prod.html | 2 +- deployment-overview.html | 2 +- deployment-prod-best-practices.html | 2 +- deployment-railway.html | 2 +- deployment-render.html | 2 +- develop-application.html | 2 +- develop-overview.html | 2 +- document-qa.html | 2 +- environment-variables.html | 2 +- get-started-installation.html | 2 +- get-started-quickstart.html | 2 +- index.html | 2 +- install-custom-dependencies.html | 2 +- integrations-apify.html | 2 +- integrations-arize.html | 2 +- integrations-assemblyai.html | 2 +- integrations-composio.html | 2 +- integrations-langfuse.html | 2 +- integrations-langsmith.html | 2 +- integrations-langwatch.html | 2 +- integrations-nvidia-ingest-wsl2.html | 2 +- integrations-nvidia-ingest.html | 2 +- integrations-opik.html | 2 +- ...setup-google-cloud-vertex-ai-langflow.html | 2 +- integrations-setup-google-oauth-langflow.html | 2 +- .../notion/notion-agent-conversational.html | 2 +- .../notion/notion-agent-meeting-notes.html | 2 +- integrations/notion/setup.html | 2 +- logging.html | 2 +- luna-for-langflow.html | 2 +- mcp-component-astra.html | 2 +- mcp-server.html | 2 +- memory-chatbot.html | 2 +- memory.html | 2 +- search.html | 2 +- sequential-agent.html | 2 +- session-id.html | 2 +- sitemap.xml | 2 +- starter-projects-basic-prompting.html | 2 +- starter-projects-simple-agent.html | 2 +- starter-projects-vector-store-rag.html | 2 +- travel-planning-agent.html | 2 +- webhook.html | 2 +- 231 files changed, 480 insertions(+), 847 deletions(-) create mode 100644 assets/images/component-save-to-file-67ebbb733732670897bedd9fd1b87583.png delete mode 100644 assets/js/0be1d5fe.9d54f496.js create mode 100644 assets/js/0be1d5fe.b571522a.js delete mode 100644 assets/js/22dd74f7.1d02fab2.js create mode 100644 assets/js/22dd74f7.f52a55a9.js rename assets/js/{2ab0d4f5.d354f8ad.js => 2ab0d4f5.29af1518.js} (50%) delete mode 100644 assets/js/3ae94ad4.23b1699f.js create mode 100644 assets/js/3ae94ad4.e49d3ad7.js create mode 100644 assets/js/647965d5.9389c053.js delete mode 100644 assets/js/647965d5.efa89a5e.js create mode 100644 assets/js/6aa941bb.6cf4daa5.js delete mode 100644 assets/js/6aa941bb.ea2cd923.js delete mode 100644 assets/js/6e1a9721.3ffaf0d0.js create mode 100644 assets/js/6e1a9721.b2f38580.js rename assets/js/{885eb549.5304d422.js => 885eb549.b5bc7ea1.js} (98%) delete mode 100644 assets/js/8f774222.d1261411.js create mode 100644 assets/js/8f774222.d4baa7a3.js create mode 100644 assets/js/921b5fc1.4fa35110.js delete mode 100644 assets/js/921b5fc1.5b0d7c49.js create mode 100644 assets/js/adef6868.7239ff5d.js delete mode 100644 assets/js/adef6868.f5324ebd.js create mode 100644 assets/js/ae68aa8b.4c824b91.js delete mode 100644 assets/js/ae68aa8b.9d9ff467.js create mode 100644 assets/js/c39b795e.e7a7ebbf.js delete mode 100644 assets/js/c39b795e.ead0f1d0.js rename assets/js/{e6c6a4d2.3b926452.js => e6c6a4d2.4a7e2d69.js} (55%) delete mode 100644 assets/js/f66238ae.20b884ca.js create mode 100644 assets/js/f66238ae.bba50808.js create mode 100644 assets/js/fdefa9a8.40dce170.js delete mode 100644 assets/js/fdefa9a8.94ce1e19.js rename assets/js/{runtime~main.aa121d7a.js => runtime~main.ac9da146.js} (93%) diff --git a/404.html b/404.html index 9da0bf34be..b910301c04 100644 --- a/404.html +++ b/404.html @@ -21,7 +21,7 @@ - + diff --git a/agents-overview.html b/agents-overview.html index 5e82ff3d5a..cfc2d7125a 100644 --- a/agents-overview.html +++ b/agents-overview.html @@ -21,7 +21,7 @@ - + diff --git a/agents-tool-calling-agent-component.html b/agents-tool-calling-agent-component.html index 073ce0f0ed..32afca8e06 100644 --- a/agents-tool-calling-agent-component.html +++ b/agents-tool-calling-agent-component.html @@ -21,7 +21,7 @@ - + diff --git a/api-reference-api-examples.html b/api-reference-api-examples.html index 249e0fa616..8ea22f99d3 100644 --- a/api-reference-api-examples.html +++ b/api-reference-api-examples.html @@ -21,7 +21,7 @@ - + diff --git a/api.html b/api.html index 61663d7811..3b9344e787 100644 --- a/api.html +++ b/api.html @@ -21,7 +21,7 @@ - + diff --git a/api/add-user.html b/api/add-user.html index 82871fd3dc..a5beaf9820 100644 --- a/api/add-user.html +++ b/api/add-user.html @@ -21,7 +21,7 @@ - + diff --git a/api/auto-login.html b/api/auto-login.html index 4e81a0a77b..deb6c1b1eb 100644 --- a/api/auto-login.html +++ b/api/auto-login.html @@ -21,7 +21,7 @@ - + diff --git a/api/build-flow.html b/api/build-flow.html index 0e233dba57..0dd89759b3 100644 --- a/api/build-flow.html +++ b/api/build-flow.html @@ -21,7 +21,7 @@ - + diff --git a/api/build-public-tmp.html b/api/build-public-tmp.html index 05c52cb12e..c4f4fe82fc 100644 --- a/api/build-public-tmp.html +++ b/api/build-public-tmp.html @@ -21,7 +21,7 @@ - + diff --git a/api/build-vertex-stream.html b/api/build-vertex-stream.html index 7769c273ba..f02267bc9a 100644 --- a/api/build-vertex-stream.html +++ b/api/build-vertex-stream.html @@ -21,7 +21,7 @@ - + diff --git a/api/build-vertex.html b/api/build-vertex.html index e472872b97..71eb32a4c9 100644 --- a/api/build-vertex.html +++ b/api/build-vertex.html @@ -21,7 +21,7 @@ - + diff --git a/api/cancel-build.html b/api/cancel-build.html index bb3fe5b299..1dbcdf1135 100644 --- a/api/cancel-build.html +++ b/api/cancel-build.html @@ -21,7 +21,7 @@ - + diff --git a/api/check-if-store-has-api-key.html b/api/check-if-store-has-api-key.html index 603c6fc775..92abeb47e8 100644 --- a/api/check-if-store-has-api-key.html +++ b/api/check-if-store-has-api-key.html @@ -21,7 +21,7 @@ - + diff --git a/api/check-if-store-is-enabled.html b/api/check-if-store-is-enabled.html index 638363ddfd..fff902976b 100644 --- a/api/check-if-store-is-enabled.html +++ b/api/check-if-store-is-enabled.html @@ -21,7 +21,7 @@ - + diff --git a/api/create-api-key-route.html b/api/create-api-key-route.html index 288a7c30fa..af0470cdb2 100644 --- a/api/create-api-key-route.html +++ b/api/create-api-key-route.html @@ -21,7 +21,7 @@ - + diff --git a/api/create-flow.html b/api/create-flow.html index ef9197e74b..bd4f0eab0f 100644 --- a/api/create-flow.html +++ b/api/create-flow.html @@ -21,7 +21,7 @@ - + diff --git a/api/create-flows.html b/api/create-flows.html index 4cb4e82006..dac6d96028 100644 --- a/api/create-flows.html +++ b/api/create-flows.html @@ -21,7 +21,7 @@ - + diff --git a/api/create-folder-redirect.html b/api/create-folder-redirect.html index 9b7ee10866..89f06ddb3f 100644 --- a/api/create-folder-redirect.html +++ b/api/create-folder-redirect.html @@ -21,7 +21,7 @@ - + diff --git a/api/create-project.html b/api/create-project.html index 825f631742..21ea28a2bb 100644 --- a/api/create-project.html +++ b/api/create-project.html @@ -21,7 +21,7 @@ - + diff --git a/api/create-upload-file.html b/api/create-upload-file.html index 1c07182216..778642c2c9 100644 --- a/api/create-upload-file.html +++ b/api/create-upload-file.html @@ -21,7 +21,7 @@ - + diff --git a/api/create-variable.html b/api/create-variable.html index bcd3138c49..458bcfb7a2 100644 --- a/api/create-variable.html +++ b/api/create-variable.html @@ -21,7 +21,7 @@ - + diff --git a/api/custom-component-update.html b/api/custom-component-update.html index 5d497c1dd0..c9c1d077dc 100644 --- a/api/custom-component-update.html +++ b/api/custom-component-update.html @@ -21,7 +21,7 @@ - + diff --git a/api/custom-component.html b/api/custom-component.html index 9f411cf81f..8ea394684a 100644 --- a/api/custom-component.html +++ b/api/custom-component.html @@ -21,7 +21,7 @@ - + diff --git a/api/delete-all-files-1.html b/api/delete-all-files-1.html index 4586e00443..b9353ab404 100644 --- a/api/delete-all-files-1.html +++ b/api/delete-all-files-1.html @@ -21,7 +21,7 @@ - + diff --git a/api/delete-all-files.html b/api/delete-all-files.html index 0e7eed92a7..8abaaa6bca 100644 --- a/api/delete-all-files.html +++ b/api/delete-all-files.html @@ -21,7 +21,7 @@ - + diff --git a/api/delete-api-key-route.html b/api/delete-api-key-route.html index ea5fcb3eec..c609c60728 100644 --- a/api/delete-api-key-route.html +++ b/api/delete-api-key-route.html @@ -21,7 +21,7 @@ - + diff --git a/api/delete-file-1.html b/api/delete-file-1.html index ce1d8de054..95c45bcc78 100644 --- a/api/delete-file-1.html +++ b/api/delete-file-1.html @@ -21,7 +21,7 @@ - + diff --git a/api/delete-file.html b/api/delete-file.html index 0a6d24cc89..9be43f2a20 100644 --- a/api/delete-file.html +++ b/api/delete-file.html @@ -21,7 +21,7 @@ - + diff --git a/api/delete-flow.html b/api/delete-flow.html index 3078654716..34b7c3c5c4 100644 --- a/api/delete-flow.html +++ b/api/delete-flow.html @@ -21,7 +21,7 @@ - + diff --git a/api/delete-folder-redirect.html b/api/delete-folder-redirect.html index dcc9dffb51..12b319cf4e 100644 --- a/api/delete-folder-redirect.html +++ b/api/delete-folder-redirect.html @@ -21,7 +21,7 @@ - + diff --git a/api/delete-messages-session.html b/api/delete-messages-session.html index f282e7981e..dcc6a4ee93 100644 --- a/api/delete-messages-session.html +++ b/api/delete-messages-session.html @@ -21,7 +21,7 @@ - + diff --git a/api/delete-messages.html b/api/delete-messages.html index 04c491790c..67c241a97a 100644 --- a/api/delete-messages.html +++ b/api/delete-messages.html @@ -21,7 +21,7 @@ - + diff --git a/api/delete-multiple-flows.html b/api/delete-multiple-flows.html index da3bae56b6..31b697f38f 100644 --- a/api/delete-multiple-flows.html +++ b/api/delete-multiple-flows.html @@ -21,7 +21,7 @@ - + diff --git a/api/delete-project.html b/api/delete-project.html index f1955cd653..22357b5abd 100644 --- a/api/delete-project.html +++ b/api/delete-project.html @@ -21,7 +21,7 @@ - + diff --git a/api/delete-user.html b/api/delete-user.html index 4202b9d946..313dac16b9 100644 --- a/api/delete-user.html +++ b/api/delete-user.html @@ -21,7 +21,7 @@ - + diff --git a/api/delete-variable.html b/api/delete-variable.html index 45197bec53..437f0bc077 100644 --- a/api/delete-variable.html +++ b/api/delete-variable.html @@ -21,7 +21,7 @@ - + diff --git a/api/delete-vertex-builds.html b/api/delete-vertex-builds.html index 02c82c6cfa..0209e1a79e 100644 --- a/api/delete-vertex-builds.html +++ b/api/delete-vertex-builds.html @@ -21,7 +21,7 @@ - + diff --git a/api/download-component.html b/api/download-component.html index a77295e520..a2cf1cc1fa 100644 --- a/api/download-component.html +++ b/api/download-component.html @@ -21,7 +21,7 @@ - + diff --git a/api/download-file-1.html b/api/download-file-1.html index f7ffc9cbb3..c175eabbeb 100644 --- a/api/download-file-1.html +++ b/api/download-file-1.html @@ -21,7 +21,7 @@ - + diff --git a/api/download-file-2.html b/api/download-file-2.html index d53ea3e8ce..4a384f17e0 100644 --- a/api/download-file-2.html +++ b/api/download-file-2.html @@ -21,7 +21,7 @@ - + diff --git a/api/download-file-redirect.html b/api/download-file-redirect.html index 5eb4fb7c65..0f8b9d3c03 100644 --- a/api/download-file-redirect.html +++ b/api/download-file-redirect.html @@ -21,7 +21,7 @@ - + diff --git a/api/download-file.html b/api/download-file.html index 217053929b..14ff2fa3e1 100644 --- a/api/download-file.html +++ b/api/download-file.html @@ -21,7 +21,7 @@ - + diff --git a/api/download-image.html b/api/download-image.html index c7f805dcf3..acae29ef04 100644 --- a/api/download-image.html +++ b/api/download-image.html @@ -21,7 +21,7 @@ - + diff --git a/api/download-multiple-file.html b/api/download-multiple-file.html index 41c1c4e688..dd8a6672d8 100644 --- a/api/download-multiple-file.html +++ b/api/download-multiple-file.html @@ -21,7 +21,7 @@ - + diff --git a/api/download-profile-picture.html b/api/download-profile-picture.html index 3761411eec..a23e4a58d4 100644 --- a/api/download-profile-picture.html +++ b/api/download-profile-picture.html @@ -21,7 +21,7 @@ - + diff --git a/api/edit-file-name.html b/api/edit-file-name.html index 1447273fdd..e0290611a6 100644 --- a/api/edit-file-name.html +++ b/api/edit-file-name.html @@ -21,7 +21,7 @@ - + diff --git a/api/experimental-run-flow.html b/api/experimental-run-flow.html index c79871bd6c..c25bd9c851 100644 --- a/api/experimental-run-flow.html +++ b/api/experimental-run-flow.html @@ -21,7 +21,7 @@ - + diff --git a/api/get-all.html b/api/get-all.html index 9584b1a51a..7ee60db66a 100644 --- a/api/get-all.html +++ b/api/get-all.html @@ -21,7 +21,7 @@ - + diff --git a/api/get-api-keys-route.html b/api/get-api-keys-route.html index c107745d15..e7078d1978 100644 --- a/api/get-api-keys-route.html +++ b/api/get-api-keys-route.html @@ -21,7 +21,7 @@ - + diff --git a/api/get-build-events.html b/api/get-build-events.html index 04a9d42938..69f388673b 100644 --- a/api/get-build-events.html +++ b/api/get-build-events.html @@ -21,7 +21,7 @@ - + diff --git a/api/get-components.html b/api/get-components.html index 718b0761df..529e895836 100644 --- a/api/get-components.html +++ b/api/get-components.html @@ -21,7 +21,7 @@ - + diff --git a/api/get-config.html b/api/get-config.html index 22f6b7b6d5..53796e89ae 100644 --- a/api/get-config.html +++ b/api/get-config.html @@ -21,7 +21,7 @@ - + diff --git a/api/get-elevenlabs-voice-ids.html b/api/get-elevenlabs-voice-ids.html index 061ec44bd4..ae5ac0b92d 100644 --- a/api/get-elevenlabs-voice-ids.html +++ b/api/get-elevenlabs-voice-ids.html @@ -21,7 +21,7 @@ - + diff --git a/api/get-list-of-components-liked-by-user.html b/api/get-list-of-components-liked-by-user.html index 43302259bd..7dfca39590 100644 --- a/api/get-list-of-components-liked-by-user.html +++ b/api/get-list-of-components-liked-by-user.html @@ -21,7 +21,7 @@ - + diff --git a/api/get-messages.html b/api/get-messages.html index 2c57980e3f..2ed3c11c90 100644 --- a/api/get-messages.html +++ b/api/get-messages.html @@ -21,7 +21,7 @@ - + diff --git a/api/get-starter-projects.html b/api/get-starter-projects.html index 8a441d8162..1edbcd2ea7 100644 --- a/api/get-starter-projects.html +++ b/api/get-starter-projects.html @@ -21,7 +21,7 @@ - + diff --git a/api/get-tags.html b/api/get-tags.html index c438c3bb3d..0955733806 100644 --- a/api/get-tags.html +++ b/api/get-tags.html @@ -21,7 +21,7 @@ - + diff --git a/api/get-task-status.html b/api/get-task-status.html index 6451e12184..12b713c6e8 100644 --- a/api/get-task-status.html +++ b/api/get-task-status.html @@ -21,7 +21,7 @@ - + diff --git a/api/get-transactions.html b/api/get-transactions.html index 3182c923b7..2f4e4138ac 100644 --- a/api/get-transactions.html +++ b/api/get-transactions.html @@ -21,7 +21,7 @@ - + diff --git a/api/get-version.html b/api/get-version.html index db6fbe0016..d01ea3a9a5 100644 --- a/api/get-version.html +++ b/api/get-version.html @@ -21,7 +21,7 @@ - + diff --git a/api/get-vertex-builds.html b/api/get-vertex-builds.html index c4aee4d095..771ff03135 100644 --- a/api/get-vertex-builds.html +++ b/api/get-vertex-builds.html @@ -21,7 +21,7 @@ - + diff --git a/api/handle-messages-1.html b/api/handle-messages-1.html index da15b5daf5..fcaa5638ca 100644 --- a/api/handle-messages-1.html +++ b/api/handle-messages-1.html @@ -21,7 +21,7 @@ - + diff --git a/api/handle-messages.html b/api/handle-messages.html index 2336384d53..ea0f51f60f 100644 --- a/api/handle-messages.html +++ b/api/handle-messages.html @@ -21,7 +21,7 @@ - + diff --git a/api/handle-project-messages-with-slash.html b/api/handle-project-messages-with-slash.html index 1b1db48b5a..e63dfb344e 100644 --- a/api/handle-project-messages-with-slash.html +++ b/api/handle-project-messages-with-slash.html @@ -21,7 +21,7 @@ - + diff --git a/api/handle-project-messages.html b/api/handle-project-messages.html index 4bbcd32b05..0e6d4085e0 100644 --- a/api/handle-project-messages.html +++ b/api/handle-project-messages.html @@ -21,7 +21,7 @@ - + diff --git a/api/handle-project-sse.html b/api/handle-project-sse.html index b95d6ba26b..71d8f68ded 100644 --- a/api/handle-project-sse.html +++ b/api/handle-project-sse.html @@ -21,7 +21,7 @@ - + diff --git a/api/handle-sse-1.html b/api/handle-sse-1.html index f9f52e0f0c..bf7dc95837 100644 --- a/api/handle-sse-1.html +++ b/api/handle-sse-1.html @@ -21,7 +21,7 @@ - + diff --git a/api/handle-sse.html b/api/handle-sse.html index a1a1f0b4f4..5d593c1ac2 100644 --- a/api/handle-sse.html +++ b/api/handle-sse.html @@ -21,7 +21,7 @@ - + diff --git a/api/health-check.html b/api/health-check.html index 970d7c1768..964ae6dbf7 100644 --- a/api/health-check.html +++ b/api/health-check.html @@ -21,7 +21,7 @@ - + diff --git a/api/health.html b/api/health.html index 5ac11cc04d..2185adbf28 100644 --- a/api/health.html +++ b/api/health.html @@ -21,7 +21,7 @@ - + diff --git a/api/like-component.html b/api/like-component.html index 3e532e3aa0..037af5d44c 100644 --- a/api/like-component.html +++ b/api/like-component.html @@ -21,7 +21,7 @@ - + diff --git a/api/list-files-1.html b/api/list-files-1.html index 32aa31612a..46bae4972a 100644 --- a/api/list-files-1.html +++ b/api/list-files-1.html @@ -21,7 +21,7 @@ - + diff --git a/api/list-files-2.html b/api/list-files-2.html index c18b3b4346..2b960d1313 100644 --- a/api/list-files-2.html +++ b/api/list-files-2.html @@ -21,7 +21,7 @@ - + diff --git a/api/list-files.html b/api/list-files.html index b513ac2365..6bd4017567 100644 --- a/api/list-files.html +++ b/api/list-files.html @@ -21,7 +21,7 @@ - + diff --git a/api/list-profile-pictures.html b/api/list-profile-pictures.html index f2f8adfde9..9439b8f041 100644 --- a/api/list-profile-pictures.html +++ b/api/list-profile-pictures.html @@ -21,7 +21,7 @@ - + diff --git a/api/list-project-tools.html b/api/list-project-tools.html index f0290be44e..58672b0464 100644 --- a/api/list-project-tools.html +++ b/api/list-project-tools.html @@ -21,7 +21,7 @@ - + diff --git a/api/login-to-get-access-token.html b/api/login-to-get-access-token.html index f720118b91..6a0725563b 100644 --- a/api/login-to-get-access-token.html +++ b/api/login-to-get-access-token.html @@ -21,7 +21,7 @@ - + diff --git a/api/logout.html b/api/logout.html index c1063017a2..d78b66d50a 100644 --- a/api/logout.html +++ b/api/logout.html @@ -21,7 +21,7 @@ - + diff --git a/api/logs.html b/api/logs.html index 7e3df7a11e..ca00c093f5 100644 --- a/api/logs.html +++ b/api/logs.html @@ -21,7 +21,7 @@ - + diff --git a/api/patch-user.html b/api/patch-user.html index 385442a5ac..99e72735da 100644 --- a/api/patch-user.html +++ b/api/patch-user.html @@ -21,7 +21,7 @@ - + diff --git a/api/post-validate-code.html b/api/post-validate-code.html index c7ee740053..bbdf05f71a 100644 --- a/api/post-validate-code.html +++ b/api/post-validate-code.html @@ -21,7 +21,7 @@ - + diff --git a/api/post-validate-prompt.html b/api/post-validate-prompt.html index af6da9960b..d1c9502fc3 100644 --- a/api/post-validate-prompt.html +++ b/api/post-validate-prompt.html @@ -21,7 +21,7 @@ - + diff --git a/api/process-1.html b/api/process-1.html index 8d0882d232..a8ae1327d3 100644 --- a/api/process-1.html +++ b/api/process-1.html @@ -21,7 +21,7 @@ - + diff --git a/api/process.html b/api/process.html index c4d185ac4c..e5473a5f08 100644 --- a/api/process.html +++ b/api/process.html @@ -21,7 +21,7 @@ - + diff --git a/api/read-all-users.html b/api/read-all-users.html index 65539e4760..fba84828d6 100644 --- a/api/read-all-users.html +++ b/api/read-all-users.html @@ -21,7 +21,7 @@ - + diff --git a/api/read-basic-examples.html b/api/read-basic-examples.html index bbb41b0628..93977edc85 100644 --- a/api/read-basic-examples.html +++ b/api/read-basic-examples.html @@ -21,7 +21,7 @@ - + diff --git a/api/read-current-user.html b/api/read-current-user.html index 1a97633623..b60e94c05d 100644 --- a/api/read-current-user.html +++ b/api/read-current-user.html @@ -21,7 +21,7 @@ - + diff --git a/api/read-flow.html b/api/read-flow.html index 900229b2b9..d880aa3a97 100644 --- a/api/read-flow.html +++ b/api/read-flow.html @@ -21,7 +21,7 @@ - + diff --git a/api/read-flows.html b/api/read-flows.html index 312dc98447..37823fd0db 100644 --- a/api/read-flows.html +++ b/api/read-flows.html @@ -21,7 +21,7 @@ - + diff --git a/api/read-folder-redirect.html b/api/read-folder-redirect.html index da1742b488..68230b8806 100644 --- a/api/read-folder-redirect.html +++ b/api/read-folder-redirect.html @@ -21,7 +21,7 @@ - + diff --git a/api/read-folders-redirect.html b/api/read-folders-redirect.html index d5c4ffc695..21e94a315d 100644 --- a/api/read-folders-redirect.html +++ b/api/read-folders-redirect.html @@ -21,7 +21,7 @@ - + diff --git a/api/read-project.html b/api/read-project.html index faa4fbae09..700e72d9cd 100644 --- a/api/read-project.html +++ b/api/read-project.html @@ -21,7 +21,7 @@ - + diff --git a/api/read-projects.html b/api/read-projects.html index def808422f..fd2a9cb325 100644 --- a/api/read-projects.html +++ b/api/read-projects.html @@ -21,7 +21,7 @@ - + diff --git a/api/read-public-flow.html b/api/read-public-flow.html index 7bc67977d2..4c24fef9d4 100644 --- a/api/read-public-flow.html +++ b/api/read-public-flow.html @@ -21,7 +21,7 @@ - + diff --git a/api/read-variables.html b/api/read-variables.html index 25a5ac0ac9..554105f744 100644 --- a/api/read-variables.html +++ b/api/read-variables.html @@ -21,7 +21,7 @@ - + diff --git a/api/refresh-token.html b/api/refresh-token.html index 19ad06b715..e2301ef9cc 100644 --- a/api/refresh-token.html +++ b/api/refresh-token.html @@ -21,7 +21,7 @@ - + diff --git a/api/reset-password.html b/api/reset-password.html index da0831babb..3895846b8e 100644 --- a/api/reset-password.html +++ b/api/reset-password.html @@ -21,7 +21,7 @@ - + diff --git a/api/retrieve-vertices-order.html b/api/retrieve-vertices-order.html index c92b85c13d..17c6e0b275 100644 --- a/api/retrieve-vertices-order.html +++ b/api/retrieve-vertices-order.html @@ -21,7 +21,7 @@ - + diff --git a/api/save-store-api-key.html b/api/save-store-api-key.html index abc58c063b..45063f1bc2 100644 --- a/api/save-store-api-key.html +++ b/api/save-store-api-key.html @@ -21,7 +21,7 @@ - + diff --git a/api/share-component.html b/api/share-component.html index ac75b5ceae..d55e5dd3c1 100644 --- a/api/share-component.html +++ b/api/share-component.html @@ -21,7 +21,7 @@ - + diff --git a/api/simplified-run-flow.html b/api/simplified-run-flow.html index 4a917eee3e..84fef679c8 100644 --- a/api/simplified-run-flow.html +++ b/api/simplified-run-flow.html @@ -21,7 +21,7 @@ - + diff --git a/api/stream-logs.html b/api/stream-logs.html index 6435455569..47eb3a7d11 100644 --- a/api/stream-logs.html +++ b/api/stream-logs.html @@ -21,7 +21,7 @@ - + diff --git a/api/update-flow.html b/api/update-flow.html index 2a5d60e1fb..e4aef52f40 100644 --- a/api/update-flow.html +++ b/api/update-flow.html @@ -21,7 +21,7 @@ - + diff --git a/api/update-folder-redirect.html b/api/update-folder-redirect.html index 0da18ef8f8..38c3a3e3fb 100644 --- a/api/update-folder-redirect.html +++ b/api/update-folder-redirect.html @@ -21,7 +21,7 @@ - + diff --git a/api/update-message.html b/api/update-message.html index 39395d555c..cd5f7e41a3 100644 --- a/api/update-message.html +++ b/api/update-message.html @@ -21,7 +21,7 @@ - + diff --git a/api/update-project-mcp-settings.html b/api/update-project-mcp-settings.html index 7c67cb8511..0162006de4 100644 --- a/api/update-project-mcp-settings.html +++ b/api/update-project-mcp-settings.html @@ -21,7 +21,7 @@ - + diff --git a/api/update-project.html b/api/update-project.html index 95c8cdb489..3354706b9b 100644 --- a/api/update-project.html +++ b/api/update-project.html @@ -21,7 +21,7 @@ - + diff --git a/api/update-session-id.html b/api/update-session-id.html index d1be69b571..d82471578f 100644 --- a/api/update-session-id.html +++ b/api/update-session-id.html @@ -21,7 +21,7 @@ - + diff --git a/api/update-shared-component.html b/api/update-shared-component.html index a780a7c74f..454d7590d5 100644 --- a/api/update-shared-component.html +++ b/api/update-shared-component.html @@ -21,7 +21,7 @@ - + diff --git a/api/update-variable.html b/api/update-variable.html index bbd2dd788e..56e9baf3fb 100644 --- a/api/update-variable.html +++ b/api/update-variable.html @@ -21,7 +21,7 @@ - + diff --git a/api/upload-file-1.html b/api/upload-file-1.html index 5f8ec86923..fea294db8e 100644 --- a/api/upload-file-1.html +++ b/api/upload-file-1.html @@ -21,7 +21,7 @@ - + diff --git a/api/upload-file-2.html b/api/upload-file-2.html index 3302c5b0e6..e7d8c7bef9 100644 --- a/api/upload-file-2.html +++ b/api/upload-file-2.html @@ -21,7 +21,7 @@ - + diff --git a/api/upload-file-redirect.html b/api/upload-file-redirect.html index 7f18b50847..cf307247e6 100644 --- a/api/upload-file-redirect.html +++ b/api/upload-file-redirect.html @@ -21,7 +21,7 @@ - + diff --git a/api/upload-file.html b/api/upload-file.html index 9095c4eb89..8423807ddc 100644 --- a/api/upload-file.html +++ b/api/upload-file.html @@ -21,7 +21,7 @@ - + diff --git a/api/upload-user-file-1.html b/api/upload-user-file-1.html index 2ed304a894..91daacc26c 100644 --- a/api/upload-user-file-1.html +++ b/api/upload-user-file-1.html @@ -21,7 +21,7 @@ - + diff --git a/api/upload-user-file.html b/api/upload-user-file.html index 792c7a97ee..c432270d7f 100644 --- a/api/upload-user-file.html +++ b/api/upload-user-file.html @@ -21,7 +21,7 @@ - + diff --git a/api/webhook-run-flow.html b/api/webhook-run-flow.html index 989f7b3220..c0dc350648 100644 --- a/api/webhook-run-flow.html +++ b/api/webhook-run-flow.html @@ -21,7 +21,7 @@ - + diff --git a/assets/images/component-save-to-file-67ebbb733732670897bedd9fd1b87583.png b/assets/images/component-save-to-file-67ebbb733732670897bedd9fd1b87583.png new file mode 100644 index 0000000000000000000000000000000000000000..c767c10b96a203f7684f8ccf04110b714a89682f GIT binary patch literal 278862 zcma&O2|SeD`#)|;3ZZPtp2|*$$vy~4WS3ppw^10fhotP1J&ZN`K7+Ak%f4h8%NVrS z#=bMc@Af?Pe0n~wkMIBAE6sGznfpHHT<2WpeZ8;u<*mA!(j}5>BzSmumz3|{)5OCg zD#yb+-+JLZaD~h5TMzJp@1m(BhgaOkxCs2`h2>*qD^*oIZs7d|ymR>1@Q6;E06)_B z4F9}W#OK5#{OdXa9$v65-nn0G)PUF1KT*KX>39BqC4}MsY7Jb25&UjVR1PEj{r-IG z>DLyR4rhUvi_h-syWru`-aP%mSJu3-j)w=vQ@$sw{Q`d(L;QlV4b#4%5zjkbK3S`} zCIz-RKXj3j^;Oh)O2l?ykvrgwY++ye&17FCWIgBe`0$?Zl&>Vq3&^hL3Vf7Yaxp80d}Zik|Equi z>BBMD4#G`NCOnO}22s^y!aOauPMi8Z7B=(5T_a$898S-KCh2t zT5Y$5Q=b3da{$cCIU1W%KEyN^kKtBFs6fN+OrmuvqM5%Q!9@&JEoo>&^gs5(U)+6t zxMRf5Le1390!rVqi0r7c`(3po#R2W8kO{cHwS;ZVh9*f#%};eS2|c({M%-B>A+%{@&3_zsdZ+heQcxl_FY}XQwMM()V21-yoi~^w7Doq6-(#c)~(DK?pt%ZDB&`(-t?8k+JdiP@kXG_3&x!pW~{d z(b3+aOL3%|vd>0?-W(0WTaRY~DbyxCmmH5RYAHHqmn#s9okIPz)cW~U zFX_R`xCTqanqBK&I_AogOuh=A+v3l!vrO)myq#XGXIW)mmuPbscC@!?tX zlIk_-sQSEOMafiB8}}Q)O~<4MQqXsT>)fZ0%$nWMj$V3JRr=6R5>=gD4!C)hBj!06V+>b#+%bu zYR$UdbD3U~aGNw;xqXtt;O}>)i@Q+CK5*CXxQ=Ba7%XkkxaVW#o@?pmCF{V~u7F%A z`1~a;^nK&cO`c#h>u$K}G@9;A?~O;0Ox>aGpf6}8k>ixO^1WZ088i3r3gNi#y%Q|Q zx^S28?zr{dlzoYmlfA*4lT^L4yaWC@@#|5US1X?Oy8UoCod4eMYrvAWTLP)Zv3oSmLls*ur-m8kdU)d1f$1t=@a=h@3};4 z)Yu|TD5`~-CLYzo;!`-$5Pp-TbT@4WYiP@JtysHst50J7=bB%MWK4W~m6rqM$(dV; zasm12^(6*r@%@<%rAMifHK@L}y+q^DJ4!@|?_9vD%$yAIdX3qHWFGplo<(?k&g~vzztIy228(!Rbl-e^J#v^Q35`TKTa&Htme@D zH_qF16|O}vUG`X2L@(WLG2mBV=t;eukG@loCbNSlpsZKHH_dnb0y z?sW=hZDlZP9)YE${fQ$B-T|q^(2lCGuDV3(&p;-TPgQ-oq01kDL-vI!L#woi^ev~e z_t?UD{I(357(|6`i~V%(o2MxLn~07GnaSq^Fxhco>ppKb5XebM=K9&E`vuo{uxjt? zJT#^j;#BV}t)h3XOe8;o&VllPgXHz47>RWw$~RIEELZL*@c z#qzC0Vy(`lX{^lL7v+4*Tk*^}fJqQhC+mhy@Ut^lpuBu+P@r9@y~(ZE!otGKm_+)y z@Us`Q3VvG-O(voxc_+3AjKFoGOm)+weVp6F(cc~(rv4wh;2C~fE=>V~RF~a>u2Ib) zHRWh~sGli1CZ@u2{X-e}Y~vTcd^#MWgRUCi?QbikA{^I8J683AqU6pT9qR-CoX2nj zi*~~C;>cx|ll^)5(2x-Fa3L37hBJ;j0Fkui(^Md?@cXV9T3Gw-)qZ3dy+e8P>|SM1 zci4sK*RCp1ceq_%iDp+~Vz4ZJEc!oi<*&IkfpJ+eIYm1fn)|uKd`Nzz`kp%*4pF|* z1Pj`?6+1GQ8;33n_uVxQID+l{A3H=-mbHS*EoGKqoLwnmQijG^f%)vkyH225W>44A z$H|S|6FVXLKh|hg09b2ToPDeMd&E+5T3VG3w?&BLnb47ShKRaWmrP>I-t=&S+|BIu zNx=W%W;O4z$_p;{6je=m)>3y;j{gr-_-hET#FtOU5|3~+k&dG8Db92^7qZ@*whIbU z$keE+e^Hx?C7C-JVbP=Du2sQ741(zQt#~1#8+%Fp(M=<_>tsdQ% zV7D&XOY~x)Dv=!;+{1Pj_Mz;sVmNbs-nRvA&t)uW zL4MYXdkGdrpEa_V;0L6X9cqi;*j&!+;JNbg^JmVirU78Q2XqvPXBv++s#o-^k+DV% z5}Yg7LcZu=Jj-{1-JIBSOG-dXqk0LK80;RVNfYJd=H9+53*9*%Ps~?s+IT%CIhjF{ zLTJF$#H5&uYmvqK01Aad4&ZP&f)SU{+$`O+rLLpn$j#0DP*L$UU$E~j4vyv3fw8d# zGH#v%BeCr@Q^rZ~@dP;*i(P3LXs4#8KGz?JYRt$O1i(Sk@zG%-a5lj_Y;0_vou6PP zA=z9(41g9k;iXAQ*W!t1vvYGhe$3Ak^#^u={l>@j5sV?m9<;o-dSCYIvYp%uVDzL+)+*LaHMFVWGrV&@uweyrkd<|Atkc2u-aJ594X zmiwJ*RN#woV=iMxVKUsCi9NI4H?I`9^f}J;DC4`FQ#hZF-V*L6a_n87az=yiMGuqr z&?X`}lPk{t8UiW|qgl#Yy&u#1;7zp#!ZrghXNXgYNNE!zWm2u;c=hK3f{}MMZ;M#q z7BV}nHh<7t^(F}kJO5apq02QW?t0Sq;eg-fjv4qZUvQ}mWrDDE>cNkgMXSX@8vd90 zq=8Yhu+SC?nGa8M)KV7t)c}}!rH=7|ie9aA0>~+SEAskFF_$?9J#rr1_euVQDw9FZ z9nJ%9+m%>U1%-3^gX!bwPGt!4v-=_F zUERgDdRJx?&5A>T~f-I-J*`TRn*`%R!#- z-WJ#lbnD$sm1OMP%?+^Zf^)*pw;TTm)n^8(J$ z3Siyr^0|WCZjI?zSRN1&`HAEJ#Ni^e9=Br+kTSB$%7nF=l++?gCW<{^v0Iisj?mErpNEx;|669=)ThWE{S& zHs70{T#zrCz$TxOn;b7<+{jzDl(uw@<<%5R&cnp7eaSMlz8BFK6q*eEjxrc{HH;d0 zjjG4uT3jn$logu}t5`s0}B?N=JUu-IuN*7emO;TgE!mC0PCh7`z=H>~7Z`)cALl_EaX&9E9 zl<0^jI$XPRtOL?vA4trBIINJ3MHTN`N&YR=owMl-TQO<p)%i;%1bSaJP#iq@vAbS~3zVH-bJHz2JaaT=a*zD&n zcDF*Z6k_8>8NXSU<*Ai3RHglCP!@X?X^`r0((VQ>3`_Nr} z9fW27A`>-Kj2CRg7eQvS#+$iN1tXzKvAn0WPu3TuDKTT$I92KTEe77bLeJv3Thc zcd+8#(knr8#q&=386+TDm_~QfQ(?Q|`-bFC);4TS-^)WFsr6psS$R8_V-kx(>SDRE zBh}9{*%x)$bwSq1xC3M|i>IOM&buP2;e4wf9qGk8mJ7)7H40=*V;ik`K$Ym$d42tH zgbDKuHfUfLW}dZsk%?U?{2H@zfsA8le)0$=dN+80kHtqUmu5YRjS%x(D8zX{P?PUl zdl>!YI!on3h%St`W#ny_{DSj<8z&(YALPAnHrmYLDwYdDNvE5xElRSvhC29#4SO!> zX|XGkMJ`{>D^?vQ(K`gXBBo0&u9y#DUg=A=pc2Y6(Zoo;SjTfOrt~y?SP0lJgTFe1 zoA^jvuDxRbDpv@JNCCBD=VY7ubzD4J$t4R z)vtTOkAYq=3tMTg(~dVV0>lTVOnF`fFzeG<*lOzbk_eRRGV*4rjAFjDCWaB&&7Q); zO_7+WUu@ant4i-{SUKN|^nG5I{e-`P$`~^_>QH03Kc?y6XY;JRW1+;9WO7FZa1i3P zd_XrsR(4eO$KG|ZX?K+tF*b|VlESSR^dnYN^Wmmx(g#g`yE7HDYf0Q@SCHjf9*=7g zJt^mcir0@ep`*HdFKG%d991}`5yLmXD3_9dN~fsn3RHVDk|ZlbNOB~s;{+2Lz*xk} zFOU+X5o6%PIHl+Q#gYr(9=b>FP{9U#vb_i~O?uL<>CCu$!}GG}3~bf_CS-pWm@IBR z@^rs2~ z@yrGE*W@m-G7gFRnL{${K*Xgi+uOANU{w?9gkXTJEXHcV1)dvLDYOUt&R_)j!l zs_c)$ozD!$EwY7@nEd8WS*6Zxvl>a2N^x*-ln2Y?1Z#WFy$hDgv95`>|1*-fUk>*1 z0Z7@Y8Gl8~vPs{N*6McPbieTpK=x?6I|H3)fmYU+?sblB-hLOP$ISCn={_~Z# z?PwAXRbl|*4+XHJ|Ljzhq?A2+6e4KsSftSAf3GmOF~MD1IF#rRUbS8VxdKS$d7A(+D}v- zEW5n3#Pi*Sb9Ho-dWSE}Z|>5s=WLVVA8p$8CYA4ZQT9Y=WnmaRB_7pYXK(p)s!GKO zJUQR{Ixi2s#6L2gPCOR=O z^7oQlpdrBWROIJ(?IzM28V8KkXN>79pIX}Agdau>qF{Xdlx6>F-~b`p(h`Gb%>!JK zG%(9N!p{FnG#FF9Au5xpeWv3#2Bfx(6R2W-1-4-1MIe=s^zPj;Kl=E?CmAv!3@W>7 zE*=P=_&iX5a8LdwH(;bAIGm@Jmevx=0Dn2-I<9q9AsMeAj1njjsO@MSijZ(odfQ#*%_glsBw;B9wpel&s-IB&4L@K=6_J3tUp?fWTZyEL!Ey z?KDP)&(fhgJ(iegbl&m&&6vOMI>3Gox6SozNkdQXk<7TQX2yr6Y-QPK)jz+vQ1{ZW zBlD!Q^ba-z24fY7fH6!R8?i}8fw(w;P<}S#71^JmJXnZmc(ChZU7gWM+;2i^p^ZRH zOl-r{_F&#-`)NewV<^G6t;R!(D}PQel6%06SWh z6%V+e3ayJT`Y)&I7Z=j}v3KfCz%rLnX^nS#`}$UQZsGk}BcH4Zkex-t1C$chFt6x- z2h9y8|7C4nn$3Svr^;08blH+W1Z}f=F8tLYe`dCs{!2e=v-<#vBs z)QsqwISD;I{j+~qmgo3=m%dTkZoCG&8BkLt-aCUo@hkyc$&}%4q1Ye2|MSjKv;ade zl#$SJ%-3zPa2oDINVo!NJ*$N4K!j<1u7&)4502FubC~Bl*LvME2p4ks4=C zK4bgy}_&7PPr5cb@@08j|Z!8s~(_f_KgtDwz7wJg*Lj)?I= z3+rGh$>HJQYUjrlIg^lJ!orpgi(-@DIk=T-B8E0T@$+X-VXGcaLz&&B0oP7O<@WQj z^3x3fM%WHi(x&4zscQusbyB)Kag8Ti;?iieN0C7`(j&36r|0(f&*6d!3PDVXytdyL zY-jV642kSVhJW^nrz~V0ZnwpW*0L8N#$ih=Rz*d zjz?2H61P7BJ_v}v^@^RL8Jm>ivGFDDvoM_PkB+Za12FvbiW!9b$i;($12@CT=3Gg+ zTTJnlG7FQ?0hqtyd{O$)1iTEXk8Vv6WXJf@i&OAY{N6k^k7g>C;&~Y!U3DZOZ8_y4 z%Ach_RRM^KO6wt}mKH^Br1>RrvHp+{Zef=>MlIv|rsI(@yr(BK4C6qs-!oZ5>e$Dy z5~Q43d$+UqlGhU^SkS!8n5FJjqcKFfEcY#U}lC1n4BqKZcAU>Z_9!Dg(C8=#$uO0^H0QBJiw5s%8gf`7XCto)-mw8_ zhOqo(nqdK+P@pePKMT}8NO`4d;EA{ut1tASB_)?A$hRp^KOaRgc|n zZ9F}9wV(6Fg^%<;c9!yC-cuKL^z>k{4oJxql)fMG?l#>U<5Yb*j$s5WYlSr~>HHlZ zl8p@K0Z~exU`{usq6&fF*Y^=^JvjmDp`b?NSEY}PUK{x4Gg1%tbzCqdzdnHEc{Vga zNt$qDPN3C`p3~M)+a%!QEkaXJFxl`vbZ1uGzB|24<1p~#)?`7|Xi0F!?SUk2ieg4A zmc27DPQYuVmxMc5fY{F{0s+|Tef#~k2XN9{lQ8biPoupW%M=s4?}No_1#Hp=4hK2~ zhFI9;1x&lOm@AJbXn&Snw~&6iTxM=j2q8BmXB&;T{B7@*RO)4*asD^D#)2KF7kJV&}6S>fQ!;cumh&Kuejd=3!yr# zAU_*pgO2q#XnFmRBrcD}4sZyLn4xJn-X&x5B~($>Z0X=QMOD#DQisrWfQoydSXBQ5 z=4dvY`?aa64U4t2FYP)OPoIeO@4BAlj}U`yeK$z-FNdyFXj%xpQq4tB#p` zHAOpe%?K)2bm)K(N!p<}V{kB?g1nMR^r7-og@hv|oMH#?mFKF}7(@!J+$R|~SX)R?FwT#Uku z8(W{MAbmBQ2vZV$T}C_G<6IlE>>sBHzi#jypM);-Y}fNg@i7`RE?PWRJ(5ogJ8agl zcYxp4h`Rpc{AzrOo-t=ZNn5VyGon!Hdp&)9A*GB@i#9WPiH%v8thY2AL%9i8s3ur4 zCTPuz>V%SagIkO4^mys~?2>;!3lmp9cvH?;$!F(B#w59u{ec@=vB@5syGsoJjB=xN z6jKMacd-HCp>G*=L9#q?*^%^tKIQ{`=P?kEy3`jXXG$xgs&TCO;%p*avh5wkBfVXX z$C`XmOcHZ#zKOYec~P#DLvA@sfw|Ze?PsiiC*0~)%v=b^2Q@SG{TRbH#f99+D9{%; zwo!vTgyZSa`pkbqgI9F-;b26gAdF!w?}IBFBW_ebZ&`NgFAVNk3>G37m(t_dLGexw z#b`QVIxqkET~^9_U}Jc0qYF`mmQ-7+*1!ysF*M&&Kc695<`)#aATUsYP7dC)c>5tH zwX~9TF>foCvUO+w$-uGN0bpJu9FR$+CYo}CyQqJ6Rm?` zAksPmyn4OXLKEq-GFY$uCzYc5I}om z+WvGsSAmv&di$4MvQmJ#tmF|A`qur2N&- zsLUZad!phaZ|WXhv*cGV>BdT*1bUnt?RjwK{S}>ya+i90tTY~?v&RWXTqRoA^=Q98jp8MBr3@p4>4;!fI!4}-7`{Z_x4bZs_@4Yx1>uCF)KL& zJUqfOM~jazhb+hI!B&k&050{W2h8pn|B_(hL1o{n@oee?dmt8!eGpjp&nW-un(~$V z*=DszYc65k!3c=Rf{1;;x^-~F#v^C|9XjKj-EQEc*)^Uck2XyU`6xpC_>C|`MU zcM|PRaTSQ(RKkeXKok1z9b~SjblFrA;y>0XAJzX0%+n&+Y}6q za?WB1uq}#n1%J~rf18&Q4EA3Hh#T?A>$UYL6p2-V4#F?j;$>m2Lhi^;2o2BVVMU)f z4|D5ocYjxxGbSWg1n~|BnSzcQAC0a;NAh*%z9_MX01)?%{b;dBrc$IRN9v0VjU`Ch zog==g$#2qKFe&2j%;$hQ&bDEv$myUHv-CmCr3aAZnhLwG8VQ?y!W(VY@8;s_qK*kr?3RXb#Qg43(; z+_9@TT&-om7%kXLFs4QD2W|k;T%U8)JptY2#H&Jk`$7=Vq!Bn#N1s>UP7n3VcO6%Bav@j<`es;=IV3?Q;Mb>oXO z^<2EU)xjQ_;CH;0W;I#;e6GBk-{pI5(2fF~u?66KL@J(rl^b=I_<{xW^6s(@QbwEG zLysc;vV$3M3`B=(jg6!R0;UaQ zJXs|jm2$NeRqo9)(O_8itFToe^kqj5p zdxUO8UHsRfeQH4ro4S$Fvca7K(#u2+jeGTL<7pWbE*MWv$|8RL2^ALK{d7|10+DT? zb58sX`%kxG(tft?d@OTvv@hv-W%j>LP#-qfWi%ZJB&$D>HM;nc~ms6cZM2ICtn zhF9))XYngo^&~t=^~Kp{`esoL`5vy!OLGqx=;+K&@ho^Rqz5DSq-|C{e(|PG(A5lm zmS*C;p`c}GXg?g(0i4P!#I>XTgv6hNRX^PQ0z}E6!-fi$;X!0^ao`DxxQ&_qiOdG7;0exT9v=Gw9QNNaxec{p5o)6; z-+h1;33966iStVME>9t4LCDab2%37)LgWTm_{k{zHFISyMAG0EyxgS5IotkAVK6t= zKgzDRNZZuZ2@t1zqp5Pz_9KM z;S~@^)Jpu#K*T$gEg-mr9zAaawwz=5;OcFuPZ|`B4m^2qcfFW?mkVjdbJ2@{M}?mo zCNQM%(H6(%$~&-nJ+rfnn#_Wqf-Qb&p??8aDg94Xt-iQLYw^0Iq|a5~R(o8TOu+9H z8SmIci2(qhceQqH6<4Hd+K26uE6R_hPT0Y>A$ma}y>FIDi}GC0G_X2ZP?E8WrGnc? z?+k180vbYWjt=W#W~8)pQH6-})2i#Z$woiF`s%EgxX+qi_zU5xG5f~K%5M*=%lIGs zboZTXT?Fkm0IH!5;c>34N99|6KY<|>zBG6ubGUr3YT!xB>oMYaW=2s$-XgsV+eomR zf|%rBZPB2IsC;MO1eEiw#X-s9m8#6QJX@c}=E#e6c+TrF0%B^l|H! zUVyDXYUSrKw7z6D7F_#&JUA(=f+Ne&iMw0*#P|4T5TdP}_moB2ov_#Qx?=cY+tR_| z_0G;EH^UEBR{bVseg=1ky^puNAP(D*1AtKx5v36B#qH1_$Phw?5HW;dTt!(Tz%up6 z$^&^Et2Ce8+d)BT@Tl=I*G^nuITcKS-Y?{(5ie@nc_mSq(_qD0jOU( z%;621<=t(xTJI@;SFFa#!&Ak#g{W-r=+!vq=I6T|HjkBMz7ts@@1GxfG+!;A?ldju zo*I>wHvQE$Mlgf<*+=sq?{0SY0;Hy6>GOGu9)#A`V}wIZ0o8EHI)Cl*Okbk7NFeha zXKMr90{hF;+!A&Hfb*a72HZojz;c|A`e9w(n#0JUoxhaVt^?@B;$Zd$>#o@R2lL{Z zxg@K01)_Yk3dyS_ubt2$nG^7Rq85s~GcT=TRx0|X6^(rtb^xgCxNBT4Vpg$))ToA>k zyAy5i-+Q|S-tp*K>Ca0~Z!&J|NfMb(;aI7fHd%?BBy6xf+JrmU#z zG}mo_G~BM@3gYWT&1eyiyWhlDnmUpctG=)l*2U|+CqLLNn5lX7%Woi70k*tc<_KL! z{L%I1S}2`B)zP9(65M|0)mkhhd7;Z2DIU(vpmWD_1d-b~pp0((2{&EPnY|+3o7UL6 zLRg?z0!3%=Ys=>(B^d}iOE*g5)rLyDhj^>m929D$$j2&IvW6a4ZY#aw8s ziJ7=qCRi$sPuVWs$ECxwK+YWzJfM6C!xF9#cgGc#A8F|Z_XQ+c27V;TQUv&+9Mrcq zo-kkOLgy%@g)9b=u3*RuJHyG+^jkKxKT22;CUDjLh9fyEx%O7e?gtprT<6DC{N9+l zXJ0j|yqP!vy~8Kxjx6&gfG9OqSAkaSz8z2od8w$FL$?6vi*W-eZ*l3x4x+ihbT5el>Hu7l2Srnq>$v7_hN64n<}h~ug}2*f{D{|4uymWqZhTCj1aX*+1q z9Vm8qKi5tnW#8uAYduhHHimQ*3?sTFg(sqJZ z+O^!TpE_~JsHaIRm0w0%y|HZX-gXM8V6r5)9xl=D0>@sa#Iema8OXP7jk>*q`*Dw` zmp%zy2Ez`|-BL~ZX7FUmTLT|hJFBX)4xQYHtfhGPW#h&>ckTdE!A9S=*Ac@$hL4xT z_5jxhq`Dk2Bh$GjWp#CvGet5w=T6m+jShBDb#3hhgL75a8Fh!&)k!X0Mg&EdXU)=4|EQJB&DL^r8)M-Fbe+|-8{EWvwWf^?j`yK! ztndJSetzfk+%W@u^_6af#Jlc?8N0;v3nCU>eSOYFraI(yDbrO>W4gfxqu0?+>2U?n z(f%hopdhtCVv5qGwC|hhMw3+|ZBO0jmAX*~m~%&OFC1z<7I$DE16LdsAkZcc3OW#F z5yR9^6wS%BqIwM)j$I2cq-e9mzo$l<%j*samb1FjPL`NgvUIS9m}e1Cda{NC!abQ+ zYT}|hYb*s6TU#!eGHzGq^JJWe_E(a6Nh z3O)PSU75F+$VL<<019&0jb5nJcL4S-2PxLR62lf>VwtzBL)QVG=hI+hmoIU7WN7lV zaR{hDsRn3(+HeEI_G{1{q0^F=15{PRtga!(Jd8zVs(#wOq~54zDbTMpb81QMC?^>b zQiVd5A_l9H15kTYUL{M!hKK#OA5&0v!{!lUpN~mwdEBY?0MK4pG;yoFJrU%Ts?ms< zJ~`g&Eo*1CXE1fZ-P+65$ow`W1H_f9^-iqMw!bLVN|%bPhY9yR!{jb}PGQ!~JFXKz zE?fs4YbY_%P_)+KUp`hrJbG2ooN*b<`j!A$Q`k^Ca>cNyG*TQ($G@GON2=BnwntAw8=GYz(1QbHV6%x|CoSV^1n!TzQ9x+Q{&VNOTMTv(u-4g zNpOn<`%0RA7oFlupT2ctq!+j!^5DycEXW8Nb2B8%v?Es`J0kkDads3oFgGIFF1*O} z{z9EtK0wNHWxCvAVy78ceK>er*hpenGJ=k4%GZ;-^KC!~8Znaig9ZBn5a=cWyb-H( z9zy133XkiZ1CKn3cdgRpwL$`XTJuB`=WCMyz~@(ER*LLfSGHUy!<%*S z43&#YhooK>eJ@zM2_DT5pM&mt-UYD@D~JCMP!nG# zeaaI_!m9KIcjt>zQF$iGQyvx)@?5C5wyeXfEFT5U{m5?w#@&1FeHkS0IVq5w(em2< zS7v1oGx>QXyh;ZuJMY`Y7RC8#7{lzDT%Y8TF69#3>kz*EiI5^;&1cQ4m|1;#oMat4_YQ|S-iY+8`=X;de^a=@=Yd0Z;k}2hBtl87xO-*PK=HAHlP8|)|28swfH)3#MQ&2 zraR44w;~#}@ud0H#Z|T#09_#ZlONjyl24372+(dE%A;vufMs6Iwd8y}SzIQ)njY+wkDC`=+4^I9%bQc_gyx@#wr5|+h!^qF7> zK*n|>Hy;Sap)p&)f$TmX12D#5XQE*`M8Fts_WDKtT!6+@y4n9L@AQk{_NOHP9+H2_ zs?pBdthQ~`_&C?MBKDosG{5zmi+@q@gL14Wf@C~E=b6gIE2IkkXV#$a9Cv7eC`CW z>aPz@8U9j1d?_+@Kbj>TRUi34F5YEx+}_$G;f|>2$!^1t5D!nm#353?Wh6;F(bfe? z-3d@}J~-+d!V*1yXPy1uQF%)H>y>r&Ov^hN%ar}$422F7uLvSamPc8B;sclpo#{(2|%7^t?P z;5X8}^e;wY%m^Pxf-#cK`TZyh;6`e%uW$XCqrg9xbk5UY1|%HQttbll)rB`EFNNPN zbiZW$^NC;zs*bKMtf2k-*fvY^NUn#v=l(X&9om_&8{wppg@0xmz;+}*epr08`YfKv z1LyDWTcuwb?9{P#{q=>KX*UN=!F)iDsbCqvblU=CsNa*|`3eZxnKi-+ z&;2o#7qXIG27F3HD7YYVCMQ2IUk-bu=ePO0Otcq}|A6*psQ&x{YZNs;v^zRJ&3bU- z$y<`A^FMyvX!B3}XONvh5+{XBVea2mb(L%|RySYYhD#(Lm1KrU8s^b660*ypBr(5v zeabwr=Lc1V2d&M&Q%`@-OEGD#d-UX_(cVBS4(X{it?mSf0awU&=zO|v)87*28G^Dm z2Qp;}P&ofy9gaZy34#tv|CfEinnc6m62hRNF*S*I;-*%wf3K(Q^Y}>G#Y@>e;(u!3 zet&v8DqCJ4P4?fG`LjX2EU^^ zV6udO*v9TO?u`vZ1WWti#vIeL4)u_2SMm!AFo@i`?X~It*~~Uh%<*$Tz^W%;D|1!y zMO0@GnO9l`AmKeNCvptFdGqViTz)ukRRNB{%Ce~HZfg3vncs+ zm(O`eu3OS=&w3?PsH3B!w7uhseKZ;q>L79=Vy_Kax|+DQ8?4Ljy7dyMRjcB|KF%}G z>bmY~(Adx%E3c~?S3u|D+|0}l1eM~M-qf_T)!$uh0|%R(cg?O3anT3T9K>u4kOT_R zmv>aSTjS*76i`HTMlX~*h!pF2iF$!3&~C2R&<0R~V1l9vY}kf=9)$M1=MwHIx8#{@ zOAHWA4^#wr)3=F&<`K2(%z{sIYr!P8FxIAamPf**w7dxXBSpGGK$9-&wQD2{#eTGE z3(;gKTwLN;r@4DE)>U@5i8$u8xC}~%ZFzl(oVnGwrhFLSNnC*hfo4o>>{tF_`S=!~ z&Zwu-wxS0pg_?8&c$hVU$LU?NAT8;i&q5NVyc%jBGYeU$uRA|Ry4EC0dc4-Jdy!b1 zp0Oh6nsOT`yAt-nIaJtr^ojd^A z*hWTYi@q^j2(U(ey~@3qu-!zQR*m$)Aa|?)wOAAIX?6insMUs$?s09Z9hklCGG_#o zlDR@%cwbyaKy)cjS|~WsK*d&GZmu)PO>TO@2;q=jl>8C6mWMv?+5+O?Syq)^Aq5yi zppFZxAmV#LAH?&f(9^c>1Cb)A5jrHb?XmT(O=VKhx%1tu+tHRIW)g00;iy_9F+Y3> z&3P^QResB3@?YN9RSotzm3=`{NjcocwRj|Ps|YBv8(->p?2re@WkzrF{n!aDM*rMV z@$d+$_oZk2iOY8RmJD(mtJvu6w%5$jEs%k)YAhuIS-)@tsUS7GkqjmUI%4EqE&KQZ z+m#9Ds{2H{v5^DHbh$vnLexxWsY|vbJ%+%#%v*cBE|>9IfR$|175MGJ0`BDe{7bU& zB|)}_dIw9;BOEs!m@MVuO7H}+HZynd=g+0HFa{D5-9??lKmv4ni~*2)?v4w@ejKpH zAW5uYI6+z^j(ZLoI z_t7*2D6S;YQ+jRG5SJ}pGr`QR!=f{0ZgE-{s#4~u0d;|+`Q^oJ#-%AVfI86B455MN znmh77KKn;(Sz_J4g%{gb-WW@uYPQ@{T7nyV1#bzSQY!0$;ZZkHO9mE)=d0{yb995T zfFlT%pefzd&>n6NyDHdo6xJZ@?)9$B-{xSKImRAe!fp9Jx|!3VyM2s_AG0#pKTll4 ze=~zC_~9tl8PH`GL%peIVLPb)M~dOsF4tx26*68kCjI!eg}642Oi6=$;#z2E=m*&a zl$EbvPuE~Sg1Fj8sL~(JvLX%C00HTjZw8;0%J}jbx3>;X%beEi+Dl5XR`C5H;~%+Q zvNCBbV$KN#4BidzG}hcKn2)cDn1RdaCEQ$ZKr0Z0@Oy87A~kp6@0W(L&hPnx|ZrLa97Qfv~)itAkT{P%fC%s zO~!P8&tm{1ba0p!x&JlY#K(U5vDm8>hKZ6)gJavYC|T`UnC>|CL`!DxlHu2O>fvvX z+%2B((SvwtR~2UG#; zx8F|@hR)XM4=t9+HR4sY>l+(kJ*fZD7=a1IM>Xj}A7HQDn>S36ntu>Jrdc^EKz{pE zqX~Tn`ApaK-zUW>+F*SOV2{gmc%gqE`>bt5?=E+!ZRjj(jFTQ3jx#H?cl`t1{u^7o z0x$)WT%zTf4P5mBOc4*%E1rRCz^td3ld_BV%wO36>jscd?Zft0|NZQLp2-FTPQmI{ z^k+6OK25S&ir+d5_)uP80|4ABq3-_xvj2LwP!9Bxe@Kw+UpV(So;*cY7l27*d#``~ z%m(oQQg%;__&aF(bN+v$Z#f`rAP17z|Le2At|57&Ftc2V|236nF$9;w!>w>(`c@M? zVphA$9;fb#z*^omqsf zZ?G!2gN#9FV7dB8H0M!T!2Yu-2LsmUhD<^)qQsVGjzq=29J2U6wVDuDwEcPPl^o6f zx@Pa^X_C|PRBe)~`L2-o&#B7#@CnFm&3)r>x?R$^<6BS{yDcE9XW|_(ZeEpQ;1iD} z{D0)V_g7Qh+BGbS0#X$fq(wzRq=OLY0t%ua3IYN`=ske+8bnZ3svy0@3Q|K2JwbX$ zYJdQtgM<(uBmn}+m;0P^Ki_+w_Z!bY@Qty5NbM``t`LJDELk((_Y7=CzP%XbNm zNK<;eT7H!IdszQHoReXZ^dcVLPV=?Q)2!(k$K=_*oV^a=fx6*u{U!CR{f&6TO35gY zjE4G}o$pdjdcLEKrIvOKo7@_8lZm4k4yU`lQ40^&mkOP-z>$zq3|n2`h>)n6QH8d=w_A;C63OcP>zCzCm2d&mIMw$X4>@ z$e{FHaZD$A(&LD^UX?}rpYofC+fju1@@aQ;ie*B~VBzO%su^c1L+y(dzitIPtER7cs#6b^C zN|t;?x$3*oL)Qp?Bxj5b!7VbSESkn{PfNoqB+C-jHn`Beq26KDp~)c7Py_^vs|ByqE~)xs3L# zatt%|Y9d4iV{@e(F33L3npT%K+&I;=(fKei|ENjTch-a_3!g`HCk%@k574Yb z3&!PCDhCY1aFT?#ed6kllI}cxJ z55}Hp_fSpPCoymDp%21PoT$S8Fh2oWb8(TXIOL|mUR( zdsJ|h8j~lpfijy-SSPNS&D{>fP(B|J08(&X@R0Qi=NZf3B1`Tc34?v{ zGd&S_!>mouo10F6{$L_|gu>Z4vC=9{@Qu@lgX&~Co}BTuFiX>ovnx|PAX&27_Rj+} zsLbP13z=X%zbzfnJnHeY@FfHI^j9dv^XtLVI8s(anF5r0QVjVx{-a$ShO|GG56E(t zqWBlvkW5f>9+n%OhquU%2Q6)eS> zzQK#N!B>ub&>+ex$$86ZW>90c`_57|ETa#05F5Pk!z}xBrAotqVV>ORKKO2I@Zg}X z>sa@~&fNgrwH1-gMUB(H!`1hmjPi&eJUyG2)T{au(3$+O#xYzKWP+7P%71A?q|F~V z=hq~m$Wr_iYJxY_}0vBC1iLfJ(Yo%eg~5&8jZih z+@cTf9reL7Bc_RJcpeQoU7-*gRayukt@*P5@Jht(6;l0~U;|)$ zHGoE->h_NZfTl;`eqPf44vn9N6Csd~&6j1-13Kt<&p5Gg;_}kK6pMc~e>c5xz{U7V z)xa0F|4RNQB_f4I1Z<+ZPfI<2IqZnyugRHxW|S^K*NUvX2hCT1h~gEb)%>CL$DPF< z;;mGY<{R2Oa#Zn^6-M-V6NVx)4{>zbpVR!;pC%oyx6#Wjt4$+1(rF7i@?rZ=e2-Ik zGI*f->A~xu+Q~~@Ah_hW^m-=aqWj*J$($1gdCKzYk4}$VR5j7)0ir)+`T~xvAsg1d z!@(K~7Vy`4>a!36et)brQ;Xd=Z4fz5a7rc zj@H4ekaXk@iRT0!vi-8yQG+-`d%Uxtx%2fkU;_>K<1FtH75A`9nkXp)SR8elGnHdVZ6$ z;Yd}6`GYdZ8Z^veq*gz0mI5*!fkEqgJPAXpVFd?o*_#5cy8Bd^I;=5i5*lTiiGZSu}L?0gz#fGGy;L_kMKN2aSBeMaeG6 zTi+GOBGLTvAxT(++BwHl-H(>O1v;TOHr1{Lo`kTk2~zrRM?rS%(g&f4bHtnxqs#r9=&t2*RITpGE(SUDAa&b8*F z+O>=|KqJ~ET)KJNgNGTp+mJmA`P1cf&`^jQIiPJR)3YPePwfFgAZQ8BKmJPvjEpbl z#8dD~lFoh3^f1*P__PF zaBPfK;8cYP>*Ozz=q6H$ESlc}FMGTh8X}4wA@qqtejVWeJqQ4SPE5R77fZ&l}#(Ga;mK7=T!9T+h)R3D71 zbbMJ9ZqgTgW7cMWiWZJmoAKWLba|kY4B$`+itrsfw=}Cu%%mEl`Akc#Fc7@3@0uj4 zy-!DS)KGnam#}8JC6fY9+AEJD`;OAxX*y>-0QrSXHrB*O-=)%>T16mFP zqieJ6BGT6Kh~mjQ2QNjW4&K3CFk20QZ8=HR&pUh8yLHUYy0W4b-dM~RXP>QUH9H7! z%0}&9R!lJ`ndqT)!YJiX6?ti3)MKjgtGzTd)%9=+Wcebv2R5TvWd0Z4(jmoOl73k_ z1F8b1Sp?waTz;SMZByXs@Ve#iH|*mBEajLU!a=1UhmGRIAt5!}6WXSMwdfD8N5DUL zaMIVTBe3DVtvnn+jpK#d#c%8Ro#O#&h~sadDe$HgI{c|e_87C*6!P+~Anl3&27~GN%oFRb7tnaE2fmzL(d#BSmkBxb*HtY~%_^FowtC*R9 zwPUBL-BeHXM7%0AL1~eTA|9jco64?_3F$%(;2{KG^0)^YJX|#HZk6j-hjZ%?4c@B& z3RBP^X@}{(y)xR;F?;2 zx5BSpm6A388+r>d919#%RcLmDlmpKA*SrKUR;#9o@+EwG7U;3PD9A7IQ2+G7fllP7 z_A79NS*)hN!q?k@bIy{D3K2CP5OjcAg%dcFVoe*vR||2~=7Q@tEMXg>Bsz^9aEv>= z5)gKhqH}C4UWlA>_(AQcfK(J`?Uo&IR7)x&!xm-XNGm{lf~0|!&rf3E$O|+uNY}`0 z?Z@YF0M*YuI|7D0)-1jc2)m08e_ZUfJPMAORey&QeO4=_M0)#6%aX&*c2*AO>1B6a zWOk2N)#Wp*_YG2W=}Qti6bRgCee-BBML$=m&!7F9>7r!gCwg~wpk&jyNYLu$!H(;Z z93X7d+!$V_s{XWb(2^{SJ7lB1AN{AEt&+M_aIXgK*^BAWlg`yP$uoqc_ugy621wO0q|k)HzCL0~U4tVIj|9 zC-*nbelONLP8RQeG)$1VvWP}0{jk^$XX|%F!LSl=1#UDhv*Jq5A=)&eO47KH-9c;sf0yT`WC0jY zDDbt59Amg~oE`slzD%fvw9sW7C*)G^G3CR*XLX4)qYyNokYCpS=+`$;4slkIXIQSK z?BgLZmKZoU!PuZFGYqfGaf*6E*gSQD*wS@_G!(5^ApYrH6Fn={rh@>2l_{yubKP5e+`cjJnvqLnFz}_NId<3=3sezYkp3y@X>`EU}@@? z641d2&!+Z04VefkHrKQ9DbMZRD9;VLf(DzCP;LbK`$3=9>JdBwA5Du|dP?`cBE`QX zX}(9~4VVArkkB`w((rV56l7JTS(^O%nAHOtJTBN!|1}u9I*kj|uo*mD=@>Mpbj`s# z4jCw0!$n?)rt&lGuL?))&{41V!8eezbdUSKP5WGWZ2U&tB?#+MmUjNxru3@C>Fhc~ z(uR>%#75`RqPV9Fa2mQtKO5jAaLvlE25YSyYa~7;3&*n5NIW~Sp^>OMev7GVib-wG z^VHPPblJVIE0lU3>YBx^BH|arA3rMY)~KhaK_-S5W;M5BB z)g~g~c+8Zo=%gtMNX1DJqH$DRx^U@4F`)PN0YQh0!=)ChqJyE1qol9dCgzt*EiX}U zj@nu@^x2k2ZBCW%d@`LY+3~1F5$2 zcwnlJJO`%zcP6N~)F=>W05scv(=~id?s&)9+7I}8PsZ^04<*(k(2z;6yp|s(PJ3w9 zMM6h-^t9sR(`s@Hth*K%}QhczSx~ohz0RUOO4|G zSDQ{NlBUmwuthj3k5Gk2r$x3Mudlv&?^S)d+qCwAo7&GmX%beR6H}hTw};v|m97YV zAJ&J@I^|@eKE?=L!1GVAujfa&;r6#EDKj%&qJ9G}I{=Bjq5fUA7A~7vBG-F9Ieg(8r6G!eeI7O-06*?z^Br)$?%$AK0iRTMcv$u zp%;=% zLThV|ZTKm#27=+Sd2oxt!78BZCpbFb5jkr!qDxSLo}7^)>P?Af9gy22#h&L7=#Qkd z0;#uqeF^Tcx)x&W++2`k3^u?2VC@LXU$XTfFZ7RsFDzWouyu5nu=&HnpbyLK9dd((`fH#)cxk!0@jzJ->#<;H!@(ws0!=4$t5F3shn* z+1{#Q(*;1C6x0JYa;STQEE9e>jdU3gVBwaRPZt6&o**6^IP~@_R{c<)wGYfv zRPBLLxGHpKz`W-8~)~BnGm<$MYJG7>zOnUvwgq=UdC;o06zlfV!;5(t_awlx0ped_D=T$ zHF~w%ygXgEfSPar?QZmMw)#O<%g30`24dZgS775M)O&f;q;*a>vEt-yx2ZyiMd}z+ z*+}w_fm1RYT1z_xAa6_!(W_Mx8u)A53=`DVg%R5N5W`)jm1NE^(nZ?a>p9&_FS@2>Gc>+fZGL^agbfsey^oe zcitU+JiX831pvMgs$7BJEbA{`X#%cQoeX_=HmxSCWe!7qiJ?^m3T>O4tN|jDxvucb zu?Vx!+p;dz`X`zm7mrUD!fV`0{S)2BkrU$rn~(ddj-fWD2S3G?(mt!AX-x}q{6MSeZCAj?JMyv>!)-0Fq|rj zMaBRncV)gPUV@lMqdtvDkQ+P|S2qRtDgkuislEDudX2QvwN zn!3z=5l^x!pFywCJ7(lo+P}sHYV13t#HtOdK+42+1rOU9n_931i6*Z!mX3;-7rLOO zl*3uhOTB-1Ui`2%&Vx}nyq=J84UZX&j@8`}E{n+3!9VmX zpR7aT*-Gp;Qc0!Aja_txAJZF-x$rn79vz`WFzj|U7MIOEI zsJ?r_3migePTYvDFuJH(>t$HX?Y*!=X|V$KWDE;Qo33Rr>uo1SAa0n^Hl38Td5YMK zzJz>}QY4S>n#kD&jo9X`aaH91)CJzLhOt&G1o2>7J-E`QLnI2==7QoAK77(!(sj4= zOm&a&EfA0o%-`X#YIchHUi|z`4`X$O^!de?8pQ6|-6gD-f^5T@dmXF9%sZCz(bgNq~P`Drs0iq?;;cKZhRv1AnW_|Lz;GH zzVW3wWe|wxK!F=}kuJjDvo`qjraqdk$;Rr%^OqrY5D~w~d;;Ip!XbyB-dk+3`=9_q zz>4v;{u~KkCxaA{09JYkS(I`Q+5>|%TSzspZ=P{{v=@k(65|6!epI z1md2M_}ie=oU5iD^1kEN&hn{!(9ROSBdK3Z&Il~1O0lJIX|251-Mam{*;oXTe1he+ z!RIcPsf-GJ)KrI7_&ujr)^#Z_GIm;DpSry9^yT(vC>tOzXz~Nn0GJwxJRKDmC-DcP z@j^tO7dsnOyXfNBPzmfU_X5?k@m&y&;tbBKUM#Ri-_TWK8yT(Ye-lXem-SEd4Uvqx z#1Y*Ep`>(ho|{`t*fKa}Ye4RjYgnsa^Kk1~bkH(The-`SDkbRQ=(P1Q zDG4D*$8&1Zo7O_*>=N4qjIr0MrfLW!~$0`?NCFz)`svo6{XuGy?xyhu7#hAG>tt01Lkltho9r;|3)s= zGbQLcoj!d(UwUFp;0apw-cTQPqVM-dwsZ2N`U0V(f^lK~s~YMQJM-BEF7id$N-yeo z;txb=R3IseOnuyJ2K@-UeM!>j)d$6NtFSWtG50;mK(%Lqah+a+!!qX*l4kFeysMHP z#Oea}o6YArZMo=*iC~qOOnJJEZ8v`z+}z zqfw?3r4+oLB6<8iKD-{yTYsE}z0LM$!&XZXj-jHl%NOGThzD(~cf$;xP=csa1#s;1 zJ9)JuOSjzS2rVg{+B_>-eEDC;mpEsya;lNcpe$3}Om?d&x14B8HMI`o)9jUY;}&6( zU#|Y@U6HF_OePFCuW3ZTVdi8_SsN4I%RON2M`c{+EhDSdx|V>Wjl9oqJ(68`-NW3j z=lRIzFbYcj38f0frfS9AgGOge-l1<>AV^QWvaOLYs|M}iTv#ZAML1HGzJ~?b3lBVf zS)tJ5jS7g^8IKSr$2*;5UK?@{Gy?_AW%_(dYfEP#$E+1HQ~Ft9J*v4Ev_fk|Y&EBt z@C{Rw?{4%Vo*GhrtUA+8v;$D3$cgufQ|ufBWW;{6>hWfu&T?Q=^3@!Gyz|=`658DW z;|=+ph8WNDJ;OT9@rX|X6j5c0u&UL&*4pNfUncB5m?_!=gM`A2eO{7}Mr?5nvhRPbz!D>`ct+ z;SCZKjj~nulwK`hZ;r5w&&**PO)?S{0GgH6@7m?wi*wy7KSHE%w?uPoWuH13@@KyT z0bjn1bXec-Py_ckaUc9ydJ)5PIRzc6ULoYbce)1a)(<)ox5nWc&RL_B711BJN7eP$g? zeA{RWxXS-^j?ca;pR6Vbn z`?`W^+M@N>!gC#?mX<_3R(ieS!9t&-vfjJ#=jvYP-=vE#7)ayryO{EUrLIIHhL`2j zPN9o}B9}D|94cBA8BY^a>wOC>p<^xWBefXMkuE3qxFmKC_?zX6;)wD06CO*KZ#(t| z<@zPS2qU|;1e73O0#mG?rdX5Ke0JgD$;H>x`YM6>J)QAlor1&g6O=UF#H3v><62`Z`e@!N?!KgDipHj2Sso8>-#Gb>*HDFp-Dnz)8B{K>&=yqG zaP`6EtJ;EZyqjGNsM{C1>=N~q&$w(rnEdNEv-ta$JJo7ue_y&FI9;n2t`3yONNl0@ zAzx~`w3sjHUl^pJ78U|5ir5bAi%7Q7{VpHuA0Y$XLu=;jzq|2w{ow|1y-ED!?HPH) z!{uv2rey<1%~)+tQ*nDO$RjI)<3Jfl+DQT*Js#VV2Eagd9SX=W_zR*PXh2(rr zR=#&}d!0Q_qv^%=^vIhQ)^YVsuDWim?oRziFka|_$XzV^FSb*{?FQ}x23XtF^?9Cd zfRE*LlIVT;xe+WKPJrhH>YnB{gFq^(ABh$hgCeuX7w!MX7347 z9Rdt@&*4Wq0XITo056pQ429e{g(p`Aue)6!gRv>fD$7n&8{Dfayz# zsM;G}IIkS(Esf>bE2!(}sxuXGw+8X#mHYL^5$s)zUK1)h%%atPfqYqHr#{Xvc*xTi z|E_yLtHcQb)}4x2{}GNaH>Xp60~Uto#?Ol+TJTGqSu=HSb-Tl6v0*s~DOGd!_M#@M z`@i}P+!lgCclX|Z85`5T{LRpFJfiXkRXvEaD{f+fM=Q`0s^yXcPzR!{6r&z*?VnN6tf@H#UscTTKR$bi4b9Xq?&+U!YgI5I#^Ny=; z4PKdD>WySME#s}-o_pK1WOJ4uyuoRx!1mTdWb)o5qiQc_Vi0heArHAd7L~*S^Jaby z=jNSfIsK^(E_!?8Z1(!3Q&V7@BBz>FSGX^sNc)A@U;8J3bmHr)ob_r*nuq32cU>T zXCmO+(KiD?%W*Oo9Y;-cclgrjknpZWVT9UzHZMclO8J69C`N!R@$gxme?Jb^E z95r8|JG7yB@A>$kj!oTL&{>qML=*O#iDhM}>lNf>w_;zP8GhuXM~V=S1*7-XEB207 z?=HZZ7#}Y!Itj1{4wlM=0WBQ@y*Ff9?4R#Pea2oo6_j<=3w;gVb^_+XRPr?;z`G00 z4xXQ+pCJsFR_+F{C~6v{oQs`N2B;c})^*J{26#JPLc20GjVLyPv)#u<$_16X6h^@4 zO;v@J!RE6faGPxJ@Xz3_Ecj(y407_IJZd0`7b?NO9M!MiJ^6oLTjxF};eH?s^i;@OPPYqn@0<cAnkdE0IAZf^ zoMA`%4VWG=XOPsI)uDXwd<0b1-<(9eRlnbhUBTePo|)Bt`0y}zsq|oXil+~YAarD# zVZzKFE3KVXqE$k(&6ub4|0kRfqIa*N$#I#dSdvcs<9aSy?me8IoL6CKT4wI0=H=zM z--nqK=dblh`J&CeJcG}@RsanvQQ8~1h%Dh%AC*M(j8LQ-sJ1Lq)w zo>u7{#vfs&MCX*+<0sk8m?xdZnc-Xyt>k8ed*HQF)47eIR_Ya zA^-seAN_$gb;7YNw~i2&sC`T zMMhA!$5EIJiLJT=Wu;(i)bcc+4nXQiYi^%R+3gOmeb_JiwDf?5eDyzn1?8sCSKs#j zzaQj(VtJGM!9xLweQc2!5Y}=bd}LoX#^mZXRedQ{@?IN)OysGr&yzFA@eaxi%LOJH z{%7K<<(_!6nKyUpdBlIkK8$h`|_-F-%vcAE< zz~BT3qb-QWI{NM^_6$jX>h6a4^goqf&QOwX#~^JTx{=3A24bkX-$-hQ$u6;1VRxm{ zB>7{#WnRdh&<>fv9sTQht(dt~{knu6uWGsGWiG>zfoX$EJEDb{c=2z!$DhnC2D_=p ze48*NABUKlwXJhku3P)Lky0!;zAIvWerS{!cdN@@r z^5X|Sc?AUw*HCJ7;u*qZTM?c1hY?%(51jG(CMv?u9lo2hzK9o?jb}Q+^Pp{jb5D_dj`| zvN_=s)AfHw>G~hWR_&;GUS`{Rv8$m6DEH;kK#k;YYx*$m3gc0^WfYPUwYa+Dqv_@y zQ#9ya%{Ok}zSptqL!g2$KKP5kd;i|kdV8i$?8oB={=Ey##iBpA*`x{m{c29oZpgXP z^Odyyb@|;qpL=JSw}FdTSQDJrz>x+@~VQ03be zkEGRg%bNDW{=lx`=5kc)v78afL+N3X0IBCCd36LnnYX$mXdX3tCg@nfXKd5;ynw*i z-A&K(D#$CD;I`5TnQP1b8ueO_jXtW}yFYVdV<7%M8y+%mc>Z{@S+3%}w@`fI_>6Oq zI*s@Sb^TT)QkB$#cchbGMn+9T%(+}D&|?bLXAMucpB`FifLdQgZ2(j&BT8e{@_bi& ze6R*c8A{t|Q|TWQqQl#FYJscI>Q{U5eUq}nV~TDej4QmHF4a5dsuL2g*i5pF2rlf}Rqn3w^f{s1m>;H0;yklhG; zTIPlo;*ltSUdSq7cN|sxi5R+z2GQD=$I}oBfh0d;GXW+?>QXZ@Wyyc{b6K9U>`R(( zM4HjX3Ys@+z$Zst@>MW*&@hJ5Rj~Z4EAJx^6k-uV+*P&x{kih!@61c^`tR+jY7U_| zjsH7);o_b?^;KRqnMdNVh#}dC_}KdEmn(<&qx&j+)of)$h#NP6#k|L8eu$ISo4f5g zA7bMbTczf_o-owBeElk<%^%fGmfp`}6S{zLa7j8u2Jej5Iv55dym;Aj;Pd9g$|;50 zXBG{FpLGZ#o9BXv>PPJaV#LTQnOXF8H1CAHPNIy&A(0hGtXoP0Wi=)GJqdcNUCwdm zx`hf9Eo>*O+9w|oYNEqtn5;1u7^}~#F&)&B`1IxR96CZ+`}T4#g=XcVRVh%Y-;E}$ zUDl#dLe;-{Jb=0frTzfH(t7wvOC*f7d%I8c6U|BPrJYjiKZa@qqg}@jB zwSO*+S0eGucLm;lC%=Ci@)LT=Rexz?gHK7@{;Wz~G1s+%!aL73I4TI)ySrxzijr!h z2SvZIFLj4JwhtZv6pNXp+fe|k;2k<*QwwZ3JJfdiWwJOKui+8uj?9pAEt&EkUUXz< zv|DBsQRMkNlT&FmX8U|lm3S}G+5b5Dw%Uc=Yn>HHAMcimTaG9czbE*w24s4f9G=CuWAX^J>2>w8-gmM z1FwT$?b5R&w(L$@t?e64KX@W)wBW^S?mA9s4vu&Qq4LSM&j$={1pR@Fn3$PmC-Fs{ z=@b;%P(}h|Zx2UzO=eXZix}=Pj|{>m5UuFojqfjaafbuDQ2?q@$H1_hiIRYVdy)Q# zy|Q(GshYJe37x$8-t0Ji4V1PbZVCvv>8z<2t^Mc0bdzKD!GVm`UU^|O@8W}OxJSCV zeE#jpA3sPcMn_vMEp0J-@4m&0GVm3U_DVaun8!q!q?GY&?CHDG^;`Lk@wzIDal#x& z!&L?Fx+LeNr5*YI*!4-J#VcP3(kHoe!PqI>U%<54`0v2JhW?_PY^(iBM17V zWhfI9LP<@kLzF`ep^%>f8_P3aKAFucDYkapPUW&VEk=G4oHgB*jtQ>vI$kb%(?0{kNv)w zsD1#9Pibyvo`OOUW6a~u0E^{evDFXb*kzN86$>5V^!n942cnCPhu!zquXZrzDcRwt zP7FQOajVUVfJ{#kN+ZVHAy z8C`r^prc9}aW&$ZELw+8q18Ci((C9=PT+)?df)lht+Lsv)wBuTvR$n~Es4vhEN5 z2~g+HGqgLZAGF)Yi3a%ea+p{8{dfyv{xrHOIQsb>Kd0n!&{W5o3va@X|24&cX}DU= zFNENM45a_Tl$nLd%|}bo&u91*CgfG!E4;s_yk*;KqJ^Y7pVM6nZSs6fYJXcs6P$C# zO<9sno?sAsrVd%E)Zc<4h+VTj#K+3r-3A;YEb5RBGoFYbq)jey*{fuA3idj$6cG)C z+)^JuyJEnL6*EjxIaq(>MK1mNHMxO>t-Vc1#VPuTy6Ub_-R;MHW-VLWpZL^2==r~9 za-@(x9h7l;hMDI6b0W8p83&c@^Lmz#IW&NfA0FICdytbj9iHS*+z1razCXP&Q(x%+u?}`($of|~$qCkwheK6Br z6h=VG6LZ|c?emLvq_rAR-K`WIe81o8-TL!5nL9Us{!#>m^U7Y+yMMs2yYPBw#n>vW z5;BcMK7_n%6ZDx5*7&q198`#+8TjH8v(yZh63A(5pb#s$4aw?v#~S-VA0;g7b+|ei zznFOZHJi(|kL7*Id1pGp$x&~74o{o)2pg(m=0nS8^0GV;ZN{e`A6j6K_o}2Hd0Ha~ z7eW7_4L;8@hP-e&ClT_Lek_mE?5UGS{;A#+W|<|Bv9UcL`$1zxk^F9#oosjG&Qc_9 z%K*Ipr9jZFT96|vb^6rFlhfPo_{|T8Dy*xoA_wj}=kV3da?FD)u@IH{9L5LQ9(wa?f?|u(A36`*M4WMD zN;G(7wKd+yjt*;)xjP#i??>kQGsy__ke{YCx;r?R4=|LeihwYRjl&$dU5cS)A3diS z_qr1Dcb0Vc&vCzu{y3<9-2`SX+ch3pzp-L&xLhp!c^;k6^= z$10iuMf3ZH18X^eqh|>!A!+Bvkw%6)Y!@X93^T6)k2kv5D^-?0E$Oo@OZ!8sq#AS* zG@RfL&TDR)*b7Q){V6N-zyX(QXaz~^Z$1j%EL?N!0AhNdUu><#JxE z300526TI=Uait4|xkXmpuIootKF+)|$h-@6t4p6%e(Akf;j1iAr6TsSd?s-1->UjW z4a8HYp&UEAY}kvM$BLeFx1N4H{!6R&bKFGbAr!2jXYXpgAXu4)Iy^V}%EIlt`(C#X zlo#=r3O>0vS~v~bRmfAGRtohh>-2+OXW>H&vYd*9UC+w0i&*1>9B7?hlR zrf+}8z67JcIlYAL-m+)kkObGZcXV_M#NTiZ zH98gb-QbW{d@%Oux3{jA*UcSYQR{r28|VU!@$1)zy(Q+x*YyF8HJS9|!5ohdC0`SK zlGL?StSGN>0o}v*p^9E}PEB9w-e_Xld#f1ILDJVmo`Ub+9|i^e?9WxPI@}O$Q8a$T z;XMH}yj1=`U*IOU|0~x);^gem zRJBka;`9Y+<7efS;Or_B2fEysojI8yV;e_`VVFRFQ7Eyf8lpoYhs76No%j0uE>ieJ zCC=}+LIKGb3r%o-ND zmg`?+!@re?6=hB_RQE}LPmE8x{*J5$-enBlp0o6OVG@*)6#x5X1Z2}Xc;9fSh-c4; z5VO?Lq0=YrRsV2M`MCWshI|kj#H>+hN7AqkePmiXdqte%&4XX6_!PMbFmoJ>(E?l|JQ~ex%J?R{OC7H z+f7CAG-FNrap_#K&1+s|=b||z=PUU4rC>DKT@gKQX#aWv@uTZH+e7-v>#nK{S6+Ng zA!1QSMYD(#RZasT7o`JP&h&j7S7AtOB;wFrJmw0a{p2}HI~()8qvZ^Hr_5g=RVoyl zQ}^0Z#Zg%SuaY=5HB?pmnUoYFx>x$l`h?9Od@?BuVRxc73N;gbDGKlPyKEA>P%5AyZv zYnq^zgWoVv-Sn!Sa=ime5oTGdNB27c;$)0?>ROi*z?u-n~sK{5t8F-xw!cwg@2A}=;2>`_`t(#%ZQC`XEDqWm=})z{!353P8&=$7F?HgBQ9 zJhgFs1iBY+VDp+YWotdQPSN(O?7hGz)CYDyXFlOoy)#$jd`Ezj?wIU0 z&A>g7G4?9MQ64;5em_^*$Uub+p#BV>8VFOSY!6-tVkvuJcSBLR{_5o(8vuDXe3sQ@FTPW*@I}y1F^PgsnWX zz0CSzu_5dGmwP$)Rc6ancD)QSw~Q=bx!-*^Cyp{?mQN{Mu$yOoc|FZ$c$#WN+YkE} z_3QyRT!H{E!qTpWSlcwU<7A2N!e2OqsrKGj_(8;22nnIA5Nb^Q>cGV`Y`SmJgQL_MC16 zf=<%)4!g0b$J>ZEz#zRI^^1?A{O>L{ciphGO#k^4VpIg2Fu8TJ?fKLN!>2kyN?!$i zd|3zXy#-$dINqhjxUjax--(BdK6~;uBjZ727f+lt?<7ZYq`C3CH$m6WpW@3&fpZ@M zHnoC-f2;yZxNni9LLOT!1bq#w!?n|4zzt;>fL$NEML_bZwJMao+y} zmHAg^eEFktmY`?+N8r$wugCP|eXMFgb2VrEK_h&v_T$HMA;RWgUqfmt1{6DtKk;lb zv40pXICZvv*(oSGeE9U*2@iRZbX8RM#QXcWh1nS|o9v2pbRc}nGvjh}$cMzlr-nmc zwc%3`l@^Y>)so`HGPvIbiB<)ts@XT~OibdZS5I{+qDf_ug6+ok86MGAo&uxw_0**S zye+FORQ#4r_DgyvE44S9=!&a2EdIt$_4xk4f9s=S|3a<5&$&ha{V%*|#f?!Tp>l%u z_{$a)ODj&s|I;6jLi)NSG;44}!a>;x%I7BbwB7SPS8WP?+jTs--6AC>R?LsQav^IV z8p|gVyAb`_y_$bIdHj%cJJF-1W1hD)*YcWN@2jpi!&6ssrY>zIX`EM9I^*j3F1>f zZM8Fws6I8wie}Mb7pb-3p5glV6cqIKn*dk2hhfp3CP7(%;;;CCyEh}lDXJ;AJXtO# zm^E}MqAzac1bAZ<%`P)=pDg0HQ@_(9d=jNo9c2kul7_V~|DivS4ZW0t#p|!1E^|Lx zKjmp9e9nu@)^w&xN2|Y!`&pj*cNIm3YjT^FmZ%5qFWQyf2YB}>E+GW5A<@zEhEg$^V6WSD2<@(N}c~vYW_by{4QmF^8c{+mr+%9-y1Lt zii9*MN`sU^iX6IIQjwCDRL&u!J0+x3kXA&Lu0wY>N^|J$?tB-wdgt%H$NS+O<9)_> z{+~QU_TFplx#n7X&TC$C&X#qR&epcS%;az0_Ww=n57GUf#QxB_|I@KQ_UZrEyRx!O zCn{L;BdDebqH>}6`PcpZ(BCaCw$NPEplQg+v=?H%ah&x699yQ^T48~fxfWj(uhY{z z7#JAg!d}xM6$QBP^$8urk(B(`)w>&%DQ;)Zq3vO~>QD0(u3x|2I5D9!J^dn8AxS{; z+~Zv_1)selKtxm1)73;oMQH^Dy4tx5olDx<9{1h?F$p^0R&X;sKaa9IxXaAUW{AGp zFN509{20XG?AT4FOp1z%(paJ+BOj}&r7vMJoi?n*wYNWzC02}1PnS}{$ua(3hYTEx zUFW;uGsd(^B;!5no9joy}Z0ClcX^v z8;X!^@7+z$!J^>HeN$OkUHbJpyi^gC_WYz%ZBc}I_S;3HfSDXw+ug0u-E6XiC^pBe z-ds0=xpoTbT*nO9BO!)%p>53fY=5(WHQ100J|3EPJ-hS#JnY?pJ4`|c3mq_ZsZ?NI zS_tRK8f1M!i>xLN0>j*d`{0|3`Khc-0%ql=9|wJhe1LxU>S1#;ZYc0WGl^2tnyi8v zDouf}R%%}K9H|p)@EWU7lAphS-_FAZTl|>ceAgc*<|COJ;_Abb6KNw_y|ps%Wqhz@9!(Q_%f{W~;Ly6HeN$D2kT}aS>%Fd3@$?I+QhWC7#kP;% zb^LEeZJnLHRk?Chw*yHyp7jvHubsgV-%;Qg`>c;14WS$35y0q%u7tptITl{1-G&y7 zfufHLl24!7epP#|2wd8iP$iZG-MrZFh~oC~%2K0nd|TwfyKxwUO>%MY_pRf#UT86< zUTe}-TIKl$&B4}NJ3FcxlXfOA8WUknwCr7yvXAO0Y9NRz36YA1BP3zodoOcGQmGQ4 zMW%7R-yilvHXwEP#QKJYOfula(`?ycF^cXnA@E$6ATdfI-WrS-4Suxx5m3xyMDb_L zE{sA!`oWsIG+2{2=k3VF28m4hW6%Wed9_3xeH}!kg@WD4o0cBun`x>R0@{lMI7`1s z6WQWOBj1C`iRZN)whi27QcaXJ>JIzAMYG!0a(&--Dd;3B_)IjM*^j@?W05?7g*A1A zK82#~4kzTxq*Bv!e~Wy@tOLf-M~n?bV%!m7pezUGH z4(GjqpYu1I+jkN2c-MQ*TS&>MvJvt(Zz|7|2_;#7B(I^gX?F1QXXYFMowy}-#5JD1 zRR5~^%J;1(R$CGI>Vf#CFTXX^%El&ZE!*VqBe`yzF6C%`C#(3UPwPWQn>m>c9A72Y z2%&{%wwtpdub;iopKR(ddJWCrc`KmD>yRC$>wRwteBX$ z2JP*@X_#cg5`|r}JRm4tbq5Rsx5nlzx4zoL2(}V>=&G zu?%_F)QqQ*gL6>pC7J~~Hg<2-ZBss6*h7osJ0j>}k_VhqK2RrbC#aP>yt)}u4;dDu zyb|crG_%7+IfV_YCg&SO19oS8tEAv&JT7t*19fpA#78{lL=<*)E7uaL5ZdY@ea@Hjd-b8?8oYe8XLu9O(Qkd zkXUBzv0ZNB1_@Vt z51wR^>#+Xt55WObUEtIv`1Ox_MD{VuYBv6?yYLY9U>q4y#YTOZ5O` znjC>p&ZI;y>Dz{DT<5MC&c#RNY#9!BKk~n#f-wnl;Pk2Z*PF;sSlZM`eWM1##x9@+(A$PGc>KKKh*;Cc85Ufo`=hd&KNXo9yJ?7=2Fut8GT46~u zHSHg(u`6CYf~AlYw1)pOd`qp zgapG}xA0mW|8TJSMtlSXAgpTf*=*bKg^d+;_RmY>bLNEQcILL{VwjC)a1Bb0W|Y`W ztlEDpZialMj6Gp;`Tj|zveZ(3>V5m4OlB(g6F$k7rUvfy;t|JgaagOi&T^OtoWG*u zPs)6$)iq34TKVtS-dgQ4fcKk~qU)6Lp!3xb>-ISu>3NAZWK_!y+rV@xBkt#b}t8{y7Km< zQs9{VhZSCU$?(E-FNys%)~{{(`~Ljxm9&7_KQ`Ar`d z+r0cArs4m%q2~&aEECeS(SHg9*$zXo#rB<`)jydCe-^Zf2XF|9kSu?NP5-wN{r^YJ zdNSUu{SPgh6u-j3!ExE{Gma+FWsculib^Z8mdc)rs9YHQf^Gy%88r2Fm~Lh{4MkF?Z!$sjkbPd%XPb=Z#$B=i|j63crz z@iG4vVC+dif2OS58pJtn@-;Fvw1>`nH82oM9S)7%T?h5rLE~wnxEas~B#a@+Ilu8N zp8T@urkw+|)7nT-zUvv0e@IA#UOhpoPBr>c{{x}6_6M{K3<@ea<5Z*&+IEoVVz@bJ z|9SZj=Aj84SmrF0#<9PvRPtv6P^SEgrtPrd_iDEb6^vm?N|(abiRx@I$LJ?+l`8G?X*C8$Z|-_h)cKtH{wlR++R_nL{R%Po&0!hKpgVwGkQ=A11b#C2L% zhn1r0{hG>ukD!Ov;Dh}naD~k5Zy{x%KPJ2$K-g-Vs)BS345ZXf>!YRHgVpCn=V{Dm zu8nUw?vJRp5*v3!)YQ!T4!OFzK7@_XVqjuM0f<<}!Xg)x=g*ZHOnCE4H{(#=SGSEY zUfcQmNFEgOy0xCywn4MT>lG0>mHW@JmGZPfD@^|3!j}<_n_ba6-GU&p6HcOd+^%!} z0`9iqG@(Sjhvl%Y1~t${5sr$O6hDibIBjzF z-DE&_d0mgq*#cVZnN>YtWPD^;j|Qb=tK-!Mg;yEFK$|mBs(pd|A$=0nvYghOb2rc> zGI@2RNG6zP`R--oRXQdnISPka{DOASeMp}xIbNgKjH9AvMk;Z9vJ5n;JzCDl=?mb| zrpncM-AXsTv7sY~ps7-j>kRGaUa}ttLCczGx`xOZ(6%xhlcl1k z!tHR%cWyw#oa4%FM=bl?`N@X4;y_6W7q(trs<14~uZYs^G;h?hnLOWYj3-vm&DCpy zmY%*1v~mI=GWfa^10`d2iS61**~V5{VPT>C;rVtui{bI^l8qrO_oHi#XK*vQo#sqV z+*zQ-9nh^WIwQO6v9{yVC)5)|BO{V9iU69+w%5LIScWT|it+pN$hV5Sc{ljf^Ip6G z6KW<~084p`FRb$jBZbg;i?D zFR4>xlHR#F_}Sj%5Dgn!7zh+_#SO<*`v4qW~F-G6ihzX4)Wb>g@wc5qVJz6_ovG}jw~sOp+DG} zd$+U{JAzYA`{+>%7W~T9t1hu)dd=CHqvl<{6%``HT&(hFi~DHSrKLyn&NZd}$c7-G zQs1_;!eYBF%ef$WaX$4bj^TaWU7ZE>i^JS&xt-$TbWNhr#UAhDxU7n1cS<<%xP^XG zV5A>Mpfg-obN56kI8DxD4}dT&jA z<90p0OLNXq`Z1&`^UD{Gwa};{)y85Irg{^~xxQ09009KSvNJOu2Eg^UAc%XwX^o~< zIy&HZaciXBNF*I49+#W@+Hw}j%wxWZii#`xai*pj%8X=b2eMBf_$ASUz^M$$EXmxm{0r-oscnRASLBcu_G~g-S8dOlB20yimH3sN@uFCN?1+K*X^$ zH+skwBv{W*qTRk3?NiK2AV4GcezwxG0W>OYBz9zc*c8 zUOY|vqPnXvv^u}8VWD7`dcrg6W^AyU7CLrA(^c|PH?_Qxnpk?2E!IFKd~a`GPUq`w zgZ(v!h9~>aDiaNeVHkv|W88aO)THCMx5-`zB{?IKuqpOICkWg_E>_LF)BZikur7*F4-S?98k1 z-+uUTycFa@=|a|%Xzxq9H9MPdUt1*>?(RoM{8E*xo{F5a`>srqfJ;Z)^5(Pr*zbju zv-3phCUc*!M%<=J)3>qH_yUNsaF|TLhfYu)CI~$*-I2hD=W`y-f>OWw`NK{6Sa}4N zQw2K87)@NBUX2J`TB1OVmfNuudCIxkY0<(@|$|QQk3O=QW$w- zX#Q2Dyh<_0AUv@T3 z7G*h}*p3AqjCPQAKhysd7m zPat@s>nmBH)%7-Y({5-Hoix>8j6y?+cal8N``J;Mh%hl1ay zAFXwM{4_D;jD@~=tMF>u6=8&tNF}vwGK;5ZIchUGBkM8cd8k{Cw(GI+1id?Qmw4gT z+mn@@-U3J(-nKn%YZQ34sU1y_4A^#|D2wU{GR2lIE`H9Jp=9zeI;O4xEBGUnYgE(0 zFo|<6w4Pi1gHnj%`+Km01!og%Uh{SR>@Wa^BbFg=1nHdML>%_80-hD>bYnNBvxuR z?f7bbQrgc2G)mH};tgS67%^~@EA3EZ0)kT!eQ)|&e(D?DI{~)RYFJfGL zGH5sjWMaoOrvccCaYX*3WJu3zvE@m=nvVCw6t`2xjJp$G@r_TOE&1ftehj{SyME@Y zPPHE@=LLM^>K4jOAL+HL{pVq4nE`Yqi<8bm_P9f6&hP|OY?AZ^y|1Z|v}AZRE<)nZ*SY>gfBUcOfB zFCwmHOP5I0v6GH}Hj~|--h$en=sm@xD1pP+w-flC-oHcxoUQCI`{&U4j(hiKpOI_~ z9@hnCowJ&a-rW&HLTQk?1!Z5yvsN_7 zn>SpT#gob7b!$AvYqwmTC*a%NU+*+EE08C0bPd38`4N-!$d=XxME?0DGEKr!06Gr_ z>5P_{!-rq*OD_Gkyo+ikYTkJ@PKc{lZeVz^^FczqAC`o%Qprl)o+Y`8PKdWkMI!vj z;xoBpT(k8U6pg{!L&F8%^B(<8vhK@lQxV6Cx7S(_a8Aew#Ssr7k6F>x27HDJ+_o7B zUZMCJ8Yx%T^X$T_L;50UQ-q_YXhTK{tI8HVX}O8Iarkw$OsD|BF{8H`E$U3<+M1k{ z@U&l;=O7?VzzYFzP9+EZ>v(Ql0Cf!s%PvmFTdX*5YSQ34cJA!PIKhVrM2tOa+mzRY_VI%BA zBgTX8@tlzB!_Us}-=hpd?9;jTy4%{mW`GvLwqs5UoggsLsli9y|FrHXEIhy9)7bkl z?Pt%RU3o@!lc>M>;2!b{NL_;Ho&K{;F6`SjPN$v^haU6Gx1g$xA|duSUyUZ4*{mPW zS;TpKCf8JayDY5BYu|-djP@p>7PE0}$HOHIKFlU(b|5}tq#$GMW19?%mba+(Ik{oC zq0A$yV_lAw0J3I>7Q0U0$H$KvY{hRd^lQX?%VUvqu)THb7N-N5h7KT?XxwTiF@2%l zog_HHcsKU_`&WsfLZd751k3*7%qySQ5XGeUq!ZkGNjx@RF*IHes2gJhPlTZ?&}MQ+ zMntGCr1wS7=xO;K+J_u|i=MF5`SEI9;>qklyIrb{GQ>wMZSs|Q=YM1&{R!{kcSj=f zu&xMBSQd%A^a?tgU-qVP>$JCo(R4bYSKhmK&t_rx zNP;g|Ub?&0Oi2lEJz}c(?)$2Qh!%ZL3Z2b!(=mw9J~BEQa$eTjz3DC^OO_gdVs84H zx9(6bkuSRyhMwU4#-=&&h}l3kf_Gcy7aHQh1F)7A#ZBzL!#m)F6Bifv%q0t!w2_wf zKLrlOpp9jI=X*4@!*9}l9BZ_U;U%y*Nxw$Vx13|v5d~jrO`kvCV{jShKJf>dV#T z%Gbk&?_xO~#|Hr-d&w}m(l&6tcy%bZZ0fx8+VtN&gz_|?H>{?8|Ej!#vVu=FdgsTd z_Yx;uxdgPx8P>)B4hSVgBQ=aP2HY~0-MX!nY8CBM<`)IdgWkx4VdErNuGI8ot=Aly z;GxIxK5+S37r%Y%+?XtKnU6Jo6?oiJzswCx`7*A)nWi8mg_+iT>!t7Y`#Vjywzjq| z{bkZ86agS-gTAf8VJFz$#2z}sDJ?Di(D~4Ud%a{PH9!9;{h}wRI}nj8(d~H+)0)Xs z>Zsf8T%YK+z+Ruy+~G{ftv>wmA-n>7$5f8i0>86o>Q&A~(22y6X$8<5&+yxaPZH_P zFA#quf@WQ!E_<0J4F6cP$5%c|1QB=-*1ULw9`{69865qxVW2(ei2W;0=G}~(s{5B# zHXSo_7b7#~)JYfb#-kI?n=6EM8`bA~EQB9Ee)u3VkfW0`y|&%tyEkHN|Be?UMIydr zyvr^~=Sg?c=`4e1BbnX$=u5E!0BH=_TkC&oKE@E?t0=y-)(D+QF=g(cT!I#(uiKf7 zM3V2J?u9(L;IH!nz3#>9^E1QgWK;p*1x^T2ic4%95?!-M1L5rA%Gj)kghTg7CX2SVhX&1!k8ZjtEuo=!(o#|;@#1j;H0ygl z*sbBQr5bhh^&ONVsn4E0Be5if0Z-RH=!rn4T=QJl4?wbtCb=wK0J*T+0FQ#=RW@%` z8T=@lh<~9a{>nNxtn>ZvfcOtQaTnwGHxj#wcmzSQN z0I!!S@Uhhi_k?KXZC=~VojlPTz{9;?MM*a|cay}6R~0Z<`!OP)WA6|cqO8tO8`|Af zI*<7YW;^0tW_hRQsVo0F0)Ao1i#lx?!p`pD* zj}CUQ<8-nx`xVstH`2X33J<2oCAOw*KXpwh{xVz*h@&rwbXOVY^tpcr=tk*kZvQXL zTi{L);R^$|y?#|tK`P7gon+f=YlMr~_bxr9r%$bG8w}|O_A=EAI_jb%+e(v@g#hu- zz?S=9)JjfslV+_O_7eo|i9yl_RTjRN3M#d%kFM2!|A|@tg8mC5gcR`d5&k}cKawTD zTPa==c~m$zH=Z{dzWi?_+mYl_j9HE9KMww1GW;`G41O=ZxXj|uL)EwZucsw{zRX7H zeICE}&qV4!9_Ya=0m2fuOj(KE{a0M#|0eePTKqp*V#%tv9+>+EI03T6Fo{AR!G93EXYDj&(3Butl2mQJGs*FTHziZ`8Xxk{zlG22Q)M^yF+^zzYr`7Bx;y` z!>KGHcPzfVpt`JVgmrUgr%+VL{meE!bCg9{*~C}-GOKlpr)UppGNj6VzoyjPs?PT7 zR}tRTTW)S{7}u9gwPDdy-~&j1@%1YS2G*)!n=ZTCtg_P8I7Pat}+rlSt6#54s!b|bSd#Jb*n4X`ybmNdw zASnwY^Y?pkN(82PUh>*dAT+ZeY&~=c;PpE~t<05hPSz%~VG?6{gu0ZLusWBFwPzP3 zOVKd6vT>k-#d?3=vp6SqjiZN@KToU8o5+DImbl1S$YqjtvcYigvc0~ofKJ=B#L7i< zly;E605Sx^lXUL-`(HH#Cc^+)tGc=qEw_Vj^mejrJeNEwmY?!gOSVbj%U%^}xz5P+ z^z+vpYz3L5k>TM4!@1Pzk00;1_M~7uH0nTKSqlxTl7XkCz8bq~u-u11Ku-Qrxx!1a zP_N#owPTdVGVj|%r>;jUYl@1BcS$+ZqyUT@NX9KI5h#_)I7{xHt<*Owz2@LY z7}(g+piWjs3`|ulD?Po>c8F1z%|NO`Hj!_u;s&t7e$?-2CG9)1`yQj>@sk(u`fr*t&#U;=;-N3zRI~< z6kE;^f!5yND?WA{>7JyO=jN(eB#am5$il3`N9Og~>dkayW!ghwh^Ik*IOToLz5-1in@VY^xTH<&FM;}S^>C;#A*rB(M ziRrf(yYHQpz2_770kz=LAfcsPMSJzBaM%3{cLOx=V9df`m+m+)a4bCBb4#WsWlJWq z|HLRzCt*tl3QYx|dHu0V0m~6Yz&3<1f65X)1?A2QVd1<)MMDC7{PCCo1won#K;WW@ z1|5ID#Ef>^>m5Jpl|Y-Qe1LFPQdFe9&8nYk#vb)f_5Q`3UYr(6zPdUQ7?JSyHl}rr z;>!x%Z#au+5dLs#kP05nlyyB;`8U(M?{p%0VckW*`?s>KJoF+G?UY# zVoB&27rd|S@*XJaFg}cU5Ega@y%Rb;?P7!!fT<`f?BCF|Uc8=yn}TGEe})IS zu5AaoMp`K7O%RC;0raJ6S6di+*ELyN#}Q;W_jlRcp;fGMJ7XuPXCkJFZ%K(s+%P8n z4c2cfnl!anIpZKopdnB6$7wv@7i(xv$)~q})dIj*;Sbk~qfVT@32DVf1h$H6zS}Is zI!3nl_VF2lqE@QjXH|G9)F7^2S1+11j`tDwh37Xb0V2x$&a}`r_Y9E5p zPJ)u51$Y2tl&BFG6yu%rCzjnFdc27?n}B!QmM{Cp=emC@ta~L zJ8471oAcUOd$kc z#r0ETT(!{+H%1Xf+_`pplHR4p-DJ+)-A175w%D+*K`ppc!|+osMv~I*+YdMusn1ukT=eL z)k^d9&K(i0*c1vbRw8jWj0M``&z;`tN1(DyOfBEGZ%}Rms|Ru(`Ujrl4-eq#mEWi} z^$3v3pbSHI_~^Vp8vnvY!)HBKWqSA&oWVDgto(&hS{aw({nW{aihE zYWE49(M{P+6yx!?YmpSzhUCvqeB=CGWxpn~j9Bw*+Gw$*H`CsyD24Mc?%9mlJO4a< zEzl=jDGrqFmv0U72Xf%0)C8SCKg*6gztO)Nee?uL^OW$6wW~DYrtuQ$#_O3O=4;4~Lu~Ph~Vx4NFbWaVf;f}r7M{+3U zO&qk_inBoxV?nl?9YZ%`Z7pa}?{g(%Pg=eScnf2jc!?&#Q9}>a*N#rhP!K40!To5_N<`kl`%T)R~|)fT(;RAGrdl%`&B}2>XWCgJU*? zB5U#DH3p#O0D>hF%bj8vdv*xmz&~;0qq~Za2*MB;qL-zgtPsv zpYBIO7!p}YJUX)dap&4BHZ@|6XE*h9%#w3O+FM=q?_L0x7*gUCUf$G_0)E_>=WmuK zuup4xl{d+ndZkYeHa1@N8@upI0b3Led3)ifvHiPm*7N*If4{PkD*Es*ceRHQgKMy+ z?Qu6p9>YW31cW5G^Q2@;^&fW{0ir??iIbA1#^)Ea0A(+H z0|*%Kp6RN8+>Lxit)(z4K*g4d_dN2afy_gP%oyxvp&?7#Lj+8Fgh;^uNN@jLkk)?g zloSdt?sz~hi)u;ej{Zt6_}ydq%a58%%8soAJLlge_=m|3EYbga*zdHSOB&e!Z)N78 zZCjvk_IFhfx>7~8Icyv-dwxP0y1EMG-l(uz$w$Y;j5s_*1`%bHST=nhaJ=`!W=MZq zJC8*1NkEc_a#}Byl;@g4IXd0xc2b#BM=&b@U43URqVnf=`0ckC+)R$`4n(cuWZg;b zjQ^$kt0U)tf)0|4^xwgX`OpO% z%8J8j8SQ)Kp!+A^ZV%1&>5kh@+m=1v4~?9_OJ{jePe`gg92~P2N9OR1U{e6u(ZDI` zUdZ3rIzm^n@ng8Hd@!h|Z|DwW#%>E9PY zyzHJw(;diHhl4S@xDk<_G-F#%*rAyk)Aix8+$ZXEf8P`)Z)?_yFUGwo)e9G`940*k zU#W$MJFjLLjFC20{@=(E zR_+cP8=Eg|=GG4tC1Qgxqk!7Bzs4(jH@sUwgI0lWD|OVmH|UDOE5Dx2 zma3hua@p2R;(OG3ehzO2_k%dkRR*%P9?(c&y-T_{HNK>Q4VT;HoX$|Pv;(Yp?s&zG z?&84BJm&02zIdp+9R``(>DIAWCk7Mq;-cU1cxQqn4f4ii;Wd{uzB~WG9$#GnMT*%( zY~{Pg%U-XKS8Alm#of2Gw0zyoPhm+yDj7ub>4n_~O^e#b`_3%vBJiZ7q^7Av=5ODg z%pYuKH!U3Bvc z{@*6xehXcwp-IP-pmB9TaazFaa(1?utZsi7YObtqgC9P9v!`cWS$y86zEyx=T?C2e zqiG{mWo2nVfmm@J9F0T1I{gUe;7ra82Mgv zYOK7#pf^prseJoSj3qJv_w4IQ9bWr~pv|vnz-i;IOGrv`rZ2WdO|-PL zRNnz%nrHhP6FS9Acki|^ZlimYGXZkQJD;0J<<8r!S3tkQD_d4)A_Auc!o$s@m(<+YKN?=2o8nyJRYb4gvFp z-q9@_P*QPtm>c-#scguiHc#S(JJ*&AHh^&-DV&Y-^s9Bzp$R|3@eyOrJWgP<`ZpZ= z3hS0o;pH*Hq0wxCBML9Jc-%K{8oz^to&>~9#AOJ8&NlI5tM4)X=DKRDG=l#5w zxEz#3wX-3%z$FV$5nV$Vp%XbB%u54@zEq;A337weS>0}72+(|dysE2{CP|3N$Y!DW z+i&+JbvnT8b93>m1k_qfwCQi&j7q~QQE6%rlLn+AM~$@#CPv1GYwnGssJIk&U5*RM zL~7#bcmb`lRH6W8ev@#N(-VGQ8OV)pSLn)miNt<6QVX^40D`D{Yox&(N5x(}S#sYH2&3Tvk!cwsP1W4!wo z0=k}PFCYyC0xrjD`tE^GmDmjiv!R4m_z^sKU96?L4^r0SIL+Cw+@~+5dN!1(2{Ldv z7p_taHVTnP+|TmoU6PXks7zZTf2l;KrwIztW@LU8)o2P!^p|wX48lMz1}J7sjM`&q zX}};^PK@DdD1-TEfi-4zL7M)w_9h45DZREs^d`8nn^PmYPT}T*+5E3=eV4naN4eGJ z5t9ig$nMO=D4~868f1l>10md&&~evlvLS$AM94x2vqMVcJ^7D?00BmuW^H&L6xPxw zd>bIsF-t^W0!0|b2WY@oStA1RtSzfeGX^pWX=4@`fL~V>8oLhxMOTN;KSW3`}{>p6Y)j&xKoX~N~FVu zg2Dn9KQ}wOcdUo7rHOLftF>|%|V-+vKcD`&dNQ?Pc#*u z2|a1mi|Lphmu*SZ(khq&hBZEcAWZ;q7)4<+aVk-D*P;)26Ra}+)E@WTodycD3&aJ#|{sXd;CeCvgML{JP8O9YncO;ai zkeYg2K`1bB5=lX;XWR5zGT-v?L-qHiPUBTB@56l{>-^_{;6)F z+It{cWI$VO?~y^PPm9dW%s6}py{}f;7b!}rsv#SJEA(>Oe#?=*@&p@^w2Lxam2Ld!Af2SejhsS57f9LeMO__zKT0 zO6Syu{iXsxEef;nFRn8-m+5q;aW2&&xn4t-}cba@s4Fhavs|DTI zMIb1R1jJr*8;|QUY(j}K{P;`5D){@hRTsCUU@AVIVzrhF{g~iVBBaZ;;5g9I#F?hX zrXgcKK9tEkkx-s%y-}4mBf(c`$b#T&Ua8gGQQQJfw)TPx57VLPhy1Aq!dvC4wkz?f za+Ve>x^pZci8CRBT@JPIlH5CAeRC6y^7U#x9bCv?IehfqZBjXJGhh1N$l_yv4|Dw` zJ?ZRLsX=SrxrYy5im223R-ca{+LOWc51aKp4<6$#y-YiuJ94hW2#}?gpWeI@jeXsc zcIxr?yX#-@kFl|bb4|W|%Raq1-Y!QmOkJ55Rn2$W2N@h(+1qQI)UL@FHaAQkbsW08 z(aW_g-27o=K0N#b`2QElR+AtQyJvnk-No-CERoYZTM%c=N@4?<~4s!b{Gx8wKTBFL_gSI-SDlv%OvC(D=Zu2>I2!UDS8SW+@Xrq1XjRT^5|a z{%9@*Msjw|5<_?f`P8J}t6WY_Yu`rmEZ?@Hhuk zu3wZz5upHv9F5=>cn~gLywg#pPrK;Do23d>46Xjc0o?KCB88nEvCzJcVGetWNhv~Ms zZ3_^hNC3){^RVJrGc3^wDoMzqf2`ScI<>|pxQ?$rGZ+!v6XCSQzsk=RIT#z8HxLmZ?%5Aq5m4RMTe6<1qCz(EKr9 z-I|8Q*#vb2WWffuazIuXtbp&PO+sJ+#k5&mFCZ3CzzRm@8aN(0uf$Wptm70rVUt_AuQ>T36ZVEwim&&6~ z^VfB|*x3my8?vt_Tn@@_4<~JBB)FYBbWQ1|z(xv(6CIad-mswgJ!YAMjkmGwJQ__FgqrM_*UAis5te;jW5^rK8h7vGi=vhuOnSQSb;zwBc9iG z){Yibhq8)Y>zRQY*}~^ajf9LYq)Uc=x53YQ1<=8v{=@GF_&#xoLEn@syQ%7jHN@T! zk(=?j+gd7fKuyz6*ArdWugmvJykz@RhqR|U83kQy6R0^96M0u%b0s|ALF3ot?U;P)5Mj;*%g-gmQZ*q6pPsx{rGAG|m?y=2 z!=4bsbS=ljsW7rZ(NF0=MJ$cDlPawCXytvAUE9_`aUd{ER z(}|IE+XqeOE%9@bO+baH1!POKF^0Smhc3|#%!^Y8r+U)y_}Aq*&U2sx`(9E(GlkRW zBi+;y7VK3nw{z$6m2Ar4X2J7|;qAHZlMq{r)x74R>Wh==VRF0Cr8ldQyoU5Zm66c{ z?|FD64igkcP2=UcG^y{tf#1k}X!V_jmrVP$C(>`12wfh8NGQ{HLQN@#^;;d9gUMAi z%A13^=S>zGwfQr(is5jckQEnZ=V|MUdE;#f;P>SQF&pgzdLMKkQ@u4H#^>@$9_}c2 zx}k=|pZyZR!GoN^vQQw>(sd+?gmn4%%gJ1h)FOWceRx}+jMS{JuITv+P!`2P(SJPs zPXqn&v-B|%HLt2^;_Kgz{6D7h#}#-jcwkn-2f4cdP zpTr_yB+>iV+5ctgKnAn-k-b+nvmDy6|9vD;bSeX5DRI3YOZanr{wx9{4^2Av(1Z*Q zg?|$g7|8$~jD+>&Zin~(eC5kohi0JQc_oxFnKXRMhF{E-=m|VqXVI$16>Y4UAW!Qk^ZWk=+e5=4UbpW*Yl2#y{HT5Sbk`V&?*WJ z1+*|YSU!#`ug!nBp(VId;CJ)a^M2}0ATDy{^DNcOxi14FBW5Hh;V3_priJK=BbUaLC-Wlyk>$R{N5fAU z+wcj2lElAh;oX+QX?FD8} zWMne3G)uc&2A->`ewIt%;kG9>eYHQt-kq77rD1pIen2uxXYDxk1{-9Eb(i6PUx9VS ztEUtkcnxQ2mNu#6Xm98v$tP-(kNPC=+97%sa&p1HBMtt9S*fX9>Dc`I{BYYfN2ld4 zbHS1yJKuBAn4Gs|R#nwTv*_rvROEi!-eKUvQLcscI8dRM+ih$u=7y^pAH02SfIyuu={73-ZH%k4K1c8`GU zCl>_SasPH&nvt7}X3?tzQoV|1dWFOr@wM4n9OopZE+@=`^vY%MQrdLvw=(5sW2maQ z-Rh$C!g2ggMm?udvD;dCFN(?~poJKO+nHsKFDyvm<`YZVVcl`dqJxVcK72@qSlifC z4ncA(u1;{A*xpM=W-d58!7YJ1L}lqz4@Xt!ve;Tm@%B+Hk$l;IdAxhi%sn;t2{HnK z&_Yyn6$NF;_4a;Nz*cuo8cgK3ae-OAeCfZ!`!1vnRcph>HG^67;7G!dmGqYu;du*5 zN`78hus*D?7R+|a4IA~9)(CI;>}y_o*2I%{R5$lt&~q<@ zF;Q#O#Y$XzXQ86w#!73R^lm%K;uFZ_(>66V#WkxRDT>pqg2^{zag0%U%cJ2!M&PjW zQR#t2;zdsDkt&yBaxTSqR_?6%K zt5+5I7Z0&wX${QBE9xn|fV$W;8;Q28x@hyD?XM0SpX`%wE{KxBtX{|ANg^^Kx*)w~ zJziFmhLohPxN{l(E6)CUzeC=j;1Ie4t35RWqlJgQAJQJ&BMsXQCg;%ZA-cM!F2X>L zmang{CNM#7ZR-OJR3^1**8tNv4Nd;ly=E~JR2v&KO&zvx6icdbZ+U`z<%?JEOifoZ z%Xy)QOk0cIw6$!Q+18oS9;paJQTr?0k8t$``X6rdvfru>W_yB`y)g)76UkGQ)YbhD$|AA1(eE*0t!RDRUcMI=4!xaa z957LPw|W+v##|D#0O{u9)4vZ2MmQzx^5BR#B`;&>Jj2bVf3bDW$jl5O5BZAb;IOo$ zzxYgDeQH>Ss~>^E!y-yQ2awdI{M9`Lt@gG$r>VA?XAADYj9*Hr{NCs^EvAawwWG9` zY-L5Oklg&Cst=;7677V#E!1yG%(HaZ%bo1lQ;I*b^JGprj%xp_FV~2XR!F2dFyVs* zwP*~yx&qWdjY14ulVQat_*HT}mgzH3j&9wM-E7uh+)2sL@0d$4=RYS=UtXq$BI4hD zF81z&FgztQ&sjQDx)9n^1Rb~prgFlRm2aMx9e(F{$Ra{8tGbYs-TRFrzwptihWDpW zjnXiyCyZzFRJpAvKffv-fwZAL(cv39A_s9g-=hf*SUx&AF)2+haBpOc%d*)ru0H$J zhIlg0M36IG!uGw>FL6LBvj_Vz*@q~;gjwQjMFN5lkpLASumg|aSA4J@ zruNCvPqZ+cb921XCefqeW6xf)K8WlLS2JhsPzR%3|LO}e0#D+e^^2N(Ya@SKb-LX^ zLi95sVVGyd>W!zu)5^d7WgF!k z(^oYAFDVhh$PSasnxXbL%H$M>=WM?2tK)J`<7HVhE|c7wdbW3|-gqcHl-7(*y^s}> z;n^;KTXRuOSiv}1uS2pU`WR$owD&<`zVIHNDk8I((3-Dd7}8FvzVKn>4Ol7%!wi^g zpXebP@2j{yTX$Ela7AxeCKx3}!(sd9_fm*z41F=HZ&B{qUa>VUB>W`z z-MY@UiyPDW$vbaCk+LTgyiTv>TY`JOi1LPCWgjuibd9QhdJ0)YAyuQt)!483&u1rY_fnQOZlg`g&6)cY_2$D0fiXf@>*Da|3cq>i{#Rj(h_)f zn(Lv_H14|pU*@^GJTRKuAH+=mI%fa*p>44S)=8|k*AVXS#^v8E3L&a?@R>GtxTeJS z@8)^z2!4BLgs+=Wfbw{e7B$ z*dqo!U?kZb;nlwyuz$WGbPkwL1r?t6DE@sU*~^iZIQ-83-G<4J2c~kgDr@5}_4{KI zzkG|(B`^|uC2Ah!Uv0@h*``9#ghDM{+t<_V|9zx~31FnOL8|@#@U&iE8k*X*H*o)b zq_oSCc1aps|9vU{U#m18p0X@R|B$cHF+q9;!W=j*0|h$z<5B(vJBL9sWv*nKIulK@k^`S;-EqE=bq^1t_L44%N$;ro2?Oq+9_6zvP z^H9dcX`I=ll<_zt;+=ySnV5n;!OYCf53n?QSC>=j^3V~GjIMrq@Ubg3H3%!0@G+00 zJ6v>DL@;)XYcYs^hQlE`xR#()Hpf%jbh*HfFcqCAd&&D>GBZ1hsWso8b@>WZUHZcYX#r>Mh?D<-C|!aRL5X?Qkr6LQ zrty6a8`?>7T)v0M)$_X5+|9F+sb|hPa&s_e!XQN8I1soCV?<0mBOs#OKiI6~vO1!y zzcOf^2SeBnz5JYDz!0BnU#Ol({^P`%^h4*;>LVc`ITJ{gmZJG?Tyigksi+LbNCcC% zl{jFrd?{0J$U(F+r{i{pokSTxZrCPZ?JfX(0*#A0dN;51!IABq`l>@`g8 z<+`3pxG@e4tlQ+o%5RGZw>XAceBIIOe2=}JA`;LU!^ULK-`BUgwU-M+bXED1r05h! zHTS)}X$svKKLc*hBbHR3Of-LS9!hNsSb_H$NKk9&foyCyPY08ipL&sF7*i9cuQ{I| z^^f}imt$yknB7Ydr0M0dSq528izp}*%f%9$_iuox;0av)j<48k53B$s+Biwe@PTSJ z$5sqKuQQ^;d;)obev#*s@8bx1<>nrU`F^uLY>gtRx?wkT!Hc30Nb>qZXX&_I2S~oA zsDO-GlsSH~6*;$!jNnP~h_6$B&iZYc0|zSOShEp(B% zF`6OZ?T^R2y4oIN9M_kZ#!ntUzec{Mve@?ITmMVtN-dSubB!6{b}LF#Sh4otz?^g+ z&MB1^?qjpEC3=ptbJxj)4d>4ZuiNgeJI5I~?XOx6*5M#PF_kfJNWcwR2^e-0CkM&@ zKV)5XSXABDRlq<6ln|sF0R>dLRiqmvq`N_yAw>xRrMnT3?rx;JI|k`)7;@k{<7@DH zzW;c1=FYw6oO{mRYp=ET<|xAH29(@t*3U@t%W5{wlBc`#OI3>WYj`e>i(nm!@!Dw# z7gnQnL&$p(TV*!)I^A_Z1?1ug=#=&`2=semd9&d~nE$Oi%_pcU7jl&!WQRuaMchpG zm&|JO3Z3k8>T*46-9!w<=%?YGoc5Ok*nXwV;fI#xE;U2R>{HRog{pBajxKBWw%*)0EsrAEp~!~nSf1n< zNTc0GS)jWO<(#pM$e$U)t|hiP&$_U+ez(2$x-Mz(0>0&Jv#h716T(M5blY1z^Qf}Y zQR9-6IyxFNuga_VB}BCCZ52R%$@Uf1K~h8biP((+2;X-fJzvFRf1e1gbDZjX-{+L> z-K7Cp#WS^4U)>Y8Ff`n2)iWdj>DG~U%=^AcEKWDupEhbcqaBW|jYJ_Jr)%_3wDaR5 zSqLM1zB)EjWMCo7!|dG!U8dUdDOEn~H>}k6l635w?(bhDDQ>a+I#i;$4Mm0$yt}uc zhsl|t20Cc>8*q%-f5I9-=NVeD8l@e6NeBX4bbuMBnxsJSP~(O`w5pJh`r{~u3&Z3i z$_BZ8SLo1o*|%_g`jxeO)R8*3BHWrtF zfAu7m}(`|x$XWYzQTva*?3T(3%=q=%$$5S#s$xP34iS3sTd(S*&h z^qm(5l83J<@gEJpc6A*ad>K!>ClGWin|u1;j>`(A1z>>bv%4pDLz)#^_a=&~iQwHS zRY`;^1y~=wd+JX1myZc-LEcxg*e6mzwiv{?D>`WDQOv%UuDr!Ea- zO1@Nw6xb;WSG!Bt8_+VQiVUReT}th?!x%6SpTpbRqb?6Pd5=f2i;jO+1xI~3Jz2l% z*4JBb%fQc;+z*|IFL=L;M=g+~uUwA+b_I9a6@O0byrR)wKJ?!qQ!*(!tdxSLwELPc zJ0rJhNqAOq0V&>QSsgqFK0O1EtFp)_>vh?(wgYY|hn*6mStJ)b-Z0>_H3=koaibT^ zRXYuLH@{jqCu6iHhbiW&8qHk5$~K*5&f;fa5q0OOF2{`|u+cLMmvt35EX@{J5||&^ z4c)ys*8mhjHP@5H?=!R1HLGdTI#!$Wj({RB2$II4llQa|!8H6P^^!f24`< zGx`-QwxJ=t&=*!&+mRu`oRHm`uJg!Vjr9w9TE6!oT+!Qn>~-rKe>z2V-pWV)-A0B# z9v8lZ22_&uONbKE?w$%(;abjvMD^XOzA{^y<B3D(v7~?aiDq^-)9^$MBOBV;Zt7k zQ_A6g%Q;gH0$;5jI=L?tLrSoKnzb%R_$_J=B$IYYUClvXi_9Kgmgfeo_OW(ysS{~8 z(_uVaT4$G*txDJ72ia*1X`ZPX$((7-B3f1%(p8dhk7T9DY`JS>-Z^m9TS;V@2tk zg{X;70BeA`=YF*IaWZFr8cCwsMCgr*p;yMj@NYk#sxN5Rrh-C9}ee(r; zlt$DZ3Q0qR>K7A7YSo92L57>(vEN(bV*$y+VG#dZ-T(Y@UE6@`P+cne ztQ#GUsJ3r)T7l-PuJ2}1S>DfUTa zReS&A#zpcDd4I9S@!aS@s@UdTjpL7ZQ(sI%k3j3%r=0U&UQ`R&1I{cQl%}n<_?C{I zim@cIRbfY)6dUa=`1I&hnHR?t{f=L+A#w17oc|VG6#1(wSud#yDmJIZqI|~gXkB4V z*+Bp@QO@Y(;;T{aoy1FVc>P<2!%}+zzf)Hywe&C5k)Eay>Gkew5G|ok@y5`q8Myi7 z>WdMH$4}aTnB_eCuxDRYOUrBjdqj0DMep_koHkUX7!E8>f^k!0w>HE*W<@Icx>akP z!!(#f6-%LCQt>qJ6P3Kzek;bQ` zv}l^)>bjJMX=Ml!BW+z(F;wzN#Wv!e%FeD*Q?LxbGUUoNdllD zks;uM*%fSJsW1D6(Q0vFemgUZoC^@J@_Zb$Tq3Xz0@UN{lqDooK6Bn;ca+DVP)OUb z@wDdtYpSnkiO=MI*H!==qWKu<0Naba(fNPUa?%{s1um&Y_l(U|8tHaEZpy?XH{4OrT!60Tj4$=Z_(&Fe6Yd3W{`jz`*?lw@l z?l0?pPaW^PCsMWY&ChhE*2VSE*Y^(BQlySE9;PQFWY!bctB4?myP|{DbnJPytz3@0 zqJ8~lGUqV)(m(V_ij?M-Q_9x=fIRM9G=UuiXY~PY+?gMTUG`N**5}NQ#MF8wtJeF} zTi_!k^Lz+j061~P6J>4SMh6?TpK&R}Em*vs^Aewm-(s?~o7my!^{P2vdO=h7hEPM2 zJlDglO~6Jk@bbFJm%o7Fx`WK-FyE!MZ2|b>3W{Yjux%+1wnybjH$TQc(^;z@zi_J} z$hJO%#Yui9adoA&Zxa7AkcH6zH&IYz^t_7D@Y`WV{+y?!d8HvhwJ}lI{7&ObGhsKu zmW91eQ3=mU)6ZeGHb3?O+fg-xOZd#?X3<5TH}8-^gH8a?QW_xLzdCCZ;+?yx6gyP* zWc*W=#S$4cV8_lZTf$57T)HKB4&`H*$SnOH_il&LD-vt3U-;3{cW#34VA2;SW8SDY z@>#c+Z$ORni7|LFgFzW9^-}WWA1oFOiqteeG%^2ozqp5lCEH|XPSTR-;Z3J@mO1sjiSwD61brT@tw1zl;iQI zBFJjSAB24RGX_FwQQeg+OG4(=6crV@uAijpwNFCdH=;qmFF?FwfPF*+$M%leYv1vV zQjI#-kQ}wDA3iHI-`{op!vXt*u8~z?+`#%D+={;vOR35(2a9)f0?JeJNqjSNlFJY( ztZ%bLRNbq-9K{{K3U*Vwf+QNJm&%s8d>6X`lVHZ_6BY?(js>fZpiXDiDJ=Vdgr{IO|Y$v%`v=o7R_P@ zxWprqG(q>{kH)^e@!JSjF@NUC{757kl!<$I&+a+F#=~Gka*WMK#Kt6hP}hV0 zv`r9O+1eeFbXldF{oOM7w=gyHTdx*25u1p6F%@Zn<8-Bm;Zur3J`T0z2IDT}a#BdR zvby@^CB=D~JJ!57=<&x2tRA>Fiw8F{vvLdfd$=qDIRM)vo9BF|5!Pd0I|v#?=_0m} z=AI(31=qOVZv&o{)_ttY32wDVBNu6Ir!DKko@CQzXB-oSgM#z162tE%g6IMcqkJD3vbP6psiM_~FO5 z_zVr6aONgRbl17n8(Ul$*Fh*wUYtyC=daP{t(A$WFA5YHABi-|gC>An_FD(UL!hwk zU6Nl`Hk!v6u$3WqhEY8Rz$zeS*!#HO;CZ)(-F1wJSl<)iU+=ZgN?#)LcUU{kHbCso zcUzUUv}Uzn4chQ zjW~HBcOm(yEGKyh4C<9Oebqr-k6n~~*}LDY(iiu{att0kG9UPQGF4$Mm&@={c~+$5 zdEEO3^1-y^kp~k$O|)1y^Cx$;4rFYW{iX=XwN!d`RocANV?~#xfoDPUFa&2gSn)Yl~ z=<6TB_?co~Ya;&&CeOAqm$(4iMiRz|?!NbTim$ovpsa*>8c6zIz3(<Y)&5jl%qS9u%+#^QMv?Q4HnC8&COF8gwl@=}GM?_sFlU-lC}46$~yD=CYG^@njs z{wH+OxqXjH+imH^=vSjhmA=?FQwDs-Q3EpNxe}xoZkor=@p_A4Wj!dsX#KqScLYdp z0?_{%KaJSGSqA(hE_Zoyn34zPBVUyWtW2j&YNZ0FH|%+7Ch5aou?Z0o7OWK$*` zdwVn?{r%#73IJl`&4#f2S$>EgDGcH_e88oh{)0p%D=Q~Gb$D-5MYg5ee?;P<+ZsAm z^Y(3c#CDVEzo6>_|2wd1B|D9OJpOxS1Z9fayRQ|i~Dy9L8RLD7U>RcA#n7qoukk`O43C7cl2xC1CJg+CT{m<_xW`I zsgg4>F|d-`F%0wS{i8W)p<;V;%R+nVAFrTw5zYPXHUS!ZCf9q78JN83w2!@st+;m)UPRJ>lc) z1&50PsD8XOTiM(!L6BzvtwTXgO;3oVh7>`PsimRe@|<0CU`b#--VEI_k2vj)_z46}F^6G6ay8NYxV$Cx~2wD`zHvJBW>%F+Zw ztlL&*))Je%qpXU@`(y~FOZY>;$=NC!F6++p>&wVx=x4>nPB-K25Eb?P6x}yHy_p-t z^4;VxMdU5w9DTX3sBau&`y|r^WG3H%ZzOFwniDMD3_73twRuY^*22@%6O7x&#=)U9 z0N^|GTurQkabfl4V-f0(%6oJ|+|vNLOu*pbsTAyixqPR9(sKRIQ_{*~4_25IBFdQ>L)8l~wlaH2q|2$D{*c{93^0 zZ{Nt>tnp4;bi1Pu)r*4+Qwem5Hpm8leEJG&xEmvm@enMP8cpnX!axX-W;R_p$ij*h z`&n(t++Uw_mtl&we|lQSWW;obts^XKQL;J)QgG1YdPf-|gaEF})l_=-O$%gL=z>Z3+^dfvED?L!U^ z6uEbhFL#&+z=HHZ5v0=GAmf-DYaxxn?6Qg_BcSvuA!uH{hUBr!3J;JVPxJ&D?)buM7{D z7Qv_-&6!*w$t2_++nChnG4u8%aH3Bh$f2pd_K!tT@klNoyj+i*oFyq8gr1F>)`+9 z#iEHi`=I5cvFpRjo3!O!wojUZ>nyP3G1M+%cLZ--3|OWQL7~L#%NOITs-X_J8f%*- zG4osxyGl?qy>~{vfOy3;!_5E1D!XuTx24jo$_-F+EAD2D_pjxVo+J!F^I?6tsXfH& zk>}IIB8#Cgrxm!u2)BJ5)aZDIiLRKRA{$frWLe{%SJf1X(Qqs+dJ4C&%)HlhQ^hm(W8hb(j z0M!$Tx9}_+JE z#V?1IAFl6-GQ=Wl`#f4l24mUgQ<@G(v4Kn5e0cSrWs3LcI%=O4zO=7RQqTcQ%4&KY zHP34;>&BV7g^IH>VU=hiP&0ZyCsb+|@1*x)*2-G9T`tXWYHa&C~N1_hUM44%Ox;U!C9ry2#;tk;|gLfR2f zU^Ws%2hR&qRI}Bq>ufYDn}%**DqYIdxfGif<>s6ks@{j#tj~TRRQ`wE@S|XNT7hY9veMDbdF@7uMw z75?_C&eS1kQrk%*I`h+&%ko~K;ZO0=Em5yp`tUPjEnf%+lyY2jYEPNHnoE+c9&Ib1 z)Q_Xs9evHIN-@uaJ}{5}$Svmn5qQncL-H_?=e0HL#>ddNBG>R!Z<$d34N?MgQOey= z6<=^X`hV&Ke!Kg(AIVa3eU`cN_v6>x3n)JX@`N*w<6aH73PbBBN=(keHU`96X9%h^ zyw0!0NNq+S4&_jTV-x=iU9KT{(~w$h=#p^>2nRK)G~-_hc`5_|co< zz=Iad(O6%-krWztcd|ElKcDfeqh|fR3V$vl)(?yR9{cy(2vqXAyRL=lO$Wm3>1^finwfebPD1BT$TdKK_}pWupRP0dKHsC z7_`=VR9shSDS(S#Pr$Xm9*FseqIAvO6wG(r*AmgFzxNJCfJqc_MNGn&fB4_+FZ3Ws zux#$^xjL|c94I?2J+YMyvVX@U&;vGY_R*9kyiv7_qo6Y$Fi;= zU;X9#eAlZB=JSxB{ELF_;{hNK)@Q1O^zZSmxyO=yV6*FyXSwljARmcBaCG*j$cYD;1CA;UKKU=8~$s1 zgoH&co?l&E9ZSo2qgxyaxzSfwpEe)=-)luWiD1bYqKOr6t*u!ln6Gb*q|v+<`#ApJ za&X_ECMDzIbNh&cja@EPd)d8(DOV{D@`dc%(6K0ar?G#}Yvl*P(VN3%)j3q}>}_mL zrEW&~XZ*fOELGw*dHX&kel1@^( zWg(g%iBL8$P~?j_=&-W1OxoWXpqV*H_^m?tz<-W{iIIq9A#H0{dvO1qg^aCznTnH> zH*S%bsP8=6!@E|&*Pvq@%A45#9$5DYSR%}MoYN?s$SUM^R&>L;XjbBOidlun6&+B0q9Ig4Wgo==g6xE#e`XfVc??U?}|e2{vAbK1Y?UiPZ4zt zvoKj+Mn*p@497uTi2wNaN&*s}8kVdU3bT*&40Qo$YNw{OvlR1+CMH};-_LTZRN7eXyn~jQl;tQF{fMOqk8|Eb z1=wHcOV&0qF=7>&$3egu7olL8{`nC7UBsh5@3rp3>z-KsLfWt&pCq8iz<+s^ZROBH zD@VNsijR*z@$HS!L(o7cD9&!8{esL64>WR|o zl;on)h4JQrw5zu6`^6Zrc{cbJAfW*odnqu?(58{o{=FUoPf!lRhleskPNBudW@bkih4$OIhjnXN zAmqlYPF$leDJ~wnfFFLZ_0@Lv7RP)#{AkqTt2OUfmAwXndJjnV`8-Z*)n(2=C2&bF z@wq#u?2Ok$ZQ4}>1OLG3$pARwo^oV=_SldYagiTSEJL<^;w!R}!U^~sANVkgjn~d0 z4<>H@F00+trQ|Q!q?t6$U|MI|qKmwVrQC3!#>ZO2%`=aujHx-M^%YeMH$oAt|)W-gh z&D*zc5NeOLmwJkHPoLtmSr{h#xUUgHBjxppPLm3(=Ne7(v z&c}287W0-D$=t&l3Uu`J)aO0y`}#+J*5sEj^-VruF7uu+bDU^|M7sN<|27ssecv(y*L)8;Kr69u_VIckdLFC6c zo${vh6`bx|(!wHOoh^%45GMUbUG(&EwWfU;OlB$eUFNGON!~wCnZj}X@CY9t(}F*9 zJLh6V_)K-LMShF9oAW0!%~%$?oW6bB^Dk#iZhSL-yw|4pc#*R9){bSXyfO(5t344Xx5i zQ75Z-^L4;Kyk5GXK&XnZlz{hovs)ct6=78U$ViJf1`t-R#&$@;c?!@K&y+B_?)t&% zE{`r@`#@7n>$DIg6pP%&>;(SLWeon+#uMSl%>dQ!CS!{MM)ftzJlh-#oKKi1OR`2F zotw6n@+wm*NYf0uG8q8$7+)&CZib`n`)8}KpGEx{kw7rL_D4ae{~swww`)lak&s7Oa)2_KPK{`fnf@jPZ@Ob9kT;Me5W#1 zi{UEg#)!s2Km*+lyv4blK(iEhb&N&rcy84eC)deB$R-FLxu&)RtIxyooKt~ZD8zee zOOMehis$lt-&>VN4tMS44=*$V(BK1N2Tb?BX5xVt!2VuD)en;@vyp5gUh#nHHJmNM zq)!K&XNWzrGd#|t44!_w=m9wD-6<$O2*HAO@7Az@l+7otO^V30xy3(tjw$%h@!lqZ zgvov&T~$!fewV~SZ+Xd*i8xh3DQJOth%}&mor&iHMg44IbOI0$;+`khomJJX$6SK? zTpO4QjWMuvhuIj1ngDOlu)UOWnaiLjcA-w01rFZ^_`^}n_Ba7_$4drvT#Bb;3h=rN z)8ZY!fqKQaP*b~&F+D)~ES))D!m#V%$ZJTVrJ~aRy*Fbb@avz#fq^;hHlcHO?j_vB zWBMa)bjL-Nmk))Iskm`*aS3tP6Ooby`tn$TR2oyOzfM;f0AL>Ts6g zB+2Em&>5l?o!`T!g`?F=EU-+)8e{1vE5LcY9)q{iVORTX$D7a8e%dwyvZTz~QU^(qi2hT@f%Fm*5>Th} zPbBAw8m#&E@V$R}^PMO0zz+r`4WV1}ei{z5p0F0S+JfF%Pz#;_^e(gQuQ{7;C!HFO zXV^<3hwsZN8Q0%tslWerV1iDoO|!i`oX6YfdQ|1T=|dCFb*2$i{rPW{qYmP9qWvUN z3)7nC*(ot2bK3E>t*TVIzZnj~caf;fcNkH}0U)|HIDdxP)FJ7Y*)B{mlC#dJi={xh zpSjCcck&euo`MCkjxN-uAbiiK0(nreb`OVfLG(UJKuRACpd32YshNBbZ9cx3oVm~k zxXQK)48dcvuiYnN>_HUlYhfjMCwlE#;`080bS+oC1!zr!47msDb^a*Zm*>5g#h}pH zbumkF@uSGc&Uw4$XaaahScgb6Byov$NNr%7aC1!CO`6#ah|r8DTpZA3f%avs=zA%i=W%N-}rAUcef#vmRB7!5FG-PvL7fYg2Es2$th66XS2i>!n}(J^>|O( zr5vU7AY7d<-l@a)?reH{0@w!ZzFc>{*iSf89|IJwOPz$XspaaQ*+1}RK!F$H zehwi|Wh6ec+m54E)t_^&(^1*vDFM2YyHpHoH--|ef+%RO zPy!|JU)|cj7DuCD_Il>rRKYHr3<1g31o+(V&+XM=C%R zP3znZNQZiLN?I>@50WrWR!3{LY+>PL)y>{4J}B$JUM^|I9I)Ltz!(+aj-5RfKHcAo zsGD-qGzmws^n6sY+d{Aj$`Cu+2a`}3Yh7t|QCRQZV&^7;qJ`DW0C7f0 zKykZ)XZ-9BEWjagZIQWUjl@Ccopc~cGK=n?#FW4Cf%FVN@+e41 z;VnFauZg`f%`66uFu^XYQfgW-G4YP%qk#H&dq#2bP;U9$owK1dUcEhiV)N5=jZ5Rx z6jA(i*;g>&P_u>0s9K&c)#N`CumoSPyD*t??0*gymG}2pSvYA2yq%CiV5BqWY1+-T zUA-TSd*U#PS%@RXCAyahc7vHszJ6}_+RG#l)6~QD(X(6EFx!PkK-R_$0{CVcwOH7Hga??4%SHirN06wdwbt%U%qPcU)sOx9&}$Ao&I_7 zrV`sdcRz;8w$=dR$e8MnLLmsoP+inb7H+^zy|p<9_WRv^U`+7>2qj-&^PPfCL9&7! zpZz&z;o@v8oe_y>zhnD)R}9;B{?V(TTeih&g=5*$)a}56vFTExcGNeV51hm>KaKMS zZ%mo;knR|^BTp_L!mq(cL}qML8k_Ud7=$<^Ri&jp;Fz?Q-5RL*JWs6pUG)#4hrb6Q zV7lsjkwSkR6(2YZMK)p9lD#)X^1$I>POwqR+#%aDCeA9hUhb(?8y*@ukPyNGpsqi) z%cRxgewKGK0Zsy#JT7Wzq>E{onI|Af@ z%`Y!{-dkoEoZY9=(UJnTVt#y3rZu&8f~xB3IwrogxB{~Opa9ZNgu#Ter!3)B7(f68 zyNq4b1II^L_b5+Wgr0T^IDv4XuM%;GQv&v){@#TY?^5tl9cU(Xsfhg4>tR9IE;x`j z-ZN6WS;;OjwK414i^?wV+vy*ntIvA{-uV_8yFRdx21YbZfZ zN^PxamxTdlH<&oA-xaA(lTdBb=iKeE6cy$_yFqsAqj<%GKc!+01WxHq7xV3JnhT6Z z&=Ck;gYSZ5O;!pYI6pRu2PI$l6ypo;zRhzC!z~No+F}O`BZC~!G$FSJHu22!+e;F+ zv&ot0n|h&!JUT7+_{J6vRtGmL*K_wFF8eVv#djIXHO2Rdwt5(9kF^I$1MgUVyG~10 z+8GX7vow3|MaEmP1?Avl%g)u^%$9fFZcIh^R#j&%k0)H7EAjQ8OHTqV$RL6nr@ree zhf#vx`FjC?J&uekEi0kn3W-FQ-W`ClDxJa=vRLWq>G@~dbu+v>?igdBgOIou3+3}p zm3J5{3fW4tw>ZUX4p)|mfmbIl37UEa-ZW4;rL(ZHO=fApjn4uuk1?u1PffwPeTu2Q zF`a-CZxYurf8J9=U|diX;PdncoCqALfym17ZWkv|6%}$gXxPHT1~I^(iGwUXk72j` z1{V6KQp@>pGPaDYNdwSkF~LPR2#}>h+=;y@n}5?2J}Ac%;8ft=-@OmY&xd*G!12-n z8NsfvM)940=Jl6+BFu%f*8?or@;`obrl+Sr{8S1o8&l)r@IqZtuoVQ5x8JOmPMQZ$ zTdyg?&0N6tsajXn>gNGmr8%1UJ*Po4guB-LhM3l%zvRczy0o-bun^}xZ9KU|(o*nd zwF?dV$wP!)%2RZN*E^G))`o_5bG#>7CrZ{gL4H-{>ua?<%+rW^j>FI-8qY0nz$%szDC{s;jL4K&q6>JUs z*+?F^@l`@8NQ85dXG({FOtjN2APRL*(w%6 z`Rti@i~uJ?ky@3p1UWD&_rW?@o=`T3TWUJ+osDjA{2d|1QUiQ*aM*37L5TRt>DL!; zq#7N_9~wLj{A*nkB|xg&)0`t@VA!I2^Y8D249}91NsI8PJNLzh54Z)B z6E6gt`~&Um?Nx+?3=Sgxk>##k7Xo1<;mtpA0hpw5gcXvCiCyI4Ui{cIj3st)xm!8Z zy&Ji?TQB#c{;-R#p;(3S7qYQxy|FrcoH+IO`=ne5OxK_WJxku#CysVjz>7}Wz@Syy z?=KS(eAA!5Ffh*AGp+vb*RCNcBVO;UEc=xPk$TBxcOvi7>PukY4E=&Te-`oC?e8Zw zZBTC0Kj$f7Jvj1ArFu%!EWKQ_c zv}tbKW@alpt_5AXY9-=T&2HS#s`}zMFA8TFmwESY%?z(<0L?-QUq}GXau_wF@r0h9 z2bO*~3BGvIY9@X}tE_7kcW*TY3VRC{{?5H$*DYmj;0$ah!k5I1B1 za{{V{sJ~5w=|Apw%NKs&9<$8|HUuE19R^E^UH^=@$Dh(CVg}(J2C&l2K zlq&DuZ2&tKrPr^MyW_Y9)nSELA4zna%9wY1oqFSbfHl#)C+HM?tu^(*sg!gSo#A zTc8rPh!Kw;9-{Hiv{A4#+xwJ1?ZHxZX>Mr=S891^1O$4-vwQh6YWK=8%5>XNV&V|@Oc!F^Ls3;+-1LwkcG=t?Kh9pJ#7T|ieBH;9a}X%{c!>~l z=(bZB1nr30klBl8uZ_ZPP(tH5TyXVt-C`#Mh%Q~2{rPV;(5-Tg?T+?dX})m&G7@}o$IK?{H=-R>=b`A|Im1V z^AWHej+&Q7zP=L^Q^619u);#9PZ_l_rb0Y6ACu_|QT{1;q%gWe_Lq+R%e7yKbrI6V zHampzpD?I9XLm;pf<=GF5|b0Kwc1h3^tQgIw0g6&_hMX<&wsojbdt}2*-!No{VfK- zY&N|OcIOIq+Z5O%z>ORd3tC;=CZbpK1Oa0v!RYq}K6#nXVS!}kr!N=(Z7aerHDMc3 zP?5JT&ELom-^zNsixsR!cFA78@BgL~JHp=h)ktwhy`?qqed+Ry}pJ8HiAGw`?6#UQ!YuKX4{DI11w+IbRIL)hVYE2_?7ehi!Xnn5Q4qRn(2~{KpFoYM*|4Uhssgun`5{T<<5Oh<$6h0 zwf*G9*Eu28yo3Mk?C!Jo%lCT{fLCFbR}tMhKdA{S<=t^*72!KqjMapODslu~U)YBP>W(_e`8>Cre{`u=hZWv6-TZ;dPw*J$|R^07~DHFSvk`&o$QaD(6K-Yfv(8==AX^SZ%Gn|Ke-?jO#Gop zYl`MELfCbAzR2h%Vl;=KB$xF7xGOAl-Eav&8E@;L9bxoBM5-D{c^fC-Lmaxi84m$K zT+!PyGBP5c)x?{Znwr|%g4nXnF>WGG`Zt;_Uov15qwzYR-RMWK=N8Psx3n6*>MG*M zMZdl;t>O6x1OJb!Nh%$9*E8kIycmB$-XbK&oiO<&QCRYl3AFxX-lTiy$o0n!+=Cn- z3c#p(t~zwY7wrI$?PQV35|aoZIqP}Is6NFeg@vhKW;VIBtOfu@c=+yrVzPz@>?aGU zl3nU+Z%iQu>lBtM`@;9z1VIwqUi)ryYpZl?i+Fu?wY|1MhWyt7(8hseMcUQdTlVqe zc`QBG4Pp`m>!6V(4aV7b#(A0-Ip&){1kn@PAG`tB@z$oR1F7ItpmSPD^1c}bTqVri z;OiRjb6UCYfUkBY-T>n#Qz3Tx#IB0WK7M(PmYJ2x+>*&a+a zAAjr77ZUfD7HSi7^IdY-@nS>#?}Ga7{lG*ub#;9ZGJH3}L=hCbM&?w!FqTW=o>ZOZ zy*IK|X8FZ!;pJ1ZGlVAS(=Cij!II40=sKWN15>0AOfO*H*=pJm06B#03}8a5DneL6 zf#8zn2JsO6Iz12qephrwSU1$U`TSgtwf0Ad?%^Y1hronu6NXS*LTmLp!^dZU+-DNB zf0WIcuu!+K$OAdmyd3~9EAPIkSiSynV?eGiDR|D5Z>Ju)RHqd^h8t2?16EcUTlFlO z_q`DEfFzB}(@_}E=Dh=_eRn+1WDnn^GZzrycz5WxogjebBh%445gM))Ah57+vsFgC z?wag~QcjWc3Eg(oS9{p|^a9E64*($ZF)+@kBqCo?Cks(qY*AXZg6AS3Og%s_J8D7y zp6xVBnL7J7V@?1CaB6dslN;ZuOacsO9A5g)_D~?L2wNy?=dSyM2Y})7fI)%Sw_X}L z5}hZdz0(?_S{}6SJ@MwrK9w$FTJ52X)6fQf1LeUKn?W=W+Bx(vB#3GAMsGf z5yd0W_WaN+Pnr_bmd$)>3@pkC7&6K6hkz_K&<4pu`9P?eq2@r=UdNg=da(>4lF}}l zvJ#uAcE`f}rng?tJ#(0Ae}XrRMSXzbmuFRXm}60*0pxVZ_IlumJX%!C*Zh&F$HKy* z9_R)HX{S%C04k^!J2C3$URCbkfct$Ls9<0K@gLh3LRKT!K6>2&nAksWqYA{2IT(xQl^sr1e!|T_%nns&4cq%0gI9iqiOM_yQ4;Pj3(@(fBbyF#DzA zL1$q^IiW+UbN?9BB?1(7KNfJOg$2*+umOABW?YSp2&p*EVW&qkHiHtbL_Y19&3OO{ zsD)EX4ULXY0$|;4`=tv&G$w`>HOyWZ^c=8pltCTW$vjPS^4xLq5Kv;P+j%Q5;|2+Q zMF`f+==zLDNAzqq1q6=M;BTDhZX2U-zY9cu)mwB_mdg z65!c2b2xcB+Ev_DGe8M-kG^z1!0lY;OyhFh?PNMD7PKk0wo(vBAOm<~lc z)k{$}xwg-vj)sUs;)<|tHwkEJI-7DA>STVF(Wh_yjC^a&<N&N!_RV!KX>{s%|H4 zlZ18=ZHSRk21ZGe?ZrIbMI&Xn*kgs$CK}#nZS$NH>UIbO9dQ(G2d4@De`|4|w(?D=YSgTWB4kla- zDSii1+J*(SoC7eLT~4ty7HscN5hWDdDO-x8(z2Qyi%IwOT?7N9Ug<$#V$KheFihf! ztZd*DptKne=O<-FicqstHid-juG|J31w+Sa#{o+9JYu4krN81kcX3M6?G2HT%;`_6 z*0YKPFA8pt5xxLNY$QFYN+DltnQb9(?o)Lk-{msD8AMakG!8_O7XGG#gD;!IcmYy; zUJbCL`b$AFp#vHK7^BYv72r|l;UN&y_DFR$Dv@yphcp-n<0%G5#?ZL{)pOZGKE<9h z=;6Wz&%AT%TjWT_Kt$~U)nI+7Ot9KsmqKuUF8dc5UsL&&P$`!+xqj12Cq$J7jg69f zm1>H{g65g}Dkxd5Bu4(k+@VnKzkqij*HV6{1ODK!yGj5j_@Q0W+hZQT|Mo+Gr9T03% zpr?aDLYd>cJn4mcfNiWgkw!9hW%Wmwcajpu5G>|>c_I(^<-SI*_ zct?0O_pseu${yO6@r-;L8QI%m^4j*rvAW2DrfSaA3zL3NCSOPepMt5 zv>#cGFXiTX1ggnCuXZo6j>7rRbl81^lGK2;<~j+_RCkZ8Z00V|*zgd`7rjrwjHVL6 z2>aGY_WG$*e8T;#yzLk&Ev~%**M%UyBZ&D?4pR?kiV-dhN4&kDx0DQsHny;QDR$pc zgC?D=-WWl+B`Di%T%3%Iy%r=<%4%vv649^B1lA9`#iP?RGeu7$BDvrHtWSjWe=&^m zIHC}_qw>wqi@Os?k?XB!JfG13Wu53j7GHa3NEx_+YS%qZgxDUK(hm5oj;dNqXpDs} z*#5HZ2Jp#(XHMi;5N@f!#-kVCzYcE!B;_NPFszN5*Y5qfP^^}{eZaPN2F9PF-2$Ea z$B!P=L0OAwQ^^$IkvYvdO5Rd3W85Rc?8f~k5H_1w7rf^mqaRO~k zSDnE~%qaSmKQYp^`<)91cThi5wk%T2c^77-*uF2t2e+x~q1QO+sI@IQN7xOVkw^$k zwij`Sea;&j({=&I2vOBVI3yst=`97dcz8d)P5$`6Cv$Jp zunzfQ!1~PNTx&VG5I8t{VGt2jBD`>ly}s}XPcq2vdPQ4L&%q)99U;#M(`!j3+VjZ8B<32aLSY#OZ0!OWqX<(0H>S zA8)w6BL+pEFodY~RNGUCpi}4k5?%*79tfTVguki7JPIp@qte9wOyh$U1Sn&BPxk&q za0=@mU zzu}FwC%su26i)9V{Fd?!8$d^_u6 z8mGY`8zXi(IXSNUO~0%#SbP=?;%rCiB?Qke5s@72_fqXoh*~xbIzHhuXV6J;adEbN zbXE3MoQM2FRx@poYqV8#QTNlmUeO_8u0!Rg~Ccd)wNsEQ= zJnj;eAjOOhi9kPSkwj+;u2#=9LLHgl9d?z=;e+mjxa|KqWPsGMR<#cw=@ODdnmKmE>7qEcTH^T9< zl}3CgbC@mX1Q6PD2|Gd~PN3O#{*2K);tcYhjZits-C1$wNL}V@$$KPtON-!u%Qu^; zovsC;|0Jj)8UxY|TbvT}V1y#;>LDr5y}%W>a>{@WM6_zxjHBoP!yMfPrJhE!7Ar&+ zMvKZ6sU!NNtLr(^(bRsh5G(MIe9O>$g-y>+2?BuEb6QEah2Mv*WJ^(UicJmK9Pp8c zZPf5cFZhp$To9GJ>=pJ6V&*PB%}E*S@g<9+GvWcgRzP;slek0C&x+}Y6Fv_(D^2(#W%#Lx*QJM0V5g}6_ps=u3nI;Agb4kH+J18zrZdL z)#&~5SuXYn{el93Kh)T*4jOg-uMk7f-wr z7gG&?KPm>LhH&mJge5IEOHTxd|lG$f2O|n#m3#YP7P20y>;`HmE*Gv|B1Ye`|0R733P*E?h zNs^&@@FSgn@K8rWMKNWnsnGl)@oX!+>Zv_TR%b93d^u{L&?zlzU>X{?1>sBB-`ebv zJn4z&KI^L5Udbn|sHg}|NZ5XxST<5pQK1alWM?*STt~k7e{5X^P*vUcrG$qFJOt_P zE~Oi!kq{*nBm|_pQ&LHl?h@%P>23k(Zjdf1LEwL$e%5dPGtM^*^S;Nu=bpRwK5MVN z7DT+fi7G(~0XX?NVu=!)8!UH{<>01~7&JJ(ve4A@cU8@n^{e|OFYqJuzwxyJ>Q)_CZ{KL!)XRd-y5YXs= zV<`OXpnE=thjM)O*^-xDv3Q?z>7PCV=4|#PrKOy_b73Y{XKab2lUD@o9ycMq(45e! z3c5FwZM6Y`6(7D{krQGOZKQY0PwUnr3Z=xyGeTCe@&P)+pkm}+9OFQL89^a|l=AG> zJ4g_VsHh1$;Xm$kZP>uH@L*(` z#5_+TvEeD&q*R}j8t*QIuT%1iH(OkPN{>$H_RXZyJ#1xHAQCx z)$;%qg{I9=lJ-%<(SN*D$(fPp4FhkOjrWc?Yf9KxzMjl_FSU*F$S=Seoy{t*{_;cs zr=&o%S_!uPKmP@yvI}!t-T2Gr&&QcgltN%`&zpP-lY@xN51yma|MT~$q3uXZ z0Q@dFNZp<&Q3V9+H=dV=hQRNx(n-n1<$Yx2_S;JCH+rqevQ?IeO2zfq8sxwJlD9g- z#Yt3dNe`*4qGH4wDrp%lt=#eQMP8sGN;zG%7kPOh|6aZ5$>YGqMfwior!j3!vufdIV3zID0HGQegmZwff?rGKe7pshZulR=UcMx3vQ;Id1fM!(m3~EuX7L+0<;8V z7S>s#ph@=ElY|n1*OMRZ!W})==jszk>D~k5(}!<8Y=Ihn9`Lu61%7auxw%?=J13u) zPceAtd)Pt*)E6w}j@x|k`3W&;V>wEuYn+snF#~3iFkif3XJ3~a8=V@CIuEd*_!&GN zAmEcNUXQP>8L=2iFI{T|bwb%xPy{6HhYg?y2hGk{$1*a-UK6*FVaKa@(^sJ!P~E_TGqn8(mb=IfINstHihN9*YLwTVby}IyYC~`7x4M6wgKck z1?<@uO6DdO9_K5Q!j>J>*DKx2k;@Wsp1#oKszP%cI>Tijq$Q4}EgEWSQ%uZS0eqg( zCZ9`(5c9s+rptN7)^Ic)SF^mELnO;+ZI*aTHzqjsxi$~r8alT#h06WC_0mn2H)ib!*7$C8Oa})SXlRJX14_#0C zR4~dmu!wk2lnR#B+ma&CA61u7azLvbv5_3=vTp9ZmC<;Jur5sVOAFv(=^;Bm{;PBe zEhFl>4Dl&AqaPU%L|_%Urv3@fWau;H9>)9O5dz|=$G5FH$Pi(kS!o0jSy*efGq7?@7d=lds`*I{{gne^?R zO=LZ>Gzb<2dd;AORPP2Hu_ugSf!m;W@({>M7*Exb(0%Xas}-jU_$+FtEf@YvU-t!ORxTVRK0f#Iz`IUD4#3q}k zP1#8zH`h!_#{E~LB5KKV6}BA&A9^=Fq+|)!p!5vA?_Ei`c7FoSCMY-3aEcnv8SP#z z!~+gE-O$7YeT>ezMV#;@HA@y?VJhpmABY@o>CPAG^pfW5FDu#Ww37Tt_CEdC-p)Jn zO_kBl+RV2&cHfDXW2HurSP1DGc>$dAF_cN_IlR zXCKEo9y`vu?dh(9#f~l;5SHJq-P8Hv>~gpwYdd4p$q>Gsx0)7srIaGgi#4$tqnj%p z{R5R>I z)pE%cSRb^hj1q1nr4t}-#wR8+Yq-Cnbi8+pv-RsWq=w!Evq$rOcTgog`!cq$HOkkq zcQ(G)&d-io*4^SD;>b^kk6#I9Yp`!=sy^SXy(T9hAUND_4PTEP_qx9DHSJ4c1m_L1 zBt02xF@V^b&s3|NA8&n-h~&M?S9kY$56ZEg212`O4a7qD3Znz@AE=%n7&axNzQ zUBw-UHEq86bT)DD`AgD^=MD~`7>hnO-+@Ml5NI_$E(kY(m(Du|uEt=ZV0z@sb@#_F z{Q8gQ9jA+?STH`?t}=QM=)Y*i>Uj4cmc4m(e{ zO{%v^|LlDDw1`g$P5yB0`gp|O|0>9^sGi*^rBXx1CBBOUyt23Kr9N)v?tRNY1!Hj2 zNsU0vwLHQ?@rlc-Q(vK-+5HVHDkj=ux`^*GL|C||Q^ z{5HTr+3}7kyBOf_u-R@EG!CTzqj|~B9&VaYA|Ay(OEB3(d{`@qe|rLWuCD-0`^=6iqwM~2v4?43}&3~{92VCi!dSXeNbZ2 zO#Ibfw24%xMtO5AEB1lR~YBfo5OXWKb3=s!@;jS;4-Pm{gFR-+n|9oaY z|Jx?y!)LeFCWMFpNp1qcA&adBcq~^yEk5b>Mi=o^heQ=orpApxF#(Viad5}-+Ibiie|j7=U3~# z8lj5&koO-02qsc`&i#d@WwhOZkaU=^Yp$gU$aEk!K6SlzYOIx45ZuboSNOP9D6j&0 zZLf6T4nuj?WYnUmgaO1hM*(6&lw`2*o8>S8u`r<%d;*~UeS$DwZS&61$f##~GEC5+ zV>4y4Y%dZ_32PQVOVjErkpb>l)Di)=KF=-oMzaie1LI92V}dn)OV}>=MiQ533Yvr# z9*D(awGBw|V!7%E25{Jw1j6~7yYZIc{E3|4Yz7JPc5~lu5x+SJ?_)suU}4J4D^vd| zT@L_TS$bpG#>o=bNAqH4tXq$5zpcjb%g(xdF=t?7Qzsq1`~3XqU1Dd6T@M4@7CY5` zEa2{(!aP1VzoMd|9-cPNvjG&94B%2#<*62|%#87@JoDf05^$MD@~zaZ`Ji0UI?Z1i zyDW#gXbp0sN`(oEgFY9J7L=#6`e%rQ2*EpX5YZ^NVF($o;p-sGnwo7bwTV#Fkqf*P z&}lS#@j|6&Wpu08?RYZ>S58FxKw)g5NE*uuu^UtWgAFRIGEBmX%!^y&9whZT$G= zAgtCTodr)eLxi8{I0EX8$6Z%KVJ^){>j;jmSJxR<^MlvdIJfBE2j}jqbDh7<&%YH` z-u2YIkwDsSf;F!k~*3~7{=zqwm!$x2@FO= zTG}63W*r9}GI2I2Lyn7TUDBzs%{3PHYlUC|krl!&?D)j~F45oH9|{MM3wTle+y88o zVqdtH*BYS*B?b5X#ulid0|1ZcwA(A&`JJg?HLtukrQ?VrI@9m$3&02{JOWNB6y}>$5_)s8?!SQft8SNrX!x6VbcVfE)Z_Y7uy`Y- zzXU);_ByiK@1r*C{^kJk;aE2h53G>>#3gSwa2Xz-7y16VzaS6^?)+~gfR2KjlXf^Q zw*C9&4#b-X)%?UA>yG%R|5-SCuy8(a_4)t#Vh9y{UIa;pek|8t*8qpwMh!m9F=>&1 z@2_8rs#7ko>JKFH~k0N$z#Ow>dz8|mn?_1}W2FQ%Z7tV#zzps#b zupMNx-6fK~wKqRk`Nx0TaD6n()c<1rl+P}HU_Exw=SZ1l!Ieav|wT?4Y`D& z5-L;vK9Zgh$rsRu)S4^ZPIu1@oQ{cXl(W(K4^JqJa1Z#*! zGa(#zcYS4Mg3~N1r+hAmE`z^d{X)~)sC?EW0;y?e_|_6ENs1&*XUsRfZ5~p0d~$Tu zpFy2;a5ye?bts99j_w9VCeODg#HUf(0J-&z!xndLvspq2nOA0JR@T(y7v|tUTi^XQ znDqz*kjEG%o@$mt#P+sA%7%nTDZnw+3bg119JgWMNY_XXwgp)cm<;KisvvrwmL?_@ zPRamaozen~8#nw3H?kgRKN2y26B1(2w-zfqlp(E^t#Z*H*@;mmJ!=IZh}I118LR8&0FbRlPc&aV1rtFF`g z%+{VVz@MfP^C}n6T_+@9I^4^{cRPZ+YHA+@iR-60R(`|;)<@VfM zLLtkJvu?%KX*2Dr=yjfTb{!^FEo1e{YV6X3DRFSWNM*vHGVei458Sy-c=wJb4u*O# z@KLT#&ppGH`IX|Ksz|QKJ#UVV?s4hJMFYTUT0(9is;j}nEwAL^TUR?4$?;}O@BNn@ zvFNv&S_;*5LxVz3PBz}?MDsHp|)=+Q6m&3sTwwwpC1 zJE$WgBR6&G+wxvRn0$N~g&pzhtUk4QQ7@fQ2CxgJQ|M38P}bV{S3$+K78a=!F=@cG zZp!n^^Wz$4<|AIaHJ)Ih79x^&-6t3JY0)1|aqJcPJ| z904egzkB~$J&-uy5NM+4o~T- zeh;!4%ie;r=+@V2r*6(PegD5lZatV?SonC!f#-eq>V5wpl3blvN7Q_6r!wIQ6755} z!Zr+s7rwW1zV36sZevP#W6IY1`;fN(ps5Y>DCxDaL7aDOki~IF*s5d6?iFei5jy7K zK7#LEc@K~J!#XFwl4d?I+Pkl-lJzTMW8C)sy4LLbiT^hI$)ZO5yLTii#-SM8{xOoM zAoi;aVPzxxnS=5(9YgQ&ul&}6)bg?EnO{Q35+*i1tD_$dMZ_7k_jvdN6D&W{wv{_{ z#Y#k|$_4{!;cMXAJtIlCRvLwV=Y{sX;Rc-O5tw3ftN>UjA82{=6-INkyEQpV;qz&j>yoBzU*B7TlJN2WU6D3@@YZfBTN`K#Igf|hmQ%ljasK3748>vOIiBJnvj@9&cb^re2LK*TBChpf3r7=xu z5`ilK1|IQG26I82wktB>cd~PG-gJ_AJxQruc`I)?m@4M#^*LSg5U?`KYmF9~d^jC8 zA9W85SUF*!04PurGz^LqV%f#OFz6x&I_96H6TOF3d~@>iBepUBf37MW_5e-x((to& z0WAgSaeu1G0;kIZMnjOU`G+4Q@_uG8Yy=H)TRMjGtM1Mm;xI#4>i`t?}ul8t!lq9p*BJIQ-4x}1~Ky=RqgLLWXYZ9(9C`HW<|Z z6YV4bAZ%FOc|YgVr%$EklbqiGnf>{O@z ztz$O;zYHge^(rGjiT~MYc)%y)*XJyERPWS(bwaoiU1b>G$!-XJD9H74A4= zgM-=l#876_*)roWfH?S-!zx?PuX(w-V-7NMa&J8^&$F*&_T3)PV*{r`8E|SH86Dj^ z`LenizwN3G^+&$^>FHTZ(4FiJ;?E|?X-$QV1fgjj0KZ*Ln9;kxTU1DR8qH81^HRmYuS!8G}d*y0OuwFG^DjbQ9VNUm``+N z;zW(Oi<_Ht!m(-znfAKcBwb;@Xx2-M1KXi#w( zFQ?yoE9DbdIV-iHPc(!xCXSP?PZftfOfwo6~^uNcuJma0?#5!vdAAAzqi zCvummxn)9{pfh|c8c@g6dDZ=(5^a+H>q0Z_CpevEd;v$Pu1eM;{GcH82?q!Co`dFQ zgfQfZDyBN3o=zb+I;i<)GU)LRZYj{Av;T;Xmrh1*qS`67H~9OFN%w*4=)tF}EWgLs z`RSzL{&-fB1BYUMLBa5{5eQ$_#(vot8yhb;4}1PDZESFb&dtoE z>pZTY6O?8@i)MYA`%V{7x)iadpI~yh4I~TYqF?r9Ax-g${jNMA3NoFrAbf zb8`<`3=_ABh-we{eIa$&_?#<5Md~3jQ2jPVU%InwmDcz9`43$TK1fq1A_+DJVv^;P z%EXuR*viS-c0rLC4ZnQB97~=+MV);lQ^l+;X?_nk{kZGRw@rsh)5o4!o=>?9p$L81 zR`Y_Fq5-mZ{9>Ey#r`BK9}^08>t|k%qjq~1QzZk%6gd!bitp!mXR*1fC{y1BL{P|T-oNplK`_awA#izF)7y(_&3s6zK@;?*(0Af4my^bICBA3k9X5cjWDTiyJVl)AC*q*gb;IL3Z=OTBJA@G@Ra}s zkutl$+gSWbe|_@o)-C)ZQ>ldJWy0tfyonaMF_fEr4-SmR?B+;i7Naa~m3##LJCwf2 z=tCtnpKSgEKEdBIp9cbAiI}xVQo?H5XXgONB&EZOS&7Ixg+b(8=_rHN&&gL+%8i}hi)EBI$ z&`+qI9&76|=!@m(AIJz7&aF=YFE0Za=2Jqm|Xb-i9pEaj|K9t7Q`FLZl^Q)+SRiKQOJJ)GeR_nCq zNXjD+0SJI+usrqhP0ov&1b} zuqYIIgJRzE!XgLA?2iMfS`8qq&j6-f#y8k%w>iH!Tsgv=$hK<8*|yy{^Y!Nk2Nw=} z`TuGylD|dDxB3W<7=}v4=6_$02CVLkc4Jd;NCE0>FohO=(MvG9kb&5d0>+y-%_rDh zfP;!dHJJHWCNrhEcw~&8^&o*31pCq81M{hJS>S|YUcswWc+)wBhAz?iW!=SYE&mQ^ zAsfTwc#_7yO^e0BVw~a$81?G{UFfN&FQL>LNL|BU#zTIRu9+P`?bHdf3>M z4A?g(`+db9Yi%KXb`N%+5FVfEC)*q|%C+KGF!C}fv*1A+HbVF&7@U>iF>CQdwFTV8 zULa^NS{Mf{68XL_0V}O;__mS=ILd&!47VJsaHWT-2xo;TznO^`@l$*};SR+WFcv~i zxH0^@IEoN`1cex-b!KO?GhyK(IA?(AJF=sM)3#UGFv`&fnDQJF2C*0LQ(Q3?xrh@! z0d-^-a1|B% z)kCo2l9O3eJkN8EwkL0byo0;?DG|_~0Cmxve$oj`!wGpQP2{3m$&=C<`!=!-h7}#?KDKTc zzH~6Otlif^t z=_T~3t-@Nx{Vb+!ATBuEFEycC{LClOen@sAw7S{Ad8XP1L22I459!iq9|R)?FbV2Z zKSrR(X2S-iz06)#4ozW;;w#r3+(KW?~8K5 zzb!atP&u%QxV-2cS!q?gV^ppMdSfq#5CSgxBaCIqZ$bc7bGD4DhE`LPfY?e}Eafa0 zLFfl84>Ta|v&*25A>YD>Zqq3IMPz&$4YzFIG+DUwsC9va&%N5X1cl-}M9ka2id|53 zhdb!C)JhxWE|XgRUiyOgXwob0=d@FDm5Ez7$E&-)v=V(6w zirD}`#8JR+vmP4`t7H4Pa+{=*>h9fPH8y)M3%4&xPUS(Nvgppww3BkuEBdddaL~V? zpc7_FcsGEM0w@WW50q{qsTOr~_%ad?aL)1ozH)98)_`eT+{WfkgdmucP`-@j1_PtI za!;T7f>T+?e|(!k27o09_=n^Dd2wObfD^*l*#u5$z1{0CcSX)Whp&K!=V35ha(9Qo zq}39XPILnORGA*4>RpTjx!ecC0E$KLv6u8El1cPg48+`G1?;G@0_z6p`=J=}`|IJ{ zcR3PEFy1|GlM>3P=>Oa?sO@1rFVW=*)P@}BRq8acvOTUoE?3!&Y0_QPXBO{6e2Om@ z15>hj7>3s4c4F|c!PyE)4xENkGh@Sk)q_785HG0#0l>E|vRk&vzX_0|na#%X-@H>2 z)`Thk#MsR>kdMp*As#j|_kEueVNwy#I(Lv5)Dcv(s^k%bg#lZlo?Zag&Pn$kR$RVL zy%tcJyEX~e^5dkZrytZ~F6Ig-CX|n6=FnXYAhH}J{V}h3LhO*tTjx6nfi5n z0mhO1k9_5&0vn%skoj$i<{Rge_zkkdrdSUZlNK00_QF`y-LTXX-t0@PcQ+q-t?O&u z*M74qM->;BkA*yS@irv8F)%CIvEHPMxgHK?FcGi2aU3=WG9!ySWq>0nu*U~U_Q#|X z-gp8k2<(6kuQY=OhEU3ZFa3rrrtys#M{5!CzF<_3Ly&x4?8*eN3#{8&IXL$AtTLS= zoZdRe4weohxGNPHW8;P0vXTTSEwJhW$*%E+ZDYp6wPbM;Pml=BicH$r20nd)acxi- zi90{n?C#&c22)@Rz>sVxjUVRkHygu>F7W+ENpp$R9nUQp5z`U+%L@)G6^$aX>*jr0 zq?X_XC*mM*(-Q5ib4B_QDWo#CNdQ>5;;-xal2W9+7>JBo{eyOxS_Tj;r)ct`pX}>j zcoHVkjO2FQU4p7nL|W3D5lwY2Uy+um+fqgS%!8gmv1ZW`81$(m7Pj*#Rv@=X%hA!% z6`PMgh+O7~I$J%q=`J_{Kg+sVN+<+UG*ogS^WesHegGzYJAUTnBs#-E3Ff!ZbYa!V zogjCgSgg{LSSo!sZS*>*0YRD$`C02iJ-W(q-`#530xYKR%qG}RB zI6*<9qoZT3Fz{k?kS54&*Q_2fs7b1?9@Ga(PaYT*)g8Vj&zA=}iBJ8^j}YrlFo}7e zz3l<^h_t|i(%!Rb*O{raSXA%?loDU~zXyHX-SfJxg~25H;^nc+>t4>g+85Yp4#J>j zd0B-qNDArPpF1_$Jw+TMzzA|fr%i_KdHL}>LdSMR7l(R;ha za!yDQ#QssAYbGJ+#x*EN_$AgC1Y6b@d{Gg}q7uz^A+p(BK};BcB3g`8gW?ANR~_*KTREdseo{B*MVSRS ztx)#ld zc?NGYihq75o#DPYa~J9XQ5w?~7|b#q&}AOM4_fpTy(Y71!{T=V-I%K|1D~6PW46{Q zNp}5wTF?$d6#c%8x!8r~%o|893iqpt1baPZt@ii1ar-VU3!5E5H+5>7%)@s+D^BC( zAZEC;dnaXfEH519%vR7m##jgF&Xs3lU=f*VQLxpK_@E|}3b}RxEUk!6TfwzVvI{rX zVW>IrYdH&Bk@BfssB0ei{P2qkYg4Om%1YS~NeZX!35y2XACONHrD*uJ;^K1q-!L)t zLW(z*_xBHmubrv9l?kLKDk@3PW+_HQrEifAKpV(;#UI^6##HrV^=3y)`Bna6kM zs4_G2zMI>U_*Qx(Bo2-P1Fcbe3sXrCvc2yLn^3Dzrx#ax2G4I0^l`_cq?4(rZioTS zpjpIOaT$>VQ>SX5^u!o?pf|>O`PBC-gu`ba6S4~LD=paO#_nf)Z}V9TE&19}vXGlS zJ(hEwc!)n3!hi7w&s_L?ohrujGb;bL0iY$CCgi^O;1chbYe^m^W4qm*$zX*D7iAxPL2(5@9HaWwa!DOF7*;nhpO$j3u z&)A-=RSy*R!K*!Z8OU?5#m1Y!lg#L4Yb0U`{-Q?6_{U>U-!6-~x;MhH7qctjEV~Sl z!K{>~n~em;eqZ?RJAEC4!+q$F$4kpV?ww$^U?Jpn8V5MUT%_mjBT4C59ub7cLKx_saOpJW^E?OoZ# z+oJe4A>O-dtO_4fPETh2(7e}I8T^pzWc8YZy7zY-@!H>@;AZ=#h882M0hRjUgQ7*3 zP+RiCR^MqqNm0+{cvK#}LU{#+k>n0&sYT1809{cOK4;FRY~<5T%C@mGgNhZWCGtIkQ&i!pq@XZp<*X5|c?$g0t$@#kMA*E*;g6=fs4Ns<4umcreKBS?QYId?7bVvLy> zRSZ3S9-KKo)LVp}84XE1@#V$zAqW^Ggl=L{A{@9ast}@X&DK_xX;AI+VfvYLZZ5vY zpL5g#O?%efG)eib{8~kc=S2NYb?>xL+68$K2T>qF{3QHjo5UR;EP8cu zSYZ?o!F!?xi3xgVafc7_g=*>x=pj5uE=9aPCt69Ufc}`UFJyyN+)Zodb|N0@lkDE( zM@9e*_|Qth7vPVNHB3-4E<~U&Hf^zv#@zL)7$3m-X`R+QY1yjOdrsfSN+Rg>XSG`| z&dg%s76<`Tt}*l6UAH2ZsxB9>Ke`v15fN)T;>AEby;B7Ixw4^+LEsjQuJOvF>VBDo7dlz`QEDtDycS0 z3yWh$d&kNd(ITFfS)k~OP*0t0A5>;edt1=owMpDF$T&n2*&~iC{|2sQIbn+!IZi-r zob9~J7ZMWIR##HW6QJEu5GY=QNkN26;dZdp&gw#?Bd{b4yIJf*BY-~cyzWF2Gj6|> zncp+QdZ4r;;R^;CCwFz4Y_M(Hzmr<`#ZXXpWvfsDObUPAFWy_Gw2^R-!^dl3qpdwy)W^jy;e!4AxQENVP8&YyH_$@Ui-g8^p}u zRj0DSXM0gEA|(w(kLQke#yEO>3m2>`k7C=hGz0FL~KmBhknP&ZRv+=YlT z1<^PuSD|wK3zeL2oH-zF36gDvBet#G07SJ+SW&#K1Yu{phat z-;}jyFmjrOK?(C~qcyf@ZQ+FCZlC zftrm9raI&fbetd0C1$LEsf0jWj9IkyrNH5=2g8AY_PMtud3#op@6?R{eAc-bcsuI` zCa#+ZHxwd{gFynF;0%}o@0!@xM#>wM!wF90TT!hOkxmPwm3Z;0nCxL4nLN2hUwo%V=4{t77Ik9dTg zWNZuUR#QEZyy(MQP_3cZqA1XFd$*JBMNxa6w83vpESE&}j1?+QuXyo z`=A~(OT$Vofhg$-N0c?J zYcl@sq*0?rMm?r4YNi!)?;-6Wx~XG8a!ed-D6mwp{n74A7ns&d{N%Zr^C9VCrX&Wg zWBP0)=fE-873RDecqr9hT6J4Rc?#q>z#EiuOBaV$v_c!;gTL#2?*9J$yZ4o&*tR4D z!#RSMjxO+hJnW3K3hV&NPWmdY6k8w0_TZrDMn^`jD^tY9#gQ-~r}4R-Y!g5wRGUD5 zIFiRa{$z=}ld{4e3W5^%+yZs$o9HPKAz_q8y;^(gd~W?zSt;i+?|Z-^eEmr`qcsRd zd%Q(LnA}||y47t@4W);FA1ntNu8PS~QOyUAsSA{mVd9Q{O&JVOnWZDWEe+~KoxM7_g-pmBcDh-D} zkqyLcezZkJL|03(oDy%s;wJtfuO{)Y3aezJ2q3uiGdLKiVu*E+dNPA`2Aq zEoU(S-@j*~#GgVlu~%M&6qARGE5~z!_2N`r=K8As`AXL!>9GITXMoDE8yFpJL;!l2 zVA8c!llbdT(mV{-@=1kkPgm)hxr1JAX0dgqq0tnPTuwp317OWeE8w)NvYeT0+Q-YE zecq|H1b7@@?EmO;R92aTEvk_{-#Zvl7PL)Y;6 zb7bmuZU60;FIz-kAI2jaj2#}{+&LPova+I~J-wsQH1XV8e*!>4q&!vS#19R|1i|ok zX`b^_jNMkiYRR*ym2q_qFf`2k>SSt$S*XkkxRxjh1U=P=sTcMZ(*kJs)ffaRw zFXVA>Fi+l>cv_z|zGtFd-Jd?8z99G<8Rwxytukb~;}P{XpDcvjuywf0QeJIU0;j`Q zv)t8SInX+_REv<1=r|mTiO!Ha_iJ4MH;^5-Nn0AIq|34AKcak^h1*l}kVs$%1ldO{ zvEs^#a&qO51tmSOPH0$IB*UZjjWnn`$f3KR9qT@g*Sl4D`?==@g*xKkIx2PnVu$02 zge_->-bp}fb2R~`L9DW<37<5{Am;_MW<8frgLgKD(gza~foW+!n%|VJ``A8_k<>!M zKCR3h%#Qpd_!!pw?HZ_7TvGagkFM7_=6Pp4Ozj&z;@r4uR>-(c2OpniuJ6uiUC#hn zt`1k%qhuOT&%7(Jx<~dntSd*3MxTcfi)c<7^a-$X5Yc|U71r3^&t7+H-MV6A#E=2e z8dqg_*v+qYJ-grQXq_rky(n3$t9@)2p0BMpN0m+nh-r`pr+RHy07|?jsGX?N45lLL=4~NSYQ#!V4gI)%4@Z~`WYe=%p7>XTqYl>)Vc z2475DelUE0bXs6BJar2&4`+|h%T-y#t(~1`?T;7slU}w3|NK)m_u#R^zb!OpvCb-T zvz8;}Q*zs~GH=g_ho=>g*!|&`z{1)DO!(vEf<2SP#8NmD*HP}~i{!pv3`qS~aJYni zBoD9YhGanPnx?bPF=!k2Z{uglAD~vw8yj#_lT%Zv{rN2Y=Je>!HOw?L96K}>36{QEoGFyH|NNx-8$ z{(pXZbFySuJ)hyPTq%lkdqF&0Wr899_TRsap#o{O*MWiPFEShTGdl3KCUh3jlE3(5 zu&JgZSiNHQK`_temlnW4+3fF~2!5cTYw{yDm zDUk}xncUoRKr0^b?%eHOy8ZW+&0TufuQl zCG2H>f$(IVBdeB;GAhs;$i^}OK4Z;yfbSj;rVziWDOUb3ltXBI05vVA$ZCY_yKYQU z5(B_v(wJYmw8QASHe-wCtUs1UG#}eU6@7gz11m{zKC5tVjq18T`BcR&nbJpt8eBMV zd`SP$&&A~+*H)^!rGsVV-PY+iC$ zv-G;IuivP5YdI3^F5Vqy?w_P&ay8U5Xq>}4ewVqJpwRCEZo+CMWpmUE{xIMMAt3Pb zb`zq|{q4v|!;Q(i+Ncw#o<(}U$k{<$2(kH}y4EQGSL~stCQWRczX1lV^$Ti%9Vnin z$cJqFeo#Rpv|{1Zg1%s2f{jAuOok%pGZQkFa&sd~`h{z0e0A}BlF!p4ov#*)5i6W&EP zlKgLVn#7y1OsStX#*GXPcD0kSm{)J5h<2ukUw-+7Lk+D!QY+G-V^S}S;xM>r`2DPe zBInENJ9&nm;?Xz5tzY*gx>VZl?F!irbds^X6>>Z2ji5kW@xu=Ls(mF*#u8cYCO`eY zRbj1IPr`70u-VimwcPQ`Eau4ASkGIUl-@9s+DGQOh%YAx>gtj?ZI)EvUnM*5YnA9% zfMbZfoSb8x^2gcd`wQ@!ca_8VO%-a#^#SV>{kTT?of}u3CmFweszQQe{`l9mwzW^% z&o_pOz;v-7Xj^RnR=bj`F3mc1cQ}hWC8EfX)qq|_ zn$B|~e~*jlvZ>iGyHQPCU`;=#Wpch>A6CeW?M+F=!{_YWE{hwu;EJ5J-Y`OF_LojH9{X5IA z2?j8fGY4WKSAB-`z&%sU@p)-^)U3T#oei3|o!e z+HLVq>8W$syV+)v2fSt;qk*Fj=38KiXj@cNExzu$nd8NTRoCYF5lEX$dJPPa(E?}3 z9NbR|FYhpoW&0DG_Ng~cO9aLv+%Cl=&K|l{*Wi^yn*>vVWAhZ-+65VxA;MEtMUP(9 zXGChub;iHPJ&0z#d??~hYS#z)1&;2M#d;aHBULN9wsPv0^gBIXUVO$s{|D<0mXWzSbrQDFcY^pTMB^l!efG67;w6XE*7?xvowMZF*mX+7m>BhS*~+o8=+=$eywQ5I=X=Q>=gESH zT?oxw$+xiKVhvwf&(+sv5GyDwID^J^x#*7PELg)EmnQekpP*1oC!|>vD?3Axmwa{# zNY{7|y(8+MH6z@dM7~*73Co9-OS_!@i&hL*Rx*l;o17N<60jHv{*mJ&SbuN5>+jM4 zS<}i2wL(Zv30O`*)mB0vp@b`nmuIV2zWO%sAqwS-G(z)>Chsd&7qLgK8}G-DN% z-u1NKj&E-dtuFix+bzXcp!tVTf==3vhU=c&mWRZ*S9f@lK^{a7k z!*C!;QBhHHf;03$f?u6AC~+!#o^*mcuDGljgc*~}Ssm%b2#9pIG)Q-c z(xQMOAcBC>NaxTVbN3_IWr}r1;JcziCt`&@f$(4&7FkLdY_$pV_S;eV1FIk+^c*&V z1+kMg_(RX5-m|i^6ToFB2EYgjCsJYinU}GPN{T_**%nMH5;^;UJGSFbFcL7PK{rD> zaw2#BH46<3h&YChxF0T=qYxYcYKk_3?0;`^QhThsZqHpn!m(AC81x1kNIi0%rRLTx zhr@Gap;MY@bEh$}G$7Rm?Uh`Y5J;3=noTYhxjjDPsa-!*8U5Hk{QZS~~n zAXki2@g_22B1gx{%n011@ zdg6DZvToiIPVk;hjoI25$Aq?3a3v*WdiVpzBJIN~$M_qd59C|v;Zt@^la>z#5@^=` zgL|ANnwsOR8Q1F7do}x3PThAyayaUw=uPGwTL?Y{QOodpczx+To4<`9?WW86;>)8< zQ$;}`ek=^}XMDV}eQk8h8|3<`bXhsM_A|AuU&&hr+? zO)i?Pq7X%JK1{kO=4=L0>5&dG|GLY#RfjC*=1+?T=y_UsXJ`cL817|J#gTF^wmd@{9+2NAwf9Y|r79AcHyRtJRw zUwEb*%Et}mYNyc*Dl`bEKVqa6OI$6wmrJ5QBJRnruuv+wdE>E^X5ueBA#ygux000* zqt=yy0n9xw<_R`pKYr9nGJ{?_Ni@M=r%jkKmjotE zQrrtOm;2lU>kG&>dlDh@JYn9X#MnHoPk{t?^?RM?#Y1jRPQITaW&Fm{*w`@#9@m0W zXM*d*#I@VWyAtP3?mq3R;g;gIz@eTKVTTskvK>TQT%Lt#r)P*M2y4nn% zz0GMFBMGa;cIqt{;&~-3xoj!%%kV8@c`QJ&QD;M;jNphDX@_3Ltyf z_b9*JBpO25ml z!9r*VWE-FE}O-);94TN=yA*qSXR1H4W~J!?V~xITDl#bK)khX0`8`J9f=j;uSNK_#*;=sY*$4@E0k zV8T7)F!5~)COs2Db1+S=qY$voJ@pVYSY4X|GLRvZbEgia_olI_*7%~8Pz)!B^_3M5 zyeGjIE%}Ef+zlQYl9865d`~wo&M-@c6Pkj_)(jk!t(2L(@Hedbs>0<{tZ1YH@>p zVA(-k*!lxzNihmisle*+1*aKPJ1z$kts=RZZQyg)CD;_2hUgQ?r}l>S_9}S^@(#Yo z0Sknli!(C^(LNrk>W^|{zw*O8a@1MGz7p8mv<0(a5RJJAm9 zl!aGib_YQ}Rkur8R1-jrT*;vx{NXM5R6?JB?2c}y6f?jCgv9bx8w3M~bjSb~a{0GS zUo?eUZVM$`tr}GG;w1||`KGf7&PWe^2=AfJW%0DWYImPePP1)$Gpd8uCese&(<8pB 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 B{n.d(t,{A:()=>s});const s=n.p+"assets/images/component-groq-d3df19923f67805fd483632d537af9f4.png"},68799:(e,t,n)=>{n.d(t,{A:()=>s});const s=n.p+"assets/images/component-watsonx-model-2f388a824b49f1c49287f07bc8738d0f.png"},73630:(e,t,n)=>{n.r(t),n.d(t,{CH:()=>a,assets:()=>o,chCodeConfig:()=>x,contentTitle:()=>c,default:()=>p,frontMatter:()=>h,metadata:()=>s,toc:()=>j});const s=JSON.parse('{"id":"Components/components-models","title":"Models","description":"Model components generate text using large language models.","source":"@site/docs/Components/components-models.md","sourceDirName":"Components","slug":"/components-models","permalink":"/components-models","draft":false,"unlisted":false,"tags":[],"version":"current","frontMatter":{"title":"Models","slug":"/components-models"},"sidebar":"docs","previous":{"title":"Memories","permalink":"/components-memories"},"next":{"title":"Processing","permalink":"/components-processing"}}');var d=n(74848),r=n(28453),i=n(24754),l=n(84443);const h={title:"Models",slug:"/components-models"},c="Model components in Langflow",o={},a={annotations:i.hk,Code:i.Cy},x={staticMediaQuery:"not screen, (max-width: 768px)",lineNumbers:!0,showCopyButton:!0,themeName:"github-dark"},j=[{value:"Use a model component in a flow",id:"use-a-model-component-in-a-flow",level:2},{value:"AI/ML API",id:"aiml-api",level:2},{value:"Inputs",id:"inputs",level:3},{value:"Outputs",id:"outputs",level:3},{value:"Amazon Bedrock",id:"amazon-bedrock",level:2},{value:"Inputs",id:"inputs-1",level:3},{value:"Outputs",id:"outputs-1",level:3},{value:"Anthropic",id:"anthropic",level:2},{value:"Inputs",id:"inputs-2",level:3},{value:"Outputs",id:"outputs-2",level:3},{value:"Azure OpenAI",id:"azure-openai",level:2},{value:"Inputs",id:"inputs-3",level:3},{value:"Outputs",id:"outputs-3",level:3},{value:"Cohere",id:"cohere",level:2},{value:"Inputs",id:"inputs-4",level:3},{value:"Outputs",id:"outputs-4",level:3},{value:"DeepSeek",id:"deepseek",level:2},{value:"Inputs",id:"inputs-5",level:3},{value:"Outputs",id:"outputs-5",level:3},{value:"Google Generative AI",id:"google-generative-ai",level:2},{value:"Inputs",id:"inputs-6",level:3},{value:"Outputs",id:"outputs-6",level:3},{value:"Groq",id:"groq",level:2},{value:"Inputs",id:"inputs-7",level:3},{value:"Outputs",id:"outputs-7",level:3},{value:"Hugging Face API",id:"hugging-face-api",level:2},{value:"Inputs",id:"inputs-8",level:3},{value:"Outputs",id:"outputs-8",level:3},{value:"IBM watsonx.ai",id:"ibm-watsonxai",level:2},{value:"Inputs",id:"inputs-9",level:3},{value:"Outputs",id:"outputs-9",level:3},{value:"Language model",id:"language-model",level:2},{value:"Inputs",id:"inputs-10",level:3},{value:"Outputs",id:"outputs-10",level:3},{value:"LMStudio",id:"lmstudio",level:2},{value:"Inputs",id:"inputs-11",level:3},{value:"Outputs",id:"outputs-11",level:3},{value:"Maritalk",id:"maritalk",level:2},{value:"Inputs",id:"inputs-12",level:3},{value:"Outputs",id:"outputs-12",level:3},{value:"Mistral",id:"mistral",level:2},{value:"Inputs",id:"inputs-13",level:3},{value:"Outputs",id:"outputs-13",level:3},{value:"Novita AI",id:"novita-ai",level:2},{value:"Inputs",id:"inputs-14",level:3},{value:"Outputs",id:"outputs-14",level:3},{value:"NVIDIA",id:"nvidia",level:2},{value:"Inputs",id:"inputs-15",level:3},{value:"Outputs",id:"outputs-15",level:3},{value:"Ollama",id:"ollama",level:2},{value:"Inputs",id:"inputs-16",level:3},{value:"Outputs",id:"outputs-16",level:3},{value:"OpenAI",id:"openai",level:2},{value:"Inputs",id:"inputs-17",level:3},{value:"Outputs",id:"outputs-17",level:3},{value:"OpenRouter",id:"openrouter",level:2},{value:"Inputs",id:"inputs-18",level:3},{value:"Outputs",id:"outputs-18",level:3},{value:"Perplexity",id:"perplexity",level:2},{value:"Inputs",id:"inputs-19",level:3},{value:"Outputs",id:"outputs-19",level:3},{value:"Qianfan",id:"qianfan",level:2},{value:"SambaNova",id:"sambanova",level:2},{value:"Inputs",id:"inputs-20",level:3},{value:"Outputs",id:"outputs-20",level:3},{value:"VertexAI",id:"vertexai",level:2},{value:"Inputs",id:"inputs-21",level:3},{value:"Outputs",id:"outputs-21",level:3},{value:"xAI",id:"xai",level:2},{value:"Inputs",id:"inputs-22",level:3},{value:"Outputs",id:"outputs-22",level:3}];function u(e){const t={a:"a",code:"code",h1:"h1",h2:"h2",h3:"h3",header:"header",img:"img",li:"li",ol:"ol",p:"p",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",...(0,r.R)(),...e.components};return a||m("CH",!1),a.Code||m("CH.Code",!0),(0,d.jsxs)(d.Fragment,{children:[(0,d.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,d.jsx)(t.header,{children:(0,d.jsx)(t.h1,{id:"model-components-in-langflow",children:"Model components in Langflow"})}),"\n",(0,d.jsx)(t.p,{children:"Model components generate text using large language models."}),"\n",(0,d.jsx)(t.p,{children:"Refer to your specific component's documentation for more information on parameters."}),"\n",(0,d.jsx)(t.h2,{id:"use-a-model-component-in-a-flow",children:"Use a model component in a flow"}),"\n",(0,d.jsx)(t.p,{children:"Model components receive inputs and prompts for generating text, and the generated text is sent to an output component."}),"\n",(0,d.jsxs)(t.p,{children:["The model output can also be sent to the ",(0,d.jsx)(t.strong,{children:"Language Model"})," port and on to a ",(0,d.jsx)(t.strong,{children:"Parse Data"})," component, where the output can be parsed into structured ",(0,d.jsx)(t.a,{href:"/concepts-objects",children:"Data"})," objects."]}),"\n",(0,d.jsxs)(t.p,{children:["This example has the OpenAI model in a chatbot flow. For more information, see the ",(0,d.jsx)(t.a,{href:"/starter-projects-basic-prompting",children:"Basic prompting flow"}),"."]}),"\n",(0,d.jsx)(t.p,{children:(0,d.jsx)(t.img,{src:n(90567).A+"",width:"2500",height:"1528"})}),"\n",(0,d.jsx)(t.h2,{id:"aiml-api",children:"AI/ML API"}),"\n",(0,d.jsx)(t.p,{children:"This component creates a ChatOpenAI model instance using the AIML API."}),"\n",(0,d.jsxs)(t.p,{children:["For more information, see ",(0,d.jsx)(t.a,{href:"https://docs.aimlapi.com/",children:"AIML documentation"}),"."]}),"\n",(0,d.jsx)(t.h3,{id:"inputs",children:"Inputs"}),"\n",(0,d.jsxs)(t.table,{children:[(0,d.jsx)(t.thead,{children:(0,d.jsxs)(t.tr,{children:[(0,d.jsx)(t.th,{children:"Name"}),(0,d.jsx)(t.th,{children:"Type"}),(0,d.jsx)(t.th,{children:"Description"})]})}),(0,d.jsxs)(t.tbody,{children:[(0,d.jsxs)(t.tr,{children:[(0,d.jsx)(t.td,{children:"max_tokens"}),(0,d.jsx)(t.td,{children:"Integer"}),(0,d.jsx)(t.td,{children:"The maximum number of tokens to generate. Set to 0 for unlimited tokens. Range: 0-128000."})]}),(0,d.jsxs)(t.tr,{children:[(0,d.jsx)(t.td,{children:"model_kwargs"}),(0,d.jsx)(t.td,{children:"Dictionary"}),(0,d.jsx)(t.td,{children:"Additional keyword arguments for the model."})]}),(0,d.jsxs)(t.tr,{children:[(0,d.jsx)(t.td,{children:"model_name"}),(0,d.jsx)(t.td,{children:"String"}),(0,d.jsxs)(t.td,{children:["The name of the AIML model to use. Options are predefined in ",(0,d.jsx)(t.code,{children:"AIML_CHAT_MODELS"}),"."]})]}),(0,d.jsxs)(t.tr,{children:[(0,d.jsx)(t.td,{children:"aiml_api_base"}),(0,d.jsx)(t.td,{children:"String"}),(0,d.jsxs)(t.td,{children:["The base URL of the AIML API. Defaults to ",(0,d.jsx)(t.code,{children:"https://api.aimlapi.com"}),"."]})]}),(0,d.jsxs)(t.tr,{children:[(0,d.jsx)(t.td,{children:"api_key"}),(0,d.jsx)(t.td,{children:"SecretString"}),(0,d.jsx)(t.td,{children:"The AIML API Key to use for the model."})]}),(0,d.jsxs)(t.tr,{children:[(0,d.jsx)(t.td,{children:"temperature"}),(0,d.jsx)(t.td,{children:"Float"}),(0,d.jsxs)(t.td,{children:["Controls randomness in the output. Default: ",(0,d.jsx)(t.code,{children:"0.1"}),"."]})]}),(0,d.jsxs)(t.tr,{children:[(0,d.jsx)(t.td,{children:"seed"}),(0,d.jsx)(t.td,{children:"Integer"}),(0,d.jsx)(t.td,{children:"Controls reproducibility of the job."})]})]})]}),"\n",(0,d.jsx)(t.h3,{id:"outputs",children:"Outputs"}),"\n",(0,d.jsxs)(t.table,{children:[(0,d.jsx)(t.thead,{children:(0,d.jsxs)(t.tr,{children:[(0,d.jsx)(t.th,{children:"Name"}),(0,d.jsx)(t.th,{children:"Type"}),(0,d.jsx)(t.th,{children:"Description"})]})}),(0,d.jsx)(t.tbody,{children:(0,d.jsxs)(t.tr,{children:[(0,d.jsx)(t.td,{children:"model"}),(0,d.jsx)(t.td,{children:"LanguageModel"}),(0,d.jsx)(t.td,{children:"An instance of ChatOpenAI configured with the specified parameters."})]})})]}),"\n",(0,d.jsx)(t.h2,{id:"amazon-bedrock",children:"Amazon Bedrock"}),"\n",(0,d.jsx)(t.p,{children:"This component generates text using Amazon Bedrock LLMs."}),"\n",(0,d.jsxs)(t.p,{children:["For more information, see ",(0,d.jsx)(t.a,{href:"https://docs.aws.amazon.com/bedrock",children:"Amazon Bedrock documentation"}),"."]}),"\n",(0,d.jsx)(t.h3,{id:"inputs-1",children:"Inputs"}),"\n",(0,d.jsxs)(t.table,{children:[(0,d.jsx)(t.thead,{children:(0,d.jsxs)(t.tr,{children:[(0,d.jsx)(t.th,{children:"Name"}),(0,d.jsx)(t.th,{children:"Type"}),(0,d.jsx)(t.th,{children:"Description"})]})}),(0,d.jsxs)(t.tbody,{children:[(0,d.jsxs)(t.tr,{children:[(0,d.jsx)(t.td,{children:"model_id"}),(0,d.jsx)(t.td,{children:"String"}),(0,d.jsx)(t.td,{children:"The ID of the Amazon Bedrock model to use. Options include various models."})]}),(0,d.jsxs)(t.tr,{children:[(0,d.jsx)(t.td,{children:"aws_access_key"}),(0,d.jsx)(t.td,{children:"SecretString"}),(0,d.jsx)(t.td,{children:"AWS Access Key for authentication."})]}),(0,d.jsxs)(t.tr,{children:[(0,d.jsx)(t.td,{children:"aws_secret_key"}),(0,d.jsx)(t.td,{children:"SecretString"}),(0,d.jsx)(t.td,{children:"AWS Secret Key for authentication."})]}),(0,d.jsxs)(t.tr,{children:[(0,d.jsx)(t.td,{children:"credentials_profile_name"}),(0,d.jsx)(t.td,{children:"String"}),(0,d.jsx)(t.td,{children:"Name of the AWS credentials profile to use (advanced)."})]}),(0,d.jsxs)(t.tr,{children:[(0,d.jsx)(t.td,{children:"region_name"}),(0,d.jsx)(t.td,{children:"String"}),(0,d.jsxs)(t.td,{children:["AWS region name. Default: ",(0,d.jsx)(t.code,{children:"us-east-1"}),"."]})]}),(0,d.jsxs)(t.tr,{children:[(0,d.jsx)(t.td,{children:"model_kwargs"}),(0,d.jsx)(t.td,{children:"Dictionary"}),(0,d.jsx)(t.td,{children:"Additional keyword arguments for the model (advanced)."})]}),(0,d.jsxs)(t.tr,{children:[(0,d.jsx)(t.td,{children:"endpoint_url"}),(0,d.jsx)(t.td,{children:"String"}),(0,d.jsx)(t.td,{children:"Custom endpoint URL for the Bedrock service (advanced)."})]})]})]}),"\n",(0,d.jsx)(t.h3,{id:"outputs-1",children:"Outputs"}),"\n",(0,d.jsxs)(t.table,{children:[(0,d.jsx)(t.thead,{children:(0,d.jsxs)(t.tr,{children:[(0,d.jsx)(t.th,{children:"Name"}),(0,d.jsx)(t.th,{children:"Type"}),(0,d.jsx)(t.th,{children:"Description"})]})}),(0,d.jsx)(t.tbody,{children:(0,d.jsxs)(t.tr,{children:[(0,d.jsx)(t.td,{children:"model"}),(0,d.jsx)(t.td,{children:"LanguageModel"}),(0,d.jsx)(t.td,{children:"An instance of ChatBedrock configured with the specified parameters."})]})})]}),"\n",(0,d.jsx)(t.h2,{id:"anthropic",children:"Anthropic"}),"\n",(0,d.jsx)(t.p,{children:"This component allows the generation of text using Anthropic Chat and Language models."}),"\n",(0,d.jsxs)(t.p,{children:["For more information, see the ",(0,d.jsx)(t.a,{href:"https://docs.anthropic.com/en/docs/welcome",children:"Anthropic documentation"}),"."]}),"\n",(0,d.jsx)(t.h3,{id:"inputs-2",children:"Inputs"}),"\n",(0,d.jsxs)(t.table,{children:[(0,d.jsx)(t.thead,{children:(0,d.jsxs)(t.tr,{children:[(0,d.jsx)(t.th,{children:"Name"}),(0,d.jsx)(t.th,{children:"Type"}),(0,d.jsx)(t.th,{children:"Description"})]})}),(0,d.jsxs)(t.tbody,{children:[(0,d.jsxs)(t.tr,{children:[(0,d.jsx)(t.td,{children:"max_tokens"}),(0,d.jsx)(t.td,{children:"Integer"}),(0,d.jsxs)(t.td,{children:["The maximum number of tokens to generate. Set to 0 for unlimited tokens. Default: ",(0,d.jsx)(t.code,{children:"4096"}),"."]})]}),(0,d.jsxs)(t.tr,{children:[(0,d.jsx)(t.td,{children:"model"}),(0,d.jsx)(t.td,{children:"String"}),(0,d.jsx)(t.td,{children:"The name of the Anthropic model to use. Options include various Claude 3 models."})]}),(0,d.jsxs)(t.tr,{children:[(0,d.jsx)(t.td,{children:"anthropic_api_key"}),(0,d.jsx)(t.td,{children:"SecretString"}),(0,d.jsx)(t.td,{children:"Your Anthropic API key for authentication."})]}),(0,d.jsxs)(t.tr,{children:[(0,d.jsx)(t.td,{children:"temperature"}),(0,d.jsx)(t.td,{children:"Float"}),(0,d.jsxs)(t.td,{children:["Controls randomness in the output. Default: ",(0,d.jsx)(t.code,{children:"0.1"}),"."]})]}),(0,d.jsxs)(t.tr,{children:[(0,d.jsx)(t.td,{children:"anthropic_api_url"}),(0,d.jsx)(t.td,{children:"String"}),(0,d.jsxs)(t.td,{children:["Endpoint of the Anthropic API. Defaults to ",(0,d.jsx)(t.code,{children:"https://api.anthropic.com"})," if not specified (advanced)."]})]}),(0,d.jsxs)(t.tr,{children:[(0,d.jsx)(t.td,{children:"prefill"}),(0,d.jsx)(t.td,{children:"String"}),(0,d.jsx)(t.td,{children:"Prefill text to guide the model's response (advanced)."})]})]})]}),"\n",(0,d.jsx)(t.h3,{id:"outputs-2",children:"Outputs"}),"\n",(0,d.jsxs)(t.table,{children:[(0,d.jsx)(t.thead,{children:(0,d.jsxs)(t.tr,{children:[(0,d.jsx)(t.th,{children:"Name"}),(0,d.jsx)(t.th,{children:"Type"}),(0,d.jsx)(t.th,{children:"Description"})]})}),(0,d.jsx)(t.tbody,{children:(0,d.jsxs)(t.tr,{children:[(0,d.jsx)(t.td,{children:"model"}),(0,d.jsx)(t.td,{children:"LanguageModel"}),(0,d.jsx)(t.td,{children:"An instance of ChatAnthropic configured with the specified parameters."})]})})]}),"\n",(0,d.jsx)(t.h2,{id:"azure-openai",children:"Azure OpenAI"}),"\n",(0,d.jsx)(t.p,{children:"This component generates text using Azure OpenAI LLM."}),"\n",(0,d.jsxs)(t.p,{children:["For more information, see the ",(0,d.jsx)(t.a,{href:"https://learn.microsoft.com/en-us/azure/ai-services/openai/",children:"Azure OpenAI documentation"}),"."]}),"\n",(0,d.jsx)(t.h3,{id:"inputs-3",children:"Inputs"}),"\n",(0,d.jsxs)(t.table,{children:[(0,d.jsx)(t.thead,{children:(0,d.jsxs)(t.tr,{children:[(0,d.jsx)(t.th,{children:"Name"}),(0,d.jsx)(t.th,{children:"Display Name"}),(0,d.jsx)(t.th,{children:"Info"})]})}),(0,d.jsxs)(t.tbody,{children:[(0,d.jsxs)(t.tr,{children:[(0,d.jsx)(t.td,{children:"Model Name"}),(0,d.jsx)(t.td,{children:"Model Name"}),(0,d.jsx)(t.td,{children:"Specifies the name of the Azure OpenAI model to be used for text generation."})]}),(0,d.jsxs)(t.tr,{children:[(0,d.jsx)(t.td,{children:"Azure Endpoint"}),(0,d.jsx)(t.td,{children:"Azure Endpoint"}),(0,d.jsx)(t.td,{children:"Your Azure endpoint, including the resource."})]}),(0,d.jsxs)(t.tr,{children:[(0,d.jsx)(t.td,{children:"Deployment Name"}),(0,d.jsx)(t.td,{children:"Deployment Name"}),(0,d.jsx)(t.td,{children:"Specifies the name of the deployment."})]}),(0,d.jsxs)(t.tr,{children:[(0,d.jsx)(t.td,{children:"API Version"}),(0,d.jsx)(t.td,{children:"API Version"}),(0,d.jsx)(t.td,{children:"Specifies the version of the Azure OpenAI API to be used."})]}),(0,d.jsxs)(t.tr,{children:[(0,d.jsx)(t.td,{children:"API Key"}),(0,d.jsx)(t.td,{children:"API Key"}),(0,d.jsx)(t.td,{children:"Your Azure OpenAI API key."})]}),(0,d.jsxs)(t.tr,{children:[(0,d.jsx)(t.td,{children:"Temperature"}),(0,d.jsx)(t.td,{children:"Temperature"}),(0,d.jsxs)(t.td,{children:["Specifies the sampling temperature. Defaults to ",(0,d.jsx)(t.code,{children:"0.7"}),"."]})]}),(0,d.jsxs)(t.tr,{children:[(0,d.jsx)(t.td,{children:"Max Tokens"}),(0,d.jsx)(t.td,{children:"Max Tokens"}),(0,d.jsxs)(t.td,{children:["Specifies the maximum number of tokens to generate. Defaults to ",(0,d.jsx)(t.code,{children:"1000"}),"."]})]}),(0,d.jsxs)(t.tr,{children:[(0,d.jsx)(t.td,{children:"Input Value"}),(0,d.jsx)(t.td,{children:"Input Value"}),(0,d.jsx)(t.td,{children:"Specifies the input text for text generation."})]}),(0,d.jsxs)(t.tr,{children:[(0,d.jsx)(t.td,{children:"Stream"}),(0,d.jsx)(t.td,{children:"Stream"}),(0,d.jsxs)(t.td,{children:["Specifies whether to stream the response from the model. Defaults to ",(0,d.jsx)(t.code,{children:"False"}),"."]})]})]})]}),"\n",(0,d.jsx)(t.h3,{id:"outputs-3",children:"Outputs"}),"\n",(0,d.jsxs)(t.table,{children:[(0,d.jsx)(t.thead,{children:(0,d.jsxs)(t.tr,{children:[(0,d.jsx)(t.th,{children:"Name"}),(0,d.jsx)(t.th,{children:"Type"}),(0,d.jsx)(t.th,{children:"Description"})]})}),(0,d.jsx)(t.tbody,{children:(0,d.jsxs)(t.tr,{children:[(0,d.jsx)(t.td,{children:"model"}),(0,d.jsx)(t.td,{children:"LanguageModel"}),(0,d.jsx)(t.td,{children:"An instance of AzureOpenAI configured with the specified parameters."})]})})]}),"\n",(0,d.jsx)(t.h2,{id:"cohere",children:"Cohere"}),"\n",(0,d.jsx)(t.p,{children:"This component generates text using Cohere's language models."}),"\n",(0,d.jsxs)(t.p,{children:["For more information, see the ",(0,d.jsx)(t.a,{href:"https://cohere.ai/",children:"Cohere documentation"}),"."]}),"\n",(0,d.jsx)(t.h3,{id:"inputs-4",children:"Inputs"}),"\n",(0,d.jsxs)(t.table,{children:[(0,d.jsx)(t.thead,{children:(0,d.jsxs)(t.tr,{children:[(0,d.jsx)(t.th,{children:"Name"}),(0,d.jsx)(t.th,{children:"Display Name"}),(0,d.jsx)(t.th,{children:"Info"})]})}),(0,d.jsxs)(t.tbody,{children:[(0,d.jsxs)(t.tr,{children:[(0,d.jsx)(t.td,{children:"Cohere API Key"}),(0,d.jsx)(t.td,{children:"Cohere API Key"}),(0,d.jsx)(t.td,{children:"Your Cohere API key."})]}),(0,d.jsxs)(t.tr,{children:[(0,d.jsx)(t.td,{children:"Max Tokens"}),(0,d.jsx)(t.td,{children:"Max Tokens"}),(0,d.jsxs)(t.td,{children:["Specifies the maximum number of tokens to generate. Defaults to ",(0,d.jsx)(t.code,{children:"256"}),"."]})]}),(0,d.jsxs)(t.tr,{children:[(0,d.jsx)(t.td,{children:"Temperature"}),(0,d.jsx)(t.td,{children:"Temperature"}),(0,d.jsxs)(t.td,{children:["Specifies the sampling temperature. Defaults to ",(0,d.jsx)(t.code,{children:"0.75"}),"."]})]}),(0,d.jsxs)(t.tr,{children:[(0,d.jsx)(t.td,{children:"Input Value"}),(0,d.jsx)(t.td,{children:"Input Value"}),(0,d.jsx)(t.td,{children:"Specifies the input text for text generation."})]})]})]}),"\n",(0,d.jsx)(t.h3,{id:"outputs-4",children:"Outputs"}),"\n",(0,d.jsxs)(t.table,{children:[(0,d.jsx)(t.thead,{children:(0,d.jsxs)(t.tr,{children:[(0,d.jsx)(t.th,{children:"Name"}),(0,d.jsx)(t.th,{children:"Type"}),(0,d.jsx)(t.th,{children:"Description"})]})}),(0,d.jsx)(t.tbody,{children:(0,d.jsxs)(t.tr,{children:[(0,d.jsx)(t.td,{children:"model"}),(0,d.jsx)(t.td,{children:"LanguageModel"}),(0,d.jsx)(t.td,{children:"An instance of the Cohere model configured with the specified parameters."})]})})]}),"\n",(0,d.jsx)(t.h2,{id:"deepseek",children:"DeepSeek"}),"\n",(0,d.jsx)(t.p,{children:"This component generates text using DeepSeek's language models."}),"\n",(0,d.jsxs)(t.p,{children:["For more information, see the ",(0,d.jsx)(t.a,{href:"https://api-docs.deepseek.com/",children:"DeepSeek documentation"}),"."]}),"\n",(0,d.jsx)(t.h3,{id:"inputs-5",children:"Inputs"}),"\n",(0,d.jsxs)(t.table,{children:[(0,d.jsx)(t.thead,{children:(0,d.jsxs)(t.tr,{children:[(0,d.jsx)(t.th,{children:"Name"}),(0,d.jsx)(t.th,{children:"Type"}),(0,d.jsx)(t.th,{children:"Description"})]})}),(0,d.jsxs)(t.tbody,{children:[(0,d.jsxs)(t.tr,{children:[(0,d.jsx)(t.td,{children:"max_tokens"}),(0,d.jsx)(t.td,{children:"Integer"}),(0,d.jsxs)(t.td,{children:["Maximum number of tokens to generate. Set to ",(0,d.jsx)(t.code,{children:"0"})," for unlimited. Range: ",(0,d.jsx)(t.code,{children:"0-128000"}),"."]})]}),(0,d.jsxs)(t.tr,{children:[(0,d.jsx)(t.td,{children:"model_kwargs"}),(0,d.jsx)(t.td,{children:"Dictionary"}),(0,d.jsx)(t.td,{children:"Additional keyword arguments for the model."})]}),(0,d.jsxs)(t.tr,{children:[(0,d.jsx)(t.td,{children:"json_mode"}),(0,d.jsx)(t.td,{children:"Boolean"}),(0,d.jsxs)(t.td,{children:["If ",(0,d.jsx)(t.code,{children:"True"}),", outputs JSON regardless of passing a schema."]})]}),(0,d.jsxs)(t.tr,{children:[(0,d.jsx)(t.td,{children:"model_name"}),(0,d.jsx)(t.td,{children:"String"}),(0,d.jsxs)(t.td,{children:["The DeepSeek model to use. Default: ",(0,d.jsx)(t.code,{children:"deepseek-chat"}),"."]})]}),(0,d.jsxs)(t.tr,{children:[(0,d.jsx)(t.td,{children:"api_base"}),(0,d.jsx)(t.td,{children:"String"}),(0,d.jsxs)(t.td,{children:["Base URL for API requests. Default: ",(0,d.jsx)(t.code,{children:"https://api.deepseek.com"}),"."]})]}),(0,d.jsxs)(t.tr,{children:[(0,d.jsx)(t.td,{children:"api_key"}),(0,d.jsx)(t.td,{children:"SecretString"}),(0,d.jsx)(t.td,{children:"Your DeepSeek API key for authentication."})]}),(0,d.jsxs)(t.tr,{children:[(0,d.jsx)(t.td,{children:"temperature"}),(0,d.jsx)(t.td,{children:"Float"}),(0,d.jsxs)(t.td,{children:["Controls randomness in responses. Range: ",(0,d.jsx)(t.code,{children:"[0.0, 2.0]"}),". Default: ",(0,d.jsx)(t.code,{children:"1.0"}),"."]})]}),(0,d.jsxs)(t.tr,{children:[(0,d.jsx)(t.td,{children:"seed"}),(0,d.jsx)(t.td,{children:"Integer"}),(0,d.jsx)(t.td,{children:"Number initialized for random number generation. Use the same seed integer for more reproducible results, and use a different seed number for more random results."})]})]})]}),"\n",(0,d.jsx)(t.h3,{id:"outputs-5",children:"Outputs"}),"\n",(0,d.jsxs)(t.table,{children:[(0,d.jsx)(t.thead,{children:(0,d.jsxs)(t.tr,{children:[(0,d.jsx)(t.th,{children:"Name"}),(0,d.jsx)(t.th,{children:"Type"}),(0,d.jsx)(t.th,{children:"Description"})]})}),(0,d.jsx)(t.tbody,{children:(0,d.jsxs)(t.tr,{children:[(0,d.jsx)(t.td,{children:"model"}),(0,d.jsx)(t.td,{children:"LanguageModel"}),(0,d.jsx)(t.td,{children:"An instance of ChatOpenAI configured with the specified parameters."})]})})]}),"\n",(0,d.jsx)(t.h2,{id:"google-generative-ai",children:"Google Generative AI"}),"\n",(0,d.jsx)(t.p,{children:"This component generates text using Google's Generative AI models."}),"\n",(0,d.jsxs)(t.p,{children:["For more information, see the ",(0,d.jsx)(t.a,{href:"https://cloud.google.com/vertex-ai/docs/",children:"Google Generative AI documentation"}),"."]}),"\n",(0,d.jsx)(t.h3,{id:"inputs-6",children:"Inputs"}),"\n",(0,d.jsxs)(t.table,{children:[(0,d.jsx)(t.thead,{children:(0,d.jsxs)(t.tr,{children:[(0,d.jsx)(t.th,{children:"Name"}),(0,d.jsx)(t.th,{children:"Display Name"}),(0,d.jsx)(t.th,{children:"Info"})]})}),(0,d.jsxs)(t.tbody,{children:[(0,d.jsxs)(t.tr,{children:[(0,d.jsx)(t.td,{children:"Google API Key"}),(0,d.jsx)(t.td,{children:"Google API Key"}),(0,d.jsx)(t.td,{children:"Your Google API key to use for the Google Generative AI."})]}),(0,d.jsxs)(t.tr,{children:[(0,d.jsx)(t.td,{children:"Model"}),(0,d.jsx)(t.td,{children:"Model"}),(0,d.jsxs)(t.td,{children:["The name of the model to use, such as ",(0,d.jsx)(t.code,{children:'"gemini-pro"'}),"."]})]}),(0,d.jsxs)(t.tr,{children:[(0,d.jsx)(t.td,{children:"Max Output Tokens"}),(0,d.jsx)(t.td,{children:"Max Output Tokens"}),(0,d.jsx)(t.td,{children:"The maximum number of tokens to generate."})]}),(0,d.jsxs)(t.tr,{children:[(0,d.jsx)(t.td,{children:"Temperature"}),(0,d.jsx)(t.td,{children:"Temperature"}),(0,d.jsx)(t.td,{children:"Run inference with this temperature."})]}),(0,d.jsxs)(t.tr,{children:[(0,d.jsx)(t.td,{children:"Top K"}),(0,d.jsx)(t.td,{children:"Top K"}),(0,d.jsx)(t.td,{children:"Consider the set of top K most probable tokens."})]}),(0,d.jsxs)(t.tr,{children:[(0,d.jsx)(t.td,{children:"Top P"}),(0,d.jsx)(t.td,{children:"Top P"}),(0,d.jsx)(t.td,{children:"The maximum cumulative probability of tokens to consider when sampling."})]}),(0,d.jsxs)(t.tr,{children:[(0,d.jsx)(t.td,{children:"N"}),(0,d.jsx)(t.td,{children:"N"}),(0,d.jsx)(t.td,{children:"Number of chat completions to generate for each prompt."})]})]})]}),"\n",(0,d.jsx)(t.h3,{id:"outputs-6",children:"Outputs"}),"\n",(0,d.jsxs)(t.table,{children:[(0,d.jsx)(t.thead,{children:(0,d.jsxs)(t.tr,{children:[(0,d.jsx)(t.th,{children:"Name"}),(0,d.jsx)(t.th,{children:"Type"}),(0,d.jsx)(t.th,{children:"Description"})]})}),(0,d.jsx)(t.tbody,{children:(0,d.jsxs)(t.tr,{children:[(0,d.jsx)(t.td,{children:"model"}),(0,d.jsx)(t.td,{children:"LanguageModel"}),(0,d.jsx)(t.td,{children:"An instance of ChatGoogleGenerativeAI configured with the specified parameters."})]})})]}),"\n",(0,d.jsx)(t.h2,{id:"groq",children:"Groq"}),"\n",(0,d.jsx)(t.p,{children:"This component generates text using Groq's language models."}),"\n",(0,d.jsxs)(t.ol,{children:["\n",(0,d.jsxs)(t.li,{children:["To use this component in a flow, connect it as a ",(0,d.jsx)(t.strong,{children:"Model"})," in a flow like the ",(0,d.jsx)(t.a,{href:"/starter-projects-basic-prompting",children:"Basic prompting flow"}),", or select it as the ",(0,d.jsx)(t.strong,{children:"Model Provider"})," if you're using an ",(0,d.jsx)(t.strong,{children:"Agent"})," component."]}),"\n"]}),"\n",(0,d.jsx)(t.p,{children:(0,d.jsx)(t.img,{alt:"Groq component in a basic prompting flow",src:n(23592).A+"",width:"1982",height:"1194"})}),"\n",(0,d.jsxs)(t.ol,{start:"2",children:["\n",(0,d.jsxs)(t.li,{children:["In the ",(0,d.jsx)(t.strong,{children:"Groq API Key"})," field, paste your Groq API key.\nThe Groq model component automatically retrieves a list of the latest models.\nTo refresh your list of models, click ",(0,d.jsx)(l.A,{name:"RefreshCw","aria-label":"Refresh"}),"."]}),"\n",(0,d.jsxs)(t.li,{children:["In the ",(0,d.jsx)(t.strong,{children:"Model"})," field, select the model you want to use for your LLM.\nThis example uses ",(0,d.jsx)(t.a,{href:"https://console.groq.com/docs/model/llama-3.1-8b-instant",children:"llama-3.1-8b-instant"}),", which Groq recommends for real-time conversational interfaces."]}),"\n",(0,d.jsxs)(t.li,{children:["In the ",(0,d.jsx)(t.strong,{children:"Prompt"})," component, enter:"]}),"\n"]}),"\n",(0,d.jsx)(a.Code,{codeConfig:x,northPanel:{tabs:[""],active:"",heightRatio:1},files:[{name:"",focus:"",code:{lines:[{tokens:[{content:"You are a helpful assistant who supports their claims with sources.",props:{}}]}],lang:"text"},annotations:[]}]}),"\n",(0,d.jsxs)(t.ol,{start:"5",children:["\n",(0,d.jsxs)(t.li,{children:["Click ",(0,d.jsx)(t.strong,{children:"Playground"})," and ask your Groq LLM a question.\nThe responses include a list of sources."]}),"\n"]}),"\n",(0,d.jsxs)(t.p,{children:["For more information, see the ",(0,d.jsx)(t.a,{href:"https://groq.com/",children:"Groq documentation"}),"."]}),"\n",(0,d.jsx)(t.h3,{id:"inputs-7",children:"Inputs"}),"\n",(0,d.jsxs)(t.table,{children:[(0,d.jsx)(t.thead,{children:(0,d.jsxs)(t.tr,{children:[(0,d.jsx)(t.th,{children:"Name"}),(0,d.jsx)(t.th,{children:"Type"}),(0,d.jsx)(t.th,{children:"Description"})]})}),(0,d.jsxs)(t.tbody,{children:[(0,d.jsxs)(t.tr,{children:[(0,d.jsx)(t.td,{children:"groq_api_key"}),(0,d.jsx)(t.td,{children:"SecretString"}),(0,d.jsx)(t.td,{children:"API key for the Groq API."})]}),(0,d.jsxs)(t.tr,{children:[(0,d.jsx)(t.td,{children:"groq_api_base"}),(0,d.jsx)(t.td,{children:"String"}),(0,d.jsxs)(t.td,{children:["Base URL path for API requests. Default: ",(0,d.jsx)(t.code,{children:"https://api.groq.com"}),"."]})]}),(0,d.jsxs)(t.tr,{children:[(0,d.jsx)(t.td,{children:"max_tokens"}),(0,d.jsx)(t.td,{children:"Integer"}),(0,d.jsx)(t.td,{children:"The maximum number of tokens to generate."})]}),(0,d.jsxs)(t.tr,{children:[(0,d.jsx)(t.td,{children:"temperature"}),(0,d.jsx)(t.td,{children:"Float"}),(0,d.jsxs)(t.td,{children:["Controls randomness in the output. Range: ",(0,d.jsx)(t.code,{children:"[0.0, 1.0]"}),". Default: ",(0,d.jsx)(t.code,{children:"0.1"}),"."]})]}),(0,d.jsxs)(t.tr,{children:[(0,d.jsx)(t.td,{children:"n"}),(0,d.jsx)(t.td,{children:"Integer"}),(0,d.jsx)(t.td,{children:"Number of chat completions to generate for each prompt."})]}),(0,d.jsxs)(t.tr,{children:[(0,d.jsx)(t.td,{children:"model_name"}),(0,d.jsx)(t.td,{children:"String"}),(0,d.jsx)(t.td,{children:"The name of the Groq model to use. Options are dynamically fetched from the Groq API."})]}),(0,d.jsxs)(t.tr,{children:[(0,d.jsx)(t.td,{children:"tool_mode_enabled"}),(0,d.jsx)(t.td,{children:"Bool"}),(0,d.jsx)(t.td,{children:"If enabled, the component only displays models that work with tools."})]})]})]}),"\n",(0,d.jsx)(t.h3,{id:"outputs-7",children:"Outputs"}),"\n",(0,d.jsxs)(t.table,{children:[(0,d.jsx)(t.thead,{children:(0,d.jsxs)(t.tr,{children:[(0,d.jsx)(t.th,{children:"Name"}),(0,d.jsx)(t.th,{children:"Type"}),(0,d.jsx)(t.th,{children:"Description"})]})}),(0,d.jsx)(t.tbody,{children:(0,d.jsxs)(t.tr,{children:[(0,d.jsx)(t.td,{children:"model"}),(0,d.jsx)(t.td,{children:"LanguageModel"}),(0,d.jsx)(t.td,{children:"An instance of ChatGroq configured with the specified parameters."})]})})]}),"\n",(0,d.jsx)(t.h2,{id:"hugging-face-api",children:"Hugging Face API"}),"\n",(0,d.jsxs)(t.p,{children:["This component sends requests to the Hugging Face API to generate text using the model specified in the ",(0,d.jsx)(t.strong,{children:"Model ID"})," field."]}),"\n",(0,d.jsxs)(t.p,{children:["The Hugging Face API is a hosted inference API for models hosted on Hugging Face, and requires a ",(0,d.jsx)(t.a,{href:"https://huggingface.co/docs/hub/security-tokens",children:"Hugging Face API token"})," to authenticate."]}),"\n",(0,d.jsxs)(t.p,{children:["In this example based on the ",(0,d.jsx)(t.a,{href:"/starter-projects-basic-prompting",children:"Basic prompting flow"}),", the ",(0,d.jsx)(t.strong,{children:"Hugging Face API"})," model component replaces the ",(0,d.jsx)(t.strong,{children:"Open AI"})," model. By selecting different hosted models, you can see how different models return different results."]}),"\n",(0,d.jsxs)(t.ol,{children:["\n",(0,d.jsxs)(t.li,{children:["\n",(0,d.jsxs)(t.p,{children:["Create a ",(0,d.jsx)(t.a,{href:"/starter-projects-basic-prompting",children:"Basic prompting flow"}),"."]}),"\n"]}),"\n",(0,d.jsxs)(t.li,{children:["\n",(0,d.jsxs)(t.p,{children:["Replace the ",(0,d.jsx)(t.strong,{children:"OpenAI"})," model component with a ",(0,d.jsx)(t.strong,{children:"Hugging Face API"})," model component."]}),"\n"]}),"\n",(0,d.jsxs)(t.li,{children:["\n",(0,d.jsxs)(t.p,{children:["In the ",(0,d.jsx)(t.strong,{children:"Hugging Face API"})," component, add your Hugging Face API token to the ",(0,d.jsx)(t.strong,{children:"API Token"})," field."]}),"\n"]}),"\n",(0,d.jsxs)(t.li,{children:["\n",(0,d.jsxs)(t.p,{children:["Open the ",(0,d.jsx)(t.strong,{children:"Playground"})," and ask a question to the model, and see how it responds."]}),"\n"]}),"\n",(0,d.jsxs)(t.li,{children:["\n",(0,d.jsx)(t.p,{children:"Try different models, and see how they perform differently."}),"\n"]}),"\n"]}),"\n",(0,d.jsxs)(t.p,{children:["For more information, see the ",(0,d.jsx)(t.a,{href:"https://huggingface.co/",children:"Hugging Face documentation"}),"."]}),"\n",(0,d.jsx)(t.h3,{id:"inputs-8",children:"Inputs"}),"\n",(0,d.jsxs)(t.table,{children:[(0,d.jsx)(t.thead,{children:(0,d.jsxs)(t.tr,{children:[(0,d.jsx)(t.th,{children:"Name"}),(0,d.jsx)(t.th,{children:"Type"}),(0,d.jsx)(t.th,{children:"Description"})]})}),(0,d.jsxs)(t.tbody,{children:[(0,d.jsxs)(t.tr,{children:[(0,d.jsx)(t.td,{children:"model_id"}),(0,d.jsx)(t.td,{children:"String"}),(0,d.jsx)(t.td,{children:'The model ID from Hugging Face Hub. For example, "gpt2", "facebook/bart-large".'})]}),(0,d.jsxs)(t.tr,{children:[(0,d.jsx)(t.td,{children:"huggingfacehub_api_token"}),(0,d.jsx)(t.td,{children:"SecretString"}),(0,d.jsx)(t.td,{children:"Your Hugging Face API token for authentication."})]}),(0,d.jsxs)(t.tr,{children:[(0,d.jsx)(t.td,{children:"temperature"}),(0,d.jsx)(t.td,{children:"Float"}),(0,d.jsx)(t.td,{children:"Controls randomness in the output. Range: [0.0, 1.0]. Default: 0.7."})]}),(0,d.jsxs)(t.tr,{children:[(0,d.jsx)(t.td,{children:"max_new_tokens"}),(0,d.jsx)(t.td,{children:"Integer"}),(0,d.jsx)(t.td,{children:"Maximum number of tokens to generate. Default: 512."})]}),(0,d.jsxs)(t.tr,{children:[(0,d.jsx)(t.td,{children:"top_p"}),(0,d.jsx)(t.td,{children:"Float"}),(0,d.jsx)(t.td,{children:"Nucleus sampling parameter. Range: [0.0, 1.0]. Default: 0.95."})]}),(0,d.jsxs)(t.tr,{children:[(0,d.jsx)(t.td,{children:"top_k"}),(0,d.jsx)(t.td,{children:"Integer"}),(0,d.jsx)(t.td,{children:"Top-k sampling parameter. Default: 50."})]}),(0,d.jsxs)(t.tr,{children:[(0,d.jsx)(t.td,{children:"model_kwargs"}),(0,d.jsx)(t.td,{children:"Dictionary"}),(0,d.jsx)(t.td,{children:"Additional keyword arguments to pass to the model."})]})]})]}),"\n",(0,d.jsx)(t.h3,{id:"outputs-8",children:"Outputs"}),"\n",(0,d.jsxs)(t.table,{children:[(0,d.jsx)(t.thead,{children:(0,d.jsxs)(t.tr,{children:[(0,d.jsx)(t.th,{children:"Name"}),(0,d.jsx)(t.th,{children:"Type"}),(0,d.jsx)(t.th,{children:"Description"})]})}),(0,d.jsx)(t.tbody,{children:(0,d.jsxs)(t.tr,{children:[(0,d.jsx)(t.td,{children:"model"}),(0,d.jsx)(t.td,{children:"LanguageModel"}),(0,d.jsx)(t.td,{children:"An instance of HuggingFaceHub configured with the specified parameters."})]})})]}),"\n",(0,d.jsx)(t.h2,{id:"ibm-watsonxai",children:"IBM watsonx.ai"}),"\n",(0,d.jsxs)(t.p,{children:["This component generates text using ",(0,d.jsx)(t.a,{href:"https://www.ibm.com/watsonx",children:"IBM watsonx.ai"})," foundation models."]}),"\n",(0,d.jsxs)(t.p,{children:["To use ",(0,d.jsx)(t.strong,{children:"IBM watsonx.ai"})," model components, replace a model component with the IBM watsonx.ai component in a flow."]}),"\n",(0,d.jsx)(t.p,{children:"An example flow looks like the following:"}),"\n",(0,d.jsx)(t.p,{children:(0,d.jsx)(t.img,{alt:"IBM watsonx model component in a basic prompting flow",src:n(68799).A+"",width:"2364",height:"1562"})}),"\n",(0,d.jsxs)(t.p,{children:["The values for ",(0,d.jsx)(t.strong,{children:"API endpoint"}),", ",(0,d.jsx)(t.strong,{children:"Project ID"}),", ",(0,d.jsx)(t.strong,{children:"API key"}),", and ",(0,d.jsx)(t.strong,{children:"Model Name"})," are found in your IBM watsonx.ai deployment.\nFor more information, see the ",(0,d.jsx)(t.a,{href:"https://python.langchain.com/docs/integrations/chat/ibm_watsonx/",children:"Langchain documentation"}),"."]}),"\n",(0,d.jsx)(t.h3,{id:"inputs-9",children:"Inputs"}),"\n",(0,d.jsxs)(t.table,{children:[(0,d.jsx)(t.thead,{children:(0,d.jsxs)(t.tr,{children:[(0,d.jsx)(t.th,{children:"Name"}),(0,d.jsx)(t.th,{children:"Type"}),(0,d.jsx)(t.th,{children:"Description"})]})}),(0,d.jsxs)(t.tbody,{children:[(0,d.jsxs)(t.tr,{children:[(0,d.jsx)(t.td,{children:"url"}),(0,d.jsx)(t.td,{children:"String"}),(0,d.jsx)(t.td,{children:"The base URL of the watsonx API."})]}),(0,d.jsxs)(t.tr,{children:[(0,d.jsx)(t.td,{children:"project_id"}),(0,d.jsx)(t.td,{children:"String"}),(0,d.jsx)(t.td,{children:"Your watsonx Project ID."})]}),(0,d.jsxs)(t.tr,{children:[(0,d.jsx)(t.td,{children:"api_key"}),(0,d.jsx)(t.td,{children:"SecretString"}),(0,d.jsx)(t.td,{children:"Your IBM watsonx API Key."})]}),(0,d.jsxs)(t.tr,{children:[(0,d.jsx)(t.td,{children:"model_name"}),(0,d.jsx)(t.td,{children:"String"}),(0,d.jsx)(t.td,{children:"The name of the watsonx model to use. Options are dynamically fetched from the API."})]}),(0,d.jsxs)(t.tr,{children:[(0,d.jsx)(t.td,{children:"max_tokens"}),(0,d.jsx)(t.td,{children:"Integer"}),(0,d.jsxs)(t.td,{children:["The maximum number of tokens to generate. Default: ",(0,d.jsx)(t.code,{children:"1000"}),"."]})]}),(0,d.jsxs)(t.tr,{children:[(0,d.jsx)(t.td,{children:"stop_sequence"}),(0,d.jsx)(t.td,{children:"String"}),(0,d.jsx)(t.td,{children:"The sequence where generation should stop."})]}),(0,d.jsxs)(t.tr,{children:[(0,d.jsx)(t.td,{children:"temperature"}),(0,d.jsx)(t.td,{children:"Float"}),(0,d.jsxs)(t.td,{children:["Controls randomness in the output. Default: ",(0,d.jsx)(t.code,{children:"0.1"}),"."]})]}),(0,d.jsxs)(t.tr,{children:[(0,d.jsx)(t.td,{children:"top_p"}),(0,d.jsx)(t.td,{children:"Float"}),(0,d.jsxs)(t.td,{children:["Controls nucleus sampling, which limits the model to tokens whose probability is below the ",(0,d.jsx)(t.code,{children:"top_p"})," value. Range: Default: ",(0,d.jsx)(t.code,{children:"0.9"}),"."]})]}),(0,d.jsxs)(t.tr,{children:[(0,d.jsx)(t.td,{children:"frequency_penalty"}),(0,d.jsx)(t.td,{children:"Float"}),(0,d.jsxs)(t.td,{children:["Controls frequency penalty. A positive value decreases the probability of repeating tokens, and a negative value increases the probability. Range: Default: ",(0,d.jsx)(t.code,{children:"0.5"}),"."]})]}),(0,d.jsxs)(t.tr,{children:[(0,d.jsx)(t.td,{children:"presence_penalty"}),(0,d.jsx)(t.td,{children:"Float"}),(0,d.jsxs)(t.td,{children:["Controls presence penalty. A positive value increases the likelihood of new topics being introduced. Default: ",(0,d.jsx)(t.code,{children:"0.3"}),"."]})]}),(0,d.jsxs)(t.tr,{children:[(0,d.jsx)(t.td,{children:"seed"}),(0,d.jsx)(t.td,{children:"Integer"}),(0,d.jsxs)(t.td,{children:["A random seed for the model. Default: ",(0,d.jsx)(t.code,{children:"8"}),"."]})]}),(0,d.jsxs)(t.tr,{children:[(0,d.jsx)(t.td,{children:"logprobs"}),(0,d.jsx)(t.td,{children:"Boolean"}),(0,d.jsxs)(t.td,{children:["Whether to return log probabilities of output tokens or not. Default: ",(0,d.jsx)(t.code,{children:"True"}),"."]})]}),(0,d.jsxs)(t.tr,{children:[(0,d.jsx)(t.td,{children:"top_logprobs"}),(0,d.jsx)(t.td,{children:"Integer"}),(0,d.jsxs)(t.td,{children:["The number of most likely tokens to return at each position. Default: ",(0,d.jsx)(t.code,{children:"3"}),"."]})]}),(0,d.jsxs)(t.tr,{children:[(0,d.jsx)(t.td,{children:"logit_bias"}),(0,d.jsx)(t.td,{children:"String"}),(0,d.jsx)(t.td,{children:"A JSON string of token IDs to bias or suppress."})]})]})]}),"\n",(0,d.jsx)(t.h3,{id:"outputs-9",children:"Outputs"}),"\n",(0,d.jsxs)(t.table,{children:[(0,d.jsx)(t.thead,{children:(0,d.jsxs)(t.tr,{children:[(0,d.jsx)(t.th,{children:"Name"}),(0,d.jsx)(t.th,{children:"Type"}),(0,d.jsx)(t.th,{children:"Description"})]})}),(0,d.jsx)(t.tbody,{children:(0,d.jsxs)(t.tr,{children:[(0,d.jsx)(t.td,{children:"model"}),(0,d.jsx)(t.td,{children:"LanguageModel"}),(0,d.jsxs)(t.td,{children:["An instance of ",(0,d.jsx)(t.a,{href:"https://python.langchain.com/docs/integrations/chat/ibm_watsonx/",children:"ChatWatsonx"})," configured with the specified parameters."]})]})})]}),"\n",(0,d.jsx)(t.h2,{id:"language-model",children:"Language model"}),"\n",(0,d.jsx)(t.p,{children:"This component generates text using either OpenAI or Anthropic language models."}),"\n",(0,d.jsx)(t.p,{children:"Use this component as a drop-in replacement for LLM models to switch between different model providers and models."}),"\n",(0,d.jsx)(t.p,{children:"Instead of swapping out model components when you want to try a different provider, like switching between OpenAI and Anthropic components, change the provider dropdown in this single component. This makes it easier to experiment with and compare different models while keeping the rest of your flow intact."}),"\n",(0,d.jsxs)(t.p,{children:["For more information, see the ",(0,d.jsx)(t.a,{href:"https://platform.openai.com/docs",children:"OpenAI documentation"})," and ",(0,d.jsx)(t.a,{href:"https://docs.anthropic.com/",children:"Anthropic documentation"}),"."]}),"\n",(0,d.jsx)(t.h3,{id:"inputs-10",children:"Inputs"}),"\n",(0,d.jsxs)(t.table,{children:[(0,d.jsx)(t.thead,{children:(0,d.jsxs)(t.tr,{children:[(0,d.jsx)(t.th,{children:"Name"}),(0,d.jsx)(t.th,{children:"Type"}),(0,d.jsx)(t.th,{children:"Description"})]})}),(0,d.jsxs)(t.tbody,{children:[(0,d.jsxs)(t.tr,{children:[(0,d.jsx)(t.td,{children:"provider"}),(0,d.jsx)(t.td,{children:"String"}),(0,d.jsx)(t.td,{children:'The model provider to use. Options: "OpenAI", "Anthropic". Default: "OpenAI".'})]}),(0,d.jsxs)(t.tr,{children:[(0,d.jsx)(t.td,{children:"model_name"}),(0,d.jsx)(t.td,{children:"String"}),(0,d.jsx)(t.td,{children:"The name of the model to use. Options depend on the selected provider."})]}),(0,d.jsxs)(t.tr,{children:[(0,d.jsx)(t.td,{children:"api_key"}),(0,d.jsx)(t.td,{children:"SecretString"}),(0,d.jsx)(t.td,{children:"The API Key for authentication with the selected provider."})]}),(0,d.jsxs)(t.tr,{children:[(0,d.jsx)(t.td,{children:"input_value"}),(0,d.jsx)(t.td,{children:"String"}),(0,d.jsx)(t.td,{children:"The input text to send to the model."})]}),(0,d.jsxs)(t.tr,{children:[(0,d.jsx)(t.td,{children:"system_message"}),(0,d.jsx)(t.td,{children:"String"}),(0,d.jsx)(t.td,{children:"A system message that helps set the behavior of the assistant (advanced)."})]}),(0,d.jsxs)(t.tr,{children:[(0,d.jsx)(t.td,{children:"stream"}),(0,d.jsx)(t.td,{children:"Boolean"}),(0,d.jsxs)(t.td,{children:["Whether to stream the response. Default: ",(0,d.jsx)(t.code,{children:"False"})," (advanced)."]})]}),(0,d.jsxs)(t.tr,{children:[(0,d.jsx)(t.td,{children:"temperature"}),(0,d.jsx)(t.td,{children:"Float"}),(0,d.jsxs)(t.td,{children:["Controls randomness in responses. Range: ",(0,d.jsx)(t.code,{children:"[0.0, 1.0]"}),". Default: ",(0,d.jsx)(t.code,{children:"0.1"})," (advanced)."]})]})]})]}),"\n",(0,d.jsx)(t.h3,{id:"outputs-10",children:"Outputs"}),"\n",(0,d.jsxs)(t.table,{children:[(0,d.jsx)(t.thead,{children:(0,d.jsxs)(t.tr,{children:[(0,d.jsx)(t.th,{children:"Name"}),(0,d.jsx)(t.th,{children:"Type"}),(0,d.jsx)(t.th,{children:"Description"})]})}),(0,d.jsx)(t.tbody,{children:(0,d.jsxs)(t.tr,{children:[(0,d.jsx)(t.td,{children:"model"}),(0,d.jsx)(t.td,{children:"LanguageModel"}),(0,d.jsx)(t.td,{children:"An instance of ChatOpenAI or ChatAnthropic configured with the specified parameters."})]})})]}),"\n",(0,d.jsx)(t.h2,{id:"lmstudio",children:"LMStudio"}),"\n",(0,d.jsx)(t.p,{children:"This component generates text using LM Studio's local language models."}),"\n",(0,d.jsxs)(t.p,{children:["For more information, see ",(0,d.jsx)(t.a,{href:"https://lmstudio.ai/",children:"LM Studio documentation"}),"."]}),"\n",(0,d.jsx)(t.h3,{id:"inputs-11",children:"Inputs"}),"\n",(0,d.jsxs)(t.table,{children:[(0,d.jsx)(t.thead,{children:(0,d.jsxs)(t.tr,{children:[(0,d.jsx)(t.th,{children:"Name"}),(0,d.jsx)(t.th,{children:"Type"}),(0,d.jsx)(t.th,{children:"Description"})]})}),(0,d.jsxs)(t.tbody,{children:[(0,d.jsxs)(t.tr,{children:[(0,d.jsx)(t.td,{children:"base_url"}),(0,d.jsx)(t.td,{children:"String"}),(0,d.jsxs)(t.td,{children:["The URL where LM Studio is running. Default: ",(0,d.jsx)(t.code,{children:'"http://localhost:1234"'}),"."]})]}),(0,d.jsxs)(t.tr,{children:[(0,d.jsx)(t.td,{children:"max_tokens"}),(0,d.jsx)(t.td,{children:"Integer"}),(0,d.jsxs)(t.td,{children:["Maximum number of tokens to generate in the response. Default: ",(0,d.jsx)(t.code,{children:"512"}),"."]})]}),(0,d.jsxs)(t.tr,{children:[(0,d.jsx)(t.td,{children:"temperature"}),(0,d.jsx)(t.td,{children:"Float"}),(0,d.jsxs)(t.td,{children:["Controls randomness in the output. Range: ",(0,d.jsx)(t.code,{children:"[0.0, 2.0]"}),". Default: ",(0,d.jsx)(t.code,{children:"0.7"}),"."]})]}),(0,d.jsxs)(t.tr,{children:[(0,d.jsx)(t.td,{children:"top_p"}),(0,d.jsx)(t.td,{children:"Float"}),(0,d.jsxs)(t.td,{children:["Controls diversity via nucleus sampling. Range: ",(0,d.jsx)(t.code,{children:"[0.0, 1.0]"}),". Default: ",(0,d.jsx)(t.code,{children:"1.0"}),"."]})]}),(0,d.jsxs)(t.tr,{children:[(0,d.jsx)(t.td,{children:"stop"}),(0,d.jsx)(t.td,{children:"List[String]"}),(0,d.jsx)(t.td,{children:"List of strings that will stop generation when encountered (advanced)."})]}),(0,d.jsxs)(t.tr,{children:[(0,d.jsx)(t.td,{children:"stream"}),(0,d.jsx)(t.td,{children:"Boolean"}),(0,d.jsxs)(t.td,{children:["Whether to stream the response. Default: ",(0,d.jsx)(t.code,{children:"False"}),"."]})]}),(0,d.jsxs)(t.tr,{children:[(0,d.jsx)(t.td,{children:"presence_penalty"}),(0,d.jsx)(t.td,{children:"Float"}),(0,d.jsxs)(t.td,{children:["Penalizes repeated tokens. Range: ",(0,d.jsx)(t.code,{children:"[-2.0, 2.0]"}),". Default: ",(0,d.jsx)(t.code,{children:"0.0"}),"."]})]}),(0,d.jsxs)(t.tr,{children:[(0,d.jsx)(t.td,{children:"frequency_penalty"}),(0,d.jsx)(t.td,{children:"Float"}),(0,d.jsxs)(t.td,{children:["Penalizes frequent tokens. Range: ",(0,d.jsx)(t.code,{children:"[-2.0, 2.0]"}),". Default: ",(0,d.jsx)(t.code,{children:"0.0"}),"."]})]})]})]}),"\n",(0,d.jsx)(t.h3,{id:"outputs-11",children:"Outputs"}),"\n",(0,d.jsxs)(t.table,{children:[(0,d.jsx)(t.thead,{children:(0,d.jsxs)(t.tr,{children:[(0,d.jsx)(t.th,{children:"Name"}),(0,d.jsx)(t.th,{children:"Type"}),(0,d.jsx)(t.th,{children:"Description"})]})}),(0,d.jsx)(t.tbody,{children:(0,d.jsxs)(t.tr,{children:[(0,d.jsx)(t.td,{children:"model"}),(0,d.jsx)(t.td,{children:"LanguageModel"}),(0,d.jsx)(t.td,{children:"An instance of LMStudio configured with the specified parameters."})]})})]}),"\n",(0,d.jsx)(t.h2,{id:"maritalk",children:"Maritalk"}),"\n",(0,d.jsx)(t.p,{children:"This component generates text using Maritalk LLMs."}),"\n",(0,d.jsxs)(t.p,{children:["For more information, see ",(0,d.jsx)(t.a,{href:"https://www.maritalk.com/",children:"Maritalk documentation"}),"."]}),"\n",(0,d.jsx)(t.h3,{id:"inputs-12",children:"Inputs"}),"\n",(0,d.jsxs)(t.table,{children:[(0,d.jsx)(t.thead,{children:(0,d.jsxs)(t.tr,{children:[(0,d.jsx)(t.th,{children:"Name"}),(0,d.jsx)(t.th,{children:"Type"}),(0,d.jsx)(t.th,{children:"Description"})]})}),(0,d.jsxs)(t.tbody,{children:[(0,d.jsxs)(t.tr,{children:[(0,d.jsx)(t.td,{children:"max_tokens"}),(0,d.jsx)(t.td,{children:"Integer"}),(0,d.jsxs)(t.td,{children:["The maximum number of tokens to generate. Set to ",(0,d.jsx)(t.code,{children:"0"})," for unlimited tokens. Default: ",(0,d.jsx)(t.code,{children:"512"}),"."]})]}),(0,d.jsxs)(t.tr,{children:[(0,d.jsx)(t.td,{children:"model_name"}),(0,d.jsx)(t.td,{children:"String"}),(0,d.jsxs)(t.td,{children:["The name of the Maritalk model to use. Options: ",(0,d.jsx)(t.code,{children:"sabia-2-small"}),", ",(0,d.jsx)(t.code,{children:"sabia-2-medium"}),". Default: ",(0,d.jsx)(t.code,{children:"sabia-2-small"}),"."]})]}),(0,d.jsxs)(t.tr,{children:[(0,d.jsx)(t.td,{children:"api_key"}),(0,d.jsx)(t.td,{children:"SecretString"}),(0,d.jsx)(t.td,{children:"The Maritalk API Key to use for authentication."})]}),(0,d.jsxs)(t.tr,{children:[(0,d.jsx)(t.td,{children:"temperature"}),(0,d.jsx)(t.td,{children:"Float"}),(0,d.jsxs)(t.td,{children:["Controls randomness in the output. Range: ",(0,d.jsx)(t.code,{children:"[0.0, 1.0]"}),". Default: ",(0,d.jsx)(t.code,{children:"0.5"}),"."]})]}),(0,d.jsxs)(t.tr,{children:[(0,d.jsx)(t.td,{children:"endpoint_url"}),(0,d.jsx)(t.td,{children:"String"}),(0,d.jsxs)(t.td,{children:["The Maritalk API endpoint. Default: ",(0,d.jsx)(t.code,{children:"https://api.maritalk.com"}),"."]})]})]})]}),"\n",(0,d.jsx)(t.h3,{id:"outputs-12",children:"Outputs"}),"\n",(0,d.jsxs)(t.table,{children:[(0,d.jsx)(t.thead,{children:(0,d.jsxs)(t.tr,{children:[(0,d.jsx)(t.th,{children:"Name"}),(0,d.jsx)(t.th,{children:"Type"}),(0,d.jsx)(t.th,{children:"Description"})]})}),(0,d.jsx)(t.tbody,{children:(0,d.jsxs)(t.tr,{children:[(0,d.jsx)(t.td,{children:"model"}),(0,d.jsx)(t.td,{children:"LanguageModel"}),(0,d.jsx)(t.td,{children:"An instance of ChatMaritalk configured with the specified parameters."})]})})]}),"\n",(0,d.jsx)(t.h2,{id:"mistral",children:"Mistral"}),"\n",(0,d.jsx)(t.p,{children:"This component generates text using MistralAI LLMs."}),"\n",(0,d.jsxs)(t.p,{children:["For more information, see ",(0,d.jsx)(t.a,{href:"https://docs.mistral.ai/",children:"Mistral AI documentation"}),"."]}),"\n",(0,d.jsx)(t.h3,{id:"inputs-13",children:"Inputs"}),"\n",(0,d.jsxs)(t.table,{children:[(0,d.jsx)(t.thead,{children:(0,d.jsxs)(t.tr,{children:[(0,d.jsx)(t.th,{children:"Name"}),(0,d.jsx)(t.th,{children:"Type"}),(0,d.jsx)(t.th,{children:"Description"})]})}),(0,d.jsxs)(t.tbody,{children:[(0,d.jsxs)(t.tr,{children:[(0,d.jsx)(t.td,{children:"max_tokens"}),(0,d.jsx)(t.td,{children:"Integer"}),(0,d.jsx)(t.td,{children:"The maximum number of tokens to generate. Set to 0 for unlimited tokens (advanced)."})]}),(0,d.jsxs)(t.tr,{children:[(0,d.jsx)(t.td,{children:"model_name"}),(0,d.jsx)(t.td,{children:"String"}),(0,d.jsxs)(t.td,{children:["The name of the Mistral AI model to use. Options include ",(0,d.jsx)(t.code,{children:"open-mixtral-8x7b"}),", ",(0,d.jsx)(t.code,{children:"open-mixtral-8x22b"}),", ",(0,d.jsx)(t.code,{children:"mistral-small-latest"}),", ",(0,d.jsx)(t.code,{children:"mistral-medium-latest"}),", ",(0,d.jsx)(t.code,{children:"mistral-large-latest"}),", and ",(0,d.jsx)(t.code,{children:"codestral-latest"}),". Default: ",(0,d.jsx)(t.code,{children:"codestral-latest"}),"."]})]}),(0,d.jsxs)(t.tr,{children:[(0,d.jsx)(t.td,{children:"mistral_api_base"}),(0,d.jsx)(t.td,{children:"String"}),(0,d.jsxs)(t.td,{children:["The base URL of the Mistral API. Defaults to ",(0,d.jsx)(t.code,{children:"https://api.mistral.ai/v1"})," (advanced)."]})]}),(0,d.jsxs)(t.tr,{children:[(0,d.jsx)(t.td,{children:"api_key"}),(0,d.jsx)(t.td,{children:"SecretString"}),(0,d.jsx)(t.td,{children:"The Mistral API Key to use for authentication."})]}),(0,d.jsxs)(t.tr,{children:[(0,d.jsx)(t.td,{children:"temperature"}),(0,d.jsx)(t.td,{children:"Float"}),(0,d.jsx)(t.td,{children:"Controls randomness in the output. Default: 0.5."})]}),(0,d.jsxs)(t.tr,{children:[(0,d.jsx)(t.td,{children:"max_retries"}),(0,d.jsx)(t.td,{children:"Integer"}),(0,d.jsx)(t.td,{children:"Maximum number of retries for API calls. Default: 5 (advanced)."})]}),(0,d.jsxs)(t.tr,{children:[(0,d.jsx)(t.td,{children:"timeout"}),(0,d.jsx)(t.td,{children:"Integer"}),(0,d.jsx)(t.td,{children:"Timeout for API calls in seconds. Default: 60 (advanced)."})]}),(0,d.jsxs)(t.tr,{children:[(0,d.jsx)(t.td,{children:"max_concurrent_requests"}),(0,d.jsx)(t.td,{children:"Integer"}),(0,d.jsx)(t.td,{children:"Maximum number of concurrent API requests. Default: 3 (advanced)."})]}),(0,d.jsxs)(t.tr,{children:[(0,d.jsx)(t.td,{children:"top_p"}),(0,d.jsx)(t.td,{children:"Float"}),(0,d.jsx)(t.td,{children:"Nucleus sampling parameter. Default: 1 (advanced)."})]}),(0,d.jsxs)(t.tr,{children:[(0,d.jsx)(t.td,{children:"random_seed"}),(0,d.jsx)(t.td,{children:"Integer"}),(0,d.jsx)(t.td,{children:"Seed for random number generation. Default: 1 (advanced)."})]}),(0,d.jsxs)(t.tr,{children:[(0,d.jsx)(t.td,{children:"safe_mode"}),(0,d.jsx)(t.td,{children:"Boolean"}),(0,d.jsx)(t.td,{children:"Enables safe mode for content generation (advanced)."})]})]})]}),"\n",(0,d.jsx)(t.h3,{id:"outputs-13",children:"Outputs"}),"\n",(0,d.jsxs)(t.table,{children:[(0,d.jsx)(t.thead,{children:(0,d.jsxs)(t.tr,{children:[(0,d.jsx)(t.th,{children:"Name"}),(0,d.jsx)(t.th,{children:"Type"}),(0,d.jsx)(t.th,{children:"Description"})]})}),(0,d.jsx)(t.tbody,{children:(0,d.jsxs)(t.tr,{children:[(0,d.jsx)(t.td,{children:"model"}),(0,d.jsx)(t.td,{children:"LanguageModel"}),(0,d.jsx)(t.td,{children:"An instance of ChatMistralAI configured with the specified parameters."})]})})]}),"\n",(0,d.jsx)(t.h2,{id:"novita-ai",children:"Novita AI"}),"\n",(0,d.jsx)(t.p,{children:"This component generates text using Novita AI's language models."}),"\n",(0,d.jsxs)(t.p,{children:["For more information, see ",(0,d.jsx)(t.a,{href:"https://novita.ai/docs/model-api/reference/llm/llm.html?utm_source=github_langflow&utm_medium=github_readme&utm_campaign=link",children:"Novita AI documentation"}),"."]}),"\n",(0,d.jsx)(t.h3,{id:"inputs-14",children:"Inputs"}),"\n",(0,d.jsxs)(t.table,{children:[(0,d.jsx)(t.thead,{children:(0,d.jsxs)(t.tr,{children:[(0,d.jsx)(t.th,{children:"Name"}),(0,d.jsx)(t.th,{children:"Type"}),(0,d.jsx)(t.th,{children:"Description"})]})}),(0,d.jsxs)(t.tbody,{children:[(0,d.jsxs)(t.tr,{children:[(0,d.jsx)(t.td,{children:"api_key"}),(0,d.jsx)(t.td,{children:"SecretString"}),(0,d.jsx)(t.td,{children:"Your Novita AI API Key."})]}),(0,d.jsxs)(t.tr,{children:[(0,d.jsx)(t.td,{children:"model"}),(0,d.jsx)(t.td,{children:"String"}),(0,d.jsx)(t.td,{children:"The id of the Novita AI model to use."})]}),(0,d.jsxs)(t.tr,{children:[(0,d.jsx)(t.td,{children:"max_tokens"}),(0,d.jsx)(t.td,{children:"Integer"}),(0,d.jsx)(t.td,{children:"The maximum number of tokens to generate. Set to 0 for unlimited tokens."})]}),(0,d.jsxs)(t.tr,{children:[(0,d.jsx)(t.td,{children:"temperature"}),(0,d.jsx)(t.td,{children:"Float"}),(0,d.jsx)(t.td,{children:"Controls randomness in the output. Range: [0.0, 1.0]. Default: 0.7."})]}),(0,d.jsxs)(t.tr,{children:[(0,d.jsx)(t.td,{children:"top_p"}),(0,d.jsx)(t.td,{children:"Float"}),(0,d.jsx)(t.td,{children:"Controls the nucleus sampling. Range: [0.0, 1.0]. Default: 1.0."})]}),(0,d.jsxs)(t.tr,{children:[(0,d.jsx)(t.td,{children:"frequency_penalty"}),(0,d.jsx)(t.td,{children:"Float"}),(0,d.jsx)(t.td,{children:"Controls the frequency penalty. Range: [0.0, 2.0]. Default: 0.0."})]}),(0,d.jsxs)(t.tr,{children:[(0,d.jsx)(t.td,{children:"presence_penalty"}),(0,d.jsx)(t.td,{children:"Float"}),(0,d.jsx)(t.td,{children:"Controls the presence penalty. Range: [0.0, 2.0]. Default: 0.0."})]})]})]}),"\n",(0,d.jsx)(t.h3,{id:"outputs-14",children:"Outputs"}),"\n",(0,d.jsxs)(t.table,{children:[(0,d.jsx)(t.thead,{children:(0,d.jsxs)(t.tr,{children:[(0,d.jsx)(t.th,{children:"Name"}),(0,d.jsx)(t.th,{children:"Type"}),(0,d.jsx)(t.th,{children:"Description"})]})}),(0,d.jsx)(t.tbody,{children:(0,d.jsxs)(t.tr,{children:[(0,d.jsx)(t.td,{children:"model"}),(0,d.jsx)(t.td,{children:"LanguageModel"}),(0,d.jsx)(t.td,{children:"An instance of Novita AI model configured with the specified parameters."})]})})]}),"\n",(0,d.jsx)(t.h2,{id:"nvidia",children:"NVIDIA"}),"\n",(0,d.jsx)(t.p,{children:"This component generates text using NVIDIA LLMs."}),"\n",(0,d.jsxs)(t.p,{children:["For more information, see ",(0,d.jsx)(t.a,{href:"https://developer.nvidia.com/generative-ai",children:"NVIDIA AI documentation"}),"."]}),"\n",(0,d.jsx)(t.h3,{id:"inputs-15",children:"Inputs"}),"\n",(0,d.jsxs)(t.table,{children:[(0,d.jsx)(t.thead,{children:(0,d.jsxs)(t.tr,{children:[(0,d.jsx)(t.th,{children:"Name"}),(0,d.jsx)(t.th,{children:"Type"}),(0,d.jsx)(t.th,{children:"Description"})]})}),(0,d.jsxs)(t.tbody,{children:[(0,d.jsxs)(t.tr,{children:[(0,d.jsx)(t.td,{children:"max_tokens"}),(0,d.jsx)(t.td,{children:"Integer"}),(0,d.jsxs)(t.td,{children:["The maximum number of tokens to generate. Set to ",(0,d.jsx)(t.code,{children:"0"})," for unlimited tokens (advanced)."]})]}),(0,d.jsxs)(t.tr,{children:[(0,d.jsx)(t.td,{children:"model_name"}),(0,d.jsx)(t.td,{children:"String"}),(0,d.jsxs)(t.td,{children:["The name of the NVIDIA model to use. Default: ",(0,d.jsx)(t.code,{children:"mistralai/mixtral-8x7b-instruct-v0.1"}),"."]})]}),(0,d.jsxs)(t.tr,{children:[(0,d.jsx)(t.td,{children:"base_url"}),(0,d.jsx)(t.td,{children:"String"}),(0,d.jsxs)(t.td,{children:["The base URL of the NVIDIA API. Default: ",(0,d.jsx)(t.code,{children:"https://integrate.api.nvidia.com/v1"}),"."]})]}),(0,d.jsxs)(t.tr,{children:[(0,d.jsx)(t.td,{children:"nvidia_api_key"}),(0,d.jsx)(t.td,{children:"SecretString"}),(0,d.jsx)(t.td,{children:"The NVIDIA API Key for authentication."})]}),(0,d.jsxs)(t.tr,{children:[(0,d.jsx)(t.td,{children:"temperature"}),(0,d.jsx)(t.td,{children:"Float"}),(0,d.jsxs)(t.td,{children:["Controls randomness in the output. Default: ",(0,d.jsx)(t.code,{children:"0.1"}),"."]})]}),(0,d.jsxs)(t.tr,{children:[(0,d.jsx)(t.td,{children:"seed"}),(0,d.jsx)(t.td,{children:"Integer"}),(0,d.jsxs)(t.td,{children:["The seed controls the reproducibility of the job (advanced). Default: ",(0,d.jsx)(t.code,{children:"1"}),"."]})]})]})]}),"\n",(0,d.jsx)(t.h3,{id:"outputs-15",children:"Outputs"}),"\n",(0,d.jsxs)(t.table,{children:[(0,d.jsx)(t.thead,{children:(0,d.jsxs)(t.tr,{children:[(0,d.jsx)(t.th,{children:"Name"}),(0,d.jsx)(t.th,{children:"Type"}),(0,d.jsx)(t.th,{children:"Description"})]})}),(0,d.jsx)(t.tbody,{children:(0,d.jsxs)(t.tr,{children:[(0,d.jsx)(t.td,{children:"model"}),(0,d.jsx)(t.td,{children:"LanguageModel"}),(0,d.jsx)(t.td,{children:"An instance of ChatNVIDIA configured with the specified parameters."})]})})]}),"\n",(0,d.jsx)(t.h2,{id:"ollama",children:"Ollama"}),"\n",(0,d.jsx)(t.p,{children:"This component generates text using Ollama's language models."}),"\n",(0,d.jsx)(t.p,{children:"To use this component in a flow, connect Langflow to your locally running Ollama server and select a model."}),"\n",(0,d.jsxs)(t.ol,{children:["\n",(0,d.jsxs)(t.li,{children:["In the Ollama component, in the ",(0,d.jsx)(t.strong,{children:"Base URL"})," field, enter the address for your locally running Ollama server.\nThis value is set as the ",(0,d.jsx)(t.code,{children:"OLLAMA_HOST"})," environment variable in Ollama.\nThe default base URL is ",(0,d.jsx)(t.code,{children:"http://127.0.0.1:11434"}),"."]}),"\n",(0,d.jsxs)(t.li,{children:["To refresh the server's list of models, click ",(0,d.jsx)(l.A,{name:"RefreshCw","aria-label":"Refresh"}),"."]}),"\n",(0,d.jsxs)(t.li,{children:["In the ",(0,d.jsx)(t.strong,{children:"Model Name"})," field, select a model. This example uses ",(0,d.jsx)(t.code,{children:"llama3.2:latest"}),"."]}),"\n",(0,d.jsxs)(t.li,{children:["Connect the ",(0,d.jsx)(t.strong,{children:"Ollama"})," model component to a flow. For example, this flow connects a local Ollama server running a Llama 3.2 model as the custom model for an ",(0,d.jsx)(t.a,{href:"/components-agents",children:"Agent"})," component."]}),"\n"]}),"\n",(0,d.jsx)(t.p,{children:(0,d.jsx)(t.img,{alt:"Ollama model as Agent custom model",src:n(92757).A+"",width:"4000",height:"2668"})}),"\n",(0,d.jsxs)(t.p,{children:["For more information, see the ",(0,d.jsx)(t.a,{href:"https://ollama.com/",children:"Ollama documentation"}),"."]}),"\n",(0,d.jsx)(t.h3,{id:"inputs-16",children:"Inputs"}),"\n",(0,d.jsxs)(t.table,{children:[(0,d.jsx)(t.thead,{children:(0,d.jsxs)(t.tr,{children:[(0,d.jsx)(t.th,{children:"Name"}),(0,d.jsx)(t.th,{children:"Display Name"}),(0,d.jsx)(t.th,{children:"Info"})]})}),(0,d.jsxs)(t.tbody,{children:[(0,d.jsxs)(t.tr,{children:[(0,d.jsx)(t.td,{children:"Base URL"}),(0,d.jsx)(t.td,{children:"Base URL"}),(0,d.jsx)(t.td,{children:"Endpoint of the Ollama API."})]}),(0,d.jsxs)(t.tr,{children:[(0,d.jsx)(t.td,{children:"Model Name"}),(0,d.jsx)(t.td,{children:"Model Name"}),(0,d.jsx)(t.td,{children:"The model name to use."})]}),(0,d.jsxs)(t.tr,{children:[(0,d.jsx)(t.td,{children:"Temperature"}),(0,d.jsx)(t.td,{children:"Temperature"}),(0,d.jsx)(t.td,{children:"Controls the creativity of model responses."})]})]})]}),"\n",(0,d.jsx)(t.h3,{id:"outputs-16",children:"Outputs"}),"\n",(0,d.jsxs)(t.table,{children:[(0,d.jsx)(t.thead,{children:(0,d.jsxs)(t.tr,{children:[(0,d.jsx)(t.th,{children:"Name"}),(0,d.jsx)(t.th,{children:"Type"}),(0,d.jsx)(t.th,{children:"Description"})]})}),(0,d.jsx)(t.tbody,{children:(0,d.jsxs)(t.tr,{children:[(0,d.jsx)(t.td,{children:"model"}),(0,d.jsx)(t.td,{children:"LanguageModel"}),(0,d.jsx)(t.td,{children:"An instance of an Ollama model configured with the specified parameters."})]})})]}),"\n",(0,d.jsx)(t.h2,{id:"openai",children:"OpenAI"}),"\n",(0,d.jsx)(t.p,{children:"This component generates text using OpenAI's language models."}),"\n",(0,d.jsxs)(t.p,{children:["For more information, see ",(0,d.jsx)(t.a,{href:"https://beta.openai.com/docs/",children:"OpenAI documentation"}),"."]}),"\n",(0,d.jsx)(t.h3,{id:"inputs-17",children:"Inputs"}),"\n",(0,d.jsxs)(t.table,{children:[(0,d.jsx)(t.thead,{children:(0,d.jsxs)(t.tr,{children:[(0,d.jsx)(t.th,{children:"Name"}),(0,d.jsx)(t.th,{children:"Type"}),(0,d.jsx)(t.th,{children:"Description"})]})}),(0,d.jsxs)(t.tbody,{children:[(0,d.jsxs)(t.tr,{children:[(0,d.jsx)(t.td,{children:"api_key"}),(0,d.jsx)(t.td,{children:"SecretString"}),(0,d.jsx)(t.td,{children:"Your OpenAI API Key."})]}),(0,d.jsxs)(t.tr,{children:[(0,d.jsx)(t.td,{children:"model"}),(0,d.jsx)(t.td,{children:"String"}),(0,d.jsx)(t.td,{children:'The name of the OpenAI model to use. Options include "gpt-3.5-turbo" and "gpt-4".'})]}),(0,d.jsxs)(t.tr,{children:[(0,d.jsx)(t.td,{children:"max_tokens"}),(0,d.jsx)(t.td,{children:"Integer"}),(0,d.jsx)(t.td,{children:"The maximum number of tokens to generate. Set to 0 for unlimited tokens."})]}),(0,d.jsxs)(t.tr,{children:[(0,d.jsx)(t.td,{children:"temperature"}),(0,d.jsx)(t.td,{children:"Float"}),(0,d.jsx)(t.td,{children:"Controls randomness in the output. Range: [0.0, 1.0]. Default: 0.7."})]}),(0,d.jsxs)(t.tr,{children:[(0,d.jsx)(t.td,{children:"top_p"}),(0,d.jsx)(t.td,{children:"Float"}),(0,d.jsx)(t.td,{children:"Controls the nucleus sampling. Range: [0.0, 1.0]. Default: 1.0."})]}),(0,d.jsxs)(t.tr,{children:[(0,d.jsx)(t.td,{children:"frequency_penalty"}),(0,d.jsx)(t.td,{children:"Float"}),(0,d.jsx)(t.td,{children:"Controls the frequency penalty. Range: [0.0, 2.0]. Default: 0.0."})]}),(0,d.jsxs)(t.tr,{children:[(0,d.jsx)(t.td,{children:"presence_penalty"}),(0,d.jsx)(t.td,{children:"Float"}),(0,d.jsx)(t.td,{children:"Controls the presence penalty. Range: [0.0, 2.0]. Default: 0.0."})]})]})]}),"\n",(0,d.jsx)(t.h3,{id:"outputs-17",children:"Outputs"}),"\n",(0,d.jsxs)(t.table,{children:[(0,d.jsx)(t.thead,{children:(0,d.jsxs)(t.tr,{children:[(0,d.jsx)(t.th,{children:"Name"}),(0,d.jsx)(t.th,{children:"Type"}),(0,d.jsx)(t.th,{children:"Description"})]})}),(0,d.jsx)(t.tbody,{children:(0,d.jsxs)(t.tr,{children:[(0,d.jsx)(t.td,{children:"model"}),(0,d.jsx)(t.td,{children:"LanguageModel"}),(0,d.jsx)(t.td,{children:"An instance of OpenAI model configured with the specified parameters."})]})})]}),"\n",(0,d.jsx)(t.h2,{id:"openrouter",children:"OpenRouter"}),"\n",(0,d.jsx)(t.p,{children:"This component generates text using OpenRouter's unified API for multiple AI models from different providers."}),"\n",(0,d.jsxs)(t.p,{children:["For more information, see ",(0,d.jsx)(t.a,{href:"https://openrouter.ai/docs",children:"OpenRouter documentation"}),"."]}),"\n",(0,d.jsx)(t.h3,{id:"inputs-18",children:"Inputs"}),"\n",(0,d.jsxs)(t.table,{children:[(0,d.jsx)(t.thead,{children:(0,d.jsxs)(t.tr,{children:[(0,d.jsx)(t.th,{children:"Name"}),(0,d.jsx)(t.th,{children:"Type"}),(0,d.jsx)(t.th,{children:"Description"})]})}),(0,d.jsxs)(t.tbody,{children:[(0,d.jsxs)(t.tr,{children:[(0,d.jsx)(t.td,{children:"api_key"}),(0,d.jsx)(t.td,{children:"SecretString"}),(0,d.jsx)(t.td,{children:"Your OpenRouter API key for authentication."})]}),(0,d.jsxs)(t.tr,{children:[(0,d.jsx)(t.td,{children:"site_url"}),(0,d.jsx)(t.td,{children:"String"}),(0,d.jsx)(t.td,{children:"Your site URL for OpenRouter rankings (advanced)."})]}),(0,d.jsxs)(t.tr,{children:[(0,d.jsx)(t.td,{children:"app_name"}),(0,d.jsx)(t.td,{children:"String"}),(0,d.jsx)(t.td,{children:"Your app name for OpenRouter rankings (advanced)."})]}),(0,d.jsxs)(t.tr,{children:[(0,d.jsx)(t.td,{children:"provider"}),(0,d.jsx)(t.td,{children:"String"}),(0,d.jsx)(t.td,{children:"The AI model provider to use."})]}),(0,d.jsxs)(t.tr,{children:[(0,d.jsx)(t.td,{children:"model_name"}),(0,d.jsx)(t.td,{children:"String"}),(0,d.jsx)(t.td,{children:"The specific model to use for chat completion."})]}),(0,d.jsxs)(t.tr,{children:[(0,d.jsx)(t.td,{children:"temperature"}),(0,d.jsx)(t.td,{children:"Float"}),(0,d.jsx)(t.td,{children:"Controls randomness in the output. Range: [0.0, 2.0]. Default: 0.7."})]}),(0,d.jsxs)(t.tr,{children:[(0,d.jsx)(t.td,{children:"max_tokens"}),(0,d.jsx)(t.td,{children:"Integer"}),(0,d.jsx)(t.td,{children:"The maximum number of tokens to generate (advanced)."})]})]})]}),"\n",(0,d.jsx)(t.h3,{id:"outputs-18",children:"Outputs"}),"\n",(0,d.jsxs)(t.table,{children:[(0,d.jsx)(t.thead,{children:(0,d.jsxs)(t.tr,{children:[(0,d.jsx)(t.th,{children:"Name"}),(0,d.jsx)(t.th,{children:"Type"}),(0,d.jsx)(t.th,{children:"Description"})]})}),(0,d.jsx)(t.tbody,{children:(0,d.jsxs)(t.tr,{children:[(0,d.jsx)(t.td,{children:"model"}),(0,d.jsx)(t.td,{children:"LanguageModel"}),(0,d.jsx)(t.td,{children:"An instance of ChatOpenAI configured with the specified parameters."})]})})]}),"\n",(0,d.jsx)(t.h2,{id:"perplexity",children:"Perplexity"}),"\n",(0,d.jsx)(t.p,{children:"This component generates text using Perplexity's language models."}),"\n",(0,d.jsxs)(t.p,{children:["For more information, see ",(0,d.jsx)(t.a,{href:"https://perplexity.ai/",children:"Perplexity documentation"}),"."]}),"\n",(0,d.jsx)(t.h3,{id:"inputs-19",children:"Inputs"}),"\n",(0,d.jsxs)(t.table,{children:[(0,d.jsx)(t.thead,{children:(0,d.jsxs)(t.tr,{children:[(0,d.jsx)(t.th,{children:"Name"}),(0,d.jsx)(t.th,{children:"Type"}),(0,d.jsx)(t.th,{children:"Description"})]})}),(0,d.jsxs)(t.tbody,{children:[(0,d.jsxs)(t.tr,{children:[(0,d.jsx)(t.td,{children:"model_name"}),(0,d.jsx)(t.td,{children:"String"}),(0,d.jsx)(t.td,{children:"The name of the Perplexity model to use. Options include various Llama 3.1 models."})]}),(0,d.jsxs)(t.tr,{children:[(0,d.jsx)(t.td,{children:"max_output_tokens"}),(0,d.jsx)(t.td,{children:"Integer"}),(0,d.jsx)(t.td,{children:"The maximum number of tokens to generate."})]}),(0,d.jsxs)(t.tr,{children:[(0,d.jsx)(t.td,{children:"api_key"}),(0,d.jsx)(t.td,{children:"SecretString"}),(0,d.jsx)(t.td,{children:"The Perplexity API Key for authentication."})]}),(0,d.jsxs)(t.tr,{children:[(0,d.jsx)(t.td,{children:"temperature"}),(0,d.jsx)(t.td,{children:"Float"}),(0,d.jsx)(t.td,{children:"Controls randomness in the output. Default: 0.75."})]}),(0,d.jsxs)(t.tr,{children:[(0,d.jsx)(t.td,{children:"top_p"}),(0,d.jsx)(t.td,{children:"Float"}),(0,d.jsx)(t.td,{children:"The maximum cumulative probability of tokens to consider when sampling (advanced)."})]}),(0,d.jsxs)(t.tr,{children:[(0,d.jsx)(t.td,{children:"n"}),(0,d.jsx)(t.td,{children:"Integer"}),(0,d.jsx)(t.td,{children:"Number of chat completions to generate for each prompt (advanced)."})]}),(0,d.jsxs)(t.tr,{children:[(0,d.jsx)(t.td,{children:"top_k"}),(0,d.jsx)(t.td,{children:"Integer"}),(0,d.jsx)(t.td,{children:"Number of top tokens to consider for top-k sampling. Must be positive (advanced)."})]})]})]}),"\n",(0,d.jsx)(t.h3,{id:"outputs-19",children:"Outputs"}),"\n",(0,d.jsxs)(t.table,{children:[(0,d.jsx)(t.thead,{children:(0,d.jsxs)(t.tr,{children:[(0,d.jsx)(t.th,{children:"Name"}),(0,d.jsx)(t.th,{children:"Type"}),(0,d.jsx)(t.th,{children:"Description"})]})}),(0,d.jsx)(t.tbody,{children:(0,d.jsxs)(t.tr,{children:[(0,d.jsx)(t.td,{children:"model"}),(0,d.jsx)(t.td,{children:"LanguageModel"}),(0,d.jsx)(t.td,{children:"An instance of ChatPerplexity configured with the specified parameters."})]})})]}),"\n",(0,d.jsx)(t.h2,{id:"qianfan",children:"Qianfan"}),"\n",(0,d.jsx)(t.p,{children:"This component generates text using Qianfan's language models."}),"\n",(0,d.jsxs)(t.p,{children:["For more information, see ",(0,d.jsx)(t.a,{href:"https://github.com/baidubce/bce-qianfan-sdk",children:"Qianfan documentation"}),"."]}),"\n",(0,d.jsx)(t.h2,{id:"sambanova",children:"SambaNova"}),"\n",(0,d.jsx)(t.p,{children:"This component generates text using SambaNova LLMs."}),"\n",(0,d.jsxs)(t.p,{children:["For more information, see ",(0,d.jsx)(t.a,{href:"https://cloud.sambanova.ai/",children:"Sambanova Cloud documentation"}),"."]}),"\n",(0,d.jsx)(t.h3,{id:"inputs-20",children:"Inputs"}),"\n",(0,d.jsxs)(t.table,{children:[(0,d.jsx)(t.thead,{children:(0,d.jsxs)(t.tr,{children:[(0,d.jsx)(t.th,{children:"Name"}),(0,d.jsx)(t.th,{children:"Type"}),(0,d.jsx)(t.th,{children:"Description"})]})}),(0,d.jsxs)(t.tbody,{children:[(0,d.jsxs)(t.tr,{children:[(0,d.jsx)(t.td,{children:"sambanova_url"}),(0,d.jsx)(t.td,{children:"String"}),(0,d.jsxs)(t.td,{children:["Base URL path for API requests. Default: ",(0,d.jsx)(t.code,{children:"https://api.sambanova.ai/v1/chat/completions"}),"."]})]}),(0,d.jsxs)(t.tr,{children:[(0,d.jsx)(t.td,{children:"sambanova_api_key"}),(0,d.jsx)(t.td,{children:"SecretString"}),(0,d.jsx)(t.td,{children:"Your SambaNova API Key."})]}),(0,d.jsxs)(t.tr,{children:[(0,d.jsx)(t.td,{children:"model_name"}),(0,d.jsx)(t.td,{children:"String"}),(0,d.jsx)(t.td,{children:"The name of the Sambanova model to use. Options include various Llama models."})]}),(0,d.jsxs)(t.tr,{children:[(0,d.jsx)(t.td,{children:"max_tokens"}),(0,d.jsx)(t.td,{children:"Integer"}),(0,d.jsx)(t.td,{children:"The maximum number of tokens to generate. Set to 0 for unlimited tokens."})]}),(0,d.jsxs)(t.tr,{children:[(0,d.jsx)(t.td,{children:"temperature"}),(0,d.jsx)(t.td,{children:"Float"}),(0,d.jsx)(t.td,{children:"Controls randomness in the output. Range: [0.0, 1.0]. Default: 0.07."})]})]})]}),"\n",(0,d.jsx)(t.h3,{id:"outputs-20",children:"Outputs"}),"\n",(0,d.jsxs)(t.table,{children:[(0,d.jsx)(t.thead,{children:(0,d.jsxs)(t.tr,{children:[(0,d.jsx)(t.th,{children:"Name"}),(0,d.jsx)(t.th,{children:"Type"}),(0,d.jsx)(t.th,{children:"Description"})]})}),(0,d.jsx)(t.tbody,{children:(0,d.jsxs)(t.tr,{children:[(0,d.jsx)(t.td,{children:"model"}),(0,d.jsx)(t.td,{children:"LanguageModel"}),(0,d.jsx)(t.td,{children:"An instance of SambaNova model configured with the specified parameters."})]})})]}),"\n",(0,d.jsx)(t.h2,{id:"vertexai",children:"VertexAI"}),"\n",(0,d.jsx)(t.p,{children:"This component generates text using Vertex AI LLMs."}),"\n",(0,d.jsxs)(t.p,{children:["For more information, see ",(0,d.jsx)(t.a,{href:"https://cloud.google.com/vertex-ai",children:"Google Vertex AI documentation"}),"."]}),"\n",(0,d.jsx)(t.h3,{id:"inputs-21",children:"Inputs"}),"\n",(0,d.jsxs)(t.table,{children:[(0,d.jsx)(t.thead,{children:(0,d.jsxs)(t.tr,{children:[(0,d.jsx)(t.th,{children:"Name"}),(0,d.jsx)(t.th,{children:"Type"}),(0,d.jsx)(t.th,{children:"Description"})]})}),(0,d.jsxs)(t.tbody,{children:[(0,d.jsxs)(t.tr,{children:[(0,d.jsx)(t.td,{children:"credentials"}),(0,d.jsx)(t.td,{children:"File"}),(0,d.jsx)(t.td,{children:"JSON credentials file. Leave empty to fallback to environment variables. File type: JSON."})]}),(0,d.jsxs)(t.tr,{children:[(0,d.jsx)(t.td,{children:"model_name"}),(0,d.jsx)(t.td,{children:"String"}),(0,d.jsx)(t.td,{children:'The name of the Vertex AI model to use. Default: "gemini-1.5-pro".'})]}),(0,d.jsxs)(t.tr,{children:[(0,d.jsx)(t.td,{children:"project"}),(0,d.jsx)(t.td,{children:"String"}),(0,d.jsx)(t.td,{children:"The project ID (advanced)."})]}),(0,d.jsxs)(t.tr,{children:[(0,d.jsx)(t.td,{children:"location"}),(0,d.jsx)(t.td,{children:"String"}),(0,d.jsx)(t.td,{children:'The location for the Vertex AI API. Default: "us-central1" (advanced).'})]}),(0,d.jsxs)(t.tr,{children:[(0,d.jsx)(t.td,{children:"max_output_tokens"}),(0,d.jsx)(t.td,{children:"Integer"}),(0,d.jsx)(t.td,{children:"The maximum number of tokens to generate (advanced)."})]}),(0,d.jsxs)(t.tr,{children:[(0,d.jsx)(t.td,{children:"max_retries"}),(0,d.jsx)(t.td,{children:"Integer"}),(0,d.jsx)(t.td,{children:"Maximum number of retries for API calls. Default: 1 (advanced)."})]}),(0,d.jsxs)(t.tr,{children:[(0,d.jsx)(t.td,{children:"temperature"}),(0,d.jsx)(t.td,{children:"Float"}),(0,d.jsx)(t.td,{children:"Controls randomness in the output. Default: 0.0."})]}),(0,d.jsxs)(t.tr,{children:[(0,d.jsx)(t.td,{children:"top_k"}),(0,d.jsx)(t.td,{children:"Integer"}),(0,d.jsx)(t.td,{children:"The number of highest probability vocabulary tokens to keep for top-k-filtering (advanced)."})]}),(0,d.jsxs)(t.tr,{children:[(0,d.jsx)(t.td,{children:"top_p"}),(0,d.jsx)(t.td,{children:"Float"}),(0,d.jsx)(t.td,{children:"The cumulative probability of parameter highest probability vocabulary tokens to keep for nucleus sampling. Default: 0.95 (advanced)."})]}),(0,d.jsxs)(t.tr,{children:[(0,d.jsx)(t.td,{children:"verbose"}),(0,d.jsx)(t.td,{children:"Boolean"}),(0,d.jsx)(t.td,{children:"Whether to print verbose output. Default: False (advanced)."})]})]})]}),"\n",(0,d.jsx)(t.h3,{id:"outputs-21",children:"Outputs"}),"\n",(0,d.jsxs)(t.table,{children:[(0,d.jsx)(t.thead,{children:(0,d.jsxs)(t.tr,{children:[(0,d.jsx)(t.th,{children:"Name"}),(0,d.jsx)(t.th,{children:"Type"}),(0,d.jsx)(t.th,{children:"Description"})]})}),(0,d.jsx)(t.tbody,{children:(0,d.jsxs)(t.tr,{children:[(0,d.jsx)(t.td,{children:"model"}),(0,d.jsx)(t.td,{children:"LanguageModel"}),(0,d.jsx)(t.td,{children:"An instance of ChatVertexAI configured with the specified parameters."})]})})]}),"\n",(0,d.jsx)(t.h2,{id:"xai",children:"xAI"}),"\n",(0,d.jsxs)(t.p,{children:["This component generates text using xAI models like ",(0,d.jsx)(t.a,{href:"https://x.ai/grok",children:"Grok"}),"."]}),"\n",(0,d.jsxs)(t.p,{children:["For more information, see the ",(0,d.jsx)(t.a,{href:"https://x.ai/",children:"xAI documentation"}),"."]}),"\n",(0,d.jsx)(t.h3,{id:"inputs-22",children:"Inputs"}),"\n",(0,d.jsxs)(t.table,{children:[(0,d.jsx)(t.thead,{children:(0,d.jsxs)(t.tr,{children:[(0,d.jsx)(t.th,{children:"Name"}),(0,d.jsx)(t.th,{children:"Type"}),(0,d.jsx)(t.th,{children:"Description"})]})}),(0,d.jsxs)(t.tbody,{children:[(0,d.jsxs)(t.tr,{children:[(0,d.jsx)(t.td,{children:"max_tokens"}),(0,d.jsx)(t.td,{children:"Integer"}),(0,d.jsxs)(t.td,{children:["Maximum number of tokens to generate. Set to ",(0,d.jsx)(t.code,{children:"0"})," for unlimited. Range: ",(0,d.jsx)(t.code,{children:"0-128000"}),"."]})]}),(0,d.jsxs)(t.tr,{children:[(0,d.jsx)(t.td,{children:"model_kwargs"}),(0,d.jsx)(t.td,{children:"Dictionary"}),(0,d.jsx)(t.td,{children:"Additional keyword arguments for the model."})]}),(0,d.jsxs)(t.tr,{children:[(0,d.jsx)(t.td,{children:"json_mode"}),(0,d.jsx)(t.td,{children:"Boolean"}),(0,d.jsxs)(t.td,{children:["If ",(0,d.jsx)(t.code,{children:"True"}),", outputs JSON regardless of passing a schema."]})]}),(0,d.jsxs)(t.tr,{children:[(0,d.jsx)(t.td,{children:"model_name"}),(0,d.jsx)(t.td,{children:"String"}),(0,d.jsxs)(t.td,{children:["The xAI model to use. Default: ",(0,d.jsx)(t.code,{children:"grok-2-latest"}),"."]})]}),(0,d.jsxs)(t.tr,{children:[(0,d.jsx)(t.td,{children:"base_url"}),(0,d.jsx)(t.td,{children:"String"}),(0,d.jsxs)(t.td,{children:["Base URL for API requests. Default: ",(0,d.jsx)(t.code,{children:"https://api.x.ai/v1"}),"."]})]}),(0,d.jsxs)(t.tr,{children:[(0,d.jsx)(t.td,{children:"api_key"}),(0,d.jsx)(t.td,{children:"SecretString"}),(0,d.jsx)(t.td,{children:"Your xAI API key for authentication."})]}),(0,d.jsxs)(t.tr,{children:[(0,d.jsx)(t.td,{children:"temperature"}),(0,d.jsx)(t.td,{children:"Float"}),(0,d.jsxs)(t.td,{children:["Controls randomness in the output. Range: ",(0,d.jsx)(t.code,{children:"[0.0, 2.0]"}),". Default: ",(0,d.jsx)(t.code,{children:"0.1"}),"."]})]}),(0,d.jsxs)(t.tr,{children:[(0,d.jsx)(t.td,{children:"seed"}),(0,d.jsx)(t.td,{children:"Integer"}),(0,d.jsx)(t.td,{children:"Controls reproducibility of the job."})]})]})]}),"\n",(0,d.jsx)(t.h3,{id:"outputs-22",children:"Outputs"}),"\n",(0,d.jsxs)(t.table,{children:[(0,d.jsx)(t.thead,{children:(0,d.jsxs)(t.tr,{children:[(0,d.jsx)(t.th,{children:"Name"}),(0,d.jsx)(t.th,{children:"Type"}),(0,d.jsx)(t.th,{children:"Description"})]})}),(0,d.jsx)(t.tbody,{children:(0,d.jsxs)(t.tr,{children:[(0,d.jsx)(t.td,{children:"model"}),(0,d.jsx)(t.td,{children:"LanguageModel"}),(0,d.jsx)(t.td,{children:"An instance of ChatOpenAI configured with the specified parameters."})]})})]})]})}function p(e={}){const{wrapper:t}={...(0,r.R)(),...e.components};return t?(0,d.jsx)(t,{...e,children:(0,d.jsx)(u,{...e})}):u(e)}function m(e,t){throw new Error("Expected "+(t?"component":"object")+" `"+e+"` to be defined: you likely forgot to import, pass, or provide it.")}},84443:(e,t,n)=>{n.d(t,{A:()=>r});n(96540);var s=n(64058),d=n(74848);function r(e){let{name:t,...n}=e;const r=s[t];return r?(0,d.jsx)(r,{...n}):null}},90567:(e,t,n)=>{n.d(t,{A:()=>s});const s=n.p+"assets/images/starter-flow-basic-prompting-09331815d7282bd6a3feedf84838ba20.png"},92757:(e,t,n)=>{n.d(t,{A:()=>s});const s=n.p+"assets/images/component-ollama-model-5755eab19c67fb10ee0533b3f7ade726.png"}}]); \ No newline at end of file diff --git a/assets/js/0be1d5fe.b571522a.js b/assets/js/0be1d5fe.b571522a.js new file mode 100644 index 0000000000..8dfaf89219 --- /dev/null +++ b/assets/js/0be1d5fe.b571522a.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunklangflow_docs=self.webpackChunklangflow_docs||[]).push([[145],{23592:(e,n,t)=>{t.d(n,{A:()=>s});const s=t.p+"assets/images/component-groq-d3df19923f67805fd483632d537af9f4.png"},68799:(e,n,t)=>{t.d(n,{A:()=>s});const s=t.p+"assets/images/component-watsonx-model-2f388a824b49f1c49287f07bc8738d0f.png"},73630:(e,n,t)=>{t.r(n),t.d(n,{CH:()=>a,assets:()=>o,chCodeConfig:()=>x,contentTitle:()=>c,default:()=>p,frontMatter:()=>h,metadata:()=>s,toc:()=>j});const s=JSON.parse('{"id":"Components/components-models","title":"Models","description":"Model components generate text using large language models.","source":"@site/docs/Components/components-models.md","sourceDirName":"Components","slug":"/components-models","permalink":"/components-models","draft":false,"unlisted":false,"tags":[],"version":"current","frontMatter":{"title":"Models","slug":"/components-models"},"sidebar":"docs","previous":{"title":"Memories","permalink":"/components-memories"},"next":{"title":"Processing","permalink":"/components-processing"}}');var r=t(74848),d=t(28453),i=t(24754),l=t(84443);const h={title:"Models",slug:"/components-models"},c="Model components in Langflow",o={},a={annotations:i.hk,Code:i.Cy},x={staticMediaQuery:"not screen, (max-width: 768px)",lineNumbers:!0,showCopyButton:!0,themeName:"github-dark"},j=[{value:"Use a model component in a flow",id:"use-a-model-component-in-a-flow",level:2},{value:"AI/ML API",id:"aiml-api",level:2},{value:"Amazon Bedrock",id:"amazon-bedrock",level:2},{value:"Anthropic",id:"anthropic",level:2},{value:"Azure OpenAI",id:"azure-openai",level:2},{value:"Cohere",id:"cohere",level:2},{value:"DeepSeek",id:"deepseek",level:2},{value:"Google Generative AI",id:"google-generative-ai",level:2},{value:"Groq",id:"groq",level:2},{value:"Hugging Face API",id:"hugging-face-api",level:2},{value:"IBM watsonx.ai",id:"ibm-watsonxai",level:2},{value:"Language model",id:"language-model",level:2},{value:"LMStudio",id:"lmstudio",level:2},{value:"Maritalk",id:"maritalk",level:2},{value:"Mistral",id:"mistral",level:2},{value:"Novita AI",id:"novita-ai",level:2},{value:"NVIDIA",id:"nvidia",level:2},{value:"Ollama",id:"ollama",level:2},{value:"OpenAI",id:"openai",level:2},{value:"OpenRouter",id:"openrouter",level:2},{value:"Perplexity",id:"perplexity",level:2},{value:"Qianfan",id:"qianfan",level:2},{value:"SambaNova",id:"sambanova",level:2},{value:"VertexAI",id:"vertexai",level:2},{value:"xAI",id:"xai",level:2}];function m(e){const n={a:"a",code:"code",h1:"h1",h2:"h2",header:"header",img:"img",li:"li",ol:"ol",p:"p",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",...(0,d.R)(),...e.components},{Details:s}=n;return a||u("CH",!1),a.Code||u("CH.Code",!0),s||u("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)(n.header,{children:(0,r.jsx)(n.h1,{id:"model-components-in-langflow",children:"Model components in Langflow"})}),"\n",(0,r.jsx)(n.p,{children:"Model components generate text using large language models."}),"\n",(0,r.jsx)(n.p,{children:"Refer to your specific component's documentation for more information on parameters."}),"\n",(0,r.jsx)(n.h2,{id:"use-a-model-component-in-a-flow",children:"Use a model component in a flow"}),"\n",(0,r.jsx)(n.p,{children:"Model components receive inputs and prompts for generating text, and the generated text is sent to an output component."}),"\n",(0,r.jsxs)(n.p,{children:["The model output can also be sent to the ",(0,r.jsx)(n.strong,{children:"Language Model"})," port and on to a ",(0,r.jsx)(n.strong,{children:"Parse Data"})," component, where the output can be parsed into structured ",(0,r.jsx)(n.a,{href:"/concepts-objects",children:"Data"})," objects."]}),"\n",(0,r.jsxs)(n.p,{children:["This example has the OpenAI model in a chatbot flow. For more information, see the ",(0,r.jsx)(n.a,{href:"/starter-projects-basic-prompting",children:"Basic prompting flow"}),"."]}),"\n",(0,r.jsx)(n.p,{children:(0,r.jsx)(n.img,{src:t(90567).A+"",width:"2500",height:"1528"})}),"\n",(0,r.jsx)(n.h2,{id:"aiml-api",children:"AI/ML API"}),"\n",(0,r.jsx)(n.p,{children:"This component creates a ChatOpenAI model instance using the AIML API."}),"\n",(0,r.jsxs)(n.p,{children:["For more information, see ",(0,r.jsx)(n.a,{href:"https://docs.aimlapi.com/",children:"AIML documentation"}),"."]}),"\n",(0,r.jsxs)(s,{children:[(0,r.jsx)("summary",{children:"Parameters"}),(0,r.jsx)(n.p,{children:(0,r.jsx)(n.strong,{children:"Inputs"})}),(0,r.jsxs)(n.table,{children:[(0,r.jsx)(n.thead,{children:(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.th,{children:"Name"}),(0,r.jsx)(n.th,{children:"Type"}),(0,r.jsx)(n.th,{children:"Description"})]})}),(0,r.jsxs)(n.tbody,{children:[(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"max_tokens"}),(0,r.jsx)(n.td,{children:"Integer"}),(0,r.jsx)(n.td,{children:"The maximum number of tokens to generate. Set to 0 for unlimited tokens. Range: 0-128000."})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"model_kwargs"}),(0,r.jsx)(n.td,{children:"Dictionary"}),(0,r.jsx)(n.td,{children:"Additional keyword arguments for the model."})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"model_name"}),(0,r.jsx)(n.td,{children:"String"}),(0,r.jsxs)(n.td,{children:["The name of the AIML model to use. Options are predefined in ",(0,r.jsx)(n.code,{children:"AIML_CHAT_MODELS"}),"."]})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"aiml_api_base"}),(0,r.jsx)(n.td,{children:"String"}),(0,r.jsxs)(n.td,{children:["The base URL of the AIML API. Defaults to ",(0,r.jsx)(n.code,{children:"https://api.aimlapi.com"}),"."]})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"api_key"}),(0,r.jsx)(n.td,{children:"SecretString"}),(0,r.jsx)(n.td,{children:"The AIML API Key to use for the model."})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"temperature"}),(0,r.jsx)(n.td,{children:"Float"}),(0,r.jsxs)(n.td,{children:["Controls randomness in the output. Default: ",(0,r.jsx)(n.code,{children:"0.1"}),"."]})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"seed"}),(0,r.jsx)(n.td,{children:"Integer"}),(0,r.jsx)(n.td,{children:"Controls reproducibility of the job."})]})]})]}),(0,r.jsx)(n.p,{children:(0,r.jsx)(n.strong,{children:"Outputs"})}),(0,r.jsxs)(n.table,{children:[(0,r.jsx)(n.thead,{children:(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.th,{children:"Name"}),(0,r.jsx)(n.th,{children:"Type"}),(0,r.jsx)(n.th,{children:"Description"})]})}),(0,r.jsx)(n.tbody,{children:(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"model"}),(0,r.jsx)(n.td,{children:"LanguageModel"}),(0,r.jsx)(n.td,{children:"An instance of ChatOpenAI configured with the specified parameters."})]})})]})]}),"\n",(0,r.jsx)(n.h2,{id:"amazon-bedrock",children:"Amazon Bedrock"}),"\n",(0,r.jsx)(n.p,{children:"This component generates text using Amazon Bedrock LLMs."}),"\n",(0,r.jsxs)(n.p,{children:["For more information, see ",(0,r.jsx)(n.a,{href:"https://docs.aws.amazon.com/bedrock",children:"Amazon Bedrock documentation"}),"."]}),"\n",(0,r.jsxs)(s,{children:[(0,r.jsx)("summary",{children:"Parameters"}),(0,r.jsx)(n.p,{children:(0,r.jsx)(n.strong,{children:"Inputs"})}),(0,r.jsxs)(n.table,{children:[(0,r.jsx)(n.thead,{children:(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.th,{children:"Name"}),(0,r.jsx)(n.th,{children:"Type"}),(0,r.jsx)(n.th,{children:"Description"})]})}),(0,r.jsxs)(n.tbody,{children:[(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"model_id"}),(0,r.jsx)(n.td,{children:"String"}),(0,r.jsx)(n.td,{children:"The ID of the Amazon Bedrock model to use. Options include various models."})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"aws_access_key"}),(0,r.jsx)(n.td,{children:"SecretString"}),(0,r.jsx)(n.td,{children:"AWS Access Key for authentication."})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"aws_secret_key"}),(0,r.jsx)(n.td,{children:"SecretString"}),(0,r.jsx)(n.td,{children:"AWS Secret Key for authentication."})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"credentials_profile_name"}),(0,r.jsx)(n.td,{children:"String"}),(0,r.jsx)(n.td,{children:"Name of the AWS credentials profile to use (advanced)."})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"region_name"}),(0,r.jsx)(n.td,{children:"String"}),(0,r.jsxs)(n.td,{children:["AWS region name. Default: ",(0,r.jsx)(n.code,{children:"us-east-1"}),"."]})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"model_kwargs"}),(0,r.jsx)(n.td,{children:"Dictionary"}),(0,r.jsx)(n.td,{children:"Additional keyword arguments for the model (advanced)."})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"endpoint_url"}),(0,r.jsx)(n.td,{children:"String"}),(0,r.jsx)(n.td,{children:"Custom endpoint URL for the Bedrock service (advanced)."})]})]})]}),(0,r.jsx)(n.p,{children:(0,r.jsx)(n.strong,{children:"Outputs"})}),(0,r.jsxs)(n.table,{children:[(0,r.jsx)(n.thead,{children:(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.th,{children:"Name"}),(0,r.jsx)(n.th,{children:"Type"}),(0,r.jsx)(n.th,{children:"Description"})]})}),(0,r.jsx)(n.tbody,{children:(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"model"}),(0,r.jsx)(n.td,{children:"LanguageModel"}),(0,r.jsx)(n.td,{children:"An instance of ChatBedrock configured with the specified parameters."})]})})]})]}),"\n",(0,r.jsx)(n.h2,{id:"anthropic",children:"Anthropic"}),"\n",(0,r.jsx)(n.p,{children:"This component allows the generation of text using Anthropic Chat and Language models."}),"\n",(0,r.jsxs)(n.p,{children:["For more information, see the ",(0,r.jsx)(n.a,{href:"https://docs.anthropic.com/en/docs/welcome",children:"Anthropic documentation"}),"."]}),"\n",(0,r.jsxs)(s,{children:[(0,r.jsx)("summary",{children:"Parameters"}),(0,r.jsx)(n.p,{children:(0,r.jsx)(n.strong,{children:"Inputs"})}),(0,r.jsxs)(n.table,{children:[(0,r.jsx)(n.thead,{children:(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.th,{children:"Name"}),(0,r.jsx)(n.th,{children:"Type"}),(0,r.jsx)(n.th,{children:"Description"})]})}),(0,r.jsxs)(n.tbody,{children:[(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"max_tokens"}),(0,r.jsx)(n.td,{children:"Integer"}),(0,r.jsxs)(n.td,{children:["The maximum number of tokens to generate. Set to 0 for unlimited tokens. Default: ",(0,r.jsx)(n.code,{children:"4096"}),"."]})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"model"}),(0,r.jsx)(n.td,{children:"String"}),(0,r.jsx)(n.td,{children:"The name of the Anthropic model to use. Options include various Claude 3 models."})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"anthropic_api_key"}),(0,r.jsx)(n.td,{children:"SecretString"}),(0,r.jsx)(n.td,{children:"Your Anthropic API key for authentication."})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"temperature"}),(0,r.jsx)(n.td,{children:"Float"}),(0,r.jsxs)(n.td,{children:["Controls randomness in the output. Default: ",(0,r.jsx)(n.code,{children:"0.1"}),"."]})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"anthropic_api_url"}),(0,r.jsx)(n.td,{children:"String"}),(0,r.jsxs)(n.td,{children:["Endpoint of the Anthropic API. Defaults to ",(0,r.jsx)(n.code,{children:"https://api.anthropic.com"})," if not specified (advanced)."]})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"prefill"}),(0,r.jsx)(n.td,{children:"String"}),(0,r.jsx)(n.td,{children:"Prefill text to guide the model's response (advanced)."})]})]})]}),(0,r.jsx)(n.p,{children:(0,r.jsx)(n.strong,{children:"Outputs"})}),(0,r.jsxs)(n.table,{children:[(0,r.jsx)(n.thead,{children:(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.th,{children:"Name"}),(0,r.jsx)(n.th,{children:"Type"}),(0,r.jsx)(n.th,{children:"Description"})]})}),(0,r.jsx)(n.tbody,{children:(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"model"}),(0,r.jsx)(n.td,{children:"LanguageModel"}),(0,r.jsx)(n.td,{children:"An instance of ChatAnthropic configured with the specified parameters."})]})})]})]}),"\n",(0,r.jsx)(n.h2,{id:"azure-openai",children:"Azure OpenAI"}),"\n",(0,r.jsx)(n.p,{children:"This component generates text using Azure OpenAI LLM."}),"\n",(0,r.jsxs)(n.p,{children:["For more information, see the ",(0,r.jsx)(n.a,{href:"https://learn.microsoft.com/en-us/azure/ai-services/openai/",children:"Azure OpenAI documentation"}),"."]}),"\n",(0,r.jsxs)(s,{children:[(0,r.jsx)("summary",{children:"Parameters"}),(0,r.jsx)(n.p,{children:(0,r.jsx)(n.strong,{children:"Inputs"})}),(0,r.jsxs)(n.table,{children:[(0,r.jsx)(n.thead,{children:(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.th,{children:"Name"}),(0,r.jsx)(n.th,{children:"Type"}),(0,r.jsx)(n.th,{children:"Description"})]})}),(0,r.jsxs)(n.tbody,{children:[(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"Model Name"}),(0,r.jsx)(n.td,{children:"String"}),(0,r.jsx)(n.td,{children:"Specifies the name of the Azure OpenAI model to be used for text generation."})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"Azure Endpoint"}),(0,r.jsx)(n.td,{children:"String"}),(0,r.jsx)(n.td,{children:"Your Azure endpoint, including the resource."})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"Deployment Name"}),(0,r.jsx)(n.td,{children:"String"}),(0,r.jsx)(n.td,{children:"Specifies the name of the deployment."})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"API Version"}),(0,r.jsx)(n.td,{children:"String"}),(0,r.jsx)(n.td,{children:"Specifies the version of the Azure OpenAI API to be used."})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"API Key"}),(0,r.jsx)(n.td,{children:"SecretString"}),(0,r.jsx)(n.td,{children:"Your Azure OpenAI API key."})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"Temperature"}),(0,r.jsx)(n.td,{children:"Float"}),(0,r.jsxs)(n.td,{children:["Specifies the sampling temperature. Defaults to ",(0,r.jsx)(n.code,{children:"0.7"}),"."]})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"Max Tokens"}),(0,r.jsx)(n.td,{children:"Integer"}),(0,r.jsxs)(n.td,{children:["Specifies the maximum number of tokens to generate. Defaults to ",(0,r.jsx)(n.code,{children:"1000"}),"."]})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"Input Value"}),(0,r.jsx)(n.td,{children:"String"}),(0,r.jsx)(n.td,{children:"Specifies the input text for text generation."})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"Stream"}),(0,r.jsx)(n.td,{children:"Boolean"}),(0,r.jsxs)(n.td,{children:["Specifies whether to stream the response from the model. Defaults to ",(0,r.jsx)(n.code,{children:"False"}),"."]})]})]})]}),(0,r.jsx)(n.p,{children:(0,r.jsx)(n.strong,{children:"Outputs"})}),(0,r.jsxs)(n.table,{children:[(0,r.jsx)(n.thead,{children:(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.th,{children:"Name"}),(0,r.jsx)(n.th,{children:"Type"}),(0,r.jsx)(n.th,{children:"Description"})]})}),(0,r.jsx)(n.tbody,{children:(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"model"}),(0,r.jsx)(n.td,{children:"LanguageModel"}),(0,r.jsx)(n.td,{children:"An instance of AzureOpenAI configured with the specified parameters."})]})})]})]}),"\n",(0,r.jsx)(n.h2,{id:"cohere",children:"Cohere"}),"\n",(0,r.jsx)(n.p,{children:"This component generates text using Cohere's language models."}),"\n",(0,r.jsxs)(n.p,{children:["For more information, see the ",(0,r.jsx)(n.a,{href:"https://cohere.ai/",children:"Cohere documentation"}),"."]}),"\n",(0,r.jsxs)(s,{children:[(0,r.jsx)("summary",{children:"Parameters"}),(0,r.jsx)(n.p,{children:(0,r.jsx)(n.strong,{children:"Inputs"})}),(0,r.jsxs)(n.table,{children:[(0,r.jsx)(n.thead,{children:(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.th,{children:"Name"}),(0,r.jsx)(n.th,{children:"Type"}),(0,r.jsx)(n.th,{children:"Description"})]})}),(0,r.jsxs)(n.tbody,{children:[(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"Cohere API Key"}),(0,r.jsx)(n.td,{children:"SecretString"}),(0,r.jsx)(n.td,{children:"Your Cohere API key."})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"Max Tokens"}),(0,r.jsx)(n.td,{children:"Integer"}),(0,r.jsxs)(n.td,{children:["Specifies the maximum number of tokens to generate. Defaults to ",(0,r.jsx)(n.code,{children:"256"}),"."]})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"Temperature"}),(0,r.jsx)(n.td,{children:"Float"}),(0,r.jsxs)(n.td,{children:["Specifies the sampling temperature. Defaults to ",(0,r.jsx)(n.code,{children:"0.75"}),"."]})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"Input Value"}),(0,r.jsx)(n.td,{children:"String"}),(0,r.jsx)(n.td,{children:"Specifies the input text for text generation."})]})]})]}),(0,r.jsx)(n.p,{children:(0,r.jsx)(n.strong,{children:"Outputs"})}),(0,r.jsxs)(n.table,{children:[(0,r.jsx)(n.thead,{children:(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.th,{children:"Name"}),(0,r.jsx)(n.th,{children:"Type"}),(0,r.jsx)(n.th,{children:"Description"})]})}),(0,r.jsx)(n.tbody,{children:(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"model"}),(0,r.jsx)(n.td,{children:"LanguageModel"}),(0,r.jsx)(n.td,{children:"An instance of the Cohere model configured with the specified parameters."})]})})]})]}),"\n",(0,r.jsx)(n.h2,{id:"deepseek",children:"DeepSeek"}),"\n",(0,r.jsx)(n.p,{children:"This component generates text using DeepSeek's language models."}),"\n",(0,r.jsxs)(n.p,{children:["For more information, see the ",(0,r.jsx)(n.a,{href:"https://api-docs.deepseek.com/",children:"DeepSeek documentation"}),"."]}),"\n",(0,r.jsxs)(s,{children:[(0,r.jsx)("summary",{children:"Parameters"}),(0,r.jsx)(n.p,{children:(0,r.jsx)(n.strong,{children:"Inputs"})}),(0,r.jsxs)(n.table,{children:[(0,r.jsx)(n.thead,{children:(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.th,{children:"Name"}),(0,r.jsx)(n.th,{children:"Type"}),(0,r.jsx)(n.th,{children:"Description"})]})}),(0,r.jsxs)(n.tbody,{children:[(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"max_tokens"}),(0,r.jsx)(n.td,{children:"Integer"}),(0,r.jsxs)(n.td,{children:["Maximum number of tokens to generate. Set to ",(0,r.jsx)(n.code,{children:"0"})," for unlimited. Range: ",(0,r.jsx)(n.code,{children:"0-128000"}),"."]})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"model_kwargs"}),(0,r.jsx)(n.td,{children:"Dictionary"}),(0,r.jsx)(n.td,{children:"Additional keyword arguments for the model."})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"json_mode"}),(0,r.jsx)(n.td,{children:"Boolean"}),(0,r.jsxs)(n.td,{children:["If ",(0,r.jsx)(n.code,{children:"True"}),", outputs JSON regardless of passing a schema."]})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"model_name"}),(0,r.jsx)(n.td,{children:"String"}),(0,r.jsxs)(n.td,{children:["The DeepSeek model to use. Default: ",(0,r.jsx)(n.code,{children:"deepseek-chat"}),"."]})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"api_base"}),(0,r.jsx)(n.td,{children:"String"}),(0,r.jsxs)(n.td,{children:["Base URL for API requests. Default: ",(0,r.jsx)(n.code,{children:"https://api.deepseek.com"}),"."]})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"api_key"}),(0,r.jsx)(n.td,{children:"SecretString"}),(0,r.jsx)(n.td,{children:"Your DeepSeek API key for authentication."})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"temperature"}),(0,r.jsx)(n.td,{children:"Float"}),(0,r.jsxs)(n.td,{children:["Controls randomness in responses. Range: ",(0,r.jsx)(n.code,{children:"[0.0, 2.0]"}),". Default: ",(0,r.jsx)(n.code,{children:"1.0"}),"."]})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"seed"}),(0,r.jsx)(n.td,{children:"Integer"}),(0,r.jsx)(n.td,{children:"Number initialized for random number generation. Use the same seed integer for more reproducible results, and use a different seed number for more random results."})]})]})]}),(0,r.jsx)(n.p,{children:(0,r.jsx)(n.strong,{children:"Outputs"})}),(0,r.jsxs)(n.table,{children:[(0,r.jsx)(n.thead,{children:(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.th,{children:"Name"}),(0,r.jsx)(n.th,{children:"Type"}),(0,r.jsx)(n.th,{children:"Description"})]})}),(0,r.jsx)(n.tbody,{children:(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"model"}),(0,r.jsx)(n.td,{children:"LanguageModel"}),(0,r.jsx)(n.td,{children:"An instance of ChatOpenAI configured with the specified parameters."})]})})]})]}),"\n",(0,r.jsx)(n.h2,{id:"google-generative-ai",children:"Google Generative AI"}),"\n",(0,r.jsx)(n.p,{children:"This component generates text using Google's Generative AI models."}),"\n",(0,r.jsxs)(n.p,{children:["For more information, see the ",(0,r.jsx)(n.a,{href:"https://cloud.google.com/vertex-ai/docs/",children:"Google Generative AI documentation"}),"."]}),"\n",(0,r.jsxs)(s,{children:[(0,r.jsx)("summary",{children:"Parameters"}),(0,r.jsx)(n.p,{children:(0,r.jsx)(n.strong,{children:"Inputs"})}),(0,r.jsxs)(n.table,{children:[(0,r.jsx)(n.thead,{children:(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.th,{children:"Name"}),(0,r.jsx)(n.th,{children:"Type"}),(0,r.jsx)(n.th,{children:"Description"})]})}),(0,r.jsxs)(n.tbody,{children:[(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"Google API Key"}),(0,r.jsx)(n.td,{children:"SecretString"}),(0,r.jsx)(n.td,{children:"Your Google API key to use for the Google Generative AI."})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"Model"}),(0,r.jsx)(n.td,{children:"String"}),(0,r.jsxs)(n.td,{children:["The name of the model to use, such as ",(0,r.jsx)(n.code,{children:'"gemini-pro"'}),"."]})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"Max Output Tokens"}),(0,r.jsx)(n.td,{children:"Integer"}),(0,r.jsx)(n.td,{children:"The maximum number of tokens to generate."})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"Temperature"}),(0,r.jsx)(n.td,{children:"Float"}),(0,r.jsx)(n.td,{children:"Run inference with this temperature."})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"Top K"}),(0,r.jsx)(n.td,{children:"Integer"}),(0,r.jsx)(n.td,{children:"Consider the set of top K most probable tokens."})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"Top P"}),(0,r.jsx)(n.td,{children:"Float"}),(0,r.jsx)(n.td,{children:"The maximum cumulative probability of tokens to consider when sampling."})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"N"}),(0,r.jsx)(n.td,{children:"Integer"}),(0,r.jsx)(n.td,{children:"Number of chat completions to generate for each prompt."})]})]})]}),(0,r.jsx)(n.p,{children:(0,r.jsx)(n.strong,{children:"Outputs"})}),(0,r.jsxs)(n.table,{children:[(0,r.jsx)(n.thead,{children:(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.th,{children:"Name"}),(0,r.jsx)(n.th,{children:"Type"}),(0,r.jsx)(n.th,{children:"Description"})]})}),(0,r.jsx)(n.tbody,{children:(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"model"}),(0,r.jsx)(n.td,{children:"LanguageModel"}),(0,r.jsx)(n.td,{children:"An instance of ChatGoogleGenerativeAI configured with the specified parameters."})]})})]})]}),"\n",(0,r.jsx)(n.h2,{id:"groq",children:"Groq"}),"\n",(0,r.jsx)(n.p,{children:"This component generates text using Groq's language models."}),"\n",(0,r.jsxs)(n.ol,{children:["\n",(0,r.jsxs)(n.li,{children:["To use this component in a flow, connect it as a ",(0,r.jsx)(n.strong,{children:"Model"})," in a flow like the ",(0,r.jsx)(n.a,{href:"/starter-projects-basic-prompting",children:"Basic prompting flow"}),", or select it as the ",(0,r.jsx)(n.strong,{children:"Model Provider"})," if you're using an ",(0,r.jsx)(n.strong,{children:"Agent"})," component."]}),"\n"]}),"\n",(0,r.jsx)(n.p,{children:(0,r.jsx)(n.img,{alt:"Groq component in a basic prompting flow",src:t(23592).A+"",width:"1982",height:"1194"})}),"\n",(0,r.jsxs)(n.ol,{start:"2",children:["\n",(0,r.jsxs)(n.li,{children:["In the ",(0,r.jsx)(n.strong,{children:"Groq API Key"})," field, paste your Groq API key.\nThe Groq model component automatically retrieves a list of the latest models.\nTo refresh your list of models, click ",(0,r.jsx)(l.A,{name:"RefreshCw","aria-label":"Refresh"}),"."]}),"\n",(0,r.jsxs)(n.li,{children:["In the ",(0,r.jsx)(n.strong,{children:"Model"})," field, select the model you want to use for your LLM.\nThis example uses ",(0,r.jsx)(n.a,{href:"https://console.groq.com/docs/model/llama-3.1-8b-instant",children:"llama-3.1-8b-instant"}),", which Groq recommends for real-time conversational interfaces."]}),"\n",(0,r.jsxs)(n.li,{children:["In the ",(0,r.jsx)(n.strong,{children:"Prompt"})," component, enter:"]}),"\n"]}),"\n",(0,r.jsx)(a.Code,{codeConfig:x,northPanel:{tabs:[""],active:"",heightRatio:1},files:[{name:"",focus:"",code:{lines:[{tokens:[{content:"You are a helpful assistant who supports their claims with sources.",props:{}}]}],lang:"text"},annotations:[]}]}),"\n",(0,r.jsxs)(n.ol,{start:"5",children:["\n",(0,r.jsxs)(n.li,{children:["Click ",(0,r.jsx)(n.strong,{children:"Playground"})," and ask your Groq LLM a question.\nThe responses include a list of sources."]}),"\n"]}),"\n",(0,r.jsxs)(n.p,{children:["For more information, see the ",(0,r.jsx)(n.a,{href:"https://groq.com/",children:"Groq documentation"}),"."]}),"\n",(0,r.jsxs)(s,{children:[(0,r.jsx)("summary",{children:"Parameters"}),(0,r.jsx)(n.p,{children:(0,r.jsx)(n.strong,{children:"Inputs"})}),(0,r.jsxs)(n.table,{children:[(0,r.jsx)(n.thead,{children:(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.th,{children:"Name"}),(0,r.jsx)(n.th,{children:"Type"}),(0,r.jsx)(n.th,{children:"Description"})]})}),(0,r.jsxs)(n.tbody,{children:[(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"groq_api_key"}),(0,r.jsx)(n.td,{children:"SecretString"}),(0,r.jsx)(n.td,{children:"API key for the Groq API."})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"groq_api_base"}),(0,r.jsx)(n.td,{children:"String"}),(0,r.jsxs)(n.td,{children:["Base URL path for API requests. Default: ",(0,r.jsx)(n.code,{children:"https://api.groq.com"}),"."]})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"max_tokens"}),(0,r.jsx)(n.td,{children:"Integer"}),(0,r.jsx)(n.td,{children:"The maximum number of tokens to generate."})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"temperature"}),(0,r.jsx)(n.td,{children:"Float"}),(0,r.jsxs)(n.td,{children:["Controls randomness in the output. Range: ",(0,r.jsx)(n.code,{children:"[0.0, 1.0]"}),". Default: ",(0,r.jsx)(n.code,{children:"0.1"}),"."]})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"n"}),(0,r.jsx)(n.td,{children:"Integer"}),(0,r.jsx)(n.td,{children:"Number of chat completions to generate for each prompt."})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"model_name"}),(0,r.jsx)(n.td,{children:"String"}),(0,r.jsx)(n.td,{children:"The name of the Groq model to use. Options are dynamically fetched from the Groq API."})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"tool_mode_enabled"}),(0,r.jsx)(n.td,{children:"Bool"}),(0,r.jsx)(n.td,{children:"If enabled, the component only displays models that work with tools."})]})]})]}),(0,r.jsx)(n.p,{children:(0,r.jsx)(n.strong,{children:"Outputs"})}),(0,r.jsxs)(n.table,{children:[(0,r.jsx)(n.thead,{children:(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.th,{children:"Name"}),(0,r.jsx)(n.th,{children:"Type"}),(0,r.jsx)(n.th,{children:"Description"})]})}),(0,r.jsx)(n.tbody,{children:(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"model"}),(0,r.jsx)(n.td,{children:"LanguageModel"}),(0,r.jsx)(n.td,{children:"An instance of ChatGroq configured with the specified parameters."})]})})]})]}),"\n",(0,r.jsx)(n.h2,{id:"hugging-face-api",children:"Hugging Face API"}),"\n",(0,r.jsxs)(n.p,{children:["This component sends requests to the Hugging Face API to generate text using the model specified in the ",(0,r.jsx)(n.strong,{children:"Model ID"})," field."]}),"\n",(0,r.jsxs)(n.p,{children:["The Hugging Face API is a hosted inference API for models hosted on Hugging Face, and requires a ",(0,r.jsx)(n.a,{href:"https://huggingface.co/docs/hub/security-tokens",children:"Hugging Face API token"})," to authenticate."]}),"\n",(0,r.jsxs)(n.p,{children:["In this example based on the ",(0,r.jsx)(n.a,{href:"/starter-projects-basic-prompting",children:"Basic prompting flow"}),", the ",(0,r.jsx)(n.strong,{children:"Hugging Face API"})," model component replaces the ",(0,r.jsx)(n.strong,{children:"Open AI"})," model. By selecting different hosted models, you can see how different models return different results."]}),"\n",(0,r.jsxs)(n.ol,{children:["\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:["Create a ",(0,r.jsx)(n.a,{href:"/starter-projects-basic-prompting",children:"Basic prompting flow"}),"."]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:["Replace the ",(0,r.jsx)(n.strong,{children:"OpenAI"})," model component with a ",(0,r.jsx)(n.strong,{children:"Hugging Face API"})," model component."]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:["In the ",(0,r.jsx)(n.strong,{children:"Hugging Face API"})," component, add your Hugging Face API token to the ",(0,r.jsx)(n.strong,{children:"API Token"})," field."]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:["Open the ",(0,r.jsx)(n.strong,{children:"Playground"})," and ask a question to the model, and see how it responds."]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsx)(n.p,{children:"Try different models, and see how they perform differently."}),"\n"]}),"\n"]}),"\n",(0,r.jsxs)(n.p,{children:["For more information, see the ",(0,r.jsx)(n.a,{href:"https://huggingface.co/",children:"Hugging Face documentation"}),"."]}),"\n",(0,r.jsxs)(s,{children:[(0,r.jsx)("summary",{children:"Parameters"}),(0,r.jsx)(n.p,{children:(0,r.jsx)(n.strong,{children:"Inputs"})}),(0,r.jsxs)(n.table,{children:[(0,r.jsx)(n.thead,{children:(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.th,{children:"Name"}),(0,r.jsx)(n.th,{children:"Type"}),(0,r.jsx)(n.th,{children:"Description"})]})}),(0,r.jsxs)(n.tbody,{children:[(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"model_id"}),(0,r.jsx)(n.td,{children:"String"}),(0,r.jsx)(n.td,{children:'The model ID from Hugging Face Hub. For example, "gpt2", "facebook/bart-large".'})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"huggingfacehub_api_token"}),(0,r.jsx)(n.td,{children:"SecretString"}),(0,r.jsx)(n.td,{children:"Your Hugging Face API token for authentication."})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"temperature"}),(0,r.jsx)(n.td,{children:"Float"}),(0,r.jsx)(n.td,{children:"Controls randomness in the output. Range: [0.0, 1.0]. Default: 0.7."})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"max_new_tokens"}),(0,r.jsx)(n.td,{children:"Integer"}),(0,r.jsx)(n.td,{children:"Maximum number of tokens to generate. Default: 512."})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"top_p"}),(0,r.jsx)(n.td,{children:"Float"}),(0,r.jsx)(n.td,{children:"Nucleus sampling parameter. Range: [0.0, 1.0]. Default: 0.95."})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"top_k"}),(0,r.jsx)(n.td,{children:"Integer"}),(0,r.jsx)(n.td,{children:"Top-k sampling parameter. Default: 50."})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"model_kwargs"}),(0,r.jsx)(n.td,{children:"Dictionary"}),(0,r.jsx)(n.td,{children:"Additional keyword arguments to pass to the model."})]})]})]}),(0,r.jsx)(n.p,{children:(0,r.jsx)(n.strong,{children:"Outputs"})}),(0,r.jsxs)(n.table,{children:[(0,r.jsx)(n.thead,{children:(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.th,{children:"Name"}),(0,r.jsx)(n.th,{children:"Type"}),(0,r.jsx)(n.th,{children:"Description"})]})}),(0,r.jsx)(n.tbody,{children:(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"model"}),(0,r.jsx)(n.td,{children:"LanguageModel"}),(0,r.jsx)(n.td,{children:"An instance of HuggingFaceHub configured with the specified parameters."})]})})]})]}),"\n",(0,r.jsx)(n.h2,{id:"ibm-watsonxai",children:"IBM watsonx.ai"}),"\n",(0,r.jsxs)(n.p,{children:["This component generates text using ",(0,r.jsx)(n.a,{href:"https://www.ibm.com/watsonx",children:"IBM watsonx.ai"})," foundation models."]}),"\n",(0,r.jsxs)(n.p,{children:["To use ",(0,r.jsx)(n.strong,{children:"IBM watsonx.ai"})," model components, replace a model component with the IBM watsonx.ai component in a flow."]}),"\n",(0,r.jsx)(n.p,{children:"An example flow looks like the following:"}),"\n",(0,r.jsx)(n.p,{children:(0,r.jsx)(n.img,{alt:"IBM watsonx model component in a basic prompting flow",src:t(68799).A+"",width:"2364",height:"1562"})}),"\n",(0,r.jsxs)(n.p,{children:["The values for ",(0,r.jsx)(n.strong,{children:"API endpoint"}),", ",(0,r.jsx)(n.strong,{children:"Project ID"}),", ",(0,r.jsx)(n.strong,{children:"API key"}),", and ",(0,r.jsx)(n.strong,{children:"Model Name"})," are found in your IBM watsonx.ai deployment.\nFor more information, see the ",(0,r.jsx)(n.a,{href:"https://python.langchain.com/docs/integrations/chat/ibm_watsonx/",children:"Langchain documentation"}),"."]}),"\n",(0,r.jsxs)(s,{children:[(0,r.jsx)("summary",{children:"Parameters"}),(0,r.jsx)(n.p,{children:(0,r.jsx)(n.strong,{children:"Inputs"})}),(0,r.jsxs)(n.table,{children:[(0,r.jsx)(n.thead,{children:(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.th,{children:"Name"}),(0,r.jsx)(n.th,{children:"Type"}),(0,r.jsx)(n.th,{children:"Description"})]})}),(0,r.jsxs)(n.tbody,{children:[(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"url"}),(0,r.jsx)(n.td,{children:"String"}),(0,r.jsx)(n.td,{children:"The base URL of the watsonx API."})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"project_id"}),(0,r.jsx)(n.td,{children:"String"}),(0,r.jsx)(n.td,{children:"Your watsonx Project ID."})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"api_key"}),(0,r.jsx)(n.td,{children:"SecretString"}),(0,r.jsx)(n.td,{children:"Your IBM watsonx API Key."})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"model_name"}),(0,r.jsx)(n.td,{children:"String"}),(0,r.jsx)(n.td,{children:"The name of the watsonx model to use. Options are dynamically fetched from the API."})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"max_tokens"}),(0,r.jsx)(n.td,{children:"Integer"}),(0,r.jsxs)(n.td,{children:["The maximum number of tokens to generate. Default: ",(0,r.jsx)(n.code,{children:"1000"}),"."]})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"stop_sequence"}),(0,r.jsx)(n.td,{children:"String"}),(0,r.jsx)(n.td,{children:"The sequence where generation should stop."})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"temperature"}),(0,r.jsx)(n.td,{children:"Float"}),(0,r.jsxs)(n.td,{children:["Controls randomness in the output. Default: ",(0,r.jsx)(n.code,{children:"0.1"}),"."]})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"top_p"}),(0,r.jsx)(n.td,{children:"Float"}),(0,r.jsxs)(n.td,{children:["Controls nucleus sampling, which limits the model to tokens whose probability is below the ",(0,r.jsx)(n.code,{children:"top_p"})," value. Range: Default: ",(0,r.jsx)(n.code,{children:"0.9"}),"."]})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"frequency_penalty"}),(0,r.jsx)(n.td,{children:"Float"}),(0,r.jsxs)(n.td,{children:["Controls frequency penalty. A positive value decreases the probability of repeating tokens, and a negative value increases the probability. Range: Default: ",(0,r.jsx)(n.code,{children:"0.5"}),"."]})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"presence_penalty"}),(0,r.jsx)(n.td,{children:"Float"}),(0,r.jsxs)(n.td,{children:["Controls presence penalty. A positive value increases the likelihood of new topics being introduced. Default: ",(0,r.jsx)(n.code,{children:"0.3"}),"."]})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"seed"}),(0,r.jsx)(n.td,{children:"Integer"}),(0,r.jsxs)(n.td,{children:["A random seed for the model. Default: ",(0,r.jsx)(n.code,{children:"8"}),"."]})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"logprobs"}),(0,r.jsx)(n.td,{children:"Boolean"}),(0,r.jsxs)(n.td,{children:["Whether to return log probabilities of output tokens or not. Default: ",(0,r.jsx)(n.code,{children:"True"}),"."]})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"top_logprobs"}),(0,r.jsx)(n.td,{children:"Integer"}),(0,r.jsxs)(n.td,{children:["The number of most likely tokens to return at each position. Default: ",(0,r.jsx)(n.code,{children:"3"}),"."]})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"logit_bias"}),(0,r.jsx)(n.td,{children:"String"}),(0,r.jsx)(n.td,{children:"A JSON string of token IDs to bias or suppress."})]})]})]}),(0,r.jsx)(n.p,{children:(0,r.jsx)(n.strong,{children:"Outputs"})}),(0,r.jsxs)(n.table,{children:[(0,r.jsx)(n.thead,{children:(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.th,{children:"Name"}),(0,r.jsx)(n.th,{children:"Type"}),(0,r.jsx)(n.th,{children:"Description"})]})}),(0,r.jsx)(n.tbody,{children:(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"model"}),(0,r.jsx)(n.td,{children:"LanguageModel"}),(0,r.jsxs)(n.td,{children:["An instance of ",(0,r.jsx)(n.a,{href:"https://python.langchain.com/docs/integrations/chat/ibm_watsonx/",children:"ChatWatsonx"})," configured with the specified parameters."]})]})})]})]}),"\n",(0,r.jsx)(n.h2,{id:"language-model",children:"Language model"}),"\n",(0,r.jsx)(n.p,{children:"This component generates text using either OpenAI or Anthropic language models."}),"\n",(0,r.jsx)(n.p,{children:"Use this component as a drop-in replacement for LLM models to switch between different model providers and models."}),"\n",(0,r.jsx)(n.p,{children:"Instead of swapping out model components when you want to try a different provider, like switching between OpenAI and Anthropic components, change the provider dropdown in this single component. This makes it easier to experiment with and compare different models while keeping the rest of your flow intact."}),"\n",(0,r.jsxs)(n.p,{children:["For more information, see the ",(0,r.jsx)(n.a,{href:"https://platform.openai.com/docs",children:"OpenAI documentation"})," and ",(0,r.jsx)(n.a,{href:"https://docs.anthropic.com/",children:"Anthropic documentation"}),"."]}),"\n",(0,r.jsxs)(s,{children:[(0,r.jsx)("summary",{children:"Parameters"}),(0,r.jsx)(n.p,{children:(0,r.jsx)(n.strong,{children:"Inputs"})}),(0,r.jsxs)(n.table,{children:[(0,r.jsx)(n.thead,{children:(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.th,{children:"Name"}),(0,r.jsx)(n.th,{children:"Type"}),(0,r.jsx)(n.th,{children:"Description"})]})}),(0,r.jsxs)(n.tbody,{children:[(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"provider"}),(0,r.jsx)(n.td,{children:"String"}),(0,r.jsx)(n.td,{children:'The model provider to use. Options: "OpenAI", "Anthropic". Default: "OpenAI".'})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"model_name"}),(0,r.jsx)(n.td,{children:"String"}),(0,r.jsx)(n.td,{children:"The name of the model to use. Options depend on the selected provider."})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"api_key"}),(0,r.jsx)(n.td,{children:"SecretString"}),(0,r.jsx)(n.td,{children:"The API Key for authentication with the selected provider."})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"input_value"}),(0,r.jsx)(n.td,{children:"String"}),(0,r.jsx)(n.td,{children:"The input text to send to the model."})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"system_message"}),(0,r.jsx)(n.td,{children:"String"}),(0,r.jsx)(n.td,{children:"A system message that helps set the behavior of the assistant (advanced)."})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"stream"}),(0,r.jsx)(n.td,{children:"Boolean"}),(0,r.jsxs)(n.td,{children:["Whether to stream the response. Default: ",(0,r.jsx)(n.code,{children:"False"})," (advanced)."]})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"temperature"}),(0,r.jsx)(n.td,{children:"Float"}),(0,r.jsxs)(n.td,{children:["Controls randomness in responses. Range: ",(0,r.jsx)(n.code,{children:"[0.0, 1.0]"}),". Default: ",(0,r.jsx)(n.code,{children:"0.1"})," (advanced)."]})]})]})]}),(0,r.jsx)(n.p,{children:(0,r.jsx)(n.strong,{children:"Outputs"})}),(0,r.jsxs)(n.table,{children:[(0,r.jsx)(n.thead,{children:(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.th,{children:"Name"}),(0,r.jsx)(n.th,{children:"Type"}),(0,r.jsx)(n.th,{children:"Description"})]})}),(0,r.jsx)(n.tbody,{children:(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"model"}),(0,r.jsx)(n.td,{children:"LanguageModel"}),(0,r.jsx)(n.td,{children:"An instance of ChatOpenAI or ChatAnthropic configured with the specified parameters."})]})})]})]}),"\n",(0,r.jsx)(n.h2,{id:"lmstudio",children:"LMStudio"}),"\n",(0,r.jsx)(n.p,{children:"This component generates text using LM Studio's local language models."}),"\n",(0,r.jsxs)(n.p,{children:["For more information, see ",(0,r.jsx)(n.a,{href:"https://lmstudio.ai/",children:"LM Studio documentation"}),"."]}),"\n",(0,r.jsxs)(s,{children:[(0,r.jsx)("summary",{children:"Parameters"}),(0,r.jsx)(n.p,{children:(0,r.jsx)(n.strong,{children:"Inputs"})}),(0,r.jsxs)(n.table,{children:[(0,r.jsx)(n.thead,{children:(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.th,{children:"Name"}),(0,r.jsx)(n.th,{children:"Type"}),(0,r.jsx)(n.th,{children:"Description"})]})}),(0,r.jsxs)(n.tbody,{children:[(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"base_url"}),(0,r.jsx)(n.td,{children:"String"}),(0,r.jsxs)(n.td,{children:["The URL where LM Studio is running. Default: ",(0,r.jsx)(n.code,{children:'"http://localhost:1234"'}),"."]})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"max_tokens"}),(0,r.jsx)(n.td,{children:"Integer"}),(0,r.jsxs)(n.td,{children:["Maximum number of tokens to generate in the response. Default: ",(0,r.jsx)(n.code,{children:"512"}),"."]})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"temperature"}),(0,r.jsx)(n.td,{children:"Float"}),(0,r.jsxs)(n.td,{children:["Controls randomness in the output. Range: ",(0,r.jsx)(n.code,{children:"[0.0, 2.0]"}),". Default: ",(0,r.jsx)(n.code,{children:"0.7"}),"."]})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"top_p"}),(0,r.jsx)(n.td,{children:"Float"}),(0,r.jsxs)(n.td,{children:["Controls diversity via nucleus sampling. Range: ",(0,r.jsx)(n.code,{children:"[0.0, 1.0]"}),". Default: ",(0,r.jsx)(n.code,{children:"1.0"}),"."]})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"stop"}),(0,r.jsx)(n.td,{children:"List[String]"}),(0,r.jsx)(n.td,{children:"List of strings that stop generation when encountered."})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"stream"}),(0,r.jsx)(n.td,{children:"Boolean"}),(0,r.jsxs)(n.td,{children:["Whether to stream the response. Default: ",(0,r.jsx)(n.code,{children:"False"}),"."]})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"presence_penalty"}),(0,r.jsx)(n.td,{children:"Float"}),(0,r.jsxs)(n.td,{children:["Penalizes repeated tokens. Range: ",(0,r.jsx)(n.code,{children:"[-2.0, 2.0]"}),". Default: ",(0,r.jsx)(n.code,{children:"0.0"}),"."]})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"frequency_penalty"}),(0,r.jsx)(n.td,{children:"Float"}),(0,r.jsxs)(n.td,{children:["Penalizes frequent tokens. Range: ",(0,r.jsx)(n.code,{children:"[-2.0, 2.0]"}),". Default: ",(0,r.jsx)(n.code,{children:"0.0"}),"."]})]})]})]}),(0,r.jsx)(n.p,{children:(0,r.jsx)(n.strong,{children:"Outputs"})}),(0,r.jsxs)(n.table,{children:[(0,r.jsx)(n.thead,{children:(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.th,{children:"Name"}),(0,r.jsx)(n.th,{children:"Type"}),(0,r.jsx)(n.th,{children:"Description"})]})}),(0,r.jsx)(n.tbody,{children:(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"model"}),(0,r.jsx)(n.td,{children:"LanguageModel"}),(0,r.jsx)(n.td,{children:"An instance of LMStudio configured with the specified parameters."})]})})]})]}),"\n",(0,r.jsx)(n.h2,{id:"maritalk",children:"Maritalk"}),"\n",(0,r.jsx)(n.p,{children:"This component generates text using Maritalk LLMs."}),"\n",(0,r.jsxs)(n.p,{children:["For more information, see ",(0,r.jsx)(n.a,{href:"https://www.maritalk.com/",children:"Maritalk documentation"}),"."]}),"\n",(0,r.jsxs)(s,{children:[(0,r.jsx)("summary",{children:"Parameters"}),(0,r.jsx)(n.p,{children:(0,r.jsx)(n.strong,{children:"Inputs"})}),(0,r.jsxs)(n.table,{children:[(0,r.jsx)(n.thead,{children:(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.th,{children:"Name"}),(0,r.jsx)(n.th,{children:"Type"}),(0,r.jsx)(n.th,{children:"Description"})]})}),(0,r.jsxs)(n.tbody,{children:[(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"max_tokens"}),(0,r.jsx)(n.td,{children:"Integer"}),(0,r.jsxs)(n.td,{children:["The maximum number of tokens to generate. Set to ",(0,r.jsx)(n.code,{children:"0"})," for unlimited tokens. Default: ",(0,r.jsx)(n.code,{children:"512"}),"."]})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"model_name"}),(0,r.jsx)(n.td,{children:"String"}),(0,r.jsxs)(n.td,{children:["The name of the Maritalk model to use. Options: ",(0,r.jsx)(n.code,{children:"sabia-2-small"}),", ",(0,r.jsx)(n.code,{children:"sabia-2-medium"}),". Default: ",(0,r.jsx)(n.code,{children:"sabia-2-small"}),"."]})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"api_key"}),(0,r.jsx)(n.td,{children:"SecretString"}),(0,r.jsx)(n.td,{children:"The Maritalk API Key to use for authentication."})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"temperature"}),(0,r.jsx)(n.td,{children:"Float"}),(0,r.jsxs)(n.td,{children:["Controls randomness in the output. Range: ",(0,r.jsx)(n.code,{children:"[0.0, 1.0]"}),". Default: ",(0,r.jsx)(n.code,{children:"0.5"}),"."]})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"endpoint_url"}),(0,r.jsx)(n.td,{children:"String"}),(0,r.jsxs)(n.td,{children:["The Maritalk API endpoint. Default: ",(0,r.jsx)(n.code,{children:"https://api.maritalk.com"}),"."]})]})]})]}),(0,r.jsx)(n.p,{children:(0,r.jsx)(n.strong,{children:"Outputs"})}),(0,r.jsxs)(n.table,{children:[(0,r.jsx)(n.thead,{children:(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.th,{children:"Name"}),(0,r.jsx)(n.th,{children:"Type"}),(0,r.jsx)(n.th,{children:"Description"})]})}),(0,r.jsx)(n.tbody,{children:(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"model"}),(0,r.jsx)(n.td,{children:"LanguageModel"}),(0,r.jsx)(n.td,{children:"An instance of ChatMaritalk configured with the specified parameters."})]})})]})]}),"\n",(0,r.jsx)(n.h2,{id:"mistral",children:"Mistral"}),"\n",(0,r.jsx)(n.p,{children:"This component generates text using MistralAI LLMs."}),"\n",(0,r.jsxs)(n.p,{children:["For more information, see ",(0,r.jsx)(n.a,{href:"https://docs.mistral.ai/",children:"Mistral AI documentation"}),"."]}),"\n",(0,r.jsxs)(s,{children:[(0,r.jsx)("summary",{children:"Parameters"}),(0,r.jsx)(n.p,{children:(0,r.jsx)(n.strong,{children:"Inputs"})}),(0,r.jsxs)(n.table,{children:[(0,r.jsx)(n.thead,{children:(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.th,{children:"Name"}),(0,r.jsx)(n.th,{children:"Type"}),(0,r.jsx)(n.th,{children:"Description"})]})}),(0,r.jsxs)(n.tbody,{children:[(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"max_tokens"}),(0,r.jsx)(n.td,{children:"Integer"}),(0,r.jsx)(n.td,{children:"The maximum number of tokens to generate. Set to 0 for unlimited tokens (advanced)."})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"model_name"}),(0,r.jsx)(n.td,{children:"String"}),(0,r.jsxs)(n.td,{children:["The name of the Mistral AI model to use. Options include ",(0,r.jsx)(n.code,{children:"open-mixtral-8x7b"}),", ",(0,r.jsx)(n.code,{children:"open-mixtral-8x22b"}),", ",(0,r.jsx)(n.code,{children:"mistral-small-latest"}),", ",(0,r.jsx)(n.code,{children:"mistral-medium-latest"}),", ",(0,r.jsx)(n.code,{children:"mistral-large-latest"}),", and ",(0,r.jsx)(n.code,{children:"codestral-latest"}),". Default: ",(0,r.jsx)(n.code,{children:"codestral-latest"}),"."]})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"mistral_api_base"}),(0,r.jsx)(n.td,{children:"String"}),(0,r.jsxs)(n.td,{children:["The base URL of the Mistral API. Defaults to ",(0,r.jsx)(n.code,{children:"https://api.mistral.ai/v1"})," (advanced)."]})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"api_key"}),(0,r.jsx)(n.td,{children:"SecretString"}),(0,r.jsx)(n.td,{children:"The Mistral API Key to use for authentication."})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"temperature"}),(0,r.jsx)(n.td,{children:"Float"}),(0,r.jsx)(n.td,{children:"Controls randomness in the output. Default: 0.5."})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"max_retries"}),(0,r.jsx)(n.td,{children:"Integer"}),(0,r.jsx)(n.td,{children:"Maximum number of retries for API calls. Default: 5 (advanced)."})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"timeout"}),(0,r.jsx)(n.td,{children:"Integer"}),(0,r.jsx)(n.td,{children:"Timeout for API calls in seconds. Default: 60 (advanced)."})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"max_concurrent_requests"}),(0,r.jsx)(n.td,{children:"Integer"}),(0,r.jsx)(n.td,{children:"Maximum number of concurrent API requests. Default: 3 (advanced)."})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"top_p"}),(0,r.jsx)(n.td,{children:"Float"}),(0,r.jsx)(n.td,{children:"Nucleus sampling parameter. Default: 1 (advanced)."})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"random_seed"}),(0,r.jsx)(n.td,{children:"Integer"}),(0,r.jsx)(n.td,{children:"Seed for random number generation. Default: 1 (advanced)."})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"safe_mode"}),(0,r.jsx)(n.td,{children:"Boolean"}),(0,r.jsx)(n.td,{children:"Enables safe mode for content generation (advanced)."})]})]})]}),(0,r.jsx)(n.p,{children:(0,r.jsx)(n.strong,{children:"Outputs"})}),(0,r.jsxs)(n.table,{children:[(0,r.jsx)(n.thead,{children:(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.th,{children:"Name"}),(0,r.jsx)(n.th,{children:"Type"}),(0,r.jsx)(n.th,{children:"Description"})]})}),(0,r.jsx)(n.tbody,{children:(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"model"}),(0,r.jsx)(n.td,{children:"LanguageModel"}),(0,r.jsx)(n.td,{children:"An instance of ChatMistralAI configured with the specified parameters."})]})})]})]}),"\n",(0,r.jsx)(n.h2,{id:"novita-ai",children:"Novita AI"}),"\n",(0,r.jsx)(n.p,{children:"This component generates text using Novita AI's language models."}),"\n",(0,r.jsxs)(n.p,{children:["For more information, see ",(0,r.jsx)(n.a,{href:"https://novita.ai/docs/model-api/reference/llm/llm.html?utm_source=github_langflow&utm_medium=github_readme&utm_campaign=link",children:"Novita AI documentation"}),"."]}),"\n",(0,r.jsxs)(s,{children:[(0,r.jsx)("summary",{children:"Parameters"}),(0,r.jsx)(n.p,{children:(0,r.jsx)(n.strong,{children:"Inputs"})}),(0,r.jsxs)(n.table,{children:[(0,r.jsx)(n.thead,{children:(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.th,{children:"Name"}),(0,r.jsx)(n.th,{children:"Type"}),(0,r.jsx)(n.th,{children:"Description"})]})}),(0,r.jsxs)(n.tbody,{children:[(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"api_key"}),(0,r.jsx)(n.td,{children:"SecretString"}),(0,r.jsx)(n.td,{children:"Your Novita AI API Key."})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"model"}),(0,r.jsx)(n.td,{children:"String"}),(0,r.jsx)(n.td,{children:"The id of the Novita AI model to use."})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"max_tokens"}),(0,r.jsx)(n.td,{children:"Integer"}),(0,r.jsx)(n.td,{children:"The maximum number of tokens to generate. Set to 0 for unlimited tokens."})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"temperature"}),(0,r.jsx)(n.td,{children:"Float"}),(0,r.jsx)(n.td,{children:"Controls randomness in the output. Range: [0.0, 1.0]. Default: 0.7."})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"top_p"}),(0,r.jsx)(n.td,{children:"Float"}),(0,r.jsx)(n.td,{children:"Controls the nucleus sampling. Range: [0.0, 1.0]. Default: 1.0."})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"frequency_penalty"}),(0,r.jsx)(n.td,{children:"Float"}),(0,r.jsx)(n.td,{children:"Controls the frequency penalty. Range: [0.0, 2.0]. Default: 0.0."})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"presence_penalty"}),(0,r.jsx)(n.td,{children:"Float"}),(0,r.jsx)(n.td,{children:"Controls the presence penalty. Range: [0.0, 2.0]. Default: 0.0."})]})]})]}),(0,r.jsx)(n.p,{children:(0,r.jsx)(n.strong,{children:"Outputs"})}),(0,r.jsxs)(n.table,{children:[(0,r.jsx)(n.thead,{children:(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.th,{children:"Name"}),(0,r.jsx)(n.th,{children:"Type"}),(0,r.jsx)(n.th,{children:"Description"})]})}),(0,r.jsx)(n.tbody,{children:(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"model"}),(0,r.jsx)(n.td,{children:"LanguageModel"}),(0,r.jsx)(n.td,{children:"An instance of Novita AI model configured with the specified parameters."})]})})]})]}),"\n",(0,r.jsx)(n.h2,{id:"nvidia",children:"NVIDIA"}),"\n",(0,r.jsx)(n.p,{children:"This component generates text using NVIDIA LLMs."}),"\n",(0,r.jsxs)(n.p,{children:["For more information, see ",(0,r.jsx)(n.a,{href:"https://developer.nvidia.com/generative-ai",children:"NVIDIA AI documentation"}),"."]}),"\n",(0,r.jsxs)(s,{children:[(0,r.jsx)("summary",{children:"Parameters"}),(0,r.jsx)(n.p,{children:(0,r.jsx)(n.strong,{children:"Inputs"})}),(0,r.jsxs)(n.table,{children:[(0,r.jsx)(n.thead,{children:(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.th,{children:"Name"}),(0,r.jsx)(n.th,{children:"Type"}),(0,r.jsx)(n.th,{children:"Description"})]})}),(0,r.jsxs)(n.tbody,{children:[(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"max_tokens"}),(0,r.jsx)(n.td,{children:"Integer"}),(0,r.jsxs)(n.td,{children:["The maximum number of tokens to generate. Set to ",(0,r.jsx)(n.code,{children:"0"})," for unlimited tokens (advanced)."]})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"model_name"}),(0,r.jsx)(n.td,{children:"String"}),(0,r.jsxs)(n.td,{children:["The name of the NVIDIA model to use. Default: ",(0,r.jsx)(n.code,{children:"mistralai/mixtral-8x7b-instruct-v0.1"}),"."]})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"base_url"}),(0,r.jsx)(n.td,{children:"String"}),(0,r.jsxs)(n.td,{children:["The base URL of the NVIDIA API. Default: ",(0,r.jsx)(n.code,{children:"https://integrate.api.nvidia.com/v1"}),"."]})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"nvidia_api_key"}),(0,r.jsx)(n.td,{children:"SecretString"}),(0,r.jsx)(n.td,{children:"The NVIDIA API Key for authentication."})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"temperature"}),(0,r.jsx)(n.td,{children:"Float"}),(0,r.jsxs)(n.td,{children:["Controls randomness in the output. Default: ",(0,r.jsx)(n.code,{children:"0.1"}),"."]})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"seed"}),(0,r.jsx)(n.td,{children:"Integer"}),(0,r.jsxs)(n.td,{children:["The seed controls the reproducibility of the job (advanced). Default: ",(0,r.jsx)(n.code,{children:"1"}),"."]})]})]})]}),(0,r.jsx)(n.p,{children:(0,r.jsx)(n.strong,{children:"Outputs"})}),(0,r.jsxs)(n.table,{children:[(0,r.jsx)(n.thead,{children:(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.th,{children:"Name"}),(0,r.jsx)(n.th,{children:"Type"}),(0,r.jsx)(n.th,{children:"Description"})]})}),(0,r.jsx)(n.tbody,{children:(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"model"}),(0,r.jsx)(n.td,{children:"LanguageModel"}),(0,r.jsx)(n.td,{children:"An instance of ChatNVIDIA configured with the specified parameters."})]})})]})]}),"\n",(0,r.jsx)(n.h2,{id:"ollama",children:"Ollama"}),"\n",(0,r.jsx)(n.p,{children:"This component generates text using Ollama's language models."}),"\n",(0,r.jsx)(n.p,{children:"To use this component in a flow, connect Langflow to your locally running Ollama server and select a model."}),"\n",(0,r.jsxs)(n.ol,{children:["\n",(0,r.jsxs)(n.li,{children:["In the Ollama component, in the ",(0,r.jsx)(n.strong,{children:"Base URL"})," field, enter the address for your locally running Ollama server.\nThis value is set as the ",(0,r.jsx)(n.code,{children:"OLLAMA_HOST"})," environment variable in Ollama.\nThe default base URL is ",(0,r.jsx)(n.code,{children:"http://127.0.0.1:11434"}),"."]}),"\n",(0,r.jsxs)(n.li,{children:["To refresh the server's list of models, click ",(0,r.jsx)(l.A,{name:"RefreshCw","aria-label":"Refresh"}),"."]}),"\n",(0,r.jsxs)(n.li,{children:["In the ",(0,r.jsx)(n.strong,{children:"Model Name"})," field, select a model. This example uses ",(0,r.jsx)(n.code,{children:"llama3.2:latest"}),"."]}),"\n",(0,r.jsxs)(n.li,{children:["Connect the ",(0,r.jsx)(n.strong,{children:"Ollama"})," model component to a flow. For example, this flow connects a local Ollama server running a Llama 3.2 model as the custom model for an ",(0,r.jsx)(n.a,{href:"/components-agents",children:"Agent"})," component."]}),"\n"]}),"\n",(0,r.jsx)(n.p,{children:(0,r.jsx)(n.img,{alt:"Ollama model as Agent custom model",src:t(92757).A+"",width:"4000",height:"2668"})}),"\n",(0,r.jsxs)(n.p,{children:["For more information, see the ",(0,r.jsx)(n.a,{href:"https://ollama.com/",children:"Ollama documentation"}),"."]}),"\n",(0,r.jsxs)(s,{children:[(0,r.jsx)("summary",{children:"Parameters"}),(0,r.jsx)(n.p,{children:(0,r.jsx)(n.strong,{children:"Inputs"})}),(0,r.jsxs)(n.table,{children:[(0,r.jsx)(n.thead,{children:(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.th,{children:"Name"}),(0,r.jsx)(n.th,{children:"Type"}),(0,r.jsx)(n.th,{children:"Description"})]})}),(0,r.jsxs)(n.tbody,{children:[(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"Base URL"}),(0,r.jsx)(n.td,{children:"String"}),(0,r.jsx)(n.td,{children:"Endpoint of the Ollama API."})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"Model Name"}),(0,r.jsx)(n.td,{children:"String"}),(0,r.jsx)(n.td,{children:"The model name to use."})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"Temperature"}),(0,r.jsx)(n.td,{children:"Float"}),(0,r.jsx)(n.td,{children:"Controls the creativity of model responses."})]})]})]}),(0,r.jsx)(n.p,{children:(0,r.jsx)(n.strong,{children:"Outputs"})}),(0,r.jsxs)(n.table,{children:[(0,r.jsx)(n.thead,{children:(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.th,{children:"Name"}),(0,r.jsx)(n.th,{children:"Type"}),(0,r.jsx)(n.th,{children:"Description"})]})}),(0,r.jsx)(n.tbody,{children:(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"model"}),(0,r.jsx)(n.td,{children:"LanguageModel"}),(0,r.jsx)(n.td,{children:"An instance of an Ollama model configured with the specified parameters."})]})})]})]}),"\n",(0,r.jsx)(n.h2,{id:"openai",children:"OpenAI"}),"\n",(0,r.jsx)(n.p,{children:"This component generates text using OpenAI's language models."}),"\n",(0,r.jsxs)(n.p,{children:["For more information, see ",(0,r.jsx)(n.a,{href:"https://beta.openai.com/docs/",children:"OpenAI documentation"}),"."]}),"\n",(0,r.jsxs)(s,{children:[(0,r.jsx)("summary",{children:"Parameters"}),(0,r.jsx)(n.p,{children:(0,r.jsx)(n.strong,{children:"Inputs"})}),(0,r.jsxs)(n.table,{children:[(0,r.jsx)(n.thead,{children:(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.th,{children:"Name"}),(0,r.jsx)(n.th,{children:"Type"}),(0,r.jsx)(n.th,{children:"Description"})]})}),(0,r.jsxs)(n.tbody,{children:[(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"api_key"}),(0,r.jsx)(n.td,{children:"SecretString"}),(0,r.jsx)(n.td,{children:"Your OpenAI API Key."})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"model"}),(0,r.jsx)(n.td,{children:"String"}),(0,r.jsx)(n.td,{children:'The name of the OpenAI model to use. Options include "gpt-3.5-turbo" and "gpt-4".'})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"max_tokens"}),(0,r.jsx)(n.td,{children:"Integer"}),(0,r.jsx)(n.td,{children:"The maximum number of tokens to generate. Set to 0 for unlimited tokens."})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"temperature"}),(0,r.jsx)(n.td,{children:"Float"}),(0,r.jsx)(n.td,{children:"Controls randomness in the output. Range: [0.0, 1.0]. Default: 0.7."})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"top_p"}),(0,r.jsx)(n.td,{children:"Float"}),(0,r.jsx)(n.td,{children:"Controls the nucleus sampling. Range: [0.0, 1.0]. Default: 1.0."})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"frequency_penalty"}),(0,r.jsx)(n.td,{children:"Float"}),(0,r.jsx)(n.td,{children:"Controls the frequency penalty. Range: [0.0, 2.0]. Default: 0.0."})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"presence_penalty"}),(0,r.jsx)(n.td,{children:"Float"}),(0,r.jsx)(n.td,{children:"Controls the presence penalty. Range: [0.0, 2.0]. Default: 0.0."})]})]})]}),(0,r.jsx)(n.p,{children:(0,r.jsx)(n.strong,{children:"Outputs"})}),(0,r.jsxs)(n.table,{children:[(0,r.jsx)(n.thead,{children:(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.th,{children:"Name"}),(0,r.jsx)(n.th,{children:"Type"}),(0,r.jsx)(n.th,{children:"Description"})]})}),(0,r.jsx)(n.tbody,{children:(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"model"}),(0,r.jsx)(n.td,{children:"LanguageModel"}),(0,r.jsx)(n.td,{children:"An instance of OpenAI model configured with the specified parameters."})]})})]})]}),"\n",(0,r.jsx)(n.h2,{id:"openrouter",children:"OpenRouter"}),"\n",(0,r.jsx)(n.p,{children:"This component generates text using OpenRouter's unified API for multiple AI models from different providers."}),"\n",(0,r.jsxs)(n.p,{children:["For more information, see ",(0,r.jsx)(n.a,{href:"https://openrouter.ai/docs",children:"OpenRouter documentation"}),"."]}),"\n",(0,r.jsxs)(s,{children:[(0,r.jsx)("summary",{children:"Parameters"}),(0,r.jsx)(n.p,{children:(0,r.jsx)(n.strong,{children:"Inputs"})}),(0,r.jsxs)(n.table,{children:[(0,r.jsx)(n.thead,{children:(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.th,{children:"Name"}),(0,r.jsx)(n.th,{children:"Type"}),(0,r.jsx)(n.th,{children:"Description"})]})}),(0,r.jsxs)(n.tbody,{children:[(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"api_key"}),(0,r.jsx)(n.td,{children:"SecretString"}),(0,r.jsx)(n.td,{children:"Your OpenRouter API key for authentication."})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"site_url"}),(0,r.jsx)(n.td,{children:"String"}),(0,r.jsx)(n.td,{children:"Your site URL for OpenRouter rankings (advanced)."})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"app_name"}),(0,r.jsx)(n.td,{children:"String"}),(0,r.jsx)(n.td,{children:"Your app name for OpenRouter rankings (advanced)."})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"provider"}),(0,r.jsx)(n.td,{children:"String"}),(0,r.jsx)(n.td,{children:"The AI model provider to use."})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"model_name"}),(0,r.jsx)(n.td,{children:"String"}),(0,r.jsx)(n.td,{children:"The specific model to use for chat completion."})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"temperature"}),(0,r.jsx)(n.td,{children:"Float"}),(0,r.jsx)(n.td,{children:"Controls randomness in the output. Range: [0.0, 2.0]. Default: 0.7."})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"max_tokens"}),(0,r.jsx)(n.td,{children:"Integer"}),(0,r.jsx)(n.td,{children:"The maximum number of tokens to generate (advanced)."})]})]})]}),(0,r.jsx)(n.p,{children:(0,r.jsx)(n.strong,{children:"Outputs"})}),(0,r.jsxs)(n.table,{children:[(0,r.jsx)(n.thead,{children:(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.th,{children:"Name"}),(0,r.jsx)(n.th,{children:"Type"}),(0,r.jsx)(n.th,{children:"Description"})]})}),(0,r.jsx)(n.tbody,{children:(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"model"}),(0,r.jsx)(n.td,{children:"LanguageModel"}),(0,r.jsx)(n.td,{children:"An instance of ChatOpenAI configured with the specified parameters."})]})})]})]}),"\n",(0,r.jsx)(n.h2,{id:"perplexity",children:"Perplexity"}),"\n",(0,r.jsx)(n.p,{children:"This component generates text using Perplexity's language models."}),"\n",(0,r.jsxs)(n.p,{children:["For more information, see ",(0,r.jsx)(n.a,{href:"https://perplexity.ai/",children:"Perplexity documentation"}),"."]}),"\n",(0,r.jsxs)(s,{children:[(0,r.jsx)("summary",{children:"Parameters"}),(0,r.jsx)(n.p,{children:(0,r.jsx)(n.strong,{children:"Inputs"})}),(0,r.jsxs)(n.table,{children:[(0,r.jsx)(n.thead,{children:(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.th,{children:"Name"}),(0,r.jsx)(n.th,{children:"Type"}),(0,r.jsx)(n.th,{children:"Description"})]})}),(0,r.jsxs)(n.tbody,{children:[(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"model_name"}),(0,r.jsx)(n.td,{children:"String"}),(0,r.jsx)(n.td,{children:"The name of the Perplexity model to use. Options include various Llama 3.1 models."})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"max_output_tokens"}),(0,r.jsx)(n.td,{children:"Integer"}),(0,r.jsx)(n.td,{children:"The maximum number of tokens to generate."})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"api_key"}),(0,r.jsx)(n.td,{children:"SecretString"}),(0,r.jsx)(n.td,{children:"The Perplexity API Key for authentication."})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"temperature"}),(0,r.jsx)(n.td,{children:"Float"}),(0,r.jsx)(n.td,{children:"Controls randomness in the output. Default: 0.75."})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"top_p"}),(0,r.jsx)(n.td,{children:"Float"}),(0,r.jsx)(n.td,{children:"The maximum cumulative probability of tokens to consider when sampling (advanced)."})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"n"}),(0,r.jsx)(n.td,{children:"Integer"}),(0,r.jsx)(n.td,{children:"Number of chat completions to generate for each prompt (advanced)."})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"top_k"}),(0,r.jsx)(n.td,{children:"Integer"}),(0,r.jsx)(n.td,{children:"Number of top tokens to consider for top-k sampling. Must be positive (advanced)."})]})]})]}),(0,r.jsx)(n.p,{children:(0,r.jsx)(n.strong,{children:"Outputs"})}),(0,r.jsxs)(n.table,{children:[(0,r.jsx)(n.thead,{children:(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.th,{children:"Name"}),(0,r.jsx)(n.th,{children:"Type"}),(0,r.jsx)(n.th,{children:"Description"})]})}),(0,r.jsx)(n.tbody,{children:(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"model"}),(0,r.jsx)(n.td,{children:"LanguageModel"}),(0,r.jsx)(n.td,{children:"An instance of ChatPerplexity configured with the specified parameters."})]})})]})]}),"\n",(0,r.jsx)(n.h2,{id:"qianfan",children:"Qianfan"}),"\n",(0,r.jsx)(n.p,{children:"This component generates text using Qianfan's language models."}),"\n",(0,r.jsxs)(n.p,{children:["For more information, see ",(0,r.jsx)(n.a,{href:"https://github.com/baidubce/bce-qianfan-sdk",children:"Qianfan documentation"}),"."]}),"\n",(0,r.jsx)(n.h2,{id:"sambanova",children:"SambaNova"}),"\n",(0,r.jsx)(n.p,{children:"This component generates text using SambaNova LLMs."}),"\n",(0,r.jsxs)(n.p,{children:["For more information, see ",(0,r.jsx)(n.a,{href:"https://cloud.sambanova.ai/",children:"Sambanova Cloud documentation"}),"."]}),"\n",(0,r.jsxs)(s,{children:[(0,r.jsx)("summary",{children:"Parameters"}),(0,r.jsx)(n.p,{children:(0,r.jsx)(n.strong,{children:"Inputs"})}),(0,r.jsxs)(n.table,{children:[(0,r.jsx)(n.thead,{children:(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.th,{children:"Name"}),(0,r.jsx)(n.th,{children:"Type"}),(0,r.jsx)(n.th,{children:"Description"})]})}),(0,r.jsxs)(n.tbody,{children:[(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"sambanova_url"}),(0,r.jsx)(n.td,{children:"String"}),(0,r.jsxs)(n.td,{children:["Base URL path for API requests. Default: ",(0,r.jsx)(n.code,{children:"https://api.sambanova.ai/v1/chat/completions"}),"."]})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"sambanova_api_key"}),(0,r.jsx)(n.td,{children:"SecretString"}),(0,r.jsx)(n.td,{children:"Your SambaNova API Key."})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"model_name"}),(0,r.jsx)(n.td,{children:"String"}),(0,r.jsx)(n.td,{children:"The name of the Sambanova model to use. Options include various Llama models."})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"max_tokens"}),(0,r.jsx)(n.td,{children:"Integer"}),(0,r.jsx)(n.td,{children:"The maximum number of tokens to generate. Set to 0 for unlimited tokens."})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"temperature"}),(0,r.jsx)(n.td,{children:"Float"}),(0,r.jsx)(n.td,{children:"Controls randomness in the output. Range: [0.0, 1.0]. Default: 0.07."})]})]})]}),(0,r.jsx)(n.p,{children:(0,r.jsx)(n.strong,{children:"Outputs"})}),(0,r.jsxs)(n.table,{children:[(0,r.jsx)(n.thead,{children:(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.th,{children:"Name"}),(0,r.jsx)(n.th,{children:"Type"}),(0,r.jsx)(n.th,{children:"Description"})]})}),(0,r.jsx)(n.tbody,{children:(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"model"}),(0,r.jsx)(n.td,{children:"LanguageModel"}),(0,r.jsx)(n.td,{children:"An instance of SambaNova model configured with the specified parameters."})]})})]})]}),"\n",(0,r.jsx)(n.h2,{id:"vertexai",children:"VertexAI"}),"\n",(0,r.jsx)(n.p,{children:"This component generates text using Vertex AI LLMs."}),"\n",(0,r.jsxs)(n.p,{children:["For more information, see ",(0,r.jsx)(n.a,{href:"https://cloud.google.com/vertex-ai",children:"Google Vertex AI documentation"}),"."]}),"\n",(0,r.jsxs)(s,{children:[(0,r.jsx)("summary",{children:"Parameters"}),(0,r.jsx)(n.p,{children:(0,r.jsx)(n.strong,{children:"Inputs"})}),(0,r.jsxs)(n.table,{children:[(0,r.jsx)(n.thead,{children:(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.th,{children:"Name"}),(0,r.jsx)(n.th,{children:"Type"}),(0,r.jsx)(n.th,{children:"Description"})]})}),(0,r.jsxs)(n.tbody,{children:[(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"credentials"}),(0,r.jsx)(n.td,{children:"File"}),(0,r.jsx)(n.td,{children:"JSON credentials file. Leave empty to fall back to environment variables. File type: JSON."})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"model_name"}),(0,r.jsx)(n.td,{children:"String"}),(0,r.jsx)(n.td,{children:'The name of the Vertex AI model to use. Default: "gemini-1.5-pro".'})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"project"}),(0,r.jsx)(n.td,{children:"String"}),(0,r.jsx)(n.td,{children:"The project ID (advanced)."})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"location"}),(0,r.jsx)(n.td,{children:"String"}),(0,r.jsx)(n.td,{children:'The location for the Vertex AI API. Default: "us-central1" (advanced).'})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"max_output_tokens"}),(0,r.jsx)(n.td,{children:"Integer"}),(0,r.jsx)(n.td,{children:"The maximum number of tokens to generate (advanced)."})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"max_retries"}),(0,r.jsx)(n.td,{children:"Integer"}),(0,r.jsx)(n.td,{children:"Maximum number of retries for API calls. Default: 1 (advanced)."})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"temperature"}),(0,r.jsx)(n.td,{children:"Float"}),(0,r.jsx)(n.td,{children:"Controls randomness in the output. Default: 0.0."})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"top_k"}),(0,r.jsx)(n.td,{children:"Integer"}),(0,r.jsx)(n.td,{children:"The number of highest probability vocabulary tokens to keep for top-k-filtering (advanced)."})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"top_p"}),(0,r.jsx)(n.td,{children:"Float"}),(0,r.jsx)(n.td,{children:"The cumulative probability of parameter highest probability vocabulary tokens to keep for nucleus sampling. Default: 0.95 (advanced)."})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"verbose"}),(0,r.jsx)(n.td,{children:"Boolean"}),(0,r.jsx)(n.td,{children:"Whether to print verbose output. Default: False (advanced)."})]})]})]}),(0,r.jsx)(n.p,{children:(0,r.jsx)(n.strong,{children:"Outputs"})}),(0,r.jsxs)(n.table,{children:[(0,r.jsx)(n.thead,{children:(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.th,{children:"Name"}),(0,r.jsx)(n.th,{children:"Type"}),(0,r.jsx)(n.th,{children:"Description"})]})}),(0,r.jsx)(n.tbody,{children:(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"model"}),(0,r.jsx)(n.td,{children:"LanguageModel"}),(0,r.jsx)(n.td,{children:"An instance of ChatVertexAI configured with the specified parameters."})]})})]})]}),"\n",(0,r.jsx)(n.h2,{id:"xai",children:"xAI"}),"\n",(0,r.jsxs)(n.p,{children:["This component generates text using xAI models like ",(0,r.jsx)(n.a,{href:"https://x.ai/grok",children:"Grok"}),"."]}),"\n",(0,r.jsxs)(n.p,{children:["For more information, see the ",(0,r.jsx)(n.a,{href:"https://x.ai/",children:"xAI documentation"}),"."]}),"\n",(0,r.jsxs)(s,{children:[(0,r.jsx)("summary",{children:"Parameters"}),(0,r.jsx)(n.p,{children:(0,r.jsx)(n.strong,{children:"Inputs"})}),(0,r.jsxs)(n.table,{children:[(0,r.jsx)(n.thead,{children:(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.th,{children:"Name"}),(0,r.jsx)(n.th,{children:"Type"}),(0,r.jsx)(n.th,{children:"Description"})]})}),(0,r.jsxs)(n.tbody,{children:[(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"max_tokens"}),(0,r.jsx)(n.td,{children:"Integer"}),(0,r.jsxs)(n.td,{children:["Maximum number of tokens to generate. Set to ",(0,r.jsx)(n.code,{children:"0"})," for unlimited. Range: ",(0,r.jsx)(n.code,{children:"0-128000"}),"."]})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"model_kwargs"}),(0,r.jsx)(n.td,{children:"Dictionary"}),(0,r.jsx)(n.td,{children:"Additional keyword arguments for the model."})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"json_mode"}),(0,r.jsx)(n.td,{children:"Boolean"}),(0,r.jsxs)(n.td,{children:["If ",(0,r.jsx)(n.code,{children:"True"}),", outputs JSON regardless of passing a schema."]})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"model_name"}),(0,r.jsx)(n.td,{children:"String"}),(0,r.jsxs)(n.td,{children:["The xAI model to use. Default: ",(0,r.jsx)(n.code,{children:"grok-2-latest"}),"."]})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"base_url"}),(0,r.jsx)(n.td,{children:"String"}),(0,r.jsxs)(n.td,{children:["Base URL for API requests. Default: ",(0,r.jsx)(n.code,{children:"https://api.x.ai/v1"}),"."]})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"api_key"}),(0,r.jsx)(n.td,{children:"SecretString"}),(0,r.jsx)(n.td,{children:"Your xAI API key for authentication."})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"temperature"}),(0,r.jsx)(n.td,{children:"Float"}),(0,r.jsxs)(n.td,{children:["Controls randomness in the output. Range: ",(0,r.jsx)(n.code,{children:"[0.0, 2.0]"}),". Default: ",(0,r.jsx)(n.code,{children:"0.1"}),"."]})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"seed"}),(0,r.jsx)(n.td,{children:"Integer"}),(0,r.jsx)(n.td,{children:"Controls reproducibility of the job."})]})]})]}),(0,r.jsx)(n.p,{children:(0,r.jsx)(n.strong,{children:"Outputs"})}),(0,r.jsxs)(n.table,{children:[(0,r.jsx)(n.thead,{children:(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.th,{children:"Name"}),(0,r.jsx)(n.th,{children:"Type"}),(0,r.jsx)(n.th,{children:"Description"})]})}),(0,r.jsx)(n.tbody,{children:(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"model"}),(0,r.jsx)(n.td,{children:"LanguageModel"}),(0,r.jsx)(n.td,{children:"An instance of ChatOpenAI configured with the specified parameters."})]})})]})]})]})}function p(e={}){const{wrapper:n}={...(0,d.R)(),...e.components};return n?(0,r.jsx)(n,{...e,children:(0,r.jsx)(m,{...e})}):m(e)}function u(e,n){throw new Error("Expected "+(n?"component":"object")+" `"+e+"` to be defined: you likely forgot to import, pass, or provide it.")}},84443:(e,n,t)=>{t.d(n,{A:()=>d});t(96540);var s=t(64058),r=t(74848);function d(e){let{name:n,...t}=e;const d=s[n];return d?(0,r.jsx)(d,{...t}):null}},90567:(e,n,t)=>{t.d(n,{A:()=>s});const s=t.p+"assets/images/starter-flow-basic-prompting-09331815d7282bd6a3feedf84838ba20.png"},92757:(e,n,t)=>{t.d(n,{A:()=>s});const s=t.p+"assets/images/component-ollama-model-5755eab19c67fb10ee0533b3f7ade726.png"}}]); \ No newline at end of file diff --git a/assets/js/22dd74f7.1d02fab2.js b/assets/js/22dd74f7.1d02fab2.js deleted file mode 100644 index e83f39766a..0000000000 --- a/assets/js/22dd74f7.1d02fab2.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunklangflow_docs=self.webpackChunklangflow_docs||[]).push([[1567],{55226:e=>{e.exports=JSON.parse('{"version":{"pluginId":"default","version":"current","label":"Next","banner":null,"badge":false,"noIndex":false,"className":"docs-version-current","isLast":true,"docsSidebars":{"docs":[{"type":"link","label":"Welcome to Langflow","href":"/","docId":"Get-Started/welcome-to-langflow","unlisted":false},{"type":"category","label":"Get started","items":[{"type":"link","label":"Install Langflow","href":"/get-started-installation","docId":"Get-Started/get-started-installation","unlisted":false},{"type":"link","label":"Quickstart","href":"/get-started-quickstart","docId":"Get-Started/get-started-quickstart","unlisted":false}],"collapsed":true,"collapsible":true},{"type":"category","label":"Starter projects","items":[{"type":"link","label":"Basic prompting","href":"/starter-projects-basic-prompting","docId":"Starter-Projects/starter-projects-basic-prompting","unlisted":false},{"type":"link","label":"Vector store RAG","href":"/starter-projects-vector-store-rag","docId":"Starter-Projects/starter-projects-vector-store-rag","unlisted":false},{"type":"link","label":"Simple agent","href":"/starter-projects-simple-agent","docId":"Starter-Projects/starter-projects-simple-agent","unlisted":false}],"collapsed":true,"collapsible":true},{"type":"category","label":"Sample flows","items":[{"type":"link","label":"Blog writer","href":"/blog-writer","docId":"Sample-Flows/blog-writer","unlisted":false},{"type":"link","label":"Document QA","href":"/document-qa","docId":"Sample-Flows/document-qa","unlisted":false},{"type":"link","label":"Memory chatbot","href":"/memory-chatbot","docId":"Sample-Flows/memory-chatbot","unlisted":false},{"type":"link","label":"Sequential tasks agent","href":"/sequential-agent","docId":"Sample-Flows/sequential-agent","unlisted":false},{"type":"link","label":"Travel planning agent","href":"/travel-planning-agent","docId":"Sample-Flows/travel-planning-agent","unlisted":false}],"collapsed":true,"collapsible":true},{"type":"category","label":"Concepts","items":[{"type":"link","label":"Langflow overview","href":"/concepts-overview","docId":"Concepts/concepts-overview","unlisted":false},{"type":"link","label":"Playground","href":"/concepts-playground","docId":"Concepts/concepts-playground","unlisted":false},{"type":"link","label":"Components","href":"/concepts-components","docId":"Concepts/concepts-components","unlisted":false},{"type":"link","label":"Flows","href":"/concepts-flows","docId":"Concepts/concepts-flows","unlisted":false},{"type":"link","label":"Langflow objects","href":"/concepts-objects","docId":"Concepts/concepts-objects","unlisted":false},{"type":"link","label":"Publish flows","href":"/concepts-publish","docId":"Concepts/concepts-publish","unlisted":false},{"type":"link","label":"Model Context Protocol (MCP) server","href":"/mcp-server","docId":"Concepts/mcp-server","unlisted":false},{"type":"link","label":"Manage files","href":"/concepts-file-management","docId":"Concepts/concepts-file-management","unlisted":false},{"type":"link","label":"Voice mode","href":"/concepts-voice-mode","docId":"Concepts/concepts-voice-mode","unlisted":false}],"collapsed":true,"collapsible":true},{"type":"category","label":"Components","items":[{"type":"link","label":"Agents","href":"/components-agents","docId":"Components/components-agents","unlisted":false},{"type":"link","label":"Bundles","href":"/components-bundle-components","docId":"Components/components-bundles","unlisted":false},{"type":"link","label":"Create custom Python components","href":"/components-custom-components","docId":"Components/components-custom-components","unlisted":false},{"type":"link","label":"Data","href":"/components-data","docId":"Components/components-data","unlisted":false},{"type":"link","label":"Embeddings","href":"/components-embedding-models","docId":"Components/components-embedding-models","unlisted":false},{"type":"link","label":"Helpers","href":"/components-helpers","docId":"Components/components-helpers","unlisted":false},{"type":"link","label":"Inputs and outputs","href":"/components-io","docId":"Components/components-io","unlisted":false},{"type":"link","label":"Loaders","href":"/components-loaders","docId":"Components/components-loaders","unlisted":false},{"type":"link","label":"Logic","href":"/components-logic","docId":"Components/components-logic","unlisted":false},{"type":"link","label":"Memories","href":"/components-memories","docId":"Components/components-memories","unlisted":false},{"type":"link","label":"Models","href":"/components-models","docId":"Components/components-models","unlisted":false},{"type":"link","label":"Processing","href":"/components-processing","docId":"Components/components-processing","unlisted":false},{"type":"link","label":"Prompts","href":"/components-prompts","docId":"Components/components-prompts","unlisted":false},{"type":"link","label":"Tools","href":"/components-tools","docId":"Components/components-tools","unlisted":false},{"type":"link","label":"Vector stores","href":"/components-vector-stores","docId":"Components/components-vector-stores","unlisted":false}],"collapsed":true,"collapsible":true},{"type":"category","label":"Agents","items":[{"type":"link","label":"Agents overview","href":"/agents-overview","docId":"Agents/agents-overview","unlisted":false},{"type":"link","label":"Create a problem-solving agent","href":"/agents-tool-calling-agent-component","docId":"Agents/agent-tool-calling-agent-component","unlisted":false}],"collapsed":true,"collapsible":true},{"type":"category","label":"Configuration","items":[{"type":"link","label":"API keys","href":"/configuration-api-keys","docId":"Configuration/configuration-api-keys","unlisted":false},{"type":"link","label":"Authentication","href":"/configuration-authentication","docId":"Configuration/configuration-authentication","unlisted":false},{"type":"link","label":"Langflow CLI","href":"/configuration-cli","docId":"Configuration/configuration-cli","unlisted":false},{"type":"link","label":"Configure an external PostgreSQL database","href":"/configuration-custom-database","docId":"Configuration/configuration-custom-database","unlisted":false},{"type":"link","label":"Global variables","href":"/configuration-global-variables","docId":"Configuration/configuration-global-variables","unlisted":false},{"type":"link","label":"Environment variables","href":"/environment-variables","docId":"Configuration/environment-variables","unlisted":false}],"collapsed":true,"collapsible":true},{"type":"category","label":"Develop","items":[{"type":"link","label":"About developing and configuring Langflow applications","href":"/develop-overview","docId":"Develop/develop-overview","unlisted":false},{"type":"link","label":"Develop an application in Langflow","href":"/develop-application","docId":"Develop/develop-application","unlisted":false},{"type":"link","label":"Install custom dependencies","href":"/install-custom-dependencies","docId":"Develop/install-custom-dependencies","unlisted":false},{"type":"link","label":"Memory management options","href":"/memory","docId":"Develop/memory","unlisted":false},{"type":"link","label":"Use session ID to manage communication between components","href":"/session-id","docId":"Develop/session-id","unlisted":false},{"type":"link","label":"Logging options in Langflow","href":"/logging","docId":"Develop/logging","unlisted":false},{"type":"link","label":"Trigger flows with webhooks","href":"/webhook","docId":"Develop/webhook","unlisted":false}],"collapsed":true,"collapsible":true},{"type":"category","label":"Deployment","items":[{"type":"link","label":"Deployment overview","href":"/deployment-overview","docId":"Deployment/deployment-overview","unlisted":false},{"type":"link","label":"Docker","href":"/deployment-docker","docId":"Deployment/deployment-docker","unlisted":false},{"type":"category","label":"Kubernetes","items":[{"type":"link","label":"Langflow architecture and best practices","href":"/deployment-prod-best-practices","docId":"Deployment/deployment-prod-best-practices","unlisted":false},{"type":"link","label":"Deploy in development","href":"/deployment-kubernetes-dev","docId":"Deployment/deployment-kubernetes-dev","unlisted":false},{"type":"link","label":"Deploy in production","href":"/deployment-kubernetes-prod","docId":"Deployment/deployment-kubernetes-prod","unlisted":false}],"collapsed":true,"collapsible":true},{"type":"link","label":"Google Cloud Platform","href":"/deployment-gcp","docId":"Deployment/deployment-gcp","unlisted":false},{"type":"link","label":"Hugging Face Spaces","href":"/deployment-hugging-face-spaces","docId":"Deployment/deployment-hugging-face-spaces","unlisted":false},{"type":"link","label":"Railway","href":"/deployment-railway","docId":"Deployment/deployment-railway","unlisted":false},{"type":"link","label":"Render","href":"/deployment-render","docId":"Deployment/deployment-render","unlisted":false}],"collapsed":true,"collapsible":true},{"type":"category","label":"API reference","items":[{"type":"link","label":"API documentation","href":"/api"},{"type":"link","label":"API examples","href":"/api-reference-api-examples","docId":"API-Reference/api-reference-api-examples","unlisted":false}],"collapsed":true,"collapsible":true},{"type":"category","label":"Integrations","items":[{"type":"link","label":"Apify","href":"/integrations-apify","docId":"Integrations/Apify/integrations-apify","unlisted":false},{"type":"link","label":"Arize","href":"/integrations-arize","docId":"Integrations/Arize/integrations-arize","unlisted":false},{"type":"link","label":"AssemblyAI","href":"/integrations-assemblyai","docId":"Integrations/integrations-assemblyai","unlisted":false},{"type":"link","label":"Composio","href":"/integrations-composio","docId":"Integrations/Composio/integrations-composio","unlisted":false},{"type":"link","label":"Astra DB MCP server","href":"/mcp-component-astra","docId":"Integrations/mcp-component-astra","unlisted":false},{"type":"category","label":"Google","items":[{"type":"link","label":"Integrate Google OAuth with Langflow","href":"/integrations-setup-google-oauth-langflow","docId":"Integrations/Google/integrations-setup-google-oauth-langflow","unlisted":false},{"type":"link","label":"Integrate Google Cloud Vertex AI with Langflow","href":"/integrations-setup-google-cloud-vertex-ai-langflow","docId":"Integrations/Google/integrations-setup-google-cloud-vertex-ai-langflow","unlisted":false}],"collapsed":true,"collapsible":true},{"type":"link","label":"Langfuse","href":"/integrations-langfuse","docId":"Integrations/integrations-langfuse","unlisted":false},{"type":"link","label":"LangSmith","href":"/integrations-langsmith","docId":"Integrations/integrations-langsmith","unlisted":false},{"type":"link","label":"LangWatch","href":"/integrations-langwatch","docId":"Integrations/integrations-langwatch","unlisted":false},{"type":"link","label":"Opik","href":"/integrations-opik","docId":"Integrations/integrations-opik","unlisted":false},{"type":"category","label":"Notion","items":[{"type":"link","label":"Setup","href":"/integrations/notion/setup","docId":"Integrations/Notion/integrations-notion","unlisted":false},{"type":"link","label":"Notion Conversational Agent","href":"/integrations/notion/notion-agent-conversational","docId":"Integrations/Notion/notion-agent-conversational","unlisted":false},{"type":"link","label":"Notion Meeting Notes Agent","href":"/integrations/notion/notion-agent-meeting-notes","docId":"Integrations/Notion/notion-agent-meeting-notes","unlisted":false}],"collapsed":true,"collapsible":true},{"type":"category","label":"NVIDIA","items":[{"type":"link","label":"Integrate NVIDIA Retriever Extraction with Langflow","href":"/integrations-nvidia-ingest","docId":"Integrations/Nvidia/integrations-nvidia-ingest","unlisted":false},{"type":"link","label":"Integrate NVIDIA NIMs with Langflow","href":"/integrations-nvidia-ingest-wsl2","docId":"Integrations/Nvidia/integrations-nvidia-nim-wsl2","unlisted":false}],"collapsed":true,"collapsible":true}],"collapsed":true,"collapsible":true},{"type":"category","label":"Contributing","items":[{"type":"link","label":"Join the Langflow community","href":"/contributing-community","docId":"Contributing/contributing-community","unlisted":false},{"type":"link","label":"Contribute components","href":"/contributing-components","docId":"Contributing/contributing-components","unlisted":false},{"type":"link","label":"Contribute component tests","href":"/contributing-component-tests","docId":"Contributing/contributing-component-tests","unlisted":false},{"type":"link","label":"Ask for help on the Discussions board","href":"/contributing-github-discussions","docId":"Contributing/contributing-github-discussion-board","unlisted":false},{"type":"link","label":"Request an enhancement or report a bug","href":"/contributing-github-issues","docId":"Contributing/contributing-github-issues","unlisted":false},{"type":"link","label":"Contribute to Langflow","href":"/contributing-how-to-contribute","docId":"Contributing/contributing-how-to-contribute","unlisted":false},{"type":"link","label":"Telemetry","href":"/contributing-telemetry","docId":"Contributing/contributing-telemetry","unlisted":false}],"collapsed":true,"collapsible":true},{"type":"category","label":"Changelog","items":[{"type":"link","label":"Changelog","href":"https://github.com/langflow-ai/langflow/releases/latest"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Support","items":[{"type":"link","label":"Luna for Langflow","href":"/luna-for-langflow","docId":"Support/luna-for-langflow","unlisted":false}],"collapsed":true,"collapsible":true},{"type":"html","className":"sidebar-ad","value":"\\n \\n \\n
\\n Use Langflow in the cloud\\n Sign up for DataStax Langflow\\n
\\n
\\n "}]},"docs":{"Agents/agent-tool-calling-agent-component":{"id":"Agents/agent-tool-calling-agent-component","title":"Create a problem-solving agent","description":"Developing agents in Langchain is complex.","sidebar":"docs"},"Agents/agents-overview":{"id":"Agents/agents-overview","title":"Agents overview","description":"Agents are AI systems that use LLMs as a brain to analyze problems and select external tools.","sidebar":"docs"},"API-Reference/api-reference-api-examples":{"id":"API-Reference/api-reference-api-examples","title":"API examples","description":"This page provides examples and practices for managing Langflow using the Langflow API.","sidebar":"docs"},"Components/components-agents":{"id":"Components/components-agents","title":"Agents","description":"Agent components define the behavior and capabilities of AI agents in your flow.","sidebar":"docs"},"Components/components-bundles":{"id":"Components/components-bundles","title":"Bundles","description":"Bundles are third-party components grouped by provider.","sidebar":"docs"},"Components/components-custom-components":{"id":"Components/components-custom-components","title":"Create custom Python components","description":"Custom components extend Langflow\'s functionality through Python classes that inherit from Component. This enables integration of new features, data manipulation, external services, and specialized tools.","sidebar":"docs"},"Components/components-data":{"id":"Components/components-data","title":"Data","description":"Data components load data from a source into your flow.","sidebar":"docs"},"Components/components-embedding-models":{"id":"Components/components-embedding-models","title":"Embeddings","description":"Embeddings models convert text into numerical vectors. These embeddings capture semantic meaning of the input text, and allow LLMs to understand context.","sidebar":"docs"},"Components/components-helpers":{"id":"Components/components-helpers","title":"Helpers","description":"Helper components provide utility functions to help manage data, tasks, and other components in your flow.","sidebar":"docs"},"Components/components-io":{"id":"Components/components-io","title":"Inputs and outputs","description":"Input and output components define where data enters and exits your flow.","sidebar":"docs"},"Components/components-loaders":{"id":"Components/components-loaders","title":"Loaders","description":"As of Langflow 1.1, loader components are now found in the Components menu under Bundles.","sidebar":"docs"},"Components/components-logic":{"id":"Components/components-logic","title":"Logic","description":"Logic components provide functionalities for routing, conditional processing, and flow management.","sidebar":"docs"},"Components/components-memories":{"id":"Components/components-memories","title":"Memories","description":"Memory components store and retrieve chat messages by session_id.","sidebar":"docs"},"Components/components-models":{"id":"Components/components-models","title":"Models","description":"Model components generate text using large language models.","sidebar":"docs"},"Components/components-processing":{"id":"Components/components-processing","title":"Processing","description":"Processing components process and transform data within a flow.","sidebar":"docs"},"Components/components-prompts":{"id":"Components/components-prompts","title":"Prompts","description":"A prompt is a structured input to a language model that instructs the model how to handle user inputs and variables.","sidebar":"docs"},"Components/components-tools":{"id":"Components/components-tools","title":"Tools","description":"Tools are typically connected to agent components at the Tools port. Agents use LLMs as a reasoning engine to decide which of the connected tool components to use to solve a problem.","sidebar":"docs"},"Components/components-vector-stores":{"id":"Components/components-vector-stores","title":"Vector stores","description":"Vector databases store vector data, which backs AI workloads like chatbots and Retrieval Augmented Generation.","sidebar":"docs"},"Concepts/concepts-components":{"id":"Concepts/concepts-components","title":"Components","description":"A\xa0component\xa0is a single building block within a flow with inputs, outputs, functions, and parameters that define its functionality. A single component is like a class within a larger application.","sidebar":"docs"},"Concepts/concepts-file-management":{"id":"Concepts/concepts-file-management","title":"Manage files","description":"Upload, store, and manage files in Langflow\'s File management system.","sidebar":"docs"},"Concepts/concepts-flows":{"id":"Concepts/concepts-flows","title":"Flows","description":"Flows in Langflow are fully serializable and can be saved and loaded from the file system. In this guide, we\'ll explore how to import and export flows.","sidebar":"docs"},"Concepts/concepts-objects":{"id":"Concepts/concepts-objects","title":"Langflow objects","description":"In Langflow, objects are Pydantic models that serve as structured, functional representations of data.","sidebar":"docs"},"Concepts/concepts-overview":{"id":"Concepts/concepts-overview","title":"Langflow overview","description":"This page explores the fundamental building blocks of Langflow, beginning with the question, \\"What is a flow?\\"","sidebar":"docs"},"Concepts/concepts-playground":{"id":"Concepts/concepts-playground","title":"Playground","description":"The\xa0Playground\xa0is a dynamic interface designed for real-time interaction with LLMs, allowing users to chat, access memories, and monitor inputs and outputs. Here, users can directly prototype their models, making adjustments and observing different outcomes.","sidebar":"docs"},"Concepts/concepts-publish":{"id":"Concepts/concepts-publish","title":"Publish flows","description":"Langflow provides several ways to publish and integrate your flows into external applications. Whether you want to expose your flow as an API endpoint, embed it as a chat widget in your website, or share it as a public playground, this guide covers the options available for making your flows accessible to users.","sidebar":"docs"},"Concepts/concepts-voice-mode":{"id":"Concepts/concepts-voice-mode","title":"Voice mode","description":"The Langflow Playground supports voice mode for interacting with your applications through a microphone.","sidebar":"docs"},"Concepts/mcp-server":{"id":"Concepts/mcp-server","title":"Model Context Protocol (MCP) server","description":"Langflow integrates with the Model Context Protocol (MCP) as both an MCP server and an MCP client.","sidebar":"docs"},"Configuration/configuration-api-keys":{"id":"Configuration/configuration-api-keys","title":"API keys","description":"Langflow provides an API key functionality that allows users to access their individual components and flows without traditional login authentication.","sidebar":"docs"},"Configuration/configuration-authentication":{"id":"Configuration/configuration-authentication","title":"Authentication","description":"This guide covers Langflow\'s authentication system and API key management, including how to secure your deployment and manage access to flows and components.","sidebar":"docs"},"Configuration/configuration-cli":{"id":"Configuration/configuration-cli","title":"Langflow CLI","description":"The Langflow command line interface (Langflow CLI) is the main interface for managing and running the Langflow server.","sidebar":"docs"},"Configuration/configuration-custom-database":{"id":"Configuration/configuration-custom-database","title":"Configure an external PostgreSQL database","description":"Langflow\'s default database is SQLite, but you can configure Langflow to use PostgreSQL instead.","sidebar":"docs"},"Configuration/configuration-global-variables":{"id":"Configuration/configuration-global-variables","title":"Global variables","description":"Global variables let you store and reuse generic input values and credentials across your projects.","sidebar":"docs"},"Configuration/environment-variables":{"id":"Configuration/environment-variables","title":"Environment variables","description":"Langflow lets you configure a number of settings using environment variables.","sidebar":"docs"},"Contributing/contributing-community":{"id":"Contributing/contributing-community","title":"Join the Langflow community","description":"Join the Langflow Discord server","sidebar":"docs"},"Contributing/contributing-component-tests":{"id":"Contributing/contributing-component-tests","title":"Contribute component tests","description":"This guide outlines how to structure and implement tests for application components to ensure consistency and adequate coverage.","sidebar":"docs"},"Contributing/contributing-components":{"id":"Contributing/contributing-components","title":"Contribute components","description":"New components are added as objects of the\xa0CustomComponent\xa0class.","sidebar":"docs"},"Contributing/contributing-github-discussion-board":{"id":"Contributing/contributing-github-discussion-board","title":"Ask for help on the Discussions board","description":"If you\'re looking for help with your code, consider posting a question on the Langflow\xa0GitHub Discussions board. The Langflow team cannot provide individual support via email. The team also believes that help is much more valuable if it\'s\xa0shared publicly, so that more people can benefit from it.","sidebar":"docs"},"Contributing/contributing-github-issues":{"id":"Contributing/contributing-github-issues","title":"Request an enhancement or report a bug","description":"The\xa0Issues page in the Langflow repo is kept up to date with bugs, improvements, and feature requests. Labels are used to help with sorting and discovery of issues of interest. For an overview of the system Langflow uses to tag issues and pull requests, see the Langflow repo\'s labels page.","sidebar":"docs"},"Contributing/contributing-how-to-contribute":{"id":"Contributing/contributing-how-to-contribute","title":"Contribute to Langflow","description":"This guide is intended to help you start contributing to Langflow.","sidebar":"docs"},"Contributing/contributing-telemetry":{"id":"Contributing/contributing-telemetry","title":"Telemetry","description":"Langflow uses anonymous telemetry to collect essential usage statistics to enhance functionality and the user experience. This data helps us identify popular features and areas that need improvement, and ensures development efforts align with what you need.","sidebar":"docs"},"Deployment/deployment-docker":{"id":"Deployment/deployment-docker","title":"Deploy Langflow on Docker","description":"This guide demonstrates deploying Langflow with Docker and Docker Compose.","sidebar":"docs"},"Deployment/deployment-gcp":{"id":"Deployment/deployment-gcp","title":"Deploy Langflow on Google Cloud Platform","description":"This guide demonstrates deploying Langflow on Google Cloud Platform.","sidebar":"docs"},"Deployment/deployment-hugging-face-spaces":{"id":"Deployment/deployment-hugging-face-spaces","title":"Deploy Langflow on HuggingFace Spaces","description":"This guide explains how to deploy Langflow on HuggingFace Spaces.","sidebar":"docs"},"Deployment/deployment-kubernetes-dev":{"id":"Deployment/deployment-kubernetes-dev","title":"Deploy the Langflow development environment on Kubernetes","description":"The Langflow Integrated Development Environment (IDE) Helm chart is designed to provide a complete environment for developers to create, test, and debug their flows. It includes both the API and the UI.","sidebar":"docs"},"Deployment/deployment-kubernetes-prod":{"id":"Deployment/deployment-kubernetes-prod","title":"Deploy the Langflow production environment on Kubernetes","description":"The Langflow Runtime chart is tailored for deploying applications in a production environment. It is focused on stability, performance, isolation, and security to ensure that applications run reliably and efficiently.","sidebar":"docs"},"Deployment/deployment-overview":{"id":"Deployment/deployment-overview","title":"Langflow deployment overview","description":"You have a flow, and want to share it with the world in a production environment.","sidebar":"docs"},"Deployment/deployment-prod-best-practices":{"id":"Deployment/deployment-prod-best-practices","title":"Langflow architecture and best practices on Kubernetes","description":"While Langflow offers flexible deployment options, deploying on a Kubernetes cluster is highly recommended for production environments.","sidebar":"docs"},"Deployment/deployment-railway":{"id":"Deployment/deployment-railway","title":"Deploy Langflow on Railway","description":"This guide explains how to deploy Langflow on Railway, a cloud infrastructure platform that provides auto-deploy, managed databases, and automatic scaling.","sidebar":"docs"},"Deployment/deployment-render":{"id":"Deployment/deployment-render","title":"Deploy Langflow on Render","description":"This guide explains how to deploy Langflow on Render, a cloud platform for deploying web applications and APIs.","sidebar":"docs"},"Develop/develop-application":{"id":"Develop/develop-application","title":"Develop an application in Langflow","description":"Follow this guide to learn how to build an application using Langflow.","sidebar":"docs"},"Develop/develop-overview":{"id":"Develop/develop-overview","title":"About developing and configuring Langflow applications","description":"The following pages provide information about how to develop and configure Langflow applications.","sidebar":"docs"},"Develop/install-custom-dependencies":{"id":"Develop/install-custom-dependencies","title":"Install custom dependencies","description":"To install custom dependencies in your Langflow environment, add them with your package manager.","sidebar":"docs"},"Develop/logging":{"id":"Develop/logging","title":"Logging options in Langflow","description":"Langflow uses the loguru library for logging.","sidebar":"docs"},"Develop/memory":{"id":"Develop/memory","title":"Memory management options","description":"Langflow provides flexible memory management options for storage and retrieval.","sidebar":"docs"},"Develop/session-id":{"id":"Develop/session-id","title":"Use session ID to manage communication between components","description":"Session ID is a unique identifier for client/server connections. A single session equals the duration of a client\'s connection to a server.","sidebar":"docs"},"Develop/webhook":{"id":"Develop/webhook","title":"Trigger flows with webhooks","description":"Add a Webhook component to your flow to trigger it with external requests.","sidebar":"docs"},"Get-Started/get-started-installation":{"id":"Get-Started/get-started-installation","title":"Install Langflow","description":"Langflow can be installed in three ways:","sidebar":"docs"},"Get-Started/get-started-quickstart":{"id":"Get-Started/get-started-quickstart","title":"Quickstart","description":"Get to know Langflow by building an OpenAI-powered chatbot application. After you\'ve constructed a chatbot, add Retrieval Augmented Generation (RAG) to chat with your own data.","sidebar":"docs"},"Get-Started/welcome-to-langflow":{"id":"Get-Started/welcome-to-langflow","title":"Welcome to Langflow","description":"Langflow is a new, visual framework for building multi-agent and RAG applications. It is open-source, Python-powered, fully customizable, and LLM and vector store agnostic.","sidebar":"docs"},"Integrations/Apify/integrations-apify":{"id":"Integrations/Apify/integrations-apify","title":"Apify","description":"Apify is a web scraping and data extraction platform. It provides an Actor Store with more than 3,000 ready-made cloud tools called Actors.","sidebar":"docs"},"Integrations/Arize/integrations-arize":{"id":"Integrations/Arize/integrations-arize","title":"Integrate Arize with Langflow","description":"Arize is a tool built on OpenTelemetry and OpenInference for monitoring and optimizing LLM applications.","sidebar":"docs"},"Integrations/Composio/integrations-composio":{"id":"Integrations/Composio/integrations-composio","title":"Integrate Composio with Langflow","description":"Langflow integrates with Composio as a toolset for your Agent component.","sidebar":"docs"},"Integrations/Google/integrations-setup-google-cloud-vertex-ai-langflow":{"id":"Integrations/Google/integrations-setup-google-cloud-vertex-ai-langflow","title":"Integrate Google Cloud Vertex AI with Langflow","description":"A comprehensive guide on creating a Google OAuth app, obtaining tokens, and integrating them with Langflow\'s Google components.","sidebar":"docs"},"Integrations/Google/integrations-setup-google-oauth-langflow":{"id":"Integrations/Google/integrations-setup-google-oauth-langflow","title":"Integrate Google OAuth with Langflow","description":"A comprehensive guide on creating a Google OAuth app, obtaining tokens, and integrating them with Langflow\'s Google components.","sidebar":"docs"},"Integrations/integrations-assemblyai":{"id":"Integrations/integrations-assemblyai","title":"AssemblyAI","description":"The AssemblyAI components allow you to apply powerful Speech AI models to your app for tasks like:","sidebar":"docs"},"Integrations/integrations-langfuse":{"id":"Integrations/integrations-langfuse","title":"Langfuse","description":"Langfuse (GitHub) is an open-source platform for LLM observability. It provides tracing and monitoring capabilities for AI applications, helping developers debug, analyze, and optimize their AI systems. Langfuse integrates with various tools and frameworks such as workflows builders like Langflow.","sidebar":"docs"},"Integrations/integrations-langsmith":{"id":"Integrations/integrations-langsmith","title":"LangSmith","description":"LangSmith is a full-lifecycle DevOps service from LangChain that provides monitoring and observability. To integrate with Langflow, just add your LangChain API key as a Langflow environment variable and you are good to go!","sidebar":"docs"},"Integrations/integrations-langwatch":{"id":"Integrations/integrations-langwatch","title":"LangWatch","description":"938674091aac4d9d9aa4aa6eb5c215b4}","sidebar":"docs"},"Integrations/integrations-opik":{"id":"Integrations/integrations-opik","title":"Opik","description":"Opik is an open-source platform designed for evaluating, testing, and monitoring large language model (LLM) applications. Developed by Comet, it aims to facilitate more intuitive collaboration, testing, and monitoring of LLM-based applications.","sidebar":"docs"},"Integrations/mcp-component-astra":{"id":"Integrations/mcp-component-astra","title":"Connect an Astra DB MCP server to Langflow","description":"Use the MCP server component to connect Langflow to a Datastax Astra DB MCP server.","sidebar":"docs"},"Integrations/Notion/integrations-notion":{"id":"Integrations/Notion/integrations-notion","title":"Setup","description":"To use Notion components in Langflow, you first need to create a Notion integration and configure it with the necessary capabilities. This guide will walk you through the process of setting up a Notion integration and granting it access to your Notion databases.","sidebar":"docs"},"Integrations/Notion/notion-agent-conversational":{"id":"Integrations/Notion/notion-agent-conversational","title":"Notion Conversational Agent","description":"The Notion Conversational Agent is an AI-powered assistant that interacts with your Notion workspace through natural language conversations. This flow performs Notion-related tasks like creating pages, searching for information, and managing content, all through a chat interface.","sidebar":"docs"},"Integrations/Notion/notion-agent-meeting-notes":{"id":"Integrations/Notion/notion-agent-meeting-notes","title":"Notion Meeting Notes Agent","description":"The Notion Agent for Meeting Notes is an AI-powered tool that automatically processes meeting transcripts and updates your Notion workspace. It identifies tasks, action items, and key points from your meetings, then creates new tasks or updates existing ones in Notion without manual input.","sidebar":"docs"},"Integrations/Nvidia/integrations-nvidia-ingest":{"id":"Integrations/Nvidia/integrations-nvidia-ingest","title":"Integrate NVIDIA Retriever Extraction with Langflow","description":"NVIDIA Retriever Extraction is also known as NV-Ingest and NeMo Retriever Extraction.","sidebar":"docs"},"Integrations/Nvidia/integrations-nvidia-nim-wsl2":{"id":"Integrations/Nvidia/integrations-nvidia-nim-wsl2","title":"Integrate NVIDIA NIMs with Langflow","description":"Connect Langflow with NVIDIA NIM on an RTX Windows system with Windows Subsystem for Linux 2 (WSL2) installed.","sidebar":"docs"},"Sample-Flows/blog-writer":{"id":"Sample-Flows/blog-writer","title":"Blog writer","description":"Build a Blog Writer flow for a one-shot application using OpenAI.","sidebar":"docs"},"Sample-Flows/document-qa":{"id":"Sample-Flows/document-qa","title":"Document QA","description":"Build a question-and-answer chatbot with a document loaded from local memory.","sidebar":"docs"},"Sample-Flows/memory-chatbot":{"id":"Sample-Flows/memory-chatbot","title":"Memory chatbot","description":"This flow extends the basic prompting flow with a Chat memory component that stores up to 100 previous chat messages and uses them to provide context for the current conversation.","sidebar":"docs"},"Sample-Flows/sequential-agent":{"id":"Sample-Flows/sequential-agent","title":"Sequential tasks agent","description":"Build a Sequential Tasks Agent flow for a multi-agent application using multiple Agent components.","sidebar":"docs"},"Sample-Flows/travel-planning-agent":{"id":"Sample-Flows/travel-planning-agent","title":"Travel planning agent","description":"Build a Travel Planning Agent flow for an agentic application using the multiple Tool-calling agents.","sidebar":"docs"},"Starter-Projects/starter-projects-basic-prompting":{"id":"Starter-Projects/starter-projects-basic-prompting","title":"Basic prompting","description":"Prompts serve as the inputs to a large language model (LLM), acting as the interface between human instructions and computational tasks.","sidebar":"docs"},"Starter-Projects/starter-projects-simple-agent":{"id":"Starter-Projects/starter-projects-simple-agent","title":"Simple agent","description":"Build a Simple Agent flow for an agentic application using the Tool-calling agent component.","sidebar":"docs"},"Starter-Projects/starter-projects-vector-store-rag":{"id":"Starter-Projects/starter-projects-vector-store-rag","title":"Vector store RAG","description":"Retrieval Augmented Generation, or RAG, is a pattern for training LLMs on your data and querying it.","sidebar":"docs"},"Support/luna-for-langflow":{"id":"Support/luna-for-langflow","title":"Luna for Langflow","description":"With Luna for Langflow support, you can develop and deploy Langflow applications with confidence.","sidebar":"docs"}}}}')}}]); \ No newline at end of file diff --git a/assets/js/22dd74f7.f52a55a9.js b/assets/js/22dd74f7.f52a55a9.js new file mode 100644 index 0000000000..589fe61bd4 --- /dev/null +++ b/assets/js/22dd74f7.f52a55a9.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunklangflow_docs=self.webpackChunklangflow_docs||[]).push([[1567],{55226:e=>{e.exports=JSON.parse('{"version":{"pluginId":"default","version":"current","label":"Next","banner":null,"badge":false,"noIndex":false,"className":"docs-version-current","isLast":true,"docsSidebars":{"docs":[{"type":"link","label":"Welcome to Langflow","href":"/","docId":"Get-Started/welcome-to-langflow","unlisted":false},{"type":"category","label":"Get started","items":[{"type":"link","label":"Install Langflow","href":"/get-started-installation","docId":"Get-Started/get-started-installation","unlisted":false},{"type":"link","label":"Quickstart","href":"/get-started-quickstart","docId":"Get-Started/get-started-quickstart","unlisted":false}],"collapsed":true,"collapsible":true},{"type":"category","label":"Starter projects","items":[{"type":"link","label":"Basic prompting","href":"/starter-projects-basic-prompting","docId":"Starter-Projects/starter-projects-basic-prompting","unlisted":false},{"type":"link","label":"Vector store RAG","href":"/starter-projects-vector-store-rag","docId":"Starter-Projects/starter-projects-vector-store-rag","unlisted":false},{"type":"link","label":"Simple agent","href":"/starter-projects-simple-agent","docId":"Starter-Projects/starter-projects-simple-agent","unlisted":false}],"collapsed":true,"collapsible":true},{"type":"category","label":"Sample flows","items":[{"type":"link","label":"Blog writer","href":"/blog-writer","docId":"Sample-Flows/blog-writer","unlisted":false},{"type":"link","label":"Document QA","href":"/document-qa","docId":"Sample-Flows/document-qa","unlisted":false},{"type":"link","label":"Memory chatbot","href":"/memory-chatbot","docId":"Sample-Flows/memory-chatbot","unlisted":false},{"type":"link","label":"Sequential tasks agent","href":"/sequential-agent","docId":"Sample-Flows/sequential-agent","unlisted":false},{"type":"link","label":"Travel planning agent","href":"/travel-planning-agent","docId":"Sample-Flows/travel-planning-agent","unlisted":false}],"collapsed":true,"collapsible":true},{"type":"category","label":"Concepts","items":[{"type":"link","label":"Langflow overview","href":"/concepts-overview","docId":"Concepts/concepts-overview","unlisted":false},{"type":"link","label":"Playground","href":"/concepts-playground","docId":"Concepts/concepts-playground","unlisted":false},{"type":"link","label":"Components","href":"/concepts-components","docId":"Concepts/concepts-components","unlisted":false},{"type":"link","label":"Flows","href":"/concepts-flows","docId":"Concepts/concepts-flows","unlisted":false},{"type":"link","label":"Langflow objects","href":"/concepts-objects","docId":"Concepts/concepts-objects","unlisted":false},{"type":"link","label":"Publish flows","href":"/concepts-publish","docId":"Concepts/concepts-publish","unlisted":false},{"type":"link","label":"Model Context Protocol (MCP) server","href":"/mcp-server","docId":"Concepts/mcp-server","unlisted":false},{"type":"link","label":"Manage files","href":"/concepts-file-management","docId":"Concepts/concepts-file-management","unlisted":false},{"type":"link","label":"Voice mode","href":"/concepts-voice-mode","docId":"Concepts/concepts-voice-mode","unlisted":false}],"collapsed":true,"collapsible":true},{"type":"category","label":"Components","items":[{"type":"link","label":"Agents","href":"/components-agents","docId":"Components/components-agents","unlisted":false},{"type":"link","label":"Bundles","href":"/components-bundle-components","docId":"Components/components-bundles","unlisted":false},{"type":"link","label":"Create custom Python components","href":"/components-custom-components","docId":"Components/components-custom-components","unlisted":false},{"type":"link","label":"Data","href":"/components-data","docId":"Components/components-data","unlisted":false},{"type":"link","label":"Embeddings","href":"/components-embedding-models","docId":"Components/components-embedding-models","unlisted":false},{"type":"link","label":"Helpers","href":"/components-helpers","docId":"Components/components-helpers","unlisted":false},{"type":"link","label":"Inputs and outputs","href":"/components-io","docId":"Components/components-io","unlisted":false},{"type":"link","label":"Loaders","href":"/components-loaders","docId":"Components/components-loaders","unlisted":false},{"type":"link","label":"Logic","href":"/components-logic","docId":"Components/components-logic","unlisted":false},{"type":"link","label":"Memories","href":"/components-memories","docId":"Components/components-memories","unlisted":false},{"type":"link","label":"Models","href":"/components-models","docId":"Components/components-models","unlisted":false},{"type":"link","label":"Processing","href":"/components-processing","docId":"Components/components-processing","unlisted":false},{"type":"link","label":"Prompts","href":"/components-prompts","docId":"Components/components-prompts","unlisted":false},{"type":"link","label":"Tools","href":"/components-tools","docId":"Components/components-tools","unlisted":false},{"type":"link","label":"Vector stores","href":"/components-vector-stores","docId":"Components/components-vector-stores","unlisted":false}],"collapsed":true,"collapsible":true},{"type":"category","label":"Agents","items":[{"type":"link","label":"Agents overview","href":"/agents-overview","docId":"Agents/agents-overview","unlisted":false},{"type":"link","label":"Create a problem-solving agent","href":"/agents-tool-calling-agent-component","docId":"Agents/agent-tool-calling-agent-component","unlisted":false}],"collapsed":true,"collapsible":true},{"type":"category","label":"Configuration","items":[{"type":"link","label":"API keys","href":"/configuration-api-keys","docId":"Configuration/configuration-api-keys","unlisted":false},{"type":"link","label":"Authentication","href":"/configuration-authentication","docId":"Configuration/configuration-authentication","unlisted":false},{"type":"link","label":"Langflow CLI","href":"/configuration-cli","docId":"Configuration/configuration-cli","unlisted":false},{"type":"link","label":"Configure an external PostgreSQL database","href":"/configuration-custom-database","docId":"Configuration/configuration-custom-database","unlisted":false},{"type":"link","label":"Global variables","href":"/configuration-global-variables","docId":"Configuration/configuration-global-variables","unlisted":false},{"type":"link","label":"Environment variables","href":"/environment-variables","docId":"Configuration/environment-variables","unlisted":false}],"collapsed":true,"collapsible":true},{"type":"category","label":"Develop","items":[{"type":"link","label":"About developing and configuring Langflow applications","href":"/develop-overview","docId":"Develop/develop-overview","unlisted":false},{"type":"link","label":"Develop an application in Langflow","href":"/develop-application","docId":"Develop/develop-application","unlisted":false},{"type":"link","label":"Install custom dependencies","href":"/install-custom-dependencies","docId":"Develop/install-custom-dependencies","unlisted":false},{"type":"link","label":"Memory management options","href":"/memory","docId":"Develop/memory","unlisted":false},{"type":"link","label":"Use session ID to manage communication between components","href":"/session-id","docId":"Develop/session-id","unlisted":false},{"type":"link","label":"Logging options in Langflow","href":"/logging","docId":"Develop/logging","unlisted":false},{"type":"link","label":"Trigger flows with webhooks","href":"/webhook","docId":"Develop/webhook","unlisted":false}],"collapsed":true,"collapsible":true},{"type":"category","label":"Deployment","items":[{"type":"link","label":"Deployment overview","href":"/deployment-overview","docId":"Deployment/deployment-overview","unlisted":false},{"type":"link","label":"Docker","href":"/deployment-docker","docId":"Deployment/deployment-docker","unlisted":false},{"type":"category","label":"Kubernetes","items":[{"type":"link","label":"Langflow architecture and best practices","href":"/deployment-prod-best-practices","docId":"Deployment/deployment-prod-best-practices","unlisted":false},{"type":"link","label":"Deploy in development","href":"/deployment-kubernetes-dev","docId":"Deployment/deployment-kubernetes-dev","unlisted":false},{"type":"link","label":"Deploy in production","href":"/deployment-kubernetes-prod","docId":"Deployment/deployment-kubernetes-prod","unlisted":false}],"collapsed":true,"collapsible":true},{"type":"link","label":"Google Cloud Platform","href":"/deployment-gcp","docId":"Deployment/deployment-gcp","unlisted":false},{"type":"link","label":"Hugging Face Spaces","href":"/deployment-hugging-face-spaces","docId":"Deployment/deployment-hugging-face-spaces","unlisted":false},{"type":"link","label":"Railway","href":"/deployment-railway","docId":"Deployment/deployment-railway","unlisted":false},{"type":"link","label":"Render","href":"/deployment-render","docId":"Deployment/deployment-render","unlisted":false}],"collapsed":true,"collapsible":true},{"type":"category","label":"API reference","items":[{"type":"link","label":"API documentation","href":"/api"},{"type":"link","label":"API examples","href":"/api-reference-api-examples","docId":"API-Reference/api-reference-api-examples","unlisted":false}],"collapsed":true,"collapsible":true},{"type":"category","label":"Integrations","items":[{"type":"link","label":"Apify","href":"/integrations-apify","docId":"Integrations/Apify/integrations-apify","unlisted":false},{"type":"link","label":"Arize","href":"/integrations-arize","docId":"Integrations/Arize/integrations-arize","unlisted":false},{"type":"link","label":"AssemblyAI","href":"/integrations-assemblyai","docId":"Integrations/integrations-assemblyai","unlisted":false},{"type":"link","label":"Composio","href":"/integrations-composio","docId":"Integrations/Composio/integrations-composio","unlisted":false},{"type":"link","label":"Astra DB MCP server","href":"/mcp-component-astra","docId":"Integrations/mcp-component-astra","unlisted":false},{"type":"category","label":"Google","items":[{"type":"link","label":"Integrate Google OAuth with Langflow","href":"/integrations-setup-google-oauth-langflow","docId":"Integrations/Google/integrations-setup-google-oauth-langflow","unlisted":false},{"type":"link","label":"Integrate Google Cloud Vertex AI with Langflow","href":"/integrations-setup-google-cloud-vertex-ai-langflow","docId":"Integrations/Google/integrations-setup-google-cloud-vertex-ai-langflow","unlisted":false}],"collapsed":true,"collapsible":true},{"type":"link","label":"Langfuse","href":"/integrations-langfuse","docId":"Integrations/integrations-langfuse","unlisted":false},{"type":"link","label":"LangSmith","href":"/integrations-langsmith","docId":"Integrations/integrations-langsmith","unlisted":false},{"type":"link","label":"LangWatch","href":"/integrations-langwatch","docId":"Integrations/integrations-langwatch","unlisted":false},{"type":"link","label":"Opik","href":"/integrations-opik","docId":"Integrations/integrations-opik","unlisted":false},{"type":"category","label":"Notion","items":[{"type":"link","label":"Setup","href":"/integrations/notion/setup","docId":"Integrations/Notion/integrations-notion","unlisted":false},{"type":"link","label":"Notion Conversational Agent","href":"/integrations/notion/notion-agent-conversational","docId":"Integrations/Notion/notion-agent-conversational","unlisted":false},{"type":"link","label":"Notion Meeting Notes Agent","href":"/integrations/notion/notion-agent-meeting-notes","docId":"Integrations/Notion/notion-agent-meeting-notes","unlisted":false}],"collapsed":true,"collapsible":true},{"type":"category","label":"NVIDIA","items":[{"type":"link","label":"Integrate NVIDIA Retriever Extraction with Langflow","href":"/integrations-nvidia-ingest","docId":"Integrations/Nvidia/integrations-nvidia-ingest","unlisted":false},{"type":"link","label":"Integrate NVIDIA NIMs with Langflow","href":"/integrations-nvidia-ingest-wsl2","docId":"Integrations/Nvidia/integrations-nvidia-nim-wsl2","unlisted":false}],"collapsed":true,"collapsible":true}],"collapsed":true,"collapsible":true},{"type":"category","label":"Contributing","items":[{"type":"link","label":"Join the Langflow community","href":"/contributing-community","docId":"Contributing/contributing-community","unlisted":false},{"type":"link","label":"Contribute components","href":"/contributing-components","docId":"Contributing/contributing-components","unlisted":false},{"type":"link","label":"Contribute component tests","href":"/contributing-component-tests","docId":"Contributing/contributing-component-tests","unlisted":false},{"type":"link","label":"Ask for help on the Discussions board","href":"/contributing-github-discussions","docId":"Contributing/contributing-github-discussion-board","unlisted":false},{"type":"link","label":"Request an enhancement or report a bug","href":"/contributing-github-issues","docId":"Contributing/contributing-github-issues","unlisted":false},{"type":"link","label":"Contribute to Langflow","href":"/contributing-how-to-contribute","docId":"Contributing/contributing-how-to-contribute","unlisted":false},{"type":"link","label":"Telemetry","href":"/contributing-telemetry","docId":"Contributing/contributing-telemetry","unlisted":false}],"collapsed":true,"collapsible":true},{"type":"category","label":"Changelog","items":[{"type":"link","label":"Changelog","href":"https://github.com/langflow-ai/langflow/releases/latest"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Support","items":[{"type":"link","label":"Luna for Langflow","href":"/luna-for-langflow","docId":"Support/luna-for-langflow","unlisted":false}],"collapsed":true,"collapsible":true},{"type":"html","className":"sidebar-ad","value":"\\n \\n \\n
\\n Use Langflow in the cloud\\n Sign up for DataStax Langflow\\n
\\n
\\n "}]},"docs":{"Agents/agent-tool-calling-agent-component":{"id":"Agents/agent-tool-calling-agent-component","title":"Create a problem-solving agent","description":"Developing agents in Langchain is complex.","sidebar":"docs"},"Agents/agents-overview":{"id":"Agents/agents-overview","title":"Agents overview","description":"Agents are AI systems that use LLMs as a brain to analyze problems and select external tools.","sidebar":"docs"},"API-Reference/api-reference-api-examples":{"id":"API-Reference/api-reference-api-examples","title":"API examples","description":"This page provides examples and practices for managing Langflow using the Langflow API.","sidebar":"docs"},"Components/components-agents":{"id":"Components/components-agents","title":"Agents","description":"Agent components define the behavior and capabilities of AI agents in your flow.","sidebar":"docs"},"Components/components-bundles":{"id":"Components/components-bundles","title":"Bundles","description":"Bundles are third-party components grouped by provider.","sidebar":"docs"},"Components/components-custom-components":{"id":"Components/components-custom-components","title":"Create custom Python components","description":"Custom components extend Langflow\'s functionality through Python classes that inherit from Component. This enables integration of new features, data manipulation, external services, and specialized tools.","sidebar":"docs"},"Components/components-data":{"id":"Components/components-data","title":"Data","description":"Data components load data from a source into your flow.","sidebar":"docs"},"Components/components-embedding-models":{"id":"Components/components-embedding-models","title":"Embeddings","description":"Embeddings models convert text into numerical vectors. These embeddings capture the semantic meaning of the input text, and allow LLMs to understand context.","sidebar":"docs"},"Components/components-helpers":{"id":"Components/components-helpers","title":"Helpers","description":"Helper components provide utility functions to help manage data, tasks, and other components in your flow.","sidebar":"docs"},"Components/components-io":{"id":"Components/components-io","title":"Inputs and outputs","description":"Input and output components define where data enters and exits your flow.","sidebar":"docs"},"Components/components-loaders":{"id":"Components/components-loaders","title":"Loaders","description":"As of Langflow 1.1, loader components are now found in the Components menu under Bundles.","sidebar":"docs"},"Components/components-logic":{"id":"Components/components-logic","title":"Logic","description":"Logic components provide functionalities for routing, conditional processing, and flow management.","sidebar":"docs"},"Components/components-memories":{"id":"Components/components-memories","title":"Memories","description":"Memory components store and retrieve chat messages by session_id.","sidebar":"docs"},"Components/components-models":{"id":"Components/components-models","title":"Models","description":"Model components generate text using large language models.","sidebar":"docs"},"Components/components-processing":{"id":"Components/components-processing","title":"Processing","description":"Processing components process and transform data within a flow.","sidebar":"docs"},"Components/components-prompts":{"id":"Components/components-prompts","title":"Prompts","description":"A prompt is a structured input to a language model that instructs the model how to handle user inputs and variables.","sidebar":"docs"},"Components/components-tools":{"id":"Components/components-tools","title":"Tools","description":"Tools are typically connected to agent components at the Tools port. Agents use LLMs as a reasoning engine to decide which of the connected tool components to use to solve a problem.","sidebar":"docs"},"Components/components-vector-stores":{"id":"Components/components-vector-stores","title":"Vector stores","description":"Vector databases store vector data, which backs AI workloads like chatbots and Retrieval Augmented Generation.","sidebar":"docs"},"Concepts/concepts-components":{"id":"Concepts/concepts-components","title":"Components","description":"A\xa0component\xa0is a single building block within a flow with inputs, outputs, functions, and parameters that define its functionality. A single component is like a class within a larger application.","sidebar":"docs"},"Concepts/concepts-file-management":{"id":"Concepts/concepts-file-management","title":"Manage files","description":"Upload, store, and manage files in Langflow\'s File management system.","sidebar":"docs"},"Concepts/concepts-flows":{"id":"Concepts/concepts-flows","title":"Flows","description":"Flows in Langflow are fully serializable and can be saved and loaded from the file system. In this guide, we\'ll explore how to import and export flows.","sidebar":"docs"},"Concepts/concepts-objects":{"id":"Concepts/concepts-objects","title":"Langflow objects","description":"In Langflow, objects are Pydantic models that serve as structured, functional representations of data.","sidebar":"docs"},"Concepts/concepts-overview":{"id":"Concepts/concepts-overview","title":"Langflow overview","description":"This page explores the fundamental building blocks of Langflow, beginning with the question, \\"What is a flow?\\"","sidebar":"docs"},"Concepts/concepts-playground":{"id":"Concepts/concepts-playground","title":"Playground","description":"The\xa0Playground\xa0is a dynamic interface designed for real-time interaction with LLMs, allowing users to chat, access memories, and monitor inputs and outputs. Here, users can directly prototype their models, making adjustments and observing different outcomes.","sidebar":"docs"},"Concepts/concepts-publish":{"id":"Concepts/concepts-publish","title":"Publish flows","description":"Langflow provides several ways to publish and integrate your flows into external applications. Whether you want to expose your flow as an API endpoint, embed it as a chat widget in your website, or share it as a public playground, this guide covers the options available for making your flows accessible to users.","sidebar":"docs"},"Concepts/concepts-voice-mode":{"id":"Concepts/concepts-voice-mode","title":"Voice mode","description":"The Langflow Playground supports voice mode for interacting with your applications through a microphone.","sidebar":"docs"},"Concepts/mcp-server":{"id":"Concepts/mcp-server","title":"Model Context Protocol (MCP) server","description":"Langflow integrates with the Model Context Protocol (MCP) as both an MCP server and an MCP client.","sidebar":"docs"},"Configuration/configuration-api-keys":{"id":"Configuration/configuration-api-keys","title":"API keys","description":"Langflow provides an API key functionality that allows users to access their individual components and flows without traditional login authentication.","sidebar":"docs"},"Configuration/configuration-authentication":{"id":"Configuration/configuration-authentication","title":"Authentication","description":"This guide covers Langflow\'s authentication system and API key management, including how to secure your deployment and manage access to flows and components.","sidebar":"docs"},"Configuration/configuration-cli":{"id":"Configuration/configuration-cli","title":"Langflow CLI","description":"The Langflow command line interface (Langflow CLI) is the main interface for managing and running the Langflow server.","sidebar":"docs"},"Configuration/configuration-custom-database":{"id":"Configuration/configuration-custom-database","title":"Configure an external PostgreSQL database","description":"Langflow\'s default database is SQLite, but you can configure Langflow to use PostgreSQL instead.","sidebar":"docs"},"Configuration/configuration-global-variables":{"id":"Configuration/configuration-global-variables","title":"Global variables","description":"Global variables let you store and reuse generic input values and credentials across your projects.","sidebar":"docs"},"Configuration/environment-variables":{"id":"Configuration/environment-variables","title":"Environment variables","description":"Langflow lets you configure a number of settings using environment variables.","sidebar":"docs"},"Contributing/contributing-community":{"id":"Contributing/contributing-community","title":"Join the Langflow community","description":"Join the Langflow Discord server","sidebar":"docs"},"Contributing/contributing-component-tests":{"id":"Contributing/contributing-component-tests","title":"Contribute component tests","description":"This guide outlines how to structure and implement tests for application components to ensure consistency and adequate coverage.","sidebar":"docs"},"Contributing/contributing-components":{"id":"Contributing/contributing-components","title":"Contribute components","description":"New components are added as objects of the\xa0CustomComponent\xa0class.","sidebar":"docs"},"Contributing/contributing-github-discussion-board":{"id":"Contributing/contributing-github-discussion-board","title":"Ask for help on the Discussions board","description":"If you\'re looking for help with your code, consider posting a question on the Langflow\xa0GitHub Discussions board. The Langflow team cannot provide individual support via email. The team also believes that help is much more valuable if it\'s\xa0shared publicly, so that more people can benefit from it.","sidebar":"docs"},"Contributing/contributing-github-issues":{"id":"Contributing/contributing-github-issues","title":"Request an enhancement or report a bug","description":"The\xa0Issues page in the Langflow repo is kept up to date with bugs, improvements, and feature requests. Labels are used to help with sorting and discovery of issues of interest. For an overview of the system Langflow uses to tag issues and pull requests, see the Langflow repo\'s labels page.","sidebar":"docs"},"Contributing/contributing-how-to-contribute":{"id":"Contributing/contributing-how-to-contribute","title":"Contribute to Langflow","description":"This guide is intended to help you start contributing to Langflow.","sidebar":"docs"},"Contributing/contributing-telemetry":{"id":"Contributing/contributing-telemetry","title":"Telemetry","description":"Langflow uses anonymous telemetry to collect essential usage statistics to enhance functionality and the user experience. This data helps us identify popular features and areas that need improvement, and ensures development efforts align with what you need.","sidebar":"docs"},"Deployment/deployment-docker":{"id":"Deployment/deployment-docker","title":"Deploy Langflow on Docker","description":"This guide demonstrates deploying Langflow with Docker and Docker Compose.","sidebar":"docs"},"Deployment/deployment-gcp":{"id":"Deployment/deployment-gcp","title":"Deploy Langflow on Google Cloud Platform","description":"This guide demonstrates deploying Langflow on Google Cloud Platform.","sidebar":"docs"},"Deployment/deployment-hugging-face-spaces":{"id":"Deployment/deployment-hugging-face-spaces","title":"Deploy Langflow on HuggingFace Spaces","description":"This guide explains how to deploy Langflow on HuggingFace Spaces.","sidebar":"docs"},"Deployment/deployment-kubernetes-dev":{"id":"Deployment/deployment-kubernetes-dev","title":"Deploy the Langflow development environment on Kubernetes","description":"The Langflow Integrated Development Environment (IDE) Helm chart is designed to provide a complete environment for developers to create, test, and debug their flows. It includes both the API and the UI.","sidebar":"docs"},"Deployment/deployment-kubernetes-prod":{"id":"Deployment/deployment-kubernetes-prod","title":"Deploy the Langflow production environment on Kubernetes","description":"The Langflow Runtime chart is tailored for deploying applications in a production environment. It is focused on stability, performance, isolation, and security to ensure that applications run reliably and efficiently.","sidebar":"docs"},"Deployment/deployment-overview":{"id":"Deployment/deployment-overview","title":"Langflow deployment overview","description":"You have a flow, and want to share it with the world in a production environment.","sidebar":"docs"},"Deployment/deployment-prod-best-practices":{"id":"Deployment/deployment-prod-best-practices","title":"Langflow architecture and best practices on Kubernetes","description":"While Langflow offers flexible deployment options, deploying on a Kubernetes cluster is highly recommended for production environments.","sidebar":"docs"},"Deployment/deployment-railway":{"id":"Deployment/deployment-railway","title":"Deploy Langflow on Railway","description":"This guide explains how to deploy Langflow on Railway, a cloud infrastructure platform that provides auto-deploy, managed databases, and automatic scaling.","sidebar":"docs"},"Deployment/deployment-render":{"id":"Deployment/deployment-render","title":"Deploy Langflow on Render","description":"This guide explains how to deploy Langflow on Render, a cloud platform for deploying web applications and APIs.","sidebar":"docs"},"Develop/develop-application":{"id":"Develop/develop-application","title":"Develop an application in Langflow","description":"Follow this guide to learn how to build an application using Langflow.","sidebar":"docs"},"Develop/develop-overview":{"id":"Develop/develop-overview","title":"About developing and configuring Langflow applications","description":"The following pages provide information about how to develop and configure Langflow applications.","sidebar":"docs"},"Develop/install-custom-dependencies":{"id":"Develop/install-custom-dependencies","title":"Install custom dependencies","description":"To install custom dependencies in your Langflow environment, add them with your package manager.","sidebar":"docs"},"Develop/logging":{"id":"Develop/logging","title":"Logging options in Langflow","description":"Langflow uses the loguru library for logging.","sidebar":"docs"},"Develop/memory":{"id":"Develop/memory","title":"Memory management options","description":"Langflow provides flexible memory management options for storage and retrieval.","sidebar":"docs"},"Develop/session-id":{"id":"Develop/session-id","title":"Use session ID to manage communication between components","description":"Session ID is a unique identifier for client/server connections. A single session equals the duration of a client\'s connection to a server.","sidebar":"docs"},"Develop/webhook":{"id":"Develop/webhook","title":"Trigger flows with webhooks","description":"Add a Webhook component to your flow to trigger it with external requests.","sidebar":"docs"},"Get-Started/get-started-installation":{"id":"Get-Started/get-started-installation","title":"Install Langflow","description":"Langflow can be installed in three ways:","sidebar":"docs"},"Get-Started/get-started-quickstart":{"id":"Get-Started/get-started-quickstart","title":"Quickstart","description":"Get to know Langflow by building an OpenAI-powered chatbot application. After you\'ve constructed a chatbot, add Retrieval Augmented Generation (RAG) to chat with your own data.","sidebar":"docs"},"Get-Started/welcome-to-langflow":{"id":"Get-Started/welcome-to-langflow","title":"Welcome to Langflow","description":"Langflow is a new, visual framework for building multi-agent and RAG applications. It is open-source, Python-powered, fully customizable, and LLM and vector store agnostic.","sidebar":"docs"},"Integrations/Apify/integrations-apify":{"id":"Integrations/Apify/integrations-apify","title":"Apify","description":"Apify is a web scraping and data extraction platform. It provides an Actor Store with more than 3,000 ready-made cloud tools called Actors.","sidebar":"docs"},"Integrations/Arize/integrations-arize":{"id":"Integrations/Arize/integrations-arize","title":"Integrate Arize with Langflow","description":"Arize is a tool built on OpenTelemetry and OpenInference for monitoring and optimizing LLM applications.","sidebar":"docs"},"Integrations/Composio/integrations-composio":{"id":"Integrations/Composio/integrations-composio","title":"Integrate Composio with Langflow","description":"Langflow integrates with Composio as a toolset for your Agent component.","sidebar":"docs"},"Integrations/Google/integrations-setup-google-cloud-vertex-ai-langflow":{"id":"Integrations/Google/integrations-setup-google-cloud-vertex-ai-langflow","title":"Integrate Google Cloud Vertex AI with Langflow","description":"A comprehensive guide on creating a Google OAuth app, obtaining tokens, and integrating them with Langflow\'s Google components.","sidebar":"docs"},"Integrations/Google/integrations-setup-google-oauth-langflow":{"id":"Integrations/Google/integrations-setup-google-oauth-langflow","title":"Integrate Google OAuth with Langflow","description":"A comprehensive guide on creating a Google OAuth app, obtaining tokens, and integrating them with Langflow\'s Google components.","sidebar":"docs"},"Integrations/integrations-assemblyai":{"id":"Integrations/integrations-assemblyai","title":"AssemblyAI","description":"The AssemblyAI components allow you to apply powerful Speech AI models to your app for tasks like:","sidebar":"docs"},"Integrations/integrations-langfuse":{"id":"Integrations/integrations-langfuse","title":"Langfuse","description":"Langfuse (GitHub) is an open-source platform for LLM observability. It provides tracing and monitoring capabilities for AI applications, helping developers debug, analyze, and optimize their AI systems. Langfuse integrates with various tools and frameworks such as workflows builders like Langflow.","sidebar":"docs"},"Integrations/integrations-langsmith":{"id":"Integrations/integrations-langsmith","title":"LangSmith","description":"LangSmith is a full-lifecycle DevOps service from LangChain that provides monitoring and observability. To integrate with Langflow, just add your LangChain API key as a Langflow environment variable and you are good to go!","sidebar":"docs"},"Integrations/integrations-langwatch":{"id":"Integrations/integrations-langwatch","title":"LangWatch","description":"938674091aac4d9d9aa4aa6eb5c215b4}","sidebar":"docs"},"Integrations/integrations-opik":{"id":"Integrations/integrations-opik","title":"Opik","description":"Opik is an open-source platform designed for evaluating, testing, and monitoring large language model (LLM) applications. Developed by Comet, it aims to facilitate more intuitive collaboration, testing, and monitoring of LLM-based applications.","sidebar":"docs"},"Integrations/mcp-component-astra":{"id":"Integrations/mcp-component-astra","title":"Connect an Astra DB MCP server to Langflow","description":"Use the MCP server component to connect Langflow to a Datastax Astra DB MCP server.","sidebar":"docs"},"Integrations/Notion/integrations-notion":{"id":"Integrations/Notion/integrations-notion","title":"Setup","description":"To use Notion components in Langflow, you first need to create a Notion integration and configure it with the necessary capabilities. This guide will walk you through the process of setting up a Notion integration and granting it access to your Notion databases.","sidebar":"docs"},"Integrations/Notion/notion-agent-conversational":{"id":"Integrations/Notion/notion-agent-conversational","title":"Notion Conversational Agent","description":"The Notion Conversational Agent is an AI-powered assistant that interacts with your Notion workspace through natural language conversations. This flow performs Notion-related tasks like creating pages, searching for information, and managing content, all through a chat interface.","sidebar":"docs"},"Integrations/Notion/notion-agent-meeting-notes":{"id":"Integrations/Notion/notion-agent-meeting-notes","title":"Notion Meeting Notes Agent","description":"The Notion Agent for Meeting Notes is an AI-powered tool that automatically processes meeting transcripts and updates your Notion workspace. It identifies tasks, action items, and key points from your meetings, then creates new tasks or updates existing ones in Notion without manual input.","sidebar":"docs"},"Integrations/Nvidia/integrations-nvidia-ingest":{"id":"Integrations/Nvidia/integrations-nvidia-ingest","title":"Integrate NVIDIA Retriever Extraction with Langflow","description":"NVIDIA Retriever Extraction is also known as NV-Ingest and NeMo Retriever Extraction.","sidebar":"docs"},"Integrations/Nvidia/integrations-nvidia-nim-wsl2":{"id":"Integrations/Nvidia/integrations-nvidia-nim-wsl2","title":"Integrate NVIDIA NIMs with Langflow","description":"Connect Langflow with NVIDIA NIM on an RTX Windows system with Windows Subsystem for Linux 2 (WSL2) installed.","sidebar":"docs"},"Sample-Flows/blog-writer":{"id":"Sample-Flows/blog-writer","title":"Blog writer","description":"Build a Blog Writer flow for a one-shot application using OpenAI.","sidebar":"docs"},"Sample-Flows/document-qa":{"id":"Sample-Flows/document-qa","title":"Document QA","description":"Build a question-and-answer chatbot with a document loaded from local memory.","sidebar":"docs"},"Sample-Flows/memory-chatbot":{"id":"Sample-Flows/memory-chatbot","title":"Memory chatbot","description":"This flow extends the basic prompting flow with a Chat memory component that stores up to 100 previous chat messages and uses them to provide context for the current conversation.","sidebar":"docs"},"Sample-Flows/sequential-agent":{"id":"Sample-Flows/sequential-agent","title":"Sequential tasks agent","description":"Build a Sequential Tasks Agent flow for a multi-agent application using multiple Agent components.","sidebar":"docs"},"Sample-Flows/travel-planning-agent":{"id":"Sample-Flows/travel-planning-agent","title":"Travel planning agent","description":"Build a Travel Planning Agent flow for an agentic application using the multiple Tool-calling agents.","sidebar":"docs"},"Starter-Projects/starter-projects-basic-prompting":{"id":"Starter-Projects/starter-projects-basic-prompting","title":"Basic prompting","description":"Prompts serve as the inputs to a large language model (LLM), acting as the interface between human instructions and computational tasks.","sidebar":"docs"},"Starter-Projects/starter-projects-simple-agent":{"id":"Starter-Projects/starter-projects-simple-agent","title":"Simple agent","description":"Build a Simple Agent flow for an agentic application using the Tool-calling agent component.","sidebar":"docs"},"Starter-Projects/starter-projects-vector-store-rag":{"id":"Starter-Projects/starter-projects-vector-store-rag","title":"Vector store RAG","description":"Retrieval Augmented Generation, or RAG, is a pattern for training LLMs on your data and querying it.","sidebar":"docs"},"Support/luna-for-langflow":{"id":"Support/luna-for-langflow","title":"Luna for Langflow","description":"With Luna for Langflow support, you can develop and deploy Langflow applications with confidence.","sidebar":"docs"}}}}')}}]); \ No newline at end of file diff --git a/assets/js/2ab0d4f5.d354f8ad.js b/assets/js/2ab0d4f5.29af1518.js similarity index 50% rename from assets/js/2ab0d4f5.d354f8ad.js rename to assets/js/2ab0d4f5.29af1518.js index 838554573e..91056ac1ad 100644 --- a/assets/js/2ab0d4f5.d354f8ad.js +++ b/assets/js/2ab0d4f5.29af1518.js @@ -1 +1 @@ -"use strict";(self.webpackChunklangflow_docs=self.webpackChunklangflow_docs||[]).push([[1845],{28453:(e,n,t)=>{t.d(n,{R:()=>a,x:()=>o});var i=t(96540);const s={},r=i.createContext(s);function a(e){const n=i.useContext(r);return i.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function o(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:a(e.components),i.createElement(r.Provider,{value:n},e.children)}},83640:(e,n,t)=>{t.r(n),t.d(n,{contentTitle:()=>o,default:()=>c,frontMatter:()=>a,metadata:()=>i,toc:()=>l});const i=JSON.parse('{"type":"api","id":"simplified-run-flow","title":"Simplified Run Flow","description":"","slug":"/simplified-run-flow","frontMatter":{},"api":{"tags":["Base"],"description":"Executes a specified flow by ID with support for streaming and telemetry.\\n\\nThis endpoint executes a flow identified by ID or name, with options for streaming the response\\nand tracking execution metrics. It handles both streaming and non-streaming execution modes.\\n\\nArgs:\\n background_tasks (BackgroundTasks): FastAPI background task manager\\n flow (FlowRead | None): The flow to execute, loaded via dependency\\n input_request (SimplifiedAPIRequest | None): Input parameters for the flow\\n stream (bool): Whether to stream the response\\n api_key_user (UserRead): Authenticated user from API key\\n request (Request): The incoming HTTP request\\n\\nReturns:\\n Union[StreamingResponse, RunResponse]: Either a streaming response for real-time results\\n or a RunResponse with the complete execution results\\n\\nRaises:\\n HTTPException: For flow not found (404) or invalid input (400)\\n APIException: For internal execution errors (500)\\n\\nNotes:\\n - Supports both streaming and non-streaming execution modes\\n - Tracks execution time and success/failure via telemetry\\n - Handles graceful client disconnection in streaming mode\\n - Provides detailed error handling with appropriate HTTP status codes\\n - In streaming mode, uses EventManager to handle events:\\n - \\"add_message\\": New messages during execution\\n - \\"token\\": Individual tokens during streaming\\n - \\"end\\": Final execution result","operationId":"simplified_run_flow_api_v1_run__flow_id_or_name__post","security":[{"API key query":[]},{"API key header":[]}],"parameters":[{"name":"flow_id_or_name","in":"path","required":true,"schema":{"type":"string","title":"Flow Id Or Name"}},{"name":"stream","in":"query","required":false,"schema":{"type":"boolean","default":false,"title":"Stream"}},{"name":"user_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"string","format":"uuid"},{"type":"null"}],"title":"User Id"}}],"requestBody":{"content":{"application/json":{"schema":{"anyOf":[{"properties":{"input_value":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Input Value","description":"The input value"},"input_type":{"anyOf":[{"type":"string","enum":["chat","text","any"]},{"type":"null"}],"title":"Input Type","description":"The input type","default":"chat"},"output_type":{"anyOf":[{"type":"string","enum":["chat","text","any","debug"]},{"type":"null"}],"title":"Output Type","description":"The output type","default":"chat"},"output_component":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Output Component","description":"If there are multiple output components, you can specify the component to get the output from.","default":""},"tweaks":{"anyOf":[{"additionalProperties":{"anyOf":[{"type":"string"},{"type":"object"}]},"type":"object","title":"Tweaks","description":"A dictionary of tweaks to adjust the flow\'s execution. Allows customizing flow behavior dynamically. All tweaks are overridden by the input values.","examples":[{"Component Name":{"parameter_name":"value"},"component_id":{"parameter_name":"value"},"parameter_name":"value"}]},{"type":"null"}],"description":"The tweaks"},"session_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Session Id","description":"The session id"}},"type":"object","title":"SimplifiedAPIRequest"},{"type":"null"}],"title":"Input Request"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"properties":{"detail":{"items":{"properties":{"loc":{"items":{"anyOf":[{"type":"string"},{"type":"integer"}]},"type":"array","title":"Location"},"msg":{"type":"string","title":"Message"},"type":{"type":"string","title":"Error Type"}},"type":"object","required":["loc","msg","type"],"title":"ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"}}}}},"method":"post","path":"/api/v1/run/{flow_id_or_name}","securitySchemes":{"OAuth2PasswordBearer":{"type":"oauth2","flows":{"password":{"scopes":{},"tokenUrl":"api/v1/login"}}},"API key query":{"type":"apiKey","in":"query","name":"x-api-key"},"API key header":{"type":"apiKey","in":"header","name":"x-api-key"}},"info":{"title":"Langflow","version":"1.4.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 \\"ipsum7\\": \\"\\",\\n \\"veniam_f02\\": \\"\\",\\n \\"eiusmod_16\\": \\"\\",\\n \\"sit_6\\": \\"\\",\\n \\"Duisd9\\": \\"\\"\\n },\\n \\"session_id\\": \\"\\"\\n}","options":{"raw":{"language":"json"}}},"auth":{"type":"apikey","apikey":[{"type":"any","value":"x-api-key","key":"key"},{"type":"any","value":"{{apiKey}}","key":"value"},{"type":"any","value":"query","key":"in"}]}}},"source":"@site/openapi.json","sourceDirName":".","permalink":"/api/simplified-run-flow","previous":{"title":"Get All","permalink":"/api/get-all"},"next":{"title":"Webhook Run Flow","permalink":"/api/webhook-run-flow"}}');var s=t(74848),r=t(28453);const a={},o="Simplified Run Flow",l=[];function d(e){const n={h1:"h1",header:"header",li:"li",p:"p",ul:"ul",...(0,r.R)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(n.header,{children:(0,s.jsx)(n.h1,{id:"simplified-run-flow",children:"Simplified Run Flow"})}),"\n",(0,s.jsx)(n.p,{children:"Executes a specified flow by ID with support for streaming and telemetry."}),"\n",(0,s.jsx)(n.p,{children:"This endpoint executes a flow identified by ID or name, with options for streaming the response\nand tracking execution metrics. It handles both streaming and non-streaming execution modes."}),"\n",(0,s.jsx)(n.p,{children:"Args:\nbackground_tasks (BackgroundTasks): FastAPI background task manager\nflow (FlowRead | None): The flow to execute, loaded via dependency\ninput_request (SimplifiedAPIRequest | None): Input parameters for the flow\nstream (bool): Whether to stream the response\napi_key_user (UserRead): Authenticated user from API key\nrequest (Request): The incoming HTTP request"}),"\n",(0,s.jsx)(n.p,{children:"Returns:\nUnion[StreamingResponse, RunResponse]: Either a streaming response for real-time results\nor a RunResponse with the complete execution results"}),"\n",(0,s.jsx)(n.p,{children:"Raises:\nHTTPException: For flow not found (404) or invalid input (400)\nAPIException: For internal execution errors (500)"}),"\n",(0,s.jsx)(n.p,{children:"Notes:"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsx)(n.li,{children:"Supports both streaming and non-streaming execution modes"}),"\n",(0,s.jsx)(n.li,{children:"Tracks execution time and success/failure via telemetry"}),"\n",(0,s.jsx)(n.li,{children:"Handles graceful client disconnection in streaming mode"}),"\n",(0,s.jsx)(n.li,{children:"Provides detailed error handling with appropriate HTTP status codes"}),"\n",(0,s.jsxs)(n.li,{children:["In streaming mode, uses EventManager to handle events:","\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsx)(n.li,{children:'"add_message": New messages during execution'}),"\n",(0,s.jsx)(n.li,{children:'"token": Individual tokens during streaming'}),"\n",(0,s.jsx)(n.li,{children:'"end": Final execution result'}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,s.jsxs)("table",{style:{display:"table",width:"100%"},children:[(0,s.jsx)("thead",{children:(0,s.jsx)("tr",{children:(0,s.jsx)("th",{style:{textAlign:"left"},children:"Path Parameters"})})}),(0,s.jsx)("tbody",{children:(0,s.jsx)("tr",{children:(0,s.jsxs)("td",{children:[(0,s.jsx)("code",{children:"flow_id_or_name"}),(0,s.jsx)("span",{style:{opacity:"0.6"},children:" Flow Id Or Name"}),(0,s.jsx)("span",{style:{opacity:"0.6"},children:" \u2014 "}),(0,s.jsx)("strong",{style:{fontSize:"var(--ifm-code-font-size)",color:"var(--openapi-required)"},children:" REQUIRED"})]})})})]}),"\n",(0,s.jsxs)("table",{style:{display:"table",width:"100%"},children:[(0,s.jsx)("thead",{children:(0,s.jsx)("tr",{children:(0,s.jsx)("th",{style:{textAlign:"left"},children:"Query Parameters"})})}),(0,s.jsxs)("tbody",{children:[(0,s.jsx)("tr",{children:(0,s.jsxs)("td",{children:[(0,s.jsx)("code",{children:"stream"}),(0,s.jsx)("span",{style:{opacity:"0.6"},children:" Stream"})]})}),(0,s.jsx)("tr",{children:(0,s.jsxs)("td",{children:[(0,s.jsx)("code",{children:"user_id"}),(0,s.jsx)("span",{style:{opacity:"0.6"},children:" User Id"})]})})]})]}),"\n",(0,s.jsxs)("table",{style:{display:"table",width:"100%"},children:[(0,s.jsx)("thead",{children:(0,s.jsx)("tr",{children:(0,s.jsxs)("th",{style:{textAlign:"left"},children:[(0,s.jsx)("span",{children:"Request Body "}),(0,s.jsx)("div",{})]})})}),(0,s.jsx)("tbody",{children:(0,s.jsx)("tr",{children:(0,s.jsx)("td",{children:(0,s.jsx)("span",{style:{opacity:"0.6"},children:" undefined"})})})})]}),"\n",(0,s.jsxs)("table",{style:{display:"table",width:"100%"},children:[(0,s.jsx)("thead",{children:(0,s.jsx)("tr",{children:(0,s.jsx)("th",{style:{textAlign:"left"},children:"Responses"})})}),(0,s.jsxs)("tbody",{children:[(0,s.jsx)("tr",{children:(0,s.jsxs)("td",{children:[(0,s.jsxs)("div",{style:{display:"flex"},children:[(0,s.jsx)("div",{style:{marginRight:"var(--ifm-table-cell-padding)"},children:(0,s.jsx)("code",{children:"200"})}),(0,s.jsx)("div",{children:(0,s.jsx)(n.p,{children:"Successful Response"})})]}),(0,s.jsx)("div",{children:(0,s.jsxs)("table",{style:{display:"table",width:"100%",marginTop:"var(--ifm-table-cell-padding)",marginBottom:"0px"},children:[(0,s.jsx)("thead",{children:(0,s.jsx)("tr",{children:(0,s.jsxs)("th",{style:{textAlign:"left"},children:[(0,s.jsx)("span",{children:"Schema "}),(0,s.jsx)("span",{style:{opacity:"0.6"},children:" \u2014 "}),(0,s.jsx)("strong",{style:{fontSize:"var(--ifm-code-font-size)",color:"var(--openapi-optional)"},children:" OPTIONAL"}),(0,s.jsx)("div",{})]})})}),(0,s.jsx)("tbody",{children:(0,s.jsx)("tr",{children:(0,s.jsx)("td",{children:(0,s.jsx)("span",{style:{opacity:"0.6"},children:" undefined"})})})})]})})]})}),(0,s.jsx)("tr",{children:(0,s.jsxs)("td",{children:[(0,s.jsxs)("div",{style:{display:"flex"},children:[(0,s.jsx)("div",{style:{marginRight:"var(--ifm-table-cell-padding)"},children:(0,s.jsx)("code",{children:"422"})}),(0,s.jsx)("div",{children:(0,s.jsx)(n.p,{children:"Validation Error"})})]}),(0,s.jsx)("div",{children:(0,s.jsxs)("table",{style:{display:"table",width:"100%",marginTop:"var(--ifm-table-cell-padding)",marginBottom:"0px"},children:[(0,s.jsx)("thead",{children:(0,s.jsx)("tr",{children:(0,s.jsxs)("th",{style:{textAlign:"left"},children:[(0,s.jsx)("span",{children:"Schema "}),(0,s.jsx)("span",{style:{opacity:"0.6"},children:" \u2014 "}),(0,s.jsx)("strong",{style:{fontSize:"var(--ifm-code-font-size)",color:"var(--openapi-optional)"},children:" OPTIONAL"}),(0,s.jsx)("div",{})]})})}),(0,s.jsx)("tbody",{children:(0,s.jsx)("tr",{children:(0,s.jsxs)("td",{children:[(0,s.jsx)("code",{children:"detail"}),(0,s.jsx)("span",{style:{opacity:"0.6"},children:" object[]"}),(0,s.jsx)("span",{style:{opacity:"0.6"},children:" \u2014 "}),(0,s.jsx)("strong",{style:{fontSize:"var(--ifm-code-font-size)",color:"var(--openapi-optional)"},children:" OPTIONAL"}),(0,s.jsx)("table",{style:{display:"table",width:"100%",marginTop:"var(--ifm-table-cell-padding)",marginBottom:"0px"},children:(0,s.jsxs)("tbody",{children:[(0,s.jsx)("tr",{children:(0,s.jsxs)("td",{children:[(0,s.jsx)("code",{children:"loc"}),(0,s.jsx)("span",{style:{opacity:"0.6"},children:" undefined[]"})]})}),(0,s.jsx)("tr",{children:(0,s.jsxs)("td",{children:[(0,s.jsx)("code",{children:"msg"}),(0,s.jsx)("span",{style:{opacity:"0.6"},children:" Message"})]})}),(0,s.jsx)("tr",{children:(0,s.jsxs)("td",{children:[(0,s.jsx)("code",{children:"type"}),(0,s.jsx)("span",{style:{opacity:"0.6"},children:" Error Type"})]})})]})})]})})})]})})]})})]})]})]})}function c(e={}){const{wrapper:n}={...(0,r.R)(),...e.components};return n?(0,s.jsx)(n,{...e,children:(0,s.jsx)(d,{...e})}):d(e)}}}]); \ No newline at end of file +"use strict";(self.webpackChunklangflow_docs=self.webpackChunklangflow_docs||[]).push([[1845],{28453:(e,n,t)=>{t.d(n,{R:()=>a,x:()=>o});var i=t(96540);const s={},r=i.createContext(s);function a(e){const n=i.useContext(r);return i.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function o(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:a(e.components),i.createElement(r.Provider,{value:n},e.children)}},83640:(e,n,t)=>{t.r(n),t.d(n,{contentTitle:()=>o,default:()=>c,frontMatter:()=>a,metadata:()=>i,toc:()=>l});const i=JSON.parse('{"type":"api","id":"simplified-run-flow","title":"Simplified Run Flow","description":"","slug":"/simplified-run-flow","frontMatter":{},"api":{"tags":["Base"],"description":"Executes a specified flow by ID with support for streaming and telemetry.\\n\\nThis endpoint executes a flow identified by ID or name, with options for streaming the response\\nand tracking execution metrics. It handles both streaming and non-streaming execution modes.\\n\\nArgs:\\n background_tasks (BackgroundTasks): FastAPI background task manager\\n flow (FlowRead | None): The flow to execute, loaded via dependency\\n input_request (SimplifiedAPIRequest | None): Input parameters for the flow\\n stream (bool): Whether to stream the response\\n api_key_user (UserRead): Authenticated user from API key\\n request (Request): The incoming HTTP request\\n\\nReturns:\\n Union[StreamingResponse, RunResponse]: Either a streaming response for real-time results\\n or a RunResponse with the complete execution results\\n\\nRaises:\\n HTTPException: For flow not found (404) or invalid input (400)\\n APIException: For internal execution errors (500)\\n\\nNotes:\\n - Supports both streaming and non-streaming execution modes\\n - Tracks execution time and success/failure via telemetry\\n - Handles graceful client disconnection in streaming mode\\n - Provides detailed error handling with appropriate HTTP status codes\\n - In streaming mode, uses EventManager to handle events:\\n - \\"add_message\\": New messages during execution\\n - \\"token\\": Individual tokens during streaming\\n - \\"end\\": Final execution result","operationId":"simplified_run_flow_api_v1_run__flow_id_or_name__post","security":[{"API key query":[]},{"API key header":[]}],"parameters":[{"name":"flow_id_or_name","in":"path","required":true,"schema":{"type":"string","title":"Flow Id Or Name"}},{"name":"stream","in":"query","required":false,"schema":{"type":"boolean","default":false,"title":"Stream"}},{"name":"user_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"string","format":"uuid"},{"type":"null"}],"title":"User Id"}}],"requestBody":{"content":{"application/json":{"schema":{"anyOf":[{"properties":{"input_value":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Input Value","description":"The input value"},"input_type":{"anyOf":[{"type":"string","enum":["chat","text","any"]},{"type":"null"}],"title":"Input Type","description":"The input type","default":"chat"},"output_type":{"anyOf":[{"type":"string","enum":["chat","text","any","debug"]},{"type":"null"}],"title":"Output Type","description":"The output type","default":"chat"},"output_component":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Output Component","description":"If there are multiple output components, you can specify the component to get the output from.","default":""},"tweaks":{"anyOf":[{"additionalProperties":{"anyOf":[{"type":"string"},{"type":"object"}]},"type":"object","title":"Tweaks","description":"A dictionary of tweaks to adjust the flow\'s execution. Allows customizing flow behavior dynamically. All tweaks are overridden by the input values.","examples":[{"Component Name":{"parameter_name":"value"},"component_id":{"parameter_name":"value"},"parameter_name":"value"}]},{"type":"null"}],"description":"The tweaks"},"session_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Session Id","description":"The session id"}},"type":"object","title":"SimplifiedAPIRequest"},{"type":"null"}],"title":"Input Request"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"properties":{"detail":{"items":{"properties":{"loc":{"items":{"anyOf":[{"type":"string"},{"type":"integer"}]},"type":"array","title":"Location"},"msg":{"type":"string","title":"Message"},"type":{"type":"string","title":"Error Type"}},"type":"object","required":["loc","msg","type"],"title":"ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"}}}}},"method":"post","path":"/api/v1/run/{flow_id_or_name}","securitySchemes":{"OAuth2PasswordBearer":{"type":"oauth2","flows":{"password":{"scopes":{},"tokenUrl":"api/v1/login"}}},"API key query":{"type":"apiKey","in":"query","name":"x-api-key"},"API key header":{"type":"apiKey","in":"header","name":"x-api-key"}},"info":{"title":"Langflow","version":"1.4.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 \\"dolor_40\\": \\"\\",\\n \\"sit9c\\": \\"\\",\\n \\"consectetur_3d6\\": \\"\\",\\n \\"sintb\\": \\"\\",\\n \\"est_55\\": \\"\\"\\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/3ae94ad4.23b1699f.js b/assets/js/3ae94ad4.23b1699f.js deleted file mode 100644 index 02920c93d8..0000000000 --- a/assets/js/3ae94ad4.23b1699f.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunklangflow_docs=self.webpackChunklangflow_docs||[]).push([[7408],{6944:(e,t,n)=>{n.d(t,{A:()=>s});const s=n.p+"assets/images/component-chat-io-9dc92d3f9e5da3722f2e4f4872e3ef59.png"},42171:(e,t,n)=>{n.r(t),n.d(t,{CH:()=>a,assets:()=>h,chCodeConfig:()=>p,contentTitle:()=>l,default:()=>j,frontMatter:()=>d,metadata:()=>s,toc:()=>x});const s=JSON.parse('{"id":"Components/components-io","title":"Inputs and outputs","description":"Input and output components define where data enters and exits your flow.","source":"@site/docs/Components/components-io.md","sourceDirName":"Components","slug":"/components-io","permalink":"/components-io","draft":false,"unlisted":false,"tags":[],"version":"current","frontMatter":{"title":"Inputs and outputs","slug":"/components-io"},"sidebar":"docs","previous":{"title":"Helpers","permalink":"/components-helpers"},"next":{"title":"Loaders","permalink":"/components-loaders"}}');var o=n(74848),r=n(28453),c=n(24754),i=n(84443);const d={title:"Inputs and outputs",slug:"/components-io"},l="Input and output components in Langflow",h={},a={annotations:c.hk,Code:c.Cy},p={staticMediaQuery:"not screen, (max-width: 768px)",lineNumbers:!0,showCopyButton:!0,themeName:"github-dark"},x=[{value:"Chat Input",id:"chat-input",level:2},{value:"Inputs",id:"inputs",level:3},{value:"Outputs",id:"outputs",level:3},{value:"Message method",id:"message-method",level:3},{value:"Text Input",id:"text-input",level:2},{value:"Inputs",id:"inputs-1",level:3},{value:"Outputs",id:"outputs-1",level:3},{value:"Chat Output",id:"chat-output",level:2},{value:"Inputs",id:"inputs-2",level:3},{value:"Outputs",id:"outputs-2",level:3},{value:"Text Output",id:"text-output",level:2},{value:"Inputs",id:"inputs-3",level:3},{value:"Outputs",id:"outputs-3",level:3},{value:"Chat components example flow",id:"chat-components-example-flow",level:2},{value:"Send chat messages with the API",id:"send-chat-messages-with-the-api",level:3}];function u(e){const t={a:"a",admonition:"admonition",code:"code",h1:"h1",h2:"h2",h3:"h3",header:"header",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,r.R)(),...e.components};return a||g("CH",!1),a.Code||g("CH.Code",!0),(0,o.jsxs)(o.Fragment,{children:[(0,o.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,o.jsx)(t.header,{children:(0,o.jsx)(t.h1,{id:"input-and-output-components-in-langflow",children:"Input and output components in Langflow"})}),"\n",(0,o.jsx)(t.p,{children:"Input and output components define where data enters and exits your flow."}),"\n",(0,o.jsxs)(t.p,{children:["Both components accept user input and return a ",(0,o.jsx)(t.code,{children:"Message"})," object, but serve different purposes."]}),"\n",(0,o.jsxs)(t.p,{children:["The ",(0,o.jsx)(t.strong,{children:"Text Input"})," component accepts a text string input and returns a ",(0,o.jsx)(t.code,{children:"Message"})," object containing only the input text. The output does not appear in the ",(0,o.jsx)(t.strong,{children:"Playground"}),"."]}),"\n",(0,o.jsxs)(t.p,{children:["The ",(0,o.jsx)(t.strong,{children:"Chat Input"})," component accepts multiple input types including text, files, and metadata, and returns a ",(0,o.jsx)(t.code,{children:"Message"})," object containing the text along with sender information, session ID, and file attachments."]}),"\n",(0,o.jsxs)(t.p,{children:["The ",(0,o.jsx)(t.strong,{children:"Chat Input"})," component provides an interactive chat interface in the ",(0,o.jsx)(t.strong,{children:"Playground"}),"."]}),"\n",(0,o.jsx)(t.h2,{id:"chat-input",children:"Chat Input"}),"\n",(0,o.jsxs)(t.p,{children:["This component collects user input as ",(0,o.jsx)(t.code,{children:"Text"})," strings from the chat and wraps it in a ",(0,o.jsx)(t.a,{href:"/concepts-objects#message-object",children:"Message"})," object that includes the input text, sender information, session ID, file attachments, and styling properties."]}),"\n",(0,o.jsx)(t.p,{children:"It can optionally store the message in a chat history."}),"\n",(0,o.jsx)(t.h3,{id:"inputs",children:"Inputs"}),"\n",(0,o.jsxs)(t.table,{children:[(0,o.jsx)(t.thead,{children:(0,o.jsxs)(t.tr,{children:[(0,o.jsx)(t.th,{children:"Name"}),(0,o.jsx)(t.th,{children:"Display Name"}),(0,o.jsx)(t.th,{children:"Info"})]})}),(0,o.jsxs)(t.tbody,{children:[(0,o.jsxs)(t.tr,{children:[(0,o.jsx)(t.td,{children:"input_value"}),(0,o.jsx)(t.td,{children:"Text"}),(0,o.jsx)(t.td,{children:"The Message to be passed as input."})]}),(0,o.jsxs)(t.tr,{children:[(0,o.jsx)(t.td,{children:"should_store_message"}),(0,o.jsx)(t.td,{children:"Store Messages"}),(0,o.jsx)(t.td,{children:"Store the message in the history."})]}),(0,o.jsxs)(t.tr,{children:[(0,o.jsx)(t.td,{children:"sender"}),(0,o.jsx)(t.td,{children:"Sender Type"}),(0,o.jsx)(t.td,{children:"The type of sender."})]}),(0,o.jsxs)(t.tr,{children:[(0,o.jsx)(t.td,{children:"sender_name"}),(0,o.jsx)(t.td,{children:"Sender Name"}),(0,o.jsx)(t.td,{children:"The name of the sender."})]}),(0,o.jsxs)(t.tr,{children:[(0,o.jsx)(t.td,{children:"session_id"}),(0,o.jsx)(t.td,{children:"Session ID"}),(0,o.jsx)(t.td,{children:"The session ID of the chat. If empty, the current session ID parameter is used."})]}),(0,o.jsxs)(t.tr,{children:[(0,o.jsx)(t.td,{children:"files"}),(0,o.jsx)(t.td,{children:"Files"}),(0,o.jsx)(t.td,{children:"The files to be sent with the message."})]}),(0,o.jsxs)(t.tr,{children:[(0,o.jsx)(t.td,{children:"background_color"}),(0,o.jsx)(t.td,{children:"Background Color"}),(0,o.jsx)(t.td,{children:"The background color of the icon."})]}),(0,o.jsxs)(t.tr,{children:[(0,o.jsx)(t.td,{children:"chat_icon"}),(0,o.jsx)(t.td,{children:"Icon"}),(0,o.jsx)(t.td,{children:"The icon of the message."})]}),(0,o.jsxs)(t.tr,{children:[(0,o.jsx)(t.td,{children:"text_color"}),(0,o.jsx)(t.td,{children:"Text Color"}),(0,o.jsx)(t.td,{children:"The text color of the name."})]})]})]}),"\n",(0,o.jsx)(t.h3,{id:"outputs",children:"Outputs"}),"\n",(0,o.jsxs)(t.table,{children:[(0,o.jsx)(t.thead,{children:(0,o.jsxs)(t.tr,{children:[(0,o.jsx)(t.th,{children:"Name"}),(0,o.jsx)(t.th,{children:"Display Name"}),(0,o.jsx)(t.th,{children:"Info"})]})}),(0,o.jsx)(t.tbody,{children:(0,o.jsxs)(t.tr,{children:[(0,o.jsx)(t.td,{children:"message"}),(0,o.jsx)(t.td,{children:"Message"}),(0,o.jsx)(t.td,{children:"The resulting chat message object with all specified properties."})]})})]}),"\n",(0,o.jsx)(t.h3,{id:"message-method",children:"Message method"}),"\n",(0,o.jsxs)(t.p,{children:["The ",(0,o.jsx)(t.code,{children:"ChatInput"})," class provides an asynchronous method to create and store a ",(0,o.jsx)(t.code,{children:"Message"})," object based on the input parameters.\nThe ",(0,o.jsx)(t.code,{children:"Message"})," object is created in the ",(0,o.jsx)(t.code,{children:"message_response"})," method of the ChatInput class using the ",(0,o.jsx)(t.code,{children:"Message.create()"})," factory method."]}),"\n",(0,o.jsx)(a.Code,{codeConfig:p,northPanel:{tabs:[""],active:"",heightRatio:1},files:[{name:"",focus:"",code:{lines:[{tokens:[{content:"message ",props:{style:{color:"#C9D1D9"}}},{content:"= await",props:{style:{color:"#FF7B72"}}},{content:" Message.create(",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" text",props:{style:{color:"#FFA657"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:"self",props:{style:{color:"#79C0FF"}}},{content:".input_value,",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" sender",props:{style:{color:"#FFA657"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:"self",props:{style:{color:"#79C0FF"}}},{content:".sender,",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" sender_name",props:{style:{color:"#FFA657"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:"self",props:{style:{color:"#79C0FF"}}},{content:".sender_name,",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" session_id",props:{style:{color:"#FFA657"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:"self",props:{style:{color:"#79C0FF"}}},{content:".session_id,",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" files",props:{style:{color:"#FFA657"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:"self",props:{style:{color:"#79C0FF"}}},{content:".files,",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" properties",props:{style:{color:"#FFA657"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:"{",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:' "background_color"',props:{style:{color:"#A5D6FF"}}},{content:": background_color,",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:' "text_color"',props:{style:{color:"#A5D6FF"}}},{content:": text_color,",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:' "icon"',props:{style:{color:"#A5D6FF"}}},{content:": icon,",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" },",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:")",props:{style:{color:"#C9D1D9"}}}]}],lang:"python"},annotations:[]}]}),"\n",(0,o.jsx)(t.h2,{id:"text-input",children:"Text Input"}),"\n",(0,o.jsxs)(t.p,{children:["The ",(0,o.jsx)(t.strong,{children:"Text Input"})," component accepts a text string input and returns a ",(0,o.jsx)(t.code,{children:"Message"})," object containing only the input text."]}),"\n",(0,o.jsxs)(t.p,{children:["The output does not appear in the ",(0,o.jsx)(t.strong,{children:"Playground"}),"."]}),"\n",(0,o.jsx)(t.h3,{id:"inputs-1",children:"Inputs"}),"\n",(0,o.jsxs)(t.table,{children:[(0,o.jsx)(t.thead,{children:(0,o.jsxs)(t.tr,{children:[(0,o.jsx)(t.th,{children:"Name"}),(0,o.jsx)(t.th,{children:"Display Name"}),(0,o.jsx)(t.th,{children:"Info"})]})}),(0,o.jsx)(t.tbody,{children:(0,o.jsxs)(t.tr,{children:[(0,o.jsx)(t.td,{children:"input_value"}),(0,o.jsx)(t.td,{children:"Text"}),(0,o.jsx)(t.td,{children:"The text/content to be passed as output."})]})})]}),"\n",(0,o.jsx)(t.h3,{id:"outputs-1",children:"Outputs"}),"\n",(0,o.jsxs)(t.table,{children:[(0,o.jsx)(t.thead,{children:(0,o.jsxs)(t.tr,{children:[(0,o.jsx)(t.th,{children:"Name"}),(0,o.jsx)(t.th,{children:"Display Name"}),(0,o.jsx)(t.th,{children:"Info"})]})}),(0,o.jsx)(t.tbody,{children:(0,o.jsxs)(t.tr,{children:[(0,o.jsx)(t.td,{children:"text"}),(0,o.jsx)(t.td,{children:"Text"}),(0,o.jsx)(t.td,{children:"The resulting text message."})]})})]}),"\n",(0,o.jsx)(t.h2,{id:"chat-output",children:"Chat Output"}),"\n",(0,o.jsxs)(t.p,{children:["The ",(0,o.jsx)(t.strong,{children:"Chat Output"})," component creates a ",(0,o.jsx)(t.a,{href:"/concepts-objects#message-object",children:"Message"})," object that includes the input text, sender information, session ID, and styling properties."]}),"\n",(0,o.jsx)(t.p,{children:"The component accepts the following input types."}),"\n",(0,o.jsxs)(t.ul,{children:["\n",(0,o.jsx)(t.li,{children:(0,o.jsx)(t.a,{href:"/concepts-objects#data-object",children:"Data"})}),"\n",(0,o.jsx)(t.li,{children:(0,o.jsx)(t.a,{href:"/concepts-objects#dataframe-object",children:"DataFrame"})}),"\n",(0,o.jsx)(t.li,{children:(0,o.jsx)(t.a,{href:"/concepts-objects#message-object",children:"Message"})}),"\n"]}),"\n",(0,o.jsx)(t.h3,{id:"inputs-2",children:"Inputs"}),"\n",(0,o.jsxs)(t.table,{children:[(0,o.jsx)(t.thead,{children:(0,o.jsxs)(t.tr,{children:[(0,o.jsx)(t.th,{children:"Name"}),(0,o.jsx)(t.th,{children:"Display Name"}),(0,o.jsx)(t.th,{children:"Info"})]})}),(0,o.jsxs)(t.tbody,{children:[(0,o.jsxs)(t.tr,{children:[(0,o.jsx)(t.td,{children:"input_value"}),(0,o.jsx)(t.td,{children:"Text"}),(0,o.jsx)(t.td,{children:"The message to be passed as output."})]}),(0,o.jsxs)(t.tr,{children:[(0,o.jsx)(t.td,{children:"should_store_message"}),(0,o.jsx)(t.td,{children:"Store Messages"}),(0,o.jsx)(t.td,{children:"The flag to store the message in the history."})]}),(0,o.jsxs)(t.tr,{children:[(0,o.jsx)(t.td,{children:"sender"}),(0,o.jsx)(t.td,{children:"Sender Type"}),(0,o.jsx)(t.td,{children:"The type of sender."})]}),(0,o.jsxs)(t.tr,{children:[(0,o.jsx)(t.td,{children:"sender_name"}),(0,o.jsx)(t.td,{children:"Sender Name"}),(0,o.jsx)(t.td,{children:"The name of the sender."})]}),(0,o.jsxs)(t.tr,{children:[(0,o.jsx)(t.td,{children:"session_id"}),(0,o.jsx)(t.td,{children:"Session ID"}),(0,o.jsx)(t.td,{children:"The session ID of the chat. If empty, the current session ID parameter is used."})]}),(0,o.jsxs)(t.tr,{children:[(0,o.jsx)(t.td,{children:"data_template"}),(0,o.jsx)(t.td,{children:"Data Template"}),(0,o.jsx)(t.td,{children:"The template to convert Data to Text. If the option is left empty, it is dynamically set to the Data's text key."})]}),(0,o.jsxs)(t.tr,{children:[(0,o.jsx)(t.td,{children:"background_color"}),(0,o.jsx)(t.td,{children:"Background Color"}),(0,o.jsx)(t.td,{children:"The background color of the icon."})]}),(0,o.jsxs)(t.tr,{children:[(0,o.jsx)(t.td,{children:"chat_icon"}),(0,o.jsx)(t.td,{children:"Icon"}),(0,o.jsx)(t.td,{children:"The icon of the message."})]}),(0,o.jsxs)(t.tr,{children:[(0,o.jsx)(t.td,{children:"text_color"}),(0,o.jsx)(t.td,{children:"Text Color"}),(0,o.jsx)(t.td,{children:"The text color of the name."})]}),(0,o.jsxs)(t.tr,{children:[(0,o.jsx)(t.td,{children:"clean_data"}),(0,o.jsx)(t.td,{children:"Basic Clean Data"}),(0,o.jsxs)(t.td,{children:["When enabled, ",(0,o.jsx)(t.code,{children:"DataFrame"})," inputs are cleaned when converted to text. Cleaning removes empty rows, empty lines in cells, and multiple newlines."]})]})]})]}),"\n",(0,o.jsx)(t.h3,{id:"outputs-2",children:"Outputs"}),"\n",(0,o.jsxs)(t.table,{children:[(0,o.jsx)(t.thead,{children:(0,o.jsxs)(t.tr,{children:[(0,o.jsx)(t.th,{children:"Name"}),(0,o.jsx)(t.th,{children:"Display Name"}),(0,o.jsx)(t.th,{children:"Info"})]})}),(0,o.jsx)(t.tbody,{children:(0,o.jsxs)(t.tr,{children:[(0,o.jsx)(t.td,{children:"message"}),(0,o.jsx)(t.td,{children:"Message"}),(0,o.jsx)(t.td,{children:"The resulting chat message object with all specified properties."})]})})]}),"\n",(0,o.jsx)(t.h2,{id:"text-output",children:"Text Output"}),"\n",(0,o.jsxs)(t.p,{children:["The ",(0,o.jsx)(t.strong,{children:"Text Output"})," takes a single input of text and returns a ",(0,o.jsx)(t.a,{href:"/concepts-objects#message-object",children:"Message"})," object containing that text."]}),"\n",(0,o.jsxs)(t.p,{children:["The output does not appear in the ",(0,o.jsx)(t.strong,{children:"Playground"}),"."]}),"\n",(0,o.jsx)(t.h3,{id:"inputs-3",children:"Inputs"}),"\n",(0,o.jsxs)(t.table,{children:[(0,o.jsx)(t.thead,{children:(0,o.jsxs)(t.tr,{children:[(0,o.jsx)(t.th,{children:"Name"}),(0,o.jsx)(t.th,{children:"Display Name"}),(0,o.jsx)(t.th,{children:"Info"})]})}),(0,o.jsx)(t.tbody,{children:(0,o.jsxs)(t.tr,{children:[(0,o.jsx)(t.td,{children:"input_value"}),(0,o.jsx)(t.td,{children:"Text"}),(0,o.jsx)(t.td,{children:"The text to be passed as output."})]})})]}),"\n",(0,o.jsx)(t.h3,{id:"outputs-3",children:"Outputs"}),"\n",(0,o.jsxs)(t.table,{children:[(0,o.jsx)(t.thead,{children:(0,o.jsxs)(t.tr,{children:[(0,o.jsx)(t.th,{children:"Name"}),(0,o.jsx)(t.th,{children:"Display Name"}),(0,o.jsx)(t.th,{children:"Info"})]})}),(0,o.jsx)(t.tbody,{children:(0,o.jsxs)(t.tr,{children:[(0,o.jsx)(t.td,{children:"text"}),(0,o.jsx)(t.td,{children:"Text"}),(0,o.jsx)(t.td,{children:"The resulting text message."})]})})]}),"\n",(0,o.jsx)(t.h2,{id:"chat-components-example-flow",children:"Chat components example flow"}),"\n",(0,o.jsxs)(t.ol,{children:["\n",(0,o.jsxs)(t.li,{children:["To use the ",(0,o.jsx)(t.strong,{children:"Chat Input"})," and ",(0,o.jsx)(t.strong,{children:"Chat Output"})," components in a flow, connect them to components that accept or send the ",(0,o.jsx)(t.a,{href:"/concepts-objects#message-object",children:"Message"})," type."]}),"\n"]}),"\n",(0,o.jsxs)(t.p,{children:["For this example, connect a ",(0,o.jsx)(t.strong,{children:"Chat Input"})," component to an ",(0,o.jsx)(t.strong,{children:"OpenAI"})," model component's ",(0,o.jsx)(t.strong,{children:"Input"})," port, and then connect the ",(0,o.jsx)(t.strong,{children:"OpenAI"})," model component's ",(0,o.jsx)(t.strong,{children:"Message"})," port to the ",(0,o.jsx)(t.strong,{children:"Chat Output"})," component."]}),"\n",(0,o.jsxs)(t.ol,{start:"2",children:["\n",(0,o.jsxs)(t.li,{children:["In the ",(0,o.jsx)(t.strong,{children:"OpenAI"})," model component, in the ",(0,o.jsx)(t.strong,{children:"OpenAI API Key"})," field, add your ",(0,o.jsx)(t.strong,{children:"OpenAI API key"}),"."]}),"\n"]}),"\n",(0,o.jsx)(t.p,{children:"The flow looks like this:"}),"\n",(0,o.jsx)(t.p,{children:(0,o.jsx)(t.img,{alt:"Chat input and output components connected to an OpenAI model",src:n(6944).A+"",width:"4000",height:"2574"})}),"\n",(0,o.jsxs)(t.ol,{start:"3",children:["\n",(0,o.jsxs)(t.li,{children:["\n",(0,o.jsxs)(t.p,{children:["To send a message to your flow, open the ",(0,o.jsx)(t.strong,{children:"Playground"}),", and then enter a message.\nThe ",(0,o.jsx)(t.strong,{children:"OpenAI"})," model component responds.\nOptionally, in the ",(0,o.jsx)(t.strong,{children:"OpenAI"})," model component, enter a ",(0,o.jsx)(t.strong,{children:"System Message"})," to control the model's response."]}),"\n"]}),"\n",(0,o.jsxs)(t.li,{children:["\n",(0,o.jsxs)(t.p,{children:["In the Langflow UI, click your flow name, and then click ",(0,o.jsx)(t.strong,{children:"Logs"}),".\nThe ",(0,o.jsx)(t.strong,{children:"Logs"})," pane opens.\nHere, you can inspect your component logs.\n",(0,o.jsx)(t.img,{alt:"Logs pane",src:n(77232).A+"",width:"3200",height:"1716"})]}),"\n"]}),"\n",(0,o.jsxs)(t.li,{children:["\n",(0,o.jsxs)(t.p,{children:["Your first message was sent by the ",(0,o.jsx)(t.strong,{children:"Chat Input"})," component to the ",(0,o.jsx)(t.strong,{children:"OpenAI"})," model component.\nClick ",(0,o.jsx)(t.strong,{children:"Outputs"})," to view the sent message:"]}),"\n"]}),"\n"]}),"\n",(0,o.jsx)(a.Code,{codeConfig:p,northPanel:{tabs:[""],active:"",heightRatio:1},files:[{name:"",focus:"",code:{lines:[{tokens:[{content:' "messages": [',props:{}}]},{tokens:[{content:" {",props:{}}]},{tokens:[{content:' "message": "What\'s the recommended way to install Docker on Mac M1?",',props:{}}]},{tokens:[{content:' "sender": "User",',props:{}}]},{tokens:[{content:' "sender_name": "User",',props:{}}]},{tokens:[{content:' "session_id": "Session Apr 21, 17:37:04",',props:{}}]},{tokens:[{content:' "stream_url": null,',props:{}}]},{tokens:[{content:' "component_id": "ChatInput-4WKag",',props:{}}]},{tokens:[{content:' "files": [],',props:{}}]},{tokens:[{content:' "type": "text"',props:{}}]},{tokens:[{content:" }",props:{}}]},{tokens:[{content:" ],",props:{}}]}],lang:"text"},annotations:[]}]}),"\n",(0,o.jsxs)(t.ol,{start:"6",children:["\n",(0,o.jsxs)(t.li,{children:["Your second message was sent by the ",(0,o.jsx)(t.strong,{children:"OpenAI"})," model component to the ",(0,o.jsx)(t.strong,{children:"Chat Output"})," component.\nThis is the raw text output of the model's response.\nThe ",(0,o.jsx)(t.strong,{children:"Chat Output"})," component accepts this text as input and presents it as a formatted message.\nClick ",(0,o.jsx)(t.strong,{children:"Outputs"})," to view the sent message:"]}),"\n"]}),"\n",(0,o.jsx)(a.Code,{codeConfig:p,northPanel:{tabs:[""],active:"",heightRatio:1},files:[{name:"",focus:"",code:{lines:[{tokens:[{content:' "outputs":',props:{}}]},{tokens:[{content:' "text_output":',props:{}}]},{tokens:[{content:' "message": "To install Docker on a Mac with an M1 chip, you should use Docker Desktop for Mac, which is optimized for Apple Silicon. Here\u2019s a step-by-step guide to installing Docker on your M1 Mac:\\n\\n1.',props:{}}]},{tokens:[{content:" ...",props:{}}]},{tokens:[{content:' "type": "text"',props:{}}]}],lang:"text"},annotations:[]}]}),"\n",(0,o.jsx)(t.admonition,{type:"tip",children:(0,o.jsxs)(t.p,{children:["Optionally, to view the outputs of each component in the flow, click ",(0,o.jsx)(i.A,{name:"TextSearch","aria-label":"Inspect icon"}),"."]})}),"\n",(0,o.jsx)(t.h3,{id:"send-chat-messages-with-the-api",children:"Send chat messages with the API"}),"\n",(0,o.jsxs)(t.p,{children:["The ",(0,o.jsx)(t.strong,{children:"Chat Input"})," component is often the entry point for passing messages to the Langflow API.\nTo send the same example messages programmatically to your Langflow server, do the following:"]}),"\n",(0,o.jsxs)(t.ol,{children:["\n",(0,o.jsxs)(t.li,{children:["To get your Langflow endpoint, click ",(0,o.jsx)(t.strong,{children:"Publish"}),", and then click ",(0,o.jsx)(t.strong,{children:"API access"}),"."]}),"\n",(0,o.jsxs)(t.li,{children:["Copy the command from the ",(0,o.jsx)(t.strong,{children:"cURL"})," tab, and then paste it in your terminal.\nIt looks similar to this:"]}),"\n"]}),"\n",(0,o.jsx)(a.Code,{codeConfig:p,northPanel:{tabs:[""],active:"",heightRatio:1},files:[{name:"",focus:"",code:{lines:[{tokens:[{content:"curl --request POST \\",props:{}}]},{tokens:[{content:" --url 'http://127.0.0.1:7860/api/v1/run/51eed711-4530-4fdc-9bce-5db4351cc73a?stream=false' \\",props:{}}]},{tokens:[{content:" --header 'Content-Type: application/json' \\",props:{}}]},{tokens:[{content:" --data '{",props:{}}]},{tokens:[{content:' "input_value": "What\'s the recommended way to install Docker on Mac M1?",',props:{}}]},{tokens:[{content:' "output_type": "chat",',props:{}}]},{tokens:[{content:' "input_type": "chat"',props:{}}]},{tokens:[{content:"}'",props:{}}]}],lang:"text"},annotations:[]}]}),"\n",(0,o.jsxs)(t.ol,{start:"3",children:["\n",(0,o.jsxs)(t.li,{children:["Modify ",(0,o.jsx)(t.code,{children:"input_value"})," so it contains the question, ",(0,o.jsx)(t.code,{children:"What's the recommended way to install Docker on Mac M1?"}),"."]}),"\n"]}),"\n",(0,o.jsxs)(t.p,{children:["Note the ",(0,o.jsx)(t.code,{children:"output_type"})," and ",(0,o.jsx)(t.code,{children:"input_type"})," parameters that are passed with the message. The ",(0,o.jsx)(t.code,{children:"chat"})," type provides additional configuration options, and the messages appear in the ",(0,o.jsx)(t.strong,{children:"Playground"}),". The ",(0,o.jsx)(t.code,{children:"text"})," type returns only text strings, and does not appear in the ",(0,o.jsx)(t.strong,{children:"Playground"}),"."]}),"\n",(0,o.jsxs)(t.ol,{start:"4",children:["\n",(0,o.jsxs)(t.li,{children:["Add a custom ",(0,o.jsx)(t.code,{children:"session_id"})," to the message's ",(0,o.jsx)(t.code,{children:"data"})," object."]}),"\n"]}),"\n",(0,o.jsx)(a.Code,{codeConfig:p,northPanel:{tabs:[""],active:"",heightRatio:1},files:[{name:"",focus:"",code:{lines:[{tokens:[{content:"curl --request POST \\",props:{}}]},{tokens:[{content:" --url 'http://127.0.0.1:7860/api/v1/run/51eed711-4530-4fdc-9bce-5db4351cc73a?stream=false' \\",props:{}}]},{tokens:[{content:" --header 'Content-Type: application/json' \\",props:{}}]},{tokens:[{content:" --data '{",props:{}}]},{tokens:[{content:' "input_value": "Whats the recommended way to install Docker on Mac M1",',props:{}}]},{tokens:[{content:' "session_id": "docker-question-on-m1",',props:{}}]},{tokens:[{content:' "output_type": "chat",',props:{}}]},{tokens:[{content:' "input_type": "chat"',props:{}}]},{tokens:[{content:"}'",props:{}}]}],lang:"text"},annotations:[]}]}),"\n",(0,o.jsxs)(t.p,{children:["The custom ",(0,o.jsx)(t.code,{children:"session_id"})," value starts a new chat session between your client and the Langflow server, and can be useful in keeping conversations and AI context separate."]}),"\n",(0,o.jsxs)(t.ol,{start:"5",children:["\n",(0,o.jsx)(t.li,{children:"Send the POST request.\nYour request is answered."}),"\n",(0,o.jsxs)(t.li,{children:["Navigate to the ",(0,o.jsx)(t.strong,{children:"Playground"}),".\nA new chat session called ",(0,o.jsx)(t.code,{children:"docker-question-on-m1"})," has appeared, using your unique ",(0,o.jsx)(t.code,{children:"session_id"}),"."]}),"\n",(0,o.jsxs)(t.li,{children:["To modify additional parameters with ",(0,o.jsx)(t.strong,{children:"Tweaks"})," for your ",(0,o.jsx)(t.strong,{children:"Chat Input"})," and ",(0,o.jsx)(t.strong,{children:"Chat Output"})," components, click ",(0,o.jsx)(t.strong,{children:"Publish"}),", and then click ",(0,o.jsx)(t.strong,{children:"API access"}),"."]}),"\n",(0,o.jsxs)(t.li,{children:["Click ",(0,o.jsx)(t.strong,{children:"Tweaks"})," to modify parameters in the component's ",(0,o.jsx)(t.code,{children:"data"})," object.\nFor example, disabling storing messages from the ",(0,o.jsx)(t.strong,{children:"Chat Input"})," component adds a ",(0,o.jsx)(t.strong,{children:"Tweak"})," to your command:"]}),"\n"]}),"\n",(0,o.jsx)(a.Code,{codeConfig:p,northPanel:{tabs:[""],active:"",heightRatio:1},files:[{name:"",focus:"",code:{lines:[{tokens:[{content:"curl --request POST \\",props:{}}]},{tokens:[{content:" --url 'http://127.0.0.1:7860/api/v1/run/51eed711-4530-4fdc-9bce-5db4351cc73a?stream=false' \\",props:{}}]},{tokens:[{content:" --header 'Content-Type: application/json' \\",props:{}}]},{tokens:[{content:" --data '{",props:{}}]},{tokens:[{content:' "input_value": "Text to input to the flow",',props:{}}]},{tokens:[{content:' "output_type": "chat",',props:{}}]},{tokens:[{content:' "input_type": "chat",',props:{}}]},{tokens:[{content:' "tweaks": {',props:{}}]},{tokens:[{content:' "ChatInput-4WKag": {',props:{}}]},{tokens:[{content:' "should_store_message": false',props:{}}]},{tokens:[{content:" }",props:{}}]},{tokens:[{content:" }",props:{}}]},{tokens:[{content:"}'",props:{}}]}],lang:"text"},annotations:[]}]}),"\n",(0,o.jsxs)(t.p,{children:["To confirm your command is using the tweak, navigate to the ",(0,o.jsx)(t.strong,{children:"Logs"})," pane and view the request from the ",(0,o.jsx)(t.strong,{children:"Chat Input"})," component.\nThe value for ",(0,o.jsx)(t.code,{children:"should_store_message"})," is ",(0,o.jsx)(t.code,{children:"false"}),"."]})]})}function j(e={}){const{wrapper:t}={...(0,r.R)(),...e.components};return t?(0,o.jsx)(t,{...e,children:(0,o.jsx)(u,{...e})}):u(e)}function g(e,t){throw new Error("Expected "+(t?"component":"object")+" `"+e+"` to be defined: you likely forgot to import, pass, or provide it.")}},77232:(e,t,n)=>{n.d(t,{A:()=>s});const s=n.p+"assets/images/logs-6ae22cc6a87b128cbc0c7f4559b47f10.png"},84443:(e,t,n)=>{n.d(t,{A:()=>r});n(96540);var s=n(64058),o=n(74848);function r(e){let{name:t,...n}=e;const r=s[t];return r?(0,o.jsx)(r,{...n}):null}}}]); \ No newline at end of file diff --git a/assets/js/3ae94ad4.e49d3ad7.js b/assets/js/3ae94ad4.e49d3ad7.js new file mode 100644 index 0000000000..9d43819435 --- /dev/null +++ b/assets/js/3ae94ad4.e49d3ad7.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunklangflow_docs=self.webpackChunklangflow_docs||[]).push([[7408],{6944:(e,t,n)=>{n.d(t,{A:()=>s});const s=n.p+"assets/images/component-chat-io-9dc92d3f9e5da3722f2e4f4872e3ef59.png"},42171:(e,t,n)=>{n.r(t),n.d(t,{CH:()=>a,assets:()=>h,chCodeConfig:()=>p,contentTitle:()=>l,default:()=>u,frontMatter:()=>i,metadata:()=>s,toc:()=>x});const s=JSON.parse('{"id":"Components/components-io","title":"Inputs and outputs","description":"Input and output components define where data enters and exits your flow.","source":"@site/docs/Components/components-io.md","sourceDirName":"Components","slug":"/components-io","permalink":"/components-io","draft":false,"unlisted":false,"tags":[],"version":"current","frontMatter":{"title":"Inputs and outputs","slug":"/components-io"},"sidebar":"docs","previous":{"title":"Helpers","permalink":"/components-helpers"},"next":{"title":"Loaders","permalink":"/components-loaders"}}');var o=n(74848),r=n(28453),c=n(24754),d=n(84443);const i={title:"Inputs and outputs",slug:"/components-io"},l="Input and output components in Langflow",h={},a={annotations:c.hk,Code:c.Cy},p={staticMediaQuery:"not screen, (max-width: 768px)",lineNumbers:!0,showCopyButton:!0,themeName:"github-dark"},x=[{value:"Chat Input",id:"chat-input",level:2},{value:"Message method",id:"message-method",level:3},{value:"Text Input",id:"text-input",level:2},{value:"Chat Output",id:"chat-output",level:2},{value:"Text Output",id:"text-output",level:2},{value:"Chat components example flow",id:"chat-components-example-flow",level:2},{value:"Send chat messages with the API",id:"send-chat-messages-with-the-api",level:3}];function j(e){const t={a:"a",admonition:"admonition",code:"code",h1:"h1",h2:"h2",h3:"h3",header:"header",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,r.R)(),...e.components},{Details:s}=t;return a||g("CH",!1),a.Code||g("CH.Code",!0),s||g("Details",!0),(0,o.jsxs)(o.Fragment,{children:[(0,o.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,o.jsx)(t.header,{children:(0,o.jsx)(t.h1,{id:"input-and-output-components-in-langflow",children:"Input and output components in Langflow"})}),"\n",(0,o.jsx)(t.p,{children:"Input and output components define where data enters and exits your flow."}),"\n",(0,o.jsxs)(t.p,{children:["Both components accept user input and return a ",(0,o.jsx)(t.code,{children:"Message"})," object, but serve different purposes."]}),"\n",(0,o.jsxs)(t.p,{children:["The ",(0,o.jsx)(t.strong,{children:"Text Input"})," component accepts a text string input and returns a ",(0,o.jsx)(t.code,{children:"Message"})," object containing only the input text. The output does not appear in the ",(0,o.jsx)(t.strong,{children:"Playground"}),"."]}),"\n",(0,o.jsxs)(t.p,{children:["The ",(0,o.jsx)(t.strong,{children:"Chat Input"})," component accepts multiple input types including text, files, and metadata, and returns a ",(0,o.jsx)(t.code,{children:"Message"})," object containing the text along with sender information, session ID, and file attachments."]}),"\n",(0,o.jsxs)(t.p,{children:["The ",(0,o.jsx)(t.strong,{children:"Chat Input"})," component provides an interactive chat interface in the ",(0,o.jsx)(t.strong,{children:"Playground"}),"."]}),"\n",(0,o.jsx)(t.h2,{id:"chat-input",children:"Chat Input"}),"\n",(0,o.jsxs)(t.p,{children:["This component collects user input as ",(0,o.jsx)(t.code,{children:"Text"})," strings from the chat and wraps it in a ",(0,o.jsx)(t.a,{href:"/concepts-objects#message-object",children:"Message"})," object that includes the input text, sender information, session ID, file attachments, and styling properties."]}),"\n",(0,o.jsx)(t.p,{children:"It can optionally store the message in a chat history."}),"\n",(0,o.jsxs)(s,{children:[(0,o.jsx)("summary",{children:"Parameters"}),(0,o.jsx)(t.p,{children:(0,o.jsx)(t.strong,{children:"Inputs"})}),(0,o.jsxs)(t.table,{children:[(0,o.jsx)(t.thead,{children:(0,o.jsxs)(t.tr,{children:[(0,o.jsx)(t.th,{children:"Name"}),(0,o.jsx)(t.th,{children:"Display Name"}),(0,o.jsx)(t.th,{children:"Info"})]})}),(0,o.jsxs)(t.tbody,{children:[(0,o.jsxs)(t.tr,{children:[(0,o.jsx)(t.td,{children:"input_value"}),(0,o.jsx)(t.td,{children:"Text"}),(0,o.jsx)(t.td,{children:"The Message to be passed as input."})]}),(0,o.jsxs)(t.tr,{children:[(0,o.jsx)(t.td,{children:"should_store_message"}),(0,o.jsx)(t.td,{children:"Store Messages"}),(0,o.jsx)(t.td,{children:"Store the message in the history."})]}),(0,o.jsxs)(t.tr,{children:[(0,o.jsx)(t.td,{children:"sender"}),(0,o.jsx)(t.td,{children:"Sender Type"}),(0,o.jsx)(t.td,{children:"The type of sender."})]}),(0,o.jsxs)(t.tr,{children:[(0,o.jsx)(t.td,{children:"sender_name"}),(0,o.jsx)(t.td,{children:"Sender Name"}),(0,o.jsx)(t.td,{children:"The name of the sender."})]}),(0,o.jsxs)(t.tr,{children:[(0,o.jsx)(t.td,{children:"session_id"}),(0,o.jsx)(t.td,{children:"Session ID"}),(0,o.jsx)(t.td,{children:"The session ID of the chat. If empty, the current session ID parameter is used."})]}),(0,o.jsxs)(t.tr,{children:[(0,o.jsx)(t.td,{children:"files"}),(0,o.jsx)(t.td,{children:"Files"}),(0,o.jsx)(t.td,{children:"The files to be sent with the message."})]}),(0,o.jsxs)(t.tr,{children:[(0,o.jsx)(t.td,{children:"background_color"}),(0,o.jsx)(t.td,{children:"Background Color"}),(0,o.jsx)(t.td,{children:"The background color of the icon."})]}),(0,o.jsxs)(t.tr,{children:[(0,o.jsx)(t.td,{children:"chat_icon"}),(0,o.jsx)(t.td,{children:"Icon"}),(0,o.jsx)(t.td,{children:"The icon of the message."})]}),(0,o.jsxs)(t.tr,{children:[(0,o.jsx)(t.td,{children:"text_color"}),(0,o.jsx)(t.td,{children:"Text Color"}),(0,o.jsx)(t.td,{children:"The text color of the name."})]})]})]}),(0,o.jsx)(t.p,{children:(0,o.jsx)(t.strong,{children:"Outputs"})}),(0,o.jsxs)(t.table,{children:[(0,o.jsx)(t.thead,{children:(0,o.jsxs)(t.tr,{children:[(0,o.jsx)(t.th,{children:"Name"}),(0,o.jsx)(t.th,{children:"Display Name"}),(0,o.jsx)(t.th,{children:"Info"})]})}),(0,o.jsx)(t.tbody,{children:(0,o.jsxs)(t.tr,{children:[(0,o.jsx)(t.td,{children:"message"}),(0,o.jsx)(t.td,{children:"Message"}),(0,o.jsx)(t.td,{children:"The resulting chat message object with all specified properties."})]})})]})]}),"\n",(0,o.jsx)(t.h3,{id:"message-method",children:"Message method"}),"\n",(0,o.jsxs)(t.p,{children:["The ",(0,o.jsx)(t.code,{children:"ChatInput"})," class provides an asynchronous method to create and store a ",(0,o.jsx)(t.code,{children:"Message"})," object based on the input parameters.\nThe ",(0,o.jsx)(t.code,{children:"Message"})," object is created in the ",(0,o.jsx)(t.code,{children:"message_response"})," method of the ChatInput class using the ",(0,o.jsx)(t.code,{children:"Message.create()"})," factory method."]}),"\n",(0,o.jsx)(a.Code,{codeConfig:p,northPanel:{tabs:[""],active:"",heightRatio:1},files:[{name:"",focus:"",code:{lines:[{tokens:[{content:"message ",props:{style:{color:"#C9D1D9"}}},{content:"= await",props:{style:{color:"#FF7B72"}}},{content:" Message.create(",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" text",props:{style:{color:"#FFA657"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:"self",props:{style:{color:"#79C0FF"}}},{content:".input_value,",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" sender",props:{style:{color:"#FFA657"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:"self",props:{style:{color:"#79C0FF"}}},{content:".sender,",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" sender_name",props:{style:{color:"#FFA657"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:"self",props:{style:{color:"#79C0FF"}}},{content:".sender_name,",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" session_id",props:{style:{color:"#FFA657"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:"self",props:{style:{color:"#79C0FF"}}},{content:".session_id,",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" files",props:{style:{color:"#FFA657"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:"self",props:{style:{color:"#79C0FF"}}},{content:".files,",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" properties",props:{style:{color:"#FFA657"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:"{",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:' "background_color"',props:{style:{color:"#A5D6FF"}}},{content:": background_color,",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:' "text_color"',props:{style:{color:"#A5D6FF"}}},{content:": text_color,",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:' "icon"',props:{style:{color:"#A5D6FF"}}},{content:": icon,",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" },",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:")",props:{style:{color:"#C9D1D9"}}}]}],lang:"python"},annotations:[]}]}),"\n",(0,o.jsx)(t.h2,{id:"text-input",children:"Text Input"}),"\n",(0,o.jsxs)(t.p,{children:["The ",(0,o.jsx)(t.strong,{children:"Text Input"})," component accepts a text string input and returns a ",(0,o.jsx)(t.code,{children:"Message"})," object containing only the input text."]}),"\n",(0,o.jsxs)(t.p,{children:["The output does not appear in the ",(0,o.jsx)(t.strong,{children:"Playground"}),"."]}),"\n",(0,o.jsxs)(s,{children:[(0,o.jsx)("summary",{children:"Parameters"}),(0,o.jsx)(t.p,{children:(0,o.jsx)(t.strong,{children:"Inputs"})}),(0,o.jsxs)(t.table,{children:[(0,o.jsx)(t.thead,{children:(0,o.jsxs)(t.tr,{children:[(0,o.jsx)(t.th,{children:"Name"}),(0,o.jsx)(t.th,{children:"Display Name"}),(0,o.jsx)(t.th,{children:"Info"})]})}),(0,o.jsx)(t.tbody,{children:(0,o.jsxs)(t.tr,{children:[(0,o.jsx)(t.td,{children:"input_value"}),(0,o.jsx)(t.td,{children:"Text"}),(0,o.jsx)(t.td,{children:"The text/content to be passed as output."})]})})]}),(0,o.jsx)(t.p,{children:(0,o.jsx)(t.strong,{children:"Outputs"})}),(0,o.jsxs)(t.table,{children:[(0,o.jsx)(t.thead,{children:(0,o.jsxs)(t.tr,{children:[(0,o.jsx)(t.th,{children:"Name"}),(0,o.jsx)(t.th,{children:"Display Name"}),(0,o.jsx)(t.th,{children:"Info"})]})}),(0,o.jsx)(t.tbody,{children:(0,o.jsxs)(t.tr,{children:[(0,o.jsx)(t.td,{children:"text"}),(0,o.jsx)(t.td,{children:"Text"}),(0,o.jsx)(t.td,{children:"The resulting text message."})]})})]})]}),"\n",(0,o.jsx)(t.h2,{id:"chat-output",children:"Chat Output"}),"\n",(0,o.jsxs)(t.p,{children:["The ",(0,o.jsx)(t.strong,{children:"Chat Output"})," component creates a ",(0,o.jsx)(t.a,{href:"/concepts-objects#message-object",children:"Message"})," object that includes the input text, sender information, session ID, and styling properties."]}),"\n",(0,o.jsx)(t.p,{children:"The component accepts the following input types."}),"\n",(0,o.jsxs)(t.ul,{children:["\n",(0,o.jsx)(t.li,{children:(0,o.jsx)(t.a,{href:"/concepts-objects#data-object",children:"Data"})}),"\n",(0,o.jsx)(t.li,{children:(0,o.jsx)(t.a,{href:"/concepts-objects#dataframe-object",children:"DataFrame"})}),"\n",(0,o.jsx)(t.li,{children:(0,o.jsx)(t.a,{href:"/concepts-objects#message-object",children:"Message"})}),"\n"]}),"\n",(0,o.jsxs)(s,{children:[(0,o.jsx)("summary",{children:"Parameters"}),(0,o.jsx)(t.p,{children:(0,o.jsx)(t.strong,{children:"Inputs"})}),(0,o.jsxs)(t.table,{children:[(0,o.jsx)(t.thead,{children:(0,o.jsxs)(t.tr,{children:[(0,o.jsx)(t.th,{children:"Name"}),(0,o.jsx)(t.th,{children:"Display Name"}),(0,o.jsx)(t.th,{children:"Info"})]})}),(0,o.jsxs)(t.tbody,{children:[(0,o.jsxs)(t.tr,{children:[(0,o.jsx)(t.td,{children:"input_value"}),(0,o.jsx)(t.td,{children:"Text"}),(0,o.jsx)(t.td,{children:"The message to be passed as output."})]}),(0,o.jsxs)(t.tr,{children:[(0,o.jsx)(t.td,{children:"should_store_message"}),(0,o.jsx)(t.td,{children:"Store Messages"}),(0,o.jsx)(t.td,{children:"The flag to store the message in the history."})]}),(0,o.jsxs)(t.tr,{children:[(0,o.jsx)(t.td,{children:"sender"}),(0,o.jsx)(t.td,{children:"Sender Type"}),(0,o.jsx)(t.td,{children:"The type of sender."})]}),(0,o.jsxs)(t.tr,{children:[(0,o.jsx)(t.td,{children:"sender_name"}),(0,o.jsx)(t.td,{children:"Sender Name"}),(0,o.jsx)(t.td,{children:"The name of the sender."})]}),(0,o.jsxs)(t.tr,{children:[(0,o.jsx)(t.td,{children:"session_id"}),(0,o.jsx)(t.td,{children:"Session ID"}),(0,o.jsx)(t.td,{children:"The session ID of the chat. If empty, the current session ID parameter is used."})]}),(0,o.jsxs)(t.tr,{children:[(0,o.jsx)(t.td,{children:"data_template"}),(0,o.jsx)(t.td,{children:"Data Template"}),(0,o.jsx)(t.td,{children:"The template to convert Data to Text. If the option is left empty, it is dynamically set to the Data's text key."})]}),(0,o.jsxs)(t.tr,{children:[(0,o.jsx)(t.td,{children:"background_color"}),(0,o.jsx)(t.td,{children:"Background Color"}),(0,o.jsx)(t.td,{children:"The background color of the icon."})]}),(0,o.jsxs)(t.tr,{children:[(0,o.jsx)(t.td,{children:"chat_icon"}),(0,o.jsx)(t.td,{children:"Icon"}),(0,o.jsx)(t.td,{children:"The icon of the message."})]}),(0,o.jsxs)(t.tr,{children:[(0,o.jsx)(t.td,{children:"text_color"}),(0,o.jsx)(t.td,{children:"Text Color"}),(0,o.jsx)(t.td,{children:"The text color of the name."})]}),(0,o.jsxs)(t.tr,{children:[(0,o.jsx)(t.td,{children:"clean_data"}),(0,o.jsx)(t.td,{children:"Basic Clean Data"}),(0,o.jsxs)(t.td,{children:["When enabled, ",(0,o.jsx)(t.code,{children:"DataFrame"})," inputs are cleaned when converted to text. Cleaning removes empty rows, empty lines in cells, and multiple newlines."]})]})]})]}),(0,o.jsx)(t.p,{children:(0,o.jsx)(t.strong,{children:"Outputs"})}),(0,o.jsxs)(t.table,{children:[(0,o.jsx)(t.thead,{children:(0,o.jsxs)(t.tr,{children:[(0,o.jsx)(t.th,{children:"Name"}),(0,o.jsx)(t.th,{children:"Display Name"}),(0,o.jsx)(t.th,{children:"Info"})]})}),(0,o.jsx)(t.tbody,{children:(0,o.jsxs)(t.tr,{children:[(0,o.jsx)(t.td,{children:"message"}),(0,o.jsx)(t.td,{children:"Message"}),(0,o.jsx)(t.td,{children:"The resulting chat message object with all specified properties."})]})})]})]}),"\n",(0,o.jsx)(t.h2,{id:"text-output",children:"Text Output"}),"\n",(0,o.jsxs)(t.p,{children:["The ",(0,o.jsx)(t.strong,{children:"Text Output"})," takes a single input of text and returns a ",(0,o.jsx)(t.a,{href:"/concepts-objects#message-object",children:"Message"})," object containing that text."]}),"\n",(0,o.jsxs)(t.p,{children:["The output does not appear in the ",(0,o.jsx)(t.strong,{children:"Playground"}),"."]}),"\n",(0,o.jsxs)(s,{children:[(0,o.jsx)("summary",{children:"Parameters"}),(0,o.jsx)(t.p,{children:(0,o.jsx)(t.strong,{children:"Inputs"})}),(0,o.jsxs)(t.table,{children:[(0,o.jsx)(t.thead,{children:(0,o.jsxs)(t.tr,{children:[(0,o.jsx)(t.th,{children:"Name"}),(0,o.jsx)(t.th,{children:"Display Name"}),(0,o.jsx)(t.th,{children:"Info"})]})}),(0,o.jsx)(t.tbody,{children:(0,o.jsxs)(t.tr,{children:[(0,o.jsx)(t.td,{children:"input_value"}),(0,o.jsx)(t.td,{children:"Text"}),(0,o.jsx)(t.td,{children:"The text to be passed as output."})]})})]}),(0,o.jsx)(t.p,{children:(0,o.jsx)(t.strong,{children:"Outputs"})}),(0,o.jsxs)(t.table,{children:[(0,o.jsx)(t.thead,{children:(0,o.jsxs)(t.tr,{children:[(0,o.jsx)(t.th,{children:"Name"}),(0,o.jsx)(t.th,{children:"Display Name"}),(0,o.jsx)(t.th,{children:"Info"})]})}),(0,o.jsx)(t.tbody,{children:(0,o.jsxs)(t.tr,{children:[(0,o.jsx)(t.td,{children:"text"}),(0,o.jsx)(t.td,{children:"Text"}),(0,o.jsx)(t.td,{children:"The resulting text message."})]})})]})]}),"\n",(0,o.jsx)(t.h2,{id:"chat-components-example-flow",children:"Chat components example flow"}),"\n",(0,o.jsxs)(t.ol,{children:["\n",(0,o.jsxs)(t.li,{children:["To use the ",(0,o.jsx)(t.strong,{children:"Chat Input"})," and ",(0,o.jsx)(t.strong,{children:"Chat Output"})," components in a flow, connect them to components that accept or send the ",(0,o.jsx)(t.a,{href:"/concepts-objects#message-object",children:"Message"})," type."]}),"\n"]}),"\n",(0,o.jsxs)(t.p,{children:["For this example, connect a ",(0,o.jsx)(t.strong,{children:"Chat Input"})," component to an ",(0,o.jsx)(t.strong,{children:"OpenAI"})," model component's ",(0,o.jsx)(t.strong,{children:"Input"})," port, and then connect the ",(0,o.jsx)(t.strong,{children:"OpenAI"})," model component's ",(0,o.jsx)(t.strong,{children:"Message"})," port to the ",(0,o.jsx)(t.strong,{children:"Chat Output"})," component."]}),"\n",(0,o.jsxs)(t.ol,{start:"2",children:["\n",(0,o.jsxs)(t.li,{children:["In the ",(0,o.jsx)(t.strong,{children:"OpenAI"})," model component, in the ",(0,o.jsx)(t.strong,{children:"OpenAI API Key"})," field, add your ",(0,o.jsx)(t.strong,{children:"OpenAI API key"}),"."]}),"\n"]}),"\n",(0,o.jsx)(t.p,{children:"The flow looks like this:"}),"\n",(0,o.jsx)(t.p,{children:(0,o.jsx)(t.img,{alt:"Chat input and output components connected to an OpenAI model",src:n(6944).A+"",width:"4000",height:"2574"})}),"\n",(0,o.jsxs)(t.ol,{start:"3",children:["\n",(0,o.jsxs)(t.li,{children:["\n",(0,o.jsxs)(t.p,{children:["To send a message to your flow, open the ",(0,o.jsx)(t.strong,{children:"Playground"}),", and then enter a message.\nThe ",(0,o.jsx)(t.strong,{children:"OpenAI"})," model component responds.\nOptionally, in the ",(0,o.jsx)(t.strong,{children:"OpenAI"})," model component, enter a ",(0,o.jsx)(t.strong,{children:"System Message"})," to control the model's response."]}),"\n"]}),"\n",(0,o.jsxs)(t.li,{children:["\n",(0,o.jsxs)(t.p,{children:["In the Langflow UI, click your flow name, and then click ",(0,o.jsx)(t.strong,{children:"Logs"}),".\nThe ",(0,o.jsx)(t.strong,{children:"Logs"})," pane opens.\nHere, you can inspect your component logs.\n",(0,o.jsx)(t.img,{alt:"Logs pane",src:n(77232).A+"",width:"3200",height:"1716"})]}),"\n"]}),"\n",(0,o.jsxs)(t.li,{children:["\n",(0,o.jsxs)(t.p,{children:["Your first message was sent by the ",(0,o.jsx)(t.strong,{children:"Chat Input"})," component to the ",(0,o.jsx)(t.strong,{children:"OpenAI"})," model component.\nClick ",(0,o.jsx)(t.strong,{children:"Outputs"})," to view the sent message:"]}),"\n"]}),"\n"]}),"\n",(0,o.jsx)(a.Code,{codeConfig:p,northPanel:{tabs:[""],active:"",heightRatio:1},files:[{name:"",focus:"",code:{lines:[{tokens:[{content:' "messages": [',props:{}}]},{tokens:[{content:" {",props:{}}]},{tokens:[{content:' "message": "What\'s the recommended way to install Docker on Mac M1?",',props:{}}]},{tokens:[{content:' "sender": "User",',props:{}}]},{tokens:[{content:' "sender_name": "User",',props:{}}]},{tokens:[{content:' "session_id": "Session Apr 21, 17:37:04",',props:{}}]},{tokens:[{content:' "stream_url": null,',props:{}}]},{tokens:[{content:' "component_id": "ChatInput-4WKag",',props:{}}]},{tokens:[{content:' "files": [],',props:{}}]},{tokens:[{content:' "type": "text"',props:{}}]},{tokens:[{content:" }",props:{}}]},{tokens:[{content:" ],",props:{}}]}],lang:"text"},annotations:[]}]}),"\n",(0,o.jsxs)(t.ol,{start:"6",children:["\n",(0,o.jsxs)(t.li,{children:["Your second message was sent by the ",(0,o.jsx)(t.strong,{children:"OpenAI"})," model component to the ",(0,o.jsx)(t.strong,{children:"Chat Output"})," component.\nThis is the raw text output of the model's response.\nThe ",(0,o.jsx)(t.strong,{children:"Chat Output"})," component accepts this text as input and presents it as a formatted message.\nClick ",(0,o.jsx)(t.strong,{children:"Outputs"})," to view the sent message:"]}),"\n"]}),"\n",(0,o.jsx)(a.Code,{codeConfig:p,northPanel:{tabs:[""],active:"",heightRatio:1},files:[{name:"",focus:"",code:{lines:[{tokens:[{content:' "outputs":',props:{}}]},{tokens:[{content:' "text_output":',props:{}}]},{tokens:[{content:' "message": "To install Docker on a Mac with an M1 chip, you should use Docker Desktop for Mac, which is optimized for Apple Silicon. Here\'s a step-by-step guide to installing Docker on your M1 Mac:\\n\\n1.',props:{}}]},{tokens:[{content:" ...",props:{}}]},{tokens:[{content:' "type": "text"',props:{}}]}],lang:"text"},annotations:[]}]}),"\n",(0,o.jsx)(t.admonition,{type:"tip",children:(0,o.jsxs)(t.p,{children:["Optionally, to view the outputs of each component in the flow, click ",(0,o.jsx)(d.A,{name:"TextSearch","aria-label":"Inspect icon"}),"."]})}),"\n",(0,o.jsx)(t.h3,{id:"send-chat-messages-with-the-api",children:"Send chat messages with the API"}),"\n",(0,o.jsxs)(t.p,{children:["The ",(0,o.jsx)(t.strong,{children:"Chat Input"})," component is often the entry point for passing messages to the Langflow API.\nTo send the same example messages programmatically to your Langflow server, do the following:"]}),"\n",(0,o.jsxs)(t.ol,{children:["\n",(0,o.jsxs)(t.li,{children:["To get your Langflow endpoint, click ",(0,o.jsx)(t.strong,{children:"Publish"}),", and then click ",(0,o.jsx)(t.strong,{children:"API access"}),"."]}),"\n",(0,o.jsxs)(t.li,{children:["Copy the command from the ",(0,o.jsx)(t.strong,{children:"cURL"})," tab, and then paste it in your terminal.\nIt looks similar to this:"]}),"\n"]}),"\n",(0,o.jsx)(a.Code,{codeConfig:p,northPanel:{tabs:[""],active:"",heightRatio:1},files:[{name:"",focus:"",code:{lines:[{tokens:[{content:"curl --request POST \\",props:{}}]},{tokens:[{content:" --url 'http://127.0.0.1:7860/api/v1/run/51eed711-4530-4fdc-9bce-5db4351cc73a?stream=false' \\",props:{}}]},{tokens:[{content:" --header 'Content-Type: application/json' \\",props:{}}]},{tokens:[{content:" --data '{",props:{}}]},{tokens:[{content:' "input_value": "What\'s the recommended way to install Docker on Mac M1?",',props:{}}]},{tokens:[{content:' "output_type": "chat",',props:{}}]},{tokens:[{content:' "input_type": "chat"',props:{}}]},{tokens:[{content:"}'",props:{}}]}],lang:"text"},annotations:[]}]}),"\n",(0,o.jsxs)(t.ol,{start:"3",children:["\n",(0,o.jsxs)(t.li,{children:["Modify ",(0,o.jsx)(t.code,{children:"input_value"})," so it contains the question, ",(0,o.jsx)(t.code,{children:"What's the recommended way to install Docker on Mac M1?"}),"."]}),"\n"]}),"\n",(0,o.jsxs)(t.p,{children:["Note the ",(0,o.jsx)(t.code,{children:"output_type"})," and ",(0,o.jsx)(t.code,{children:"input_type"})," parameters that are passed with the message. The ",(0,o.jsx)(t.code,{children:"chat"})," type provides additional configuration options, and the messages appear in the ",(0,o.jsx)(t.strong,{children:"Playground"}),". The ",(0,o.jsx)(t.code,{children:"text"})," type returns only text strings, and does not appear in the ",(0,o.jsx)(t.strong,{children:"Playground"}),"."]}),"\n",(0,o.jsxs)(t.ol,{start:"4",children:["\n",(0,o.jsxs)(t.li,{children:["Add a custom ",(0,o.jsx)(t.code,{children:"session_id"})," to the message's ",(0,o.jsx)(t.code,{children:"data"})," object."]}),"\n"]}),"\n",(0,o.jsx)(a.Code,{codeConfig:p,northPanel:{tabs:[""],active:"",heightRatio:1},files:[{name:"",focus:"",code:{lines:[{tokens:[{content:"curl --request POST \\",props:{}}]},{tokens:[{content:" --url 'http://127.0.0.1:7860/api/v1/run/51eed711-4530-4fdc-9bce-5db4351cc73a?stream=false' \\",props:{}}]},{tokens:[{content:" --header 'Content-Type: application/json' \\",props:{}}]},{tokens:[{content:" --data '{",props:{}}]},{tokens:[{content:' "input_value": "Whats the recommended way to install Docker on Mac M1",',props:{}}]},{tokens:[{content:' "session_id": "docker-question-on-m1",',props:{}}]},{tokens:[{content:' "output_type": "chat",',props:{}}]},{tokens:[{content:' "input_type": "chat"',props:{}}]},{tokens:[{content:"}'",props:{}}]}],lang:"text"},annotations:[]}]}),"\n",(0,o.jsxs)(t.p,{children:["The custom ",(0,o.jsx)(t.code,{children:"session_id"})," value starts a new chat session between your client and the Langflow server, and can be useful in keeping conversations and AI context separate."]}),"\n",(0,o.jsxs)(t.ol,{start:"5",children:["\n",(0,o.jsx)(t.li,{children:"Send the POST request.\nYour request is answered."}),"\n",(0,o.jsxs)(t.li,{children:["Navigate to the ",(0,o.jsx)(t.strong,{children:"Playground"}),".\nA new chat session called ",(0,o.jsx)(t.code,{children:"docker-question-on-m1"})," has appeared, using your unique ",(0,o.jsx)(t.code,{children:"session_id"}),"."]}),"\n",(0,o.jsxs)(t.li,{children:["To modify additional parameters with ",(0,o.jsx)(t.strong,{children:"Tweaks"})," for your ",(0,o.jsx)(t.strong,{children:"Chat Input"})," and ",(0,o.jsx)(t.strong,{children:"Chat Output"})," components, click ",(0,o.jsx)(t.strong,{children:"Publish"}),", and then click ",(0,o.jsx)(t.strong,{children:"API access"}),"."]}),"\n",(0,o.jsxs)(t.li,{children:["Click ",(0,o.jsx)(t.strong,{children:"Tweaks"})," to modify parameters in the component's ",(0,o.jsx)(t.code,{children:"data"})," object.\nFor example, disabling storing messages from the ",(0,o.jsx)(t.strong,{children:"Chat Input"})," component adds a ",(0,o.jsx)(t.strong,{children:"Tweak"})," to your command:"]}),"\n"]}),"\n",(0,o.jsx)(a.Code,{codeConfig:p,northPanel:{tabs:[""],active:"",heightRatio:1},files:[{name:"",focus:"",code:{lines:[{tokens:[{content:"curl --request POST \\",props:{}}]},{tokens:[{content:" --url 'http://127.0.0.1:7860/api/v1/run/51eed711-4530-4fdc-9bce-5db4351cc73a?stream=false' \\",props:{}}]},{tokens:[{content:" --header 'Content-Type: application/json' \\",props:{}}]},{tokens:[{content:" --data '{",props:{}}]},{tokens:[{content:' "input_value": "Text to input to the flow",',props:{}}]},{tokens:[{content:' "output_type": "chat",',props:{}}]},{tokens:[{content:' "input_type": "chat",',props:{}}]},{tokens:[{content:' "tweaks": {',props:{}}]},{tokens:[{content:' "ChatInput-4WKag": {',props:{}}]},{tokens:[{content:' "should_store_message": false',props:{}}]},{tokens:[{content:" }",props:{}}]},{tokens:[{content:" }",props:{}}]},{tokens:[{content:"}'",props:{}}]}],lang:"text"},annotations:[]}]}),"\n",(0,o.jsxs)(t.p,{children:["To confirm your command is using the tweak, navigate to the ",(0,o.jsx)(t.strong,{children:"Logs"})," pane and view the request from the ",(0,o.jsx)(t.strong,{children:"Chat Input"})," component.\nThe value for ",(0,o.jsx)(t.code,{children:"should_store_message"})," is ",(0,o.jsx)(t.code,{children:"false"}),"."]})]})}function u(e={}){const{wrapper:t}={...(0,r.R)(),...e.components};return t?(0,o.jsx)(t,{...e,children:(0,o.jsx)(j,{...e})}):j(e)}function g(e,t){throw new Error("Expected "+(t?"component":"object")+" `"+e+"` to be defined: you likely forgot to import, pass, or provide it.")}},77232:(e,t,n)=>{n.d(t,{A:()=>s});const s=n.p+"assets/images/logs-6ae22cc6a87b128cbc0c7f4559b47f10.png"},84443:(e,t,n)=>{n.d(t,{A:()=>r});n(96540);var s=n(64058),o=n(74848);function r(e){let{name:t,...n}=e;const r=s[t];return r?(0,o.jsx)(r,{...n}):null}}}]); \ No newline at end of file diff --git a/assets/js/647965d5.9389c053.js b/assets/js/647965d5.9389c053.js new file mode 100644 index 0000000000..7b78acf41c --- /dev/null +++ b/assets/js/647965d5.9389c053.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunklangflow_docs=self.webpackChunklangflow_docs||[]).push([[1227],{31832:(e,t,n)=>{n.r(t),n.d(t,{CH:()=>h,assets:()=>c,chCodeConfig:()=>l,contentTitle:()=>a,default:()=>u,frontMatter:()=>d,metadata:()=>r,toc:()=>p});const r=JSON.parse('{"id":"Components/components-prompts","title":"Prompts","description":"A prompt is a structured input to a language model that instructs the model how to handle user inputs and variables.","source":"@site/docs/Components/components-prompts.md","sourceDirName":"Components","slug":"/components-prompts","permalink":"/components-prompts","draft":false,"unlisted":false,"tags":[],"version":"current","frontMatter":{"title":"Prompts","slug":"/components-prompts"},"sidebar":"docs","previous":{"title":"Processing","permalink":"/components-processing"},"next":{"title":"Tools","permalink":"/components-tools"}}');var o=n(74848),s=n(28453),i=n(24754);const d={title:"Prompts",slug:"/components-prompts"},a="Prompt components in Langflow",c={},h={annotations:i.hk,Code:i.Cy},l={staticMediaQuery:"not screen, (max-width: 768px)",lineNumbers:!0,showCopyButton:!0,themeName:"github-dark"},p=[{value:"Use a prompt component in a flow",id:"use-a-prompt-component-in-a-flow",level:2},{value:"Langchain Hub Prompt Template",id:"langchain-hub-prompt-template",level:2}];function m(e){const t={a:"a",admonition:"admonition",code:"code",h1:"h1",h2:"h2",header:"header",img:"img",p:"p",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",...(0,s.R)(),...e.components},{Details:r}=t;return h||x("CH",!1),h.Code||x("CH.Code",!0),r||x("Details",!0),(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)("style",{dangerouslySetInnerHTML:{__html:'[data-ch-theme="github-dark"] { --ch-t-colorScheme: dark;--ch-t-foreground: #c9d1d9;--ch-t-background: #0d1117;--ch-t-lighter-inlineBackground: #0d1117e6;--ch-t-editor-background: #0d1117;--ch-t-editor-foreground: #c9d1d9;--ch-t-editor-lineHighlightBackground: #6e76811a;--ch-t-editor-rangeHighlightBackground: #ffffff0b;--ch-t-editor-infoForeground: #3794FF;--ch-t-editor-selectionBackground: #264F78;--ch-t-focusBorder: #1f6feb;--ch-t-tab-activeBackground: #0d1117;--ch-t-tab-activeForeground: #c9d1d9;--ch-t-tab-inactiveBackground: #010409;--ch-t-tab-inactiveForeground: #8b949e;--ch-t-tab-border: #30363d;--ch-t-tab-activeBorder: #0d1117;--ch-t-editorGroup-border: #30363d;--ch-t-editorGroupHeader-tabsBackground: #010409;--ch-t-editorLineNumber-foreground: #6e7681;--ch-t-input-background: #0d1117;--ch-t-input-foreground: #c9d1d9;--ch-t-input-border: #30363d;--ch-t-icon-foreground: #8b949e;--ch-t-sideBar-background: #010409;--ch-t-sideBar-foreground: #c9d1d9;--ch-t-sideBar-border: #30363d;--ch-t-list-activeSelectionBackground: #6e768166;--ch-t-list-activeSelectionForeground: #c9d1d9;--ch-t-list-hoverBackground: #6e76811a;--ch-t-list-hoverForeground: #c9d1d9; }'}}),"\n",(0,o.jsx)(t.header,{children:(0,o.jsx)(t.h1,{id:"prompt-components-in-langflow",children:"Prompt components in Langflow"})}),"\n",(0,o.jsx)(t.p,{children:"A prompt is a structured input to a language model that instructs the model how to handle user inputs and variables."}),"\n",(0,o.jsx)(t.p,{children:"Prompt components create prompt templates with custom fields and dynamic variables for providing your model structured, repeatable prompts."}),"\n",(0,o.jsx)(t.p,{children:"Prompts are a combination of natural language and variables created with curly braces."}),"\n",(0,o.jsx)(t.h2,{id:"use-a-prompt-component-in-a-flow",children:"Use a prompt component in a flow"}),"\n",(0,o.jsxs)(t.p,{children:["An example of modifying a prompt can be found in the ",(0,o.jsx)(t.a,{href:"/get-started-quickstart#run-the-chatbot-with-retrieved-context",children:"Quickstart"}),", where a basic chatbot flow is extended to include a full vector RAG pipeline."]}),"\n",(0,o.jsx)(t.p,{children:(0,o.jsx)(t.img,{src:n(69645).A+"",width:"2868",height:"1566"})}),"\n",(0,o.jsxs)(t.p,{children:["The default prompt in the ",(0,o.jsx)(t.strong,{children:"Prompt"})," component is ",(0,o.jsx)(t.code,{children:"Answer the user as if you were a GenAI expert, enthusiastic about helping them get started building something fresh."})]}),"\n",(0,o.jsx)(t.p,{children:"This prompt creates a \"personality\" for your LLM's chat interactions, but it doesn't include variables that you may find useful when templating prompts."}),"\n",(0,o.jsxs)(t.p,{children:["To modify the prompt template, in the ",(0,o.jsx)(t.strong,{children:"Prompt"})," component, click the ",(0,o.jsx)(t.strong,{children:"Template"})," field. For example, the ",(0,o.jsx)(t.code,{children:"{context}"})," variable gives the LLM model access to embedded vector data to return better answers."]}),"\n",(0,o.jsx)(h.Code,{codeConfig:l,northPanel:{tabs:[""],active:"",heightRatio:1},files:[{name:"",focus:"",code:{lines:[{tokens:[{content:"Given the context",props:{}}]},{tokens:[{content:"{context}",props:{}}]},{tokens:[{content:"Answer the question",props:{}}]},{tokens:[{content:"{user_question}",props:{}}]}],lang:"text"},annotations:[]}]}),"\n",(0,o.jsxs)(t.p,{children:["When variables are added to a prompt template, new fields are automatically created in the component. These fields can be connected to receive text input from other components to automate prompting, or to output instructions to other components. An example of prompts controlling agents behavior is available in the ",(0,o.jsx)(t.a,{href:"/sequential-agent",children:"sequential tasks agent starter flow"}),"."]}),"\n",(0,o.jsxs)(r,{children:[(0,o.jsx)("summary",{children:"Parameters"}),(0,o.jsx)(t.p,{children:(0,o.jsx)(t.strong,{children:"Inputs"})}),(0,o.jsxs)(t.table,{children:[(0,o.jsx)(t.thead,{children:(0,o.jsxs)(t.tr,{children:[(0,o.jsx)(t.th,{children:"Name"}),(0,o.jsx)(t.th,{children:"Display Name"}),(0,o.jsx)(t.th,{children:"Info"})]})}),(0,o.jsx)(t.tbody,{children:(0,o.jsxs)(t.tr,{children:[(0,o.jsx)(t.td,{children:"template"}),(0,o.jsx)(t.td,{children:"Template"}),(0,o.jsx)(t.td,{children:"Create a prompt template with dynamic variables."})]})})]}),(0,o.jsx)(t.p,{children:(0,o.jsx)(t.strong,{children:"Outputs"})}),(0,o.jsxs)(t.table,{children:[(0,o.jsx)(t.thead,{children:(0,o.jsxs)(t.tr,{children:[(0,o.jsx)(t.th,{children:"Name"}),(0,o.jsx)(t.th,{children:"Display Name"}),(0,o.jsx)(t.th,{children:"Info"})]})}),(0,o.jsx)(t.tbody,{children:(0,o.jsxs)(t.tr,{children:[(0,o.jsx)(t.td,{children:"prompt"}),(0,o.jsx)(t.td,{children:"Prompt Message"}),(0,o.jsxs)(t.td,{children:["The built prompt message returned by the ",(0,o.jsx)(t.code,{children:"build_prompt"})," method."]})]})})]})]}),"\n",(0,o.jsx)(t.h2,{id:"langchain-hub-prompt-template",children:"Langchain Hub Prompt Template"}),"\n",(0,o.jsx)(t.admonition,{type:"important",children:(0,o.jsxs)(t.p,{children:["This component is available in the ",(0,o.jsx)(t.strong,{children:"Components"})," menu under ",(0,o.jsx)(t.strong,{children:"Bundles"}),"."]})}),"\n",(0,o.jsxs)(t.p,{children:["This component fetches prompts from the ",(0,o.jsx)(t.a,{href:"https://docs.smith.langchain.com/old/category/prompt-hub",children:"Langchain Hub"}),"."]}),"\n",(0,o.jsxs)(t.p,{children:['When a prompt is loaded, the component generates input fields for custom variables. For example, the default prompt "efriis/my-first-prompt" generates fields for ',(0,o.jsx)(t.code,{children:"profession"})," and ",(0,o.jsx)(t.code,{children:"question"}),"."]}),"\n",(0,o.jsxs)(r,{children:[(0,o.jsx)("summary",{children:"Parameters"}),(0,o.jsx)(t.p,{children:(0,o.jsx)(t.strong,{children:"Inputs"})}),(0,o.jsxs)(t.table,{children:[(0,o.jsx)(t.thead,{children:(0,o.jsxs)(t.tr,{children:[(0,o.jsx)(t.th,{children:"Name"}),(0,o.jsx)(t.th,{children:"Display Name"}),(0,o.jsx)(t.th,{children:"Info"})]})}),(0,o.jsxs)(t.tbody,{children:[(0,o.jsxs)(t.tr,{children:[(0,o.jsx)(t.td,{children:"langchain_api_key"}),(0,o.jsx)(t.td,{children:"Your LangChain API Key"}),(0,o.jsx)(t.td,{children:"The LangChain API Key to use."})]}),(0,o.jsxs)(t.tr,{children:[(0,o.jsx)(t.td,{children:"langchain_hub_prompt"}),(0,o.jsx)(t.td,{children:"LangChain Hub Prompt"}),(0,o.jsx)(t.td,{children:"The LangChain Hub prompt to use."})]})]})]}),(0,o.jsx)(t.p,{children:(0,o.jsx)(t.strong,{children:"Outputs"})}),(0,o.jsxs)(t.table,{children:[(0,o.jsx)(t.thead,{children:(0,o.jsxs)(t.tr,{children:[(0,o.jsx)(t.th,{children:"Name"}),(0,o.jsx)(t.th,{children:"Display Name"}),(0,o.jsx)(t.th,{children:"Info"})]})}),(0,o.jsx)(t.tbody,{children:(0,o.jsxs)(t.tr,{children:[(0,o.jsx)(t.td,{children:"prompt"}),(0,o.jsx)(t.td,{children:"Build Prompt"}),(0,o.jsxs)(t.td,{children:["The built prompt message returned by the ",(0,o.jsx)(t.code,{children:"build_prompt"})," method."]})]})})]})]})]})}function u(e={}){const{wrapper:t}={...(0,s.R)(),...e.components};return t?(0,o.jsx)(t,{...e,children:(0,o.jsx)(m,{...e})}):m(e)}function x(e,t){throw new Error("Expected "+(t?"component":"object")+" `"+e+"` to be defined: you likely forgot to import, pass, or provide it.")}},69645:(e,t,n)=>{n.d(t,{A:()=>r});const r=n.p+"assets/images/quickstart-add-document-ingestion-6c34bac012400e3d35f6cebdd350ecf7.png"}}]); \ No newline at end of file diff --git a/assets/js/647965d5.efa89a5e.js b/assets/js/647965d5.efa89a5e.js deleted file mode 100644 index 087cf36c42..0000000000 --- a/assets/js/647965d5.efa89a5e.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunklangflow_docs=self.webpackChunklangflow_docs||[]).push([[1227],{31832:(e,t,n)=>{n.r(t),n.d(t,{CH:()=>h,assets:()=>c,chCodeConfig:()=>l,contentTitle:()=>a,default:()=>m,frontMatter:()=>d,metadata:()=>o,toc:()=>p});const o=JSON.parse('{"id":"Components/components-prompts","title":"Prompts","description":"A prompt is a structured input to a language model that instructs the model how to handle user inputs and variables.","source":"@site/docs/Components/components-prompts.md","sourceDirName":"Components","slug":"/components-prompts","permalink":"/components-prompts","draft":false,"unlisted":false,"tags":[],"version":"current","frontMatter":{"title":"Prompts","slug":"/components-prompts"},"sidebar":"docs","previous":{"title":"Processing","permalink":"/components-processing"},"next":{"title":"Tools","permalink":"/components-tools"}}');var r=n(74848),s=n(28453),i=n(24754);const d={title:"Prompts",slug:"/components-prompts"},a="Prompt components in Langflow",c={},h={annotations:i.hk,Code:i.Cy},l={staticMediaQuery:"not screen, (max-width: 768px)",lineNumbers:!0,showCopyButton:!0,themeName:"github-dark"},p=[{value:"Use a prompt component in a flow",id:"use-a-prompt-component-in-a-flow",level:2},{value:"Inputs",id:"inputs",level:3},{value:"Outputs",id:"outputs",level:3},{value:"Langchain Hub Prompt Template",id:"langchain-hub-prompt-template",level:2},{value:"Inputs",id:"inputs-1",level:3},{value:"Outputs",id:"outputs-1",level:3}];function u(e){const t={a:"a",code:"code",h1:"h1",h2:"h2",h3:"h3",header:"header",img:"img",p:"p",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",...(0,s.R)(),...e.components};return h||x("CH",!1),h.Code||x("CH.Code",!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",(0,r.jsx)(t.header,{children:(0,r.jsx)(t.h1,{id:"prompt-components-in-langflow",children:"Prompt components in Langflow"})}),"\n",(0,r.jsx)(t.p,{children:"A prompt is a structured input to a language model that instructs the model how to handle user inputs and variables."}),"\n",(0,r.jsx)(t.p,{children:"Prompt components create prompt templates with custom fields and dynamic variables for providing your model structured, repeatable prompts."}),"\n",(0,r.jsx)(t.p,{children:"Prompts are a combination of natural language and variables created with curly braces."}),"\n",(0,r.jsx)(t.h2,{id:"use-a-prompt-component-in-a-flow",children:"Use a prompt component in a flow"}),"\n",(0,r.jsxs)(t.p,{children:["An example of modifying a prompt can be found in the ",(0,r.jsx)(t.a,{href:"/get-started-quickstart#run-the-chatbot-with-retrieved-context",children:"Quickstart"}),", where a basic chatbot flow is extended to include a full vector RAG pipeline."]}),"\n",(0,r.jsx)(t.p,{children:(0,r.jsx)(t.img,{src:n(69645).A+"",width:"2868",height:"1566"})}),"\n",(0,r.jsxs)(t.p,{children:["The default prompt in the ",(0,r.jsx)(t.strong,{children:"Prompt"})," component is ",(0,r.jsx)(t.code,{children:"Answer the user as if you were a GenAI expert, enthusiastic about helping them get started building something fresh."})]}),"\n",(0,r.jsx)(t.p,{children:"This prompt creates a \"personality\" for your LLM's chat interactions, but it doesn't include variables that you may find useful when templating prompts."}),"\n",(0,r.jsxs)(t.p,{children:["To modify the prompt template, in the ",(0,r.jsx)(t.strong,{children:"Prompt"})," component, click the ",(0,r.jsx)(t.strong,{children:"Template"})," field. For example, the ",(0,r.jsx)(t.code,{children:"{context}"})," variable gives the LLM model access to embedded vector data to return better answers."]}),"\n",(0,r.jsx)(h.Code,{codeConfig:l,northPanel:{tabs:[""],active:"",heightRatio:1},files:[{name:"",focus:"",code:{lines:[{tokens:[{content:"Given the context",props:{}}]},{tokens:[{content:"{context}",props:{}}]},{tokens:[{content:"Answer the question",props:{}}]},{tokens:[{content:"{user_question}",props:{}}]}],lang:"text"},annotations:[]}]}),"\n",(0,r.jsxs)(t.p,{children:["When variables are added to a prompt template, new fields are automatically created in the component. These fields can be connected to receive text input from other components to automate prompting, or to output instructions to other components. An example of prompts controlling agents behavior is available in the ",(0,r.jsx)(t.a,{href:"/sequential-agent",children:"sequential tasks agent starter flow"}),"."]}),"\n",(0,r.jsx)(t.h3,{id:"inputs",children:"Inputs"}),"\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.jsx)(t.tbody,{children:(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"template"}),(0,r.jsx)(t.td,{children:"Template"}),(0,r.jsx)(t.td,{children:"Create a prompt template with dynamic variables."})]})})]}),"\n",(0,r.jsx)(t.h3,{id:"outputs",children:"Outputs"}),"\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.jsx)(t.tbody,{children:(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"prompt"}),(0,r.jsx)(t.td,{children:"Prompt Message"}),(0,r.jsxs)(t.td,{children:["The built prompt message returned by the ",(0,r.jsx)(t.code,{children:"build_prompt"})," method."]})]})})]}),"\n",(0,r.jsx)(t.h2,{id:"langchain-hub-prompt-template",children:"Langchain Hub Prompt Template"}),"\n",(0,r.jsxs)(t.p,{children:["This component fetches prompts from the ",(0,r.jsx)(t.a,{href:"https://docs.smith.langchain.com/old/category/prompt-hub",children:"Langchain Hub"}),"."]}),"\n",(0,r.jsxs)(t.p,{children:['When a prompt is loaded, the component generates input fields for custom variables. For example, the default prompt "efriis/my-first-prompt" generates fields for ',(0,r.jsx)(t.code,{children:"profession"})," and ",(0,r.jsx)(t.code,{children:"question"}),"."]}),"\n",(0,r.jsx)(t.h3,{id:"inputs-1",children:"Inputs"}),"\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:"langchain_api_key"}),(0,r.jsx)(t.td,{children:"Your LangChain API Key"}),(0,r.jsx)(t.td,{children:"The LangChain API Key to use."})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"langchain_hub_prompt"}),(0,r.jsx)(t.td,{children:"LangChain Hub Prompt"}),(0,r.jsx)(t.td,{children:"The LangChain Hub prompt to use."})]})]})]}),"\n",(0,r.jsx)(t.h3,{id:"outputs-1",children:"Outputs"}),"\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.jsx)(t.tbody,{children:(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"prompt"}),(0,r.jsx)(t.td,{children:"Build Prompt"}),(0,r.jsxs)(t.td,{children:["The built prompt message returned by the ",(0,r.jsx)(t.code,{children:"build_prompt"})," method."]})]})})]})]})}function m(e={}){const{wrapper:t}={...(0,s.R)(),...e.components};return t?(0,r.jsx)(t,{...e,children:(0,r.jsx)(u,{...e})}):u(e)}function x(e,t){throw new Error("Expected "+(t?"component":"object")+" `"+e+"` to be defined: you likely forgot to import, pass, or provide it.")}},69645:(e,t,n)=>{n.d(t,{A:()=>o});const o=n.p+"assets/images/quickstart-add-document-ingestion-6c34bac012400e3d35f6cebdd350ecf7.png"}}]); \ No newline at end of file diff --git a/assets/js/6aa941bb.6cf4daa5.js b/assets/js/6aa941bb.6cf4daa5.js new file mode 100644 index 0000000000..e08b3ce651 --- /dev/null +++ b/assets/js/6aa941bb.6cf4daa5.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunklangflow_docs=self.webpackChunklangflow_docs||[]).push([[3327],{18111:(e,n,t)=>{t.d(n,{A:()=>s});const s=t.p+"assets/images/component-run-flow-78e94e2ede1b4b853f0e4de6b9561f6f.png"},19054:(e,n,t)=>{t.r(n),t.d(n,{CH:()=>h,assets:()=>l,chCodeConfig:()=>a,contentTitle:()=>c,default:()=>p,frontMatter:()=>d,metadata:()=>s,toc:()=>x});const s=JSON.parse('{"id":"Components/components-logic","title":"Logic","description":"Logic components provide functionalities for routing, conditional processing, and flow management.","source":"@site/docs/Components/components-logic.md","sourceDirName":"Components","slug":"/components-logic","permalink":"/components-logic","draft":false,"unlisted":false,"tags":[],"version":"current","frontMatter":{"title":"Logic","slug":"/components-logic"},"sidebar":"docs","previous":{"title":"Loaders","permalink":"/components-loaders"},"next":{"title":"Memories","permalink":"/components-memories"}}');var o=t(74848),r=t(28453),i=t(24754);const d={title:"Logic",slug:"/components-logic"},c="Logic components in Langflow",l={},h={annotations:i.hk,Code:i.Cy},a={staticMediaQuery:"not screen, (max-width: 768px)",lineNumbers:!0,showCopyButton:!0,themeName:"github-dark"},x=[{value:"Use a logic component in a flow",id:"use-a-logic-component-in-a-flow",level:2},{value:"Conditional router (If-Else component)",id:"conditional-router-if-else-component",level:2},{value:"Operator Behavior",id:"operator-behavior",level:3},{value:"Listen",id:"listen",level:2},{value:"Loop",id:"loop",level:2},{value:"Notify",id:"notify",level:2},{value:"Pass message",id:"pass-message",level:2},{value:"Run flow",id:"run-flow",level:2},{value:"Legacy components",id:"legacy-components",level:2},{value:"Data Conditional Router",id:"data-conditional-router",level:3},{value:"Inputs",id:"inputs",level:4},{value:"Outputs",id:"outputs",level:4},{value:"Operator behavior",id:"operator-behavior-1",level:4},{value:"List processing",id:"list-processing",level:4},{value:"Deprecated components",id:"deprecated-components",level:2},{value:"Flow as tool",id:"flow-as-tool",level:3},{value:"Inputs",id:"inputs-1",level:4},{value:"Outputs",id:"outputs-1",level:4},{value:"Sub flow",id:"sub-flow",level:3},{value:"Inputs",id:"inputs-2",level:4},{value:"Outputs",id:"outputs-2",level:4}];function j(e){const n={a:"a",admonition:"admonition",code:"code",h1:"h1",h2:"h2",h3:"h3",h4:"h4",header:"header",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,r.R)(),...e.components},{Details:s}=n;return h||u("CH",!1),h.Code||u("CH.Code",!0),s||u("Details",!0),(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)("style",{dangerouslySetInnerHTML:{__html:'[data-ch-theme="github-dark"] { --ch-t-colorScheme: dark;--ch-t-foreground: #c9d1d9;--ch-t-background: #0d1117;--ch-t-lighter-inlineBackground: #0d1117e6;--ch-t-editor-background: #0d1117;--ch-t-editor-foreground: #c9d1d9;--ch-t-editor-lineHighlightBackground: #6e76811a;--ch-t-editor-rangeHighlightBackground: #ffffff0b;--ch-t-editor-infoForeground: #3794FF;--ch-t-editor-selectionBackground: #264F78;--ch-t-focusBorder: #1f6feb;--ch-t-tab-activeBackground: #0d1117;--ch-t-tab-activeForeground: #c9d1d9;--ch-t-tab-inactiveBackground: #010409;--ch-t-tab-inactiveForeground: #8b949e;--ch-t-tab-border: #30363d;--ch-t-tab-activeBorder: #0d1117;--ch-t-editorGroup-border: #30363d;--ch-t-editorGroupHeader-tabsBackground: #010409;--ch-t-editorLineNumber-foreground: #6e7681;--ch-t-input-background: #0d1117;--ch-t-input-foreground: #c9d1d9;--ch-t-input-border: #30363d;--ch-t-icon-foreground: #8b949e;--ch-t-sideBar-background: #010409;--ch-t-sideBar-foreground: #c9d1d9;--ch-t-sideBar-border: #30363d;--ch-t-list-activeSelectionBackground: #6e768166;--ch-t-list-activeSelectionForeground: #c9d1d9;--ch-t-list-hoverBackground: #6e76811a;--ch-t-list-hoverForeground: #c9d1d9; }'}}),"\n",(0,o.jsx)(n.header,{children:(0,o.jsx)(n.h1,{id:"logic-components-in-langflow",children:"Logic components in Langflow"})}),"\n",(0,o.jsx)(n.p,{children:"Logic components provide functionalities for routing, conditional processing, and flow management."}),"\n",(0,o.jsx)(n.h2,{id:"use-a-logic-component-in-a-flow",children:"Use a logic component in a flow"}),"\n",(0,o.jsxs)(n.p,{children:['This flow creates a summarizing "for each" loop with the ',(0,o.jsx)(n.a,{href:"/components-logic#loop",children:"Loop"})," component."]}),"\n",(0,o.jsxs)(n.p,{children:["The component iterates over a list of ",(0,o.jsx)(n.a,{href:"/concepts-objects#data-object",children:"Data"})," objects until it's completed, and then the ",(0,o.jsx)(n.strong,{children:"Done"})," loop aggregates the results."]}),"\n",(0,o.jsxs)(n.p,{children:["The ",(0,o.jsx)(n.strong,{children:"File"})," component loads text files from your local machine, and then the ",(0,o.jsx)(n.strong,{children:"Parse Data"})," component parses them into a list of structured ",(0,o.jsx)(n.code,{children:"Data"})," objects.\nThe ",(0,o.jsx)(n.strong,{children:"Loop"})," component passes each ",(0,o.jsx)(n.code,{children:"Data"})," object to a ",(0,o.jsx)(n.strong,{children:"Prompt"})," to be summarized."]}),"\n",(0,o.jsxs)(n.p,{children:["When the ",(0,o.jsx)(n.strong,{children:"Loop"})," component runs out of ",(0,o.jsx)(n.code,{children:"Data"}),", the ",(0,o.jsx)(n.strong,{children:"Done"})," loop activates, which counts the number of pages and summarizes their tone with another ",(0,o.jsx)(n.strong,{children:"Prompt"}),".\nThis is represented in Langflow by connecting the Parse Data component's ",(0,o.jsx)(n.strong,{children:"Data List"})," output to the Loop component's ",(0,o.jsx)(n.code,{children:"Data"})," loop input."]}),"\n",(0,o.jsx)(n.p,{children:(0,o.jsx)(n.img,{alt:"Sample Flow looping summarizer",src:t(19709).A+"",width:"2676",height:"1512"})}),"\n",(0,o.jsx)(n.p,{children:"The output is similar to this:"}),"\n",(0,o.jsx)(h.Code,{codeConfig:a,northPanel:{tabs:[""],active:"",heightRatio:1},files:[{name:"",focus:"",code:{lines:[{tokens:[{content:"Document Summary",props:{}}]},{tokens:[{content:"Total Pages Processed",props:{}}]},{tokens:[{content:"Total Pages: 2",props:{}}]},{tokens:[{content:"Overall Tone of Document",props:{}}]},{tokens:[{content:"Tone: Informative and Instructional",props:{}}]},{tokens:[{content:"The documentation outlines microservices architecture patterns and best practices.",props:{}}]},{tokens:[{content:"It emphasizes service isolation and inter-service communication protocols.",props:{}}]},{tokens:[{content:"The use of asynchronous messaging patterns is recommended for system scalability.",props:{}}]},{tokens:[{content:"It includes code examples of REST and gRPC implementations to demonstrate integration approaches.",props:{}}]}],lang:"text"},annotations:[]}]}),"\n",(0,o.jsx)(n.h2,{id:"conditional-router-if-else-component",children:"Conditional router (If-Else component)"}),"\n",(0,o.jsxs)(n.p,{children:["This component routes messages by comparing two strings.\nIt evaluates a condition by comparing two text inputs using the specified operator and routes the message to ",(0,o.jsx)(n.code,{children:"true_result"})," or ",(0,o.jsx)(n.code,{children:"false_result"}),"."]}),"\n",(0,o.jsxs)(n.p,{children:["The operator looks for single strings based on your defined ",(0,o.jsx)(n.a,{href:"#operator-behavior",children:"operator behavior"}),", but it can also search for multiple words by regex matching."]}),"\n",(0,o.jsxs)(n.p,{children:["To use the ",(0,o.jsx)(n.strong,{children:"Conditional router"})," component to check incoming messages with regex matching, do the following:"]}),"\n",(0,o.jsxs)(n.ol,{children:["\n",(0,o.jsxs)(n.li,{children:["Connect the ",(0,o.jsx)(n.strong,{children:"If-Else"})," component's ",(0,o.jsx)(n.strong,{children:"Text Input"})," port to a ",(0,o.jsx)(n.strong,{children:"Chat Input"})," component."]}),"\n",(0,o.jsx)(n.li,{children:"In the If-Else component, enter the following values."}),"\n"]}),"\n",(0,o.jsxs)(n.ul,{children:["\n",(0,o.jsxs)(n.li,{children:["In the ",(0,o.jsx)(n.strong,{children:"Match Text"})," field, enter ",(0,o.jsx)(n.code,{children:".*(urgent|warning|caution).*"}),". The component looks for these values. The regex match is case sensitive, so to look for all permutations of ",(0,o.jsx)(n.code,{children:"warning"}),", enter ",(0,o.jsx)(n.code,{children:"warning|Warning|WARNING"}),"."]}),"\n",(0,o.jsxs)(n.li,{children:["In the ",(0,o.jsx)(n.strong,{children:"Operator"})," field, enter ",(0,o.jsx)(n.code,{children:"regex"}),". The component looks for the strings ",(0,o.jsx)(n.code,{children:"urgent"}),", ",(0,o.jsx)(n.code,{children:"warning"}),", and ",(0,o.jsx)(n.code,{children:"caution"}),". For more operators, see ",(0,o.jsx)(n.a,{href:"#operator-behavior",children:"Operator behavior"}),"."]}),"\n",(0,o.jsxs)(n.li,{children:["In the ",(0,o.jsx)(n.strong,{children:"Message"})," field, enter ",(0,o.jsx)(n.code,{children:"New Message Detected"}),". This field is optional. The message is sent to both the ",(0,o.jsx)(n.strong,{children:"True"})," and ",(0,o.jsx)(n.strong,{children:"False"})," ports.\nThe component is now set up to send a ",(0,o.jsx)(n.code,{children:"New Message Detected"})," message out of its ",(0,o.jsx)(n.strong,{children:"True"})," port if it matches any of the strings.\nIf no strings are detected, it sends a message out of the ",(0,o.jsx)(n.strong,{children:"False"})," port."]}),"\n"]}),"\n",(0,o.jsxs)(n.ol,{start:"3",children:["\n",(0,o.jsxs)(n.li,{children:["Create two identical flows to process the messages. Connect an ",(0,o.jsx)(n.strong,{children:"Open AI"})," component, a ",(0,o.jsx)(n.strong,{children:"Prompt"}),", and a ",(0,o.jsx)(n.strong,{children:"Chat Output"})," component together."]}),"\n",(0,o.jsxs)(n.li,{children:["Connect one chain to the ",(0,o.jsx)(n.strong,{children:"If-Else"})," component's ",(0,o.jsx)(n.strong,{children:"True"})," port, and one chain to the ",(0,o.jsx)(n.strong,{children:"False"})," port."]}),"\n"]}),"\n",(0,o.jsx)(n.p,{children:"The flow looks like this:"}),"\n",(0,o.jsx)(n.p,{children:(0,o.jsx)(n.img,{alt:"A conditional router connected to two OpenAI components",src:t(89329).A+"",width:"1888",height:"1754"})}),"\n",(0,o.jsxs)(n.ol,{start:"5",children:["\n",(0,o.jsxs)(n.li,{children:["Add your ",(0,o.jsx)(n.strong,{children:"OpenAI API key"})," to both ",(0,o.jsx)(n.strong,{children:"OpenAI"})," components."]}),"\n",(0,o.jsxs)(n.li,{children:["In both ",(0,o.jsx)(n.strong,{children:"Prompt"})," components, enter the behavior you want each route to take.\nWhen a match is found:"]}),"\n"]}),"\n",(0,o.jsx)(h.Code,{codeConfig:a,northPanel:{tabs:[""],active:"",heightRatio:1},files:[{name:"",focus:"",code:{lines:[{tokens:[{content:"Send a message that a new message has been received and added to the Urgent queue.",props:{}}]}],lang:"text"},annotations:[]}]}),"\n",(0,o.jsx)(n.p,{children:"When a match is not found:"}),"\n",(0,o.jsx)(h.Code,{codeConfig:a,northPanel:{tabs:[""],active:"",heightRatio:1},files:[{name:"",focus:"",code:{lines:[{tokens:[{content:"Send a message that a new message has been received and added to the backlog.",props:{}}]}],lang:"text"},annotations:[]}]}),"\n",(0,o.jsxs)(n.ol,{start:"7",children:["\n",(0,o.jsxs)(n.li,{children:["Open the ",(0,o.jsx)(n.strong,{children:"Playground"}),"."]}),"\n",(0,o.jsx)(n.li,{children:"Send the flow some messages. Your messages route differently based on the if-else component's evaluation."}),"\n"]}),"\n",(0,o.jsx)(h.Code,{codeConfig:a,northPanel:{tabs:[""],active:"",heightRatio:1},files:[{name:"",focus:"",code:{lines:[{tokens:[{content:"User",props:{}}]},{tokens:[{content:"A new user was created.",props:{}}]},{tokens:[{content:"",props:{}}]},{tokens:[{content:"AI",props:{}}]},{tokens:[{content:"A new message has been received and added to the backlog.",props:{}}]},{tokens:[{content:"",props:{}}]},{tokens:[{content:"User",props:{}}]},{tokens:[{content:"Sign-in warning: new user locked out.",props:{}}]},{tokens:[{content:"",props:{}}]},{tokens:[{content:"AI",props:{}}]},{tokens:[{content:"A new message has been received and added to the Urgent queue. Please review it at your earliest convenience.",props:{}}]}],lang:"text"},annotations:[]}]}),"\n",(0,o.jsxs)(s,{children:[(0,o.jsx)("summary",{children:"Parameters"}),(0,o.jsx)(n.p,{children:(0,o.jsx)(n.strong,{children:"Inputs"})}),(0,o.jsxs)(n.table,{children:[(0,o.jsx)(n.thead,{children:(0,o.jsxs)(n.tr,{children:[(0,o.jsx)(n.th,{children:"Name"}),(0,o.jsx)(n.th,{children:"Type"}),(0,o.jsx)(n.th,{children:"Description"})]})}),(0,o.jsxs)(n.tbody,{children:[(0,o.jsxs)(n.tr,{children:[(0,o.jsx)(n.td,{children:"input_text"}),(0,o.jsx)(n.td,{children:"String"}),(0,o.jsx)(n.td,{children:"The primary text input for the operation."})]}),(0,o.jsxs)(n.tr,{children:[(0,o.jsx)(n.td,{children:"match_text"}),(0,o.jsx)(n.td,{children:"String"}),(0,o.jsx)(n.td,{children:"The text to compare against."})]}),(0,o.jsxs)(n.tr,{children:[(0,o.jsx)(n.td,{children:"operator"}),(0,o.jsx)(n.td,{children:"Dropdown"}),(0,o.jsx)(n.td,{children:"The operator used to compare texts. Options include equals, not equals, contains, starts with, ends with, and regex. The default is equals."})]}),(0,o.jsxs)(n.tr,{children:[(0,o.jsx)(n.td,{children:"case_sensitive"}),(0,o.jsx)(n.td,{children:"Boolean"}),(0,o.jsx)(n.td,{children:"When set to true, the comparison is case sensitive. This setting does not apply to regex comparison. The default is false."})]}),(0,o.jsxs)(n.tr,{children:[(0,o.jsx)(n.td,{children:"message"}),(0,o.jsx)(n.td,{children:"Message"}),(0,o.jsx)(n.td,{children:"The message to pass through either route."})]}),(0,o.jsxs)(n.tr,{children:[(0,o.jsx)(n.td,{children:"max_iterations"}),(0,o.jsx)(n.td,{children:"Integer"}),(0,o.jsx)(n.td,{children:"The maximum number of iterations allowed for the conditional router. The default is 10."})]}),(0,o.jsxs)(n.tr,{children:[(0,o.jsx)(n.td,{children:"default_route"}),(0,o.jsx)(n.td,{children:"Dropdown"}),(0,o.jsx)(n.td,{children:"The route to take when max iterations are reached. Options include true_result or false_result. The default is false_result."})]})]})]}),(0,o.jsx)(n.p,{children:(0,o.jsx)(n.strong,{children:"Outputs"})}),(0,o.jsxs)(n.table,{children:[(0,o.jsx)(n.thead,{children:(0,o.jsxs)(n.tr,{children:[(0,o.jsx)(n.th,{children:"Name"}),(0,o.jsx)(n.th,{children:"Type"}),(0,o.jsx)(n.th,{children:"Description"})]})}),(0,o.jsxs)(n.tbody,{children:[(0,o.jsxs)(n.tr,{children:[(0,o.jsx)(n.td,{children:"true_result"}),(0,o.jsx)(n.td,{children:"Message"}),(0,o.jsx)(n.td,{children:"The output produced when the condition is true."})]}),(0,o.jsxs)(n.tr,{children:[(0,o.jsx)(n.td,{children:"false_result"}),(0,o.jsx)(n.td,{children:"Message"}),(0,o.jsx)(n.td,{children:"The output produced when the condition is false."})]})]})]})]}),"\n",(0,o.jsx)(n.h3,{id:"operator-behavior",children:"Operator Behavior"}),"\n",(0,o.jsxs)(n.p,{children:["The ",(0,o.jsx)(n.strong,{children:"If-else"})," component includes a comparison operator to compare the values in ",(0,o.jsx)(n.code,{children:"input_text"})," and ",(0,o.jsx)(n.code,{children:"match_text"}),"."]}),"\n",(0,o.jsxs)(n.p,{children:["All options respect the ",(0,o.jsx)(n.code,{children:"case_sensitive"})," setting except ",(0,o.jsx)(n.strong,{children:"regex"}),"."]}),"\n",(0,o.jsxs)(n.ul,{children:["\n",(0,o.jsxs)(n.li,{children:[(0,o.jsx)(n.strong,{children:"equals"}),": Exact match comparison."]}),"\n",(0,o.jsxs)(n.li,{children:[(0,o.jsx)(n.strong,{children:"not equals"}),": Inverse of exact match."]}),"\n",(0,o.jsxs)(n.li,{children:[(0,o.jsx)(n.strong,{children:"contains"}),": Checks if match_text is found within input_text."]}),"\n",(0,o.jsxs)(n.li,{children:[(0,o.jsx)(n.strong,{children:"starts with"}),": Checks if input_text begins with match_text."]}),"\n",(0,o.jsxs)(n.li,{children:[(0,o.jsx)(n.strong,{children:"ends with"}),": Checks if input_text ends with match_text."]}),"\n",(0,o.jsxs)(n.li,{children:[(0,o.jsx)(n.strong,{children:"regex"}),": Performs regular expression matching. It is always case sensitive and ignores the case_sensitive setting."]}),"\n"]}),"\n",(0,o.jsx)(n.h2,{id:"listen",children:"Listen"}),"\n",(0,o.jsx)(n.p,{children:"This component listens for a notification and retrieves its associated state."}),"\n",(0,o.jsxs)(s,{children:[(0,o.jsx)("summary",{children:"Parameters"}),(0,o.jsx)(n.p,{children:(0,o.jsx)(n.strong,{children:"Inputs"})}),(0,o.jsxs)(n.table,{children:[(0,o.jsx)(n.thead,{children:(0,o.jsxs)(n.tr,{children:[(0,o.jsx)(n.th,{children:"Name"}),(0,o.jsx)(n.th,{children:"Type"}),(0,o.jsx)(n.th,{children:"Description"})]})}),(0,o.jsx)(n.tbody,{children:(0,o.jsxs)(n.tr,{children:[(0,o.jsx)(n.td,{children:"name"}),(0,o.jsx)(n.td,{children:"String"}),(0,o.jsx)(n.td,{children:"The name of the notification to listen for."})]})})]}),(0,o.jsx)(n.p,{children:(0,o.jsx)(n.strong,{children:"Outputs"})}),(0,o.jsxs)(n.table,{children:[(0,o.jsx)(n.thead,{children:(0,o.jsxs)(n.tr,{children:[(0,o.jsx)(n.th,{children:"Name"}),(0,o.jsx)(n.th,{children:"Type"}),(0,o.jsx)(n.th,{children:"Description"})]})}),(0,o.jsx)(n.tbody,{children:(0,o.jsxs)(n.tr,{children:[(0,o.jsx)(n.td,{children:"output"}),(0,o.jsx)(n.td,{children:"Data"}),(0,o.jsx)(n.td,{children:"The state associated with the notification."})]})})]})]}),"\n",(0,o.jsx)(n.h2,{id:"loop",children:"Loop"}),"\n",(0,o.jsxs)(n.p,{children:["This component iterates over a list of ",(0,o.jsx)(n.a,{href:"/concepts-objects#data-object",children:"Data"})," objects, outputting one item at a time and aggregating results from loop inputs."]}),"\n",(0,o.jsxs)(n.p,{children:["In this example, the ",(0,o.jsx)(n.strong,{children:"Loop"})," component iterates over a CSV file through the ",(0,o.jsx)(n.strong,{children:"Item"})," port until there are no rows left to process. Then, the ",(0,o.jsx)(n.strong,{children:"Loop"})," component performs the actions connected to the ",(0,o.jsx)(n.strong,{children:"Done"})," port, which in this case is loading the structured data into ",(0,o.jsx)(n.strong,{children:"Chroma DB"}),"."]}),"\n",(0,o.jsxs)(n.p,{children:["Think of it this way: the ",(0,o.jsx)(n.strong,{children:"Item"}),' port forms the "main" loop that repeats until a "complete" condition is reached.']}),"\n",(0,o.jsxs)(n.ol,{children:["\n",(0,o.jsxs)(n.li,{children:["The ",(0,o.jsx)(n.strong,{children:"Loop"})," component accepts ",(0,o.jsx)(n.strong,{children:"Data"})," from the ",(0,o.jsx)(n.strong,{children:"Load CSV"})," component, and outputs the data from the ",(0,o.jsx)(n.strong,{children:"Item"})," port."]}),"\n",(0,o.jsxs)(n.li,{children:["Each CSV row is converted to a ",(0,o.jsx)(n.strong,{children:"Message"})," and processed into structured data with the ",(0,o.jsx)(n.strong,{children:"Structured Output"})," component.\nThe dotted line connected from the ",(0,o.jsx)(n.strong,{children:"Structured Output"})," component's ",(0,o.jsx)(n.strong,{children:"Looping"})," port tells you where the loop begins again."]}),"\n",(0,o.jsxs)(n.li,{children:["The ",(0,o.jsx)(n.strong,{children:"Loop"})," component repeatedly extracts rows by ",(0,o.jsx)(n.strong,{children:"Text Key"})," until there are no more rows to extract."]}),"\n"]}),"\n",(0,o.jsxs)(n.p,{children:["Once all items are processed, the action connected to the ",(0,o.jsx)(n.strong,{children:"Done"})," port is performed.\nIn this example, the data is loaded into ",(0,o.jsx)(n.strong,{children:"Chroma DB"}),"."]}),"\n",(0,o.jsx)(n.p,{children:(0,o.jsx)(n.img,{alt:"Loop CSV parser",src:t(91110).A+"",width:"3008",height:"3172"})}),"\n",(0,o.jsxs)(n.p,{children:["Follow along with this step-by-step video guide for creating this flow and adding agentic RAG: ",(0,o.jsx)(n.a,{href:"https://www.youtube.com/watch?v=9Wx7WODSKTo",children:"Mastering the Loop Component & Agentic RAG in Langflow"}),"."]}),"\n",(0,o.jsxs)(s,{children:[(0,o.jsx)("summary",{children:"Parameters"}),(0,o.jsx)(n.p,{children:(0,o.jsx)(n.strong,{children:"Inputs"})}),(0,o.jsxs)(n.table,{children:[(0,o.jsx)(n.thead,{children:(0,o.jsxs)(n.tr,{children:[(0,o.jsx)(n.th,{children:"Name"}),(0,o.jsx)(n.th,{children:"Type"}),(0,o.jsx)(n.th,{children:"Description"})]})}),(0,o.jsx)(n.tbody,{children:(0,o.jsxs)(n.tr,{children:[(0,o.jsx)(n.td,{children:"data"}),(0,o.jsx)(n.td,{children:"Data/List"}),(0,o.jsx)(n.td,{children:"The initial list of Data objects to process."})]})})]}),(0,o.jsx)(n.p,{children:(0,o.jsx)(n.strong,{children:"Outputs"})}),(0,o.jsxs)(n.table,{children:[(0,o.jsx)(n.thead,{children:(0,o.jsxs)(n.tr,{children:[(0,o.jsx)(n.th,{children:"Name"}),(0,o.jsx)(n.th,{children:"Type"}),(0,o.jsx)(n.th,{children:"Description"})]})}),(0,o.jsxs)(n.tbody,{children:[(0,o.jsxs)(n.tr,{children:[(0,o.jsx)(n.td,{children:"item"}),(0,o.jsx)(n.td,{children:"Data"}),(0,o.jsx)(n.td,{children:"The current item being processed from the data list."})]}),(0,o.jsxs)(n.tr,{children:[(0,o.jsx)(n.td,{children:"done"}),(0,o.jsx)(n.td,{children:"Data"}),(0,o.jsx)(n.td,{children:"The aggregated results after all items are processed."})]})]})]})]}),"\n",(0,o.jsx)(n.h2,{id:"notify",children:"Notify"}),"\n",(0,o.jsx)(n.p,{children:"This component generates a notification for the Listen component to use."}),"\n",(0,o.jsxs)(s,{children:[(0,o.jsx)("summary",{children:"Parameters"}),(0,o.jsx)(n.p,{children:(0,o.jsx)(n.strong,{children:"Inputs"})}),(0,o.jsxs)(n.table,{children:[(0,o.jsx)(n.thead,{children:(0,o.jsxs)(n.tr,{children:[(0,o.jsx)(n.th,{children:"Name"}),(0,o.jsx)(n.th,{children:"Type"}),(0,o.jsx)(n.th,{children:"Description"})]})}),(0,o.jsxs)(n.tbody,{children:[(0,o.jsxs)(n.tr,{children:[(0,o.jsx)(n.td,{children:"name"}),(0,o.jsx)(n.td,{children:"String"}),(0,o.jsx)(n.td,{children:"The name of the notification."})]}),(0,o.jsxs)(n.tr,{children:[(0,o.jsx)(n.td,{children:"data"}),(0,o.jsx)(n.td,{children:"Data"}),(0,o.jsx)(n.td,{children:"The data to store in the notification."})]}),(0,o.jsxs)(n.tr,{children:[(0,o.jsx)(n.td,{children:"append"}),(0,o.jsx)(n.td,{children:"Boolean"}),(0,o.jsx)(n.td,{children:"When set to true, the record is added to the existing notification."})]})]})]}),(0,o.jsx)(n.p,{children:(0,o.jsx)(n.strong,{children:"Outputs"})}),(0,o.jsxs)(n.table,{children:[(0,o.jsx)(n.thead,{children:(0,o.jsxs)(n.tr,{children:[(0,o.jsx)(n.th,{children:"Name"}),(0,o.jsx)(n.th,{children:"Type"}),(0,o.jsx)(n.th,{children:"Description"})]})}),(0,o.jsx)(n.tbody,{children:(0,o.jsxs)(n.tr,{children:[(0,o.jsx)(n.td,{children:"output"}),(0,o.jsx)(n.td,{children:"Data"}),(0,o.jsx)(n.td,{children:"The data stored in the notification."})]})})]})]}),"\n",(0,o.jsx)(n.h2,{id:"pass-message",children:"Pass message"}),"\n",(0,o.jsx)(n.p,{children:"This component forwards the input message, unchanged."}),"\n",(0,o.jsxs)(s,{children:[(0,o.jsx)("summary",{children:"Parameters"}),(0,o.jsx)(n.p,{children:(0,o.jsx)(n.strong,{children:"Inputs"})}),(0,o.jsxs)(n.table,{children:[(0,o.jsx)(n.thead,{children:(0,o.jsxs)(n.tr,{children:[(0,o.jsx)(n.th,{children:"Name"}),(0,o.jsx)(n.th,{children:"Display Name"}),(0,o.jsx)(n.th,{children:"Info"})]})}),(0,o.jsxs)(n.tbody,{children:[(0,o.jsxs)(n.tr,{children:[(0,o.jsx)(n.td,{children:"input_message"}),(0,o.jsx)(n.td,{children:"Input Message"}),(0,o.jsx)(n.td,{children:"The message to forward."})]}),(0,o.jsxs)(n.tr,{children:[(0,o.jsx)(n.td,{children:"ignored_message"}),(0,o.jsx)(n.td,{children:"Ignored Message"}),(0,o.jsx)(n.td,{children:"A second message that is ignored. Used as a workaround for continuity."})]})]})]}),(0,o.jsx)(n.p,{children:(0,o.jsx)(n.strong,{children:"Outputs"})}),(0,o.jsxs)(n.table,{children:[(0,o.jsx)(n.thead,{children:(0,o.jsxs)(n.tr,{children:[(0,o.jsx)(n.th,{children:"Name"}),(0,o.jsx)(n.th,{children:"Display Name"}),(0,o.jsx)(n.th,{children:"Info"})]})}),(0,o.jsx)(n.tbody,{children:(0,o.jsxs)(n.tr,{children:[(0,o.jsx)(n.td,{children:"output_message"}),(0,o.jsx)(n.td,{children:"Output Message"}),(0,o.jsx)(n.td,{children:"The forwarded message from the input."})]})})]})]}),"\n",(0,o.jsx)(n.h2,{id:"run-flow",children:"Run flow"}),"\n",(0,o.jsx)(n.p,{children:"This component allows you to run any flow stored in your Langflow database without opening the flow editor."}),"\n",(0,o.jsxs)(n.p,{children:["The Run Flow component can also be used as a tool when connected to an ",(0,o.jsx)(n.a,{href:"/components-agents",children:"Agent"}),". The ",(0,o.jsx)(n.code,{children:"name"})," and ",(0,o.jsx)(n.code,{children:"description"})," metadata that the Agent uses to register the tool are created automatically."]}),"\n",(0,o.jsx)(n.p,{children:"When you select a flow, the component fetches the flow's graph structure and uses it to generate the inputs and outputs for the Run Flow component."}),"\n",(0,o.jsx)(n.p,{children:"To use the Run Flow component as a tool, do the following:"}),"\n",(0,o.jsxs)(n.ol,{children:["\n",(0,o.jsxs)(n.li,{children:["Add the ",(0,o.jsx)(n.strong,{children:"Run Flow"})," component to the ",(0,o.jsx)(n.a,{href:"/starter-projects-simple-agent",children:"Simple Agent"})," flow."]}),"\n",(0,o.jsxs)(n.li,{children:["In the ",(0,o.jsx)(n.strong,{children:"Flow Name"})," menu, select the sub-flow you want to run.\nThe appearance of the ",(0,o.jsx)(n.strong,{children:"Run Flow"})," component changes to reflect the inputs and outputs of the selected flow."]}),"\n",(0,o.jsxs)(n.li,{children:["On the ",(0,o.jsx)(n.strong,{children:"Run Flow"})," component, enable ",(0,o.jsx)(n.strong,{children:"Tool Mode"}),"."]}),"\n",(0,o.jsxs)(n.li,{children:["Connect the ",(0,o.jsx)(n.strong,{children:"Run Flow"})," component to the ",(0,o.jsx)(n.strong,{children:"Toolset"})," input of the Agent.\nYour flow should now look like this:\n",(0,o.jsx)(n.img,{alt:"Run Flow component",src:t(18111).A+"",width:"2036",height:"1582"})]}),"\n",(0,o.jsx)(n.li,{children:"Run the flow. The Agent uses the Run Flow component as a tool to run the selected sub-flow."}),"\n"]}),"\n",(0,o.jsxs)(s,{children:[(0,o.jsx)("summary",{children:"Parameters"}),(0,o.jsx)(n.p,{children:(0,o.jsx)(n.strong,{children:"Inputs"})}),(0,o.jsxs)(n.table,{children:[(0,o.jsx)(n.thead,{children:(0,o.jsxs)(n.tr,{children:[(0,o.jsx)(n.th,{children:"Name"}),(0,o.jsx)(n.th,{children:"Type"}),(0,o.jsx)(n.th,{children:"Description"})]})}),(0,o.jsxs)(n.tbody,{children:[(0,o.jsxs)(n.tr,{children:[(0,o.jsx)(n.td,{children:"flow_name_selected"}),(0,o.jsx)(n.td,{children:"Dropdown"}),(0,o.jsx)(n.td,{children:"The name of the flow to run."})]}),(0,o.jsxs)(n.tr,{children:[(0,o.jsx)(n.td,{children:"flow_tweak_data"}),(0,o.jsx)(n.td,{children:"Dict"}),(0,o.jsx)(n.td,{children:"Dictionary of tweaks to customize the flow's behavior."})]}),(0,o.jsxs)(n.tr,{children:[(0,o.jsx)(n.td,{children:"dynamic inputs"}),(0,o.jsx)(n.td,{children:"Various"}),(0,o.jsx)(n.td,{children:"Additional inputs that are generated based on the selected flow."})]})]})]}),(0,o.jsx)(n.p,{children:(0,o.jsx)(n.strong,{children:"Outputs"})}),(0,o.jsxs)(n.table,{children:[(0,o.jsx)(n.thead,{children:(0,o.jsxs)(n.tr,{children:[(0,o.jsx)(n.th,{children:"Name"}),(0,o.jsx)(n.th,{children:"Type"}),(0,o.jsx)(n.th,{children:"Description"})]})}),(0,o.jsx)(n.tbody,{children:(0,o.jsxs)(n.tr,{children:[(0,o.jsx)(n.td,{children:"run_outputs"}),(0,o.jsxs)(n.td,{children:["A ",(0,o.jsx)(n.code,{children:"List"})," of types ",(0,o.jsx)(n.code,{children:"Data"}),", ",(0,o.jsx)(n.code,{children:"Message,"})," or ",(0,o.jsx)(n.code,{children:"DataFrame"})]}),(0,o.jsx)(n.td,{children:"All outputs are generated from running the flow."})]})})]})]}),"\n",(0,o.jsx)(n.h2,{id:"legacy-components",children:"Legacy components"}),"\n",(0,o.jsxs)(n.p,{children:[(0,o.jsx)(n.strong,{children:"Legacy"})," components are available for use but are no longer supported."]}),"\n",(0,o.jsx)(n.h3,{id:"data-conditional-router",children:"Data Conditional Router"}),"\n",(0,o.jsx)(n.admonition,{type:"important",children:(0,o.jsxs)(n.p,{children:["This component is in ",(0,o.jsx)(n.strong,{children:"Legacy"}),", which means it is no longer in active development as of Langflow version 1.3."]})}),"\n",(0,o.jsxs)(n.p,{children:["This component routes ",(0,o.jsx)(n.code,{children:"Data"})," objects based on a condition applied to a specified key, including boolean validation. It can process either a single Data object or a list of Data objects."]}),"\n",(0,o.jsx)(n.p,{children:"This component is particularly useful in workflows that require conditional routing of complex data structures, enabling dynamic decision-making based on data content."}),"\n",(0,o.jsx)(n.h4,{id:"inputs",children:"Inputs"}),"\n",(0,o.jsxs)(n.table,{children:[(0,o.jsx)(n.thead,{children:(0,o.jsxs)(n.tr,{children:[(0,o.jsx)(n.th,{children:"Name"}),(0,o.jsx)(n.th,{children:"Type"}),(0,o.jsx)(n.th,{children:"Description"})]})}),(0,o.jsxs)(n.tbody,{children:[(0,o.jsxs)(n.tr,{children:[(0,o.jsx)(n.td,{children:"data_input"}),(0,o.jsx)(n.td,{children:"Data"}),(0,o.jsx)(n.td,{children:"The Data object or list of Data objects to process. This input can handle both single items and lists."})]}),(0,o.jsxs)(n.tr,{children:[(0,o.jsx)(n.td,{children:"key_name"}),(0,o.jsx)(n.td,{children:"String"}),(0,o.jsx)(n.td,{children:"The name of the key in the Data object to check."})]}),(0,o.jsxs)(n.tr,{children:[(0,o.jsx)(n.td,{children:"operator"}),(0,o.jsx)(n.td,{children:"Dropdown"}),(0,o.jsx)(n.td,{children:'The operator to apply. Options: "equals", "not equals", "contains", "starts with", "ends with", "boolean validator". Default: "equals".'})]}),(0,o.jsxs)(n.tr,{children:[(0,o.jsx)(n.td,{children:"compare_value"}),(0,o.jsx)(n.td,{children:"String"}),(0,o.jsx)(n.td,{children:'The value to compare against. Not shown/used when operator is "boolean validator".'})]})]})]}),"\n",(0,o.jsx)(n.h4,{id:"outputs",children:"Outputs"}),"\n",(0,o.jsxs)(n.table,{children:[(0,o.jsx)(n.thead,{children:(0,o.jsxs)(n.tr,{children:[(0,o.jsx)(n.th,{children:"Name"}),(0,o.jsx)(n.th,{children:"Type"}),(0,o.jsx)(n.th,{children:"Description"})]})}),(0,o.jsxs)(n.tbody,{children:[(0,o.jsxs)(n.tr,{children:[(0,o.jsx)(n.td,{children:"true_output"}),(0,o.jsx)(n.td,{children:"Data/List"}),(0,o.jsx)(n.td,{children:"Output when the condition is met."})]}),(0,o.jsxs)(n.tr,{children:[(0,o.jsx)(n.td,{children:"false_output"}),(0,o.jsx)(n.td,{children:"Data/List"}),(0,o.jsx)(n.td,{children:"Output when the condition is not met."})]})]})]}),"\n",(0,o.jsx)(n.h4,{id:"operator-behavior-1",children:"Operator behavior"}),"\n",(0,o.jsxs)(n.ul,{children:["\n",(0,o.jsxs)(n.li,{children:[(0,o.jsx)(n.strong,{children:"equals"}),": Exact match comparison between the key's value and compare_value."]}),"\n",(0,o.jsxs)(n.li,{children:[(0,o.jsx)(n.strong,{children:"not equals"}),": Inverse of exact match."]}),"\n",(0,o.jsxs)(n.li,{children:[(0,o.jsx)(n.strong,{children:"contains"}),": Checks if compare_value is found within the key's value."]}),"\n",(0,o.jsxs)(n.li,{children:[(0,o.jsx)(n.strong,{children:"starts with"}),": Checks if the key's value begins with compare_value."]}),"\n",(0,o.jsxs)(n.li,{children:[(0,o.jsx)(n.strong,{children:"ends with"}),": Checks if the key's value ends with compare_value."]}),"\n",(0,o.jsxs)(n.li,{children:[(0,o.jsx)(n.strong,{children:"boolean validator"}),": Treats the key's value as a boolean. The following values are considered true:","\n",(0,o.jsxs)(n.ul,{children:["\n",(0,o.jsxs)(n.li,{children:["Boolean ",(0,o.jsx)(n.code,{children:"true"}),"."]}),"\n",(0,o.jsx)(n.li,{children:'Strings: "true", "1", "yes", "y", "on" (case-insensitive).'}),"\n",(0,o.jsxs)(n.li,{children:["Any other value is converted using Python's ",(0,o.jsx)(n.code,{children:"bool()"})," function."]}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,o.jsx)(n.h4,{id:"list-processing",children:"List processing"}),"\n",(0,o.jsx)(n.p,{children:"The following actions occur when processing a list of Data objects:"}),"\n",(0,o.jsxs)(n.ul,{children:["\n",(0,o.jsx)(n.li,{children:"Each object in the list is evaluated individually"}),"\n",(0,o.jsx)(n.li,{children:"Objects meeting the condition go to true_output"}),"\n",(0,o.jsx)(n.li,{children:"Objects not meeting the condition go to false_output"}),"\n",(0,o.jsx)(n.li,{children:"If all objects go to one output, the other output is empty"}),"\n"]}),"\n",(0,o.jsx)(n.h2,{id:"deprecated-components",children:"Deprecated components"}),"\n",(0,o.jsx)(n.p,{children:"Deprecated components have been replaced by newer alternatives and should not be used in new projects."}),"\n",(0,o.jsx)(n.h3,{id:"flow-as-tool",children:"Flow as tool"}),"\n",(0,o.jsx)(n.admonition,{type:"important",children:(0,o.jsxs)(n.p,{children:["This component is deprecated as of Langflow version 1.1.2.\nInstead, use the ",(0,o.jsx)(n.a,{href:"/components-logic#run-flow",children:"Run flow component"})]})}),"\n",(0,o.jsx)(n.p,{children:"This component constructs a tool from a function that runs a loaded flow."}),"\n",(0,o.jsx)(n.h4,{id:"inputs-1",children:"Inputs"}),"\n",(0,o.jsxs)(n.table,{children:[(0,o.jsx)(n.thead,{children:(0,o.jsxs)(n.tr,{children:[(0,o.jsx)(n.th,{children:"Name"}),(0,o.jsx)(n.th,{children:"Type"}),(0,o.jsx)(n.th,{children:"Description"})]})}),(0,o.jsxs)(n.tbody,{children:[(0,o.jsxs)(n.tr,{children:[(0,o.jsx)(n.td,{children:"flow_name"}),(0,o.jsx)(n.td,{children:"Dropdown"}),(0,o.jsx)(n.td,{children:"The name of the flow to run."})]}),(0,o.jsxs)(n.tr,{children:[(0,o.jsx)(n.td,{children:"tool_name"}),(0,o.jsx)(n.td,{children:"String"}),(0,o.jsx)(n.td,{children:"The name of the tool."})]}),(0,o.jsxs)(n.tr,{children:[(0,o.jsx)(n.td,{children:"tool_description"}),(0,o.jsx)(n.td,{children:"String"}),(0,o.jsx)(n.td,{children:"The description of the tool."})]}),(0,o.jsxs)(n.tr,{children:[(0,o.jsx)(n.td,{children:"return_direct"}),(0,o.jsx)(n.td,{children:"Boolean"}),(0,o.jsx)(n.td,{children:"If true, returns the result directly from the tool."})]})]})]}),"\n",(0,o.jsx)(n.h4,{id:"outputs-1",children:"Outputs"}),"\n",(0,o.jsxs)(n.table,{children:[(0,o.jsx)(n.thead,{children:(0,o.jsxs)(n.tr,{children:[(0,o.jsx)(n.th,{children:"Name"}),(0,o.jsx)(n.th,{children:"Type"}),(0,o.jsx)(n.th,{children:"Description"})]})}),(0,o.jsx)(n.tbody,{children:(0,o.jsxs)(n.tr,{children:[(0,o.jsx)(n.td,{children:"api_build_tool"}),(0,o.jsx)(n.td,{children:"Tool"}),(0,o.jsx)(n.td,{children:"The constructed tool from the flow."})]})})]}),"\n",(0,o.jsx)(n.h3,{id:"sub-flow",children:"Sub flow"}),"\n",(0,o.jsx)(n.admonition,{type:"important",children:(0,o.jsxs)(n.p,{children:["This component is deprecated as of Langflow version 1.1.2.\nInstead, use the ",(0,o.jsx)(n.a,{href:"/components-logic#run-flow",children:"Run flow component"})]})}),"\n",(0,o.jsxs)(n.p,{children:["This ",(0,o.jsx)(n.code,{children:"SubFlowComponent"})," generates a component from a flow with all of its inputs and outputs."]}),"\n",(0,o.jsx)(n.p,{children:"This component can integrate entire flows as components within a larger workflow. It dynamically generates inputs based on the selected flow and executes the flow with provided parameters."}),"\n",(0,o.jsx)(n.h4,{id:"inputs-2",children:"Inputs"}),"\n",(0,o.jsxs)(n.table,{children:[(0,o.jsx)(n.thead,{children:(0,o.jsxs)(n.tr,{children:[(0,o.jsx)(n.th,{children:"Name"}),(0,o.jsx)(n.th,{children:"Type"}),(0,o.jsx)(n.th,{children:"Description"})]})}),(0,o.jsx)(n.tbody,{children:(0,o.jsxs)(n.tr,{children:[(0,o.jsx)(n.td,{children:"flow_name"}),(0,o.jsx)(n.td,{children:"Dropdown"}),(0,o.jsx)(n.td,{children:"The name of the flow to run."})]})})]}),"\n",(0,o.jsx)(n.h4,{id:"outputs-2",children:"Outputs"}),"\n",(0,o.jsxs)(n.table,{children:[(0,o.jsx)(n.thead,{children:(0,o.jsxs)(n.tr,{children:[(0,o.jsx)(n.th,{children:"Name"}),(0,o.jsx)(n.th,{children:"Type"}),(0,o.jsx)(n.th,{children:"Description"})]})}),(0,o.jsx)(n.tbody,{children:(0,o.jsxs)(n.tr,{children:[(0,o.jsx)(n.td,{children:"flow_outputs"}),(0,o.jsx)(n.td,{children:"List[Data]"}),(0,o.jsx)(n.td,{children:"The outputs generated from the flow."})]})})]})]})}function p(e={}){const{wrapper:n}={...(0,r.R)(),...e.components};return n?(0,o.jsx)(n,{...e,children:(0,o.jsx)(j,{...e})}):j(e)}function u(e,n){throw new Error("Expected "+(n?"component":"object")+" `"+e+"` to be defined: you likely forgot to import, pass, or provide it.")}},19709:(e,n,t)=>{t.d(n,{A:()=>s});const s=t.p+"assets/images/loop-text-summarizer-bd1d7be6d26bb47765931e3ab9f98dfa.png"},89329:(e,n,t)=>{t.d(n,{A:()=>s});const s=t.p+"assets/images/component-conditional-router-be8cad83b612bf7c86bc861a1842fda3.png"},91110:(e,n,t)=>{t.d(n,{A:()=>s});const s=t.p+"assets/images/component-loop-csv-5e6704f4f2b8d511b70336ff3ddc1328.png"}}]); \ No newline at end of file diff --git a/assets/js/6aa941bb.ea2cd923.js b/assets/js/6aa941bb.ea2cd923.js deleted file mode 100644 index 3af633d09d..0000000000 --- a/assets/js/6aa941bb.ea2cd923.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunklangflow_docs=self.webpackChunklangflow_docs||[]).push([[3327],{18111:(e,t,n)=>{n.d(t,{A:()=>s});const s=n.p+"assets/images/component-run-flow-78e94e2ede1b4b853f0e4de6b9561f6f.png"},19054:(e,t,n)=>{n.r(t),n.d(t,{CH:()=>h,assets:()=>c,chCodeConfig:()=>a,contentTitle:()=>l,default:()=>j,frontMatter:()=>d,metadata:()=>s,toc:()=>p});const s=JSON.parse('{"id":"Components/components-logic","title":"Logic","description":"Logic components provide functionalities for routing, conditional processing, and flow management.","source":"@site/docs/Components/components-logic.md","sourceDirName":"Components","slug":"/components-logic","permalink":"/components-logic","draft":false,"unlisted":false,"tags":[],"version":"current","frontMatter":{"title":"Logic","slug":"/components-logic"},"sidebar":"docs","previous":{"title":"Loaders","permalink":"/components-loaders"},"next":{"title":"Memories","permalink":"/components-memories"}}');var o=n(74848),i=n(28453),r=n(24754);const d={title:"Logic",slug:"/components-logic"},l="Logic components in Langflow",c={},h={annotations:r.hk,Code:r.Cy},a={staticMediaQuery:"not screen, (max-width: 768px)",lineNumbers:!0,showCopyButton:!0,themeName:"github-dark"},p=[{value:"Use a logic component in a flow",id:"use-a-logic-component-in-a-flow",level:2},{value:"Conditional router (If-Else component)",id:"conditional-router-if-else-component",level:2},{value:"Inputs",id:"inputs",level:3},{value:"Outputs",id:"outputs",level:3},{value:"Operator Behavior",id:"operator-behavior",level:3},{value:"Listen",id:"listen",level:2},{value:"Inputs",id:"inputs-1",level:3},{value:"Outputs",id:"outputs-1",level:3},{value:"Loop",id:"loop",level:2},{value:"Inputs",id:"inputs-2",level:3},{value:"Outputs",id:"outputs-2",level:3},{value:"Notify",id:"notify",level:2},{value:"Inputs",id:"inputs-3",level:3},{value:"Outputs",id:"outputs-3",level:3},{value:"Pass message",id:"pass-message",level:2},{value:"Inputs",id:"inputs-4",level:3},{value:"Outputs",id:"outputs-4",level:3},{value:"Run flow",id:"run-flow",level:2},{value:"Inputs",id:"inputs-5",level:3},{value:"Outputs",id:"outputs-5",level:3},{value:"Legacy components",id:"legacy-components",level:2},{value:"Data Conditional Router",id:"data-conditional-router",level:3},{value:"Inputs",id:"inputs-6",level:4},{value:"Outputs",id:"outputs-6",level:4},{value:"Operator behavior",id:"operator-behavior-1",level:4},{value:"List processing",id:"list-processing",level:4},{value:"Deprecated components",id:"deprecated-components",level:2},{value:"Flow as tool",id:"flow-as-tool",level:3},{value:"Inputs",id:"inputs-7",level:4},{value:"Outputs",id:"outputs-7",level:4},{value:"Sub flow",id:"sub-flow",level:3},{value:"Inputs",id:"inputs-8",level:4},{value:"Outputs",id:"outputs-8",level:4}];function x(e){const t={a:"a",admonition:"admonition",code:"code",h1:"h1",h2:"h2",h3:"h3",h4:"h4",header:"header",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,i.R)(),...e.components};return h||u("CH",!1),h.Code||u("CH.Code",!0),(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)("style",{dangerouslySetInnerHTML:{__html:'[data-ch-theme="github-dark"] { --ch-t-colorScheme: dark;--ch-t-foreground: #c9d1d9;--ch-t-background: #0d1117;--ch-t-lighter-inlineBackground: #0d1117e6;--ch-t-editor-background: #0d1117;--ch-t-editor-foreground: #c9d1d9;--ch-t-editor-lineHighlightBackground: #6e76811a;--ch-t-editor-rangeHighlightBackground: #ffffff0b;--ch-t-editor-infoForeground: #3794FF;--ch-t-editor-selectionBackground: #264F78;--ch-t-focusBorder: #1f6feb;--ch-t-tab-activeBackground: #0d1117;--ch-t-tab-activeForeground: #c9d1d9;--ch-t-tab-inactiveBackground: #010409;--ch-t-tab-inactiveForeground: #8b949e;--ch-t-tab-border: #30363d;--ch-t-tab-activeBorder: #0d1117;--ch-t-editorGroup-border: #30363d;--ch-t-editorGroupHeader-tabsBackground: #010409;--ch-t-editorLineNumber-foreground: #6e7681;--ch-t-input-background: #0d1117;--ch-t-input-foreground: #c9d1d9;--ch-t-input-border: #30363d;--ch-t-icon-foreground: #8b949e;--ch-t-sideBar-background: #010409;--ch-t-sideBar-foreground: #c9d1d9;--ch-t-sideBar-border: #30363d;--ch-t-list-activeSelectionBackground: #6e768166;--ch-t-list-activeSelectionForeground: #c9d1d9;--ch-t-list-hoverBackground: #6e76811a;--ch-t-list-hoverForeground: #c9d1d9; }'}}),"\n",(0,o.jsx)(t.header,{children:(0,o.jsx)(t.h1,{id:"logic-components-in-langflow",children:"Logic components in Langflow"})}),"\n",(0,o.jsx)(t.p,{children:"Logic components provide functionalities for routing, conditional processing, and flow management."}),"\n",(0,o.jsx)(t.h2,{id:"use-a-logic-component-in-a-flow",children:"Use a logic component in a flow"}),"\n",(0,o.jsxs)(t.p,{children:['This flow creates a summarizing "for each" loop with the ',(0,o.jsx)(t.a,{href:"/components-logic#loop",children:"Loop"})," component."]}),"\n",(0,o.jsxs)(t.p,{children:["The component iterates over a list of ",(0,o.jsx)(t.a,{href:"/concepts-objects#data-object",children:"Data"})," objects until it's completed, and then the ",(0,o.jsx)(t.strong,{children:"Done"})," loop aggregates the results."]}),"\n",(0,o.jsxs)(t.p,{children:["The ",(0,o.jsx)(t.strong,{children:"File"})," component loads text files from your local machine, and then the ",(0,o.jsx)(t.strong,{children:"Parse Data"})," component parses them into a list of structured ",(0,o.jsx)(t.code,{children:"Data"})," objects.\nThe ",(0,o.jsx)(t.strong,{children:"Loop"})," component passes each ",(0,o.jsx)(t.code,{children:"Data"})," object to a ",(0,o.jsx)(t.strong,{children:"Prompt"})," to be summarized."]}),"\n",(0,o.jsxs)(t.p,{children:["When the ",(0,o.jsx)(t.strong,{children:"Loop"})," component runs out of ",(0,o.jsx)(t.code,{children:"Data"}),", the ",(0,o.jsx)(t.strong,{children:"Done"})," loop activates, which counts the number of pages and summarizes their tone with another ",(0,o.jsx)(t.strong,{children:"Prompt"}),".\nThis is represented in Langflow by connecting the Parse Data component's ",(0,o.jsx)(t.strong,{children:"Data List"})," output to the Loop component's ",(0,o.jsx)(t.code,{children:"Data"})," loop input."]}),"\n",(0,o.jsx)(t.p,{children:(0,o.jsx)(t.img,{alt:"Sample Flow looping summarizer",src:n(19709).A+"",width:"2676",height:"1512"})}),"\n",(0,o.jsx)(t.p,{children:"The output will look similar to this:"}),"\n",(0,o.jsx)(h.Code,{codeConfig:a,northPanel:{tabs:[""],active:"",heightRatio:1},files:[{name:"",focus:"",code:{lines:[{tokens:[{content:"Document Summary",props:{}}]},{tokens:[{content:"Total Pages Processed",props:{}}]},{tokens:[{content:"Total Pages: 2",props:{}}]},{tokens:[{content:"Overall Tone of Document",props:{}}]},{tokens:[{content:"Tone: Informative and Instructional",props:{}}]},{tokens:[{content:"The documentation outlines microservices architecture patterns and best practices.",props:{}}]},{tokens:[{content:"It emphasizes service isolation and inter-service communication protocols.",props:{}}]},{tokens:[{content:"The use of asynchronous messaging patterns is recommended for system scalability.",props:{}}]},{tokens:[{content:"It includes code examples of REST and gRPC implementations to demonstrate integration approaches.",props:{}}]}],lang:"text"},annotations:[]}]}),"\n",(0,o.jsx)(t.h2,{id:"conditional-router-if-else-component",children:"Conditional router (If-Else component)"}),"\n",(0,o.jsxs)(t.p,{children:["This component routes messages by comparing two strings.\nIt evaluates a condition by comparing two text inputs using the specified operator and routes the message to ",(0,o.jsx)(t.code,{children:"true_result"})," or ",(0,o.jsx)(t.code,{children:"false_result"}),"."]}),"\n",(0,o.jsxs)(t.p,{children:["The operator looks for single strings based on your defined ",(0,o.jsx)(t.a,{href:"#operator-behavior",children:"operator behavior"}),", but it can also search for multiple words by regex matching."]}),"\n",(0,o.jsxs)(t.p,{children:["To use the ",(0,o.jsx)(t.strong,{children:"Conditional router"})," component to check incoming messages with regex matching, do the following:"]}),"\n",(0,o.jsxs)(t.ol,{children:["\n",(0,o.jsxs)(t.li,{children:["Connect the ",(0,o.jsx)(t.strong,{children:"If-Else"})," component's ",(0,o.jsx)(t.strong,{children:"Text Input"})," port to a ",(0,o.jsx)(t.strong,{children:"Chat Input"})," component."]}),"\n",(0,o.jsx)(t.li,{children:"In the If-Else component, enter the following values."}),"\n"]}),"\n",(0,o.jsxs)(t.ul,{children:["\n",(0,o.jsxs)(t.li,{children:["In the ",(0,o.jsx)(t.strong,{children:"Match Text"})," field, enter ",(0,o.jsx)(t.code,{children:".*(urgent|warning|caution).*"}),". The component looks for these values. The regex match is case sensitive, so to look for all permutations of ",(0,o.jsx)(t.code,{children:"warning"}),", enter ",(0,o.jsx)(t.code,{children:"warning|Warning|WARNING"}),"."]}),"\n",(0,o.jsxs)(t.li,{children:["In the ",(0,o.jsx)(t.strong,{children:"Operator"})," field, enter ",(0,o.jsx)(t.code,{children:"regex"}),". The component looks for the strings ",(0,o.jsx)(t.code,{children:"urgent"}),", ",(0,o.jsx)(t.code,{children:"warning"}),", and ",(0,o.jsx)(t.code,{children:"caution"}),". For more operators, see ",(0,o.jsx)(t.a,{href:"#operator-behavior",children:"Operator behavior"}),"."]}),"\n",(0,o.jsxs)(t.li,{children:["In the ",(0,o.jsx)(t.strong,{children:"Message"})," field, enter ",(0,o.jsx)(t.code,{children:"New Message Detected"}),". This field is optional. The message is sent to both the ",(0,o.jsx)(t.strong,{children:"True"})," and ",(0,o.jsx)(t.strong,{children:"False"})," ports.\nThe component is now set up to send a ",(0,o.jsx)(t.code,{children:"New Message Detected"})," message out of its ",(0,o.jsx)(t.strong,{children:"True"})," port if it matches any of the strings.\nIf no strings are detected, it sends a message out of the ",(0,o.jsx)(t.strong,{children:"False"})," port."]}),"\n"]}),"\n",(0,o.jsxs)(t.ol,{start:"3",children:["\n",(0,o.jsxs)(t.li,{children:["Create two identical flows to process the messages. Connect an ",(0,o.jsx)(t.strong,{children:"Open AI"})," component, a ",(0,o.jsx)(t.strong,{children:"Prompt"}),", and a ",(0,o.jsx)(t.strong,{children:"Chat Output"})," component together."]}),"\n",(0,o.jsxs)(t.li,{children:["Connect one chain to the ",(0,o.jsx)(t.strong,{children:"If-Else"})," component's ",(0,o.jsx)(t.strong,{children:"True"})," port, and one chain to the ",(0,o.jsx)(t.strong,{children:"False"})," port."]}),"\n"]}),"\n",(0,o.jsx)(t.p,{children:"The flow looks like this:"}),"\n",(0,o.jsx)(t.p,{children:(0,o.jsx)(t.img,{alt:"A conditional router connected to two OpenAI components",src:n(89329).A+"",width:"1888",height:"1754"})}),"\n",(0,o.jsxs)(t.ol,{start:"5",children:["\n",(0,o.jsxs)(t.li,{children:["Add your ",(0,o.jsx)(t.strong,{children:"OpenAI API key"})," to both ",(0,o.jsx)(t.strong,{children:"OpenAI"})," components."]}),"\n",(0,o.jsxs)(t.li,{children:["In both ",(0,o.jsx)(t.strong,{children:"Prompt"})," components, enter the behavior you want each route to take.\nWhen a match is found:"]}),"\n"]}),"\n",(0,o.jsx)(h.Code,{codeConfig:a,northPanel:{tabs:[""],active:"",heightRatio:1},files:[{name:"",focus:"",code:{lines:[{tokens:[{content:"Send a message that a new message has been received and added to the Urgent queue.",props:{}}]}],lang:"text"},annotations:[]}]}),"\n",(0,o.jsx)(t.p,{children:"When a match is not found:"}),"\n",(0,o.jsx)(h.Code,{codeConfig:a,northPanel:{tabs:[""],active:"",heightRatio:1},files:[{name:"",focus:"",code:{lines:[{tokens:[{content:"Send a message that a new message has been received and added to the backlog.",props:{}}]}],lang:"text"},annotations:[]}]}),"\n",(0,o.jsxs)(t.ol,{start:"7",children:["\n",(0,o.jsxs)(t.li,{children:["Open the ",(0,o.jsx)(t.strong,{children:"Playground"}),"."]}),"\n",(0,o.jsx)(t.li,{children:"Send the flow some messages. Your messages route differently based on the if-else component's evaluation."}),"\n"]}),"\n",(0,o.jsx)(h.Code,{codeConfig:a,northPanel:{tabs:[""],active:"",heightRatio:1},files:[{name:"",focus:"",code:{lines:[{tokens:[{content:"User",props:{}}]},{tokens:[{content:"A new user was created.",props:{}}]},{tokens:[{content:"",props:{}}]},{tokens:[{content:"AI",props:{}}]},{tokens:[{content:"A new message has been received and added to the backlog.",props:{}}]},{tokens:[{content:"",props:{}}]},{tokens:[{content:"User",props:{}}]},{tokens:[{content:"Sign-in warning: new user locked out.",props:{}}]},{tokens:[{content:"",props:{}}]},{tokens:[{content:"AI",props:{}}]},{tokens:[{content:"A new message has been received and added to the Urgent queue. Please review it at your earliest convenience.",props:{}}]}],lang:"text"},annotations:[]}]}),"\n",(0,o.jsx)(t.h3,{id:"inputs",children:"Inputs"}),"\n",(0,o.jsxs)(t.table,{children:[(0,o.jsx)(t.thead,{children:(0,o.jsxs)(t.tr,{children:[(0,o.jsx)(t.th,{children:"Name"}),(0,o.jsx)(t.th,{children:"Type"}),(0,o.jsx)(t.th,{children:"Description"})]})}),(0,o.jsxs)(t.tbody,{children:[(0,o.jsxs)(t.tr,{children:[(0,o.jsx)(t.td,{children:"input_text"}),(0,o.jsx)(t.td,{children:"String"}),(0,o.jsx)(t.td,{children:"The primary text input for the operation."})]}),(0,o.jsxs)(t.tr,{children:[(0,o.jsx)(t.td,{children:"match_text"}),(0,o.jsx)(t.td,{children:"String"}),(0,o.jsx)(t.td,{children:"The text input to compare against."})]}),(0,o.jsxs)(t.tr,{children:[(0,o.jsx)(t.td,{children:"operator"}),(0,o.jsx)(t.td,{children:"Dropdown"}),(0,o.jsx)(t.td,{children:'The operator to compare texts. Options: "equals", "not equals", "contains", "starts with", "ends with", "regex". Default: "equals".'})]}),(0,o.jsxs)(t.tr,{children:[(0,o.jsx)(t.td,{children:"case_sensitive"}),(0,o.jsx)(t.td,{children:"Boolean"}),(0,o.jsx)(t.td,{children:"If true, the comparison is case sensitive. This setting is ignored for regex comparison. Default: false."})]}),(0,o.jsxs)(t.tr,{children:[(0,o.jsx)(t.td,{children:"message"}),(0,o.jsx)(t.td,{children:"Message"}),(0,o.jsx)(t.td,{children:"The message to pass through either route."})]}),(0,o.jsxs)(t.tr,{children:[(0,o.jsx)(t.td,{children:"max_iterations"}),(0,o.jsx)(t.td,{children:"Integer"}),(0,o.jsx)(t.td,{children:"The maximum number of iterations for the conditional router. Default: 10."})]}),(0,o.jsxs)(t.tr,{children:[(0,o.jsx)(t.td,{children:"default_route"}),(0,o.jsx)(t.td,{children:"Dropdown"}),(0,o.jsx)(t.td,{children:'The default route to take when max iterations are reached. Options: "true_result" or "false_result". Default: "false_result".'})]})]})]}),"\n",(0,o.jsx)(t.h3,{id:"outputs",children:"Outputs"}),"\n",(0,o.jsxs)(t.table,{children:[(0,o.jsx)(t.thead,{children:(0,o.jsxs)(t.tr,{children:[(0,o.jsx)(t.th,{children:"Name"}),(0,o.jsx)(t.th,{children:"Type"}),(0,o.jsx)(t.th,{children:"Description"})]})}),(0,o.jsxs)(t.tbody,{children:[(0,o.jsxs)(t.tr,{children:[(0,o.jsx)(t.td,{children:"true_result"}),(0,o.jsx)(t.td,{children:"Message"}),(0,o.jsx)(t.td,{children:"The output when the condition is true."})]}),(0,o.jsxs)(t.tr,{children:[(0,o.jsx)(t.td,{children:"false_result"}),(0,o.jsx)(t.td,{children:"Message"}),(0,o.jsx)(t.td,{children:"The output when the condition is false."})]})]})]}),"\n",(0,o.jsx)(t.h3,{id:"operator-behavior",children:"Operator Behavior"}),"\n",(0,o.jsxs)(t.p,{children:["The ",(0,o.jsx)(t.strong,{children:"If-else"})," component includes a comparison operator to compare the values in ",(0,o.jsx)(t.code,{children:"input_text"})," and ",(0,o.jsx)(t.code,{children:"match_text"}),"."]}),"\n",(0,o.jsxs)(t.p,{children:["All options respect the ",(0,o.jsx)(t.code,{children:"case_sensitive"})," setting except ",(0,o.jsx)(t.strong,{children:"regex"}),"."]}),"\n",(0,o.jsxs)(t.ul,{children:["\n",(0,o.jsxs)(t.li,{children:[(0,o.jsx)(t.strong,{children:"equals"}),": Exact match comparison."]}),"\n",(0,o.jsxs)(t.li,{children:[(0,o.jsx)(t.strong,{children:"not equals"}),": Inverse of exact match."]}),"\n",(0,o.jsxs)(t.li,{children:[(0,o.jsx)(t.strong,{children:"contains"}),": Checks if match_text is found within input_text."]}),"\n",(0,o.jsxs)(t.li,{children:[(0,o.jsx)(t.strong,{children:"starts with"}),": Checks if input_text begins with match_text."]}),"\n",(0,o.jsxs)(t.li,{children:[(0,o.jsx)(t.strong,{children:"ends with"}),": Checks if input_text ends with match_text."]}),"\n",(0,o.jsxs)(t.li,{children:[(0,o.jsx)(t.strong,{children:"regex"}),": Performs regular expression matching. It is always case sensitive and ignores the case_sensitive setting."]}),"\n"]}),"\n",(0,o.jsx)(t.h2,{id:"listen",children:"Listen"}),"\n",(0,o.jsx)(t.p,{children:"This component listens for a notification and retrieves its associated state."}),"\n",(0,o.jsx)(t.h3,{id:"inputs-1",children:"Inputs"}),"\n",(0,o.jsxs)(t.table,{children:[(0,o.jsx)(t.thead,{children:(0,o.jsxs)(t.tr,{children:[(0,o.jsx)(t.th,{children:"Name"}),(0,o.jsx)(t.th,{children:"Type"}),(0,o.jsx)(t.th,{children:"Description"})]})}),(0,o.jsx)(t.tbody,{children:(0,o.jsxs)(t.tr,{children:[(0,o.jsx)(t.td,{children:"name"}),(0,o.jsx)(t.td,{children:"String"}),(0,o.jsx)(t.td,{children:"The name of the notification to listen for."})]})})]}),"\n",(0,o.jsx)(t.h3,{id:"outputs-1",children:"Outputs"}),"\n",(0,o.jsxs)(t.table,{children:[(0,o.jsx)(t.thead,{children:(0,o.jsxs)(t.tr,{children:[(0,o.jsx)(t.th,{children:"Name"}),(0,o.jsx)(t.th,{children:"Type"}),(0,o.jsx)(t.th,{children:"Description"})]})}),(0,o.jsx)(t.tbody,{children:(0,o.jsxs)(t.tr,{children:[(0,o.jsx)(t.td,{children:"output"}),(0,o.jsx)(t.td,{children:"Data"}),(0,o.jsx)(t.td,{children:"The state associated with the notification."})]})})]}),"\n",(0,o.jsx)(t.h2,{id:"loop",children:"Loop"}),"\n",(0,o.jsxs)(t.p,{children:["This component iterates over a list of ",(0,o.jsx)(t.a,{href:"/concepts-objects#data-object",children:"Data"})," objects, outputting one item at a time and aggregating results from loop inputs."]}),"\n",(0,o.jsxs)(t.p,{children:["In this example, the ",(0,o.jsx)(t.strong,{children:"Loop"})," component iterates over a CSV file through the ",(0,o.jsx)(t.strong,{children:"Item"})," port until there are no rows left to process. Then, the ",(0,o.jsx)(t.strong,{children:"Loop"})," component performs the actions connected to the ",(0,o.jsx)(t.strong,{children:"Done"})," port, which in this case is loading the structured data into ",(0,o.jsx)(t.strong,{children:"Chroma DB"}),"."]}),"\n",(0,o.jsxs)(t.p,{children:["Think of it this way: the ",(0,o.jsx)(t.strong,{children:"Item"}),' port forms the "main" loop that repeats until a "complete" condition is reached.']}),"\n",(0,o.jsxs)(t.ol,{children:["\n",(0,o.jsxs)(t.li,{children:["The ",(0,o.jsx)(t.strong,{children:"Loop"})," component accepts ",(0,o.jsx)(t.strong,{children:"Data"})," from the ",(0,o.jsx)(t.strong,{children:"Load CSV"})," component, and outputs the data from the ",(0,o.jsx)(t.strong,{children:"Item"})," port."]}),"\n",(0,o.jsxs)(t.li,{children:["Each CSV row is converted to a ",(0,o.jsx)(t.strong,{children:"Message"})," and processed into structured data with the ",(0,o.jsx)(t.strong,{children:"Structured Output"})," component.\nThe dotted line connected from the ",(0,o.jsx)(t.strong,{children:"Structured Output"})," component's ",(0,o.jsx)(t.strong,{children:"Looping"})," port tells you where the loop begins again."]}),"\n",(0,o.jsxs)(t.li,{children:["The ",(0,o.jsx)(t.strong,{children:"Loop"})," component repeatedly extracts rows by ",(0,o.jsx)(t.strong,{children:"Text Key"})," until there are no more rows to extract."]}),"\n"]}),"\n",(0,o.jsxs)(t.p,{children:["Once all items are processed, the action connected to the ",(0,o.jsx)(t.strong,{children:"Done"})," port is performed.\nIn this example, the data is loaded into ",(0,o.jsx)(t.strong,{children:"Chroma DB"}),"."]}),"\n",(0,o.jsx)(t.p,{children:(0,o.jsx)(t.img,{alt:"Loop CSV parser",src:n(91110).A+"",width:"3008",height:"3172"})}),"\n",(0,o.jsxs)(t.p,{children:["Follow along with this step-by-step video guide for creating this flow and adding agentic RAG: ",(0,o.jsx)(t.a,{href:"https://www.youtube.com/watch?v=9Wx7WODSKTo",children:"Mastering the Loop Component & Agentic RAG in Langflow"}),"."]}),"\n",(0,o.jsx)(t.h3,{id:"inputs-2",children:"Inputs"}),"\n",(0,o.jsxs)(t.table,{children:[(0,o.jsx)(t.thead,{children:(0,o.jsxs)(t.tr,{children:[(0,o.jsx)(t.th,{children:"Name"}),(0,o.jsx)(t.th,{children:"Type"}),(0,o.jsx)(t.th,{children:"Description"})]})}),(0,o.jsx)(t.tbody,{children:(0,o.jsxs)(t.tr,{children:[(0,o.jsx)(t.td,{children:"data"}),(0,o.jsx)(t.td,{children:"Data/List"}),(0,o.jsx)(t.td,{children:"The initial list of Data objects to iterate over."})]})})]}),"\n",(0,o.jsx)(t.h3,{id:"outputs-2",children:"Outputs"}),"\n",(0,o.jsxs)(t.table,{children:[(0,o.jsx)(t.thead,{children:(0,o.jsxs)(t.tr,{children:[(0,o.jsx)(t.th,{children:"Name"}),(0,o.jsx)(t.th,{children:"Type"}),(0,o.jsx)(t.th,{children:"Description"})]})}),(0,o.jsxs)(t.tbody,{children:[(0,o.jsxs)(t.tr,{children:[(0,o.jsx)(t.td,{children:"item"}),(0,o.jsx)(t.td,{children:"Data"}),(0,o.jsx)(t.td,{children:"Outputs one item at a time from the data list."})]}),(0,o.jsxs)(t.tr,{children:[(0,o.jsx)(t.td,{children:"done"}),(0,o.jsx)(t.td,{children:"Data"}),(0,o.jsx)(t.td,{children:"Triggered when iteration complete, returns aggregated results."})]})]})]}),"\n",(0,o.jsx)(t.h2,{id:"notify",children:"Notify"}),"\n",(0,o.jsx)(t.p,{children:"This component generates a notification for the Listen component to use."}),"\n",(0,o.jsx)(t.h3,{id:"inputs-3",children:"Inputs"}),"\n",(0,o.jsxs)(t.table,{children:[(0,o.jsx)(t.thead,{children:(0,o.jsxs)(t.tr,{children:[(0,o.jsx)(t.th,{children:"Name"}),(0,o.jsx)(t.th,{children:"Type"}),(0,o.jsx)(t.th,{children:"Description"})]})}),(0,o.jsxs)(t.tbody,{children:[(0,o.jsxs)(t.tr,{children:[(0,o.jsx)(t.td,{children:"name"}),(0,o.jsx)(t.td,{children:"String"}),(0,o.jsx)(t.td,{children:"The name of the notification."})]}),(0,o.jsxs)(t.tr,{children:[(0,o.jsx)(t.td,{children:"data"}),(0,o.jsx)(t.td,{children:"Data"}),(0,o.jsx)(t.td,{children:"The data to store in the notification."})]}),(0,o.jsxs)(t.tr,{children:[(0,o.jsx)(t.td,{children:"append"}),(0,o.jsx)(t.td,{children:"Boolean"}),(0,o.jsx)(t.td,{children:"If true, the record will be appended to the existing notification."})]})]})]}),"\n",(0,o.jsx)(t.h3,{id:"outputs-3",children:"Outputs"}),"\n",(0,o.jsxs)(t.table,{children:[(0,o.jsx)(t.thead,{children:(0,o.jsxs)(t.tr,{children:[(0,o.jsx)(t.th,{children:"Name"}),(0,o.jsx)(t.th,{children:"Type"}),(0,o.jsx)(t.th,{children:"Description"})]})}),(0,o.jsx)(t.tbody,{children:(0,o.jsxs)(t.tr,{children:[(0,o.jsx)(t.td,{children:"output"}),(0,o.jsx)(t.td,{children:"Data"}),(0,o.jsx)(t.td,{children:"The data stored in the notification."})]})})]}),"\n",(0,o.jsx)(t.h2,{id:"pass-message",children:"Pass message"}),"\n",(0,o.jsx)(t.p,{children:"This component forwards the input message, unchanged."}),"\n",(0,o.jsx)(t.h3,{id:"inputs-4",children:"Inputs"}),"\n",(0,o.jsxs)(t.table,{children:[(0,o.jsx)(t.thead,{children:(0,o.jsxs)(t.tr,{children:[(0,o.jsx)(t.th,{children:"Name"}),(0,o.jsx)(t.th,{children:"Display Name"}),(0,o.jsx)(t.th,{children:"Info"})]})}),(0,o.jsxs)(t.tbody,{children:[(0,o.jsxs)(t.tr,{children:[(0,o.jsx)(t.td,{children:"input_message"}),(0,o.jsx)(t.td,{children:"Input Message"}),(0,o.jsx)(t.td,{children:"The message to be passed forward."})]}),(0,o.jsxs)(t.tr,{children:[(0,o.jsx)(t.td,{children:"ignored_message"}),(0,o.jsx)(t.td,{children:"Ignored Message"}),(0,o.jsx)(t.td,{children:"A second message to be ignored. Used as a workaround for continuity."})]})]})]}),"\n",(0,o.jsx)(t.h3,{id:"outputs-4",children:"Outputs"}),"\n",(0,o.jsxs)(t.table,{children:[(0,o.jsx)(t.thead,{children:(0,o.jsxs)(t.tr,{children:[(0,o.jsx)(t.th,{children:"Name"}),(0,o.jsx)(t.th,{children:"Display Name"}),(0,o.jsx)(t.th,{children:"Info"})]})}),(0,o.jsx)(t.tbody,{children:(0,o.jsxs)(t.tr,{children:[(0,o.jsx)(t.td,{children:"output_message"}),(0,o.jsx)(t.td,{children:"Output Message"}),(0,o.jsx)(t.td,{children:"The forwarded input message."})]})})]}),"\n",(0,o.jsx)(t.h2,{id:"run-flow",children:"Run flow"}),"\n",(0,o.jsx)(t.p,{children:"This component allows you to run any flow stored in your Langflow database without opening the flow editor."}),"\n",(0,o.jsxs)(t.p,{children:["The Run Flow component can also be used as a tool when connected to an ",(0,o.jsx)(t.a,{href:"/components-agents",children:"Agent"}),". The ",(0,o.jsx)(t.code,{children:"name"})," and ",(0,o.jsx)(t.code,{children:"description"})," metadata that the Agent uses to register the tool are created automatically."]}),"\n",(0,o.jsx)(t.p,{children:"When you select a flow, the component fetches the flow's graph structure and uses it to generate the inputs and outputs for the Run Flow component."}),"\n",(0,o.jsx)(t.p,{children:"To use the Run Flow component as a tool, do the following:"}),"\n",(0,o.jsxs)(t.ol,{children:["\n",(0,o.jsxs)(t.li,{children:["Add the ",(0,o.jsx)(t.strong,{children:"Run Flow"})," component to the ",(0,o.jsx)(t.a,{href:"/starter-projects-simple-agent",children:"Simple Agent"})," flow."]}),"\n",(0,o.jsxs)(t.li,{children:["In the ",(0,o.jsx)(t.strong,{children:"Flow Name"})," menu, select the sub-flow you want to run.\nThe appearance of the ",(0,o.jsx)(t.strong,{children:"Run Flow"})," component changes to reflect the inputs and outputs of the selected flow."]}),"\n",(0,o.jsxs)(t.li,{children:["On the ",(0,o.jsx)(t.strong,{children:"Run Flow"})," component, enable ",(0,o.jsx)(t.strong,{children:"Tool Mode"}),"."]}),"\n",(0,o.jsxs)(t.li,{children:["Connect the ",(0,o.jsx)(t.strong,{children:"Run Flow"})," component to the ",(0,o.jsx)(t.strong,{children:"Toolset"})," input of the Agent.\nYour flow should now look like this:\n",(0,o.jsx)(t.img,{alt:"Run Flow component",src:n(18111).A+"",width:"2036",height:"1582"})]}),"\n",(0,o.jsx)(t.li,{children:"Run the flow. The Agent uses the Run Flow component as a tool to run the selected sub-flow."}),"\n"]}),"\n",(0,o.jsx)(t.h3,{id:"inputs-5",children:"Inputs"}),"\n",(0,o.jsxs)(t.table,{children:[(0,o.jsx)(t.thead,{children:(0,o.jsxs)(t.tr,{children:[(0,o.jsx)(t.th,{children:"Name"}),(0,o.jsx)(t.th,{children:"Type"}),(0,o.jsx)(t.th,{children:"Description"})]})}),(0,o.jsxs)(t.tbody,{children:[(0,o.jsxs)(t.tr,{children:[(0,o.jsx)(t.td,{children:"flow_name_selected"}),(0,o.jsx)(t.td,{children:"Dropdown"}),(0,o.jsx)(t.td,{children:"The name of the flow to run."})]}),(0,o.jsxs)(t.tr,{children:[(0,o.jsx)(t.td,{children:"flow_tweak_data"}),(0,o.jsx)(t.td,{children:"Dict"}),(0,o.jsx)(t.td,{children:"Dictionary of tweaks to customize the flow's behavior."})]}),(0,o.jsxs)(t.tr,{children:[(0,o.jsx)(t.td,{children:"dynamic inputs"}),(0,o.jsx)(t.td,{children:"Various"}),(0,o.jsx)(t.td,{children:"Additional inputs that are generated based on the selected flow."})]})]})]}),"\n",(0,o.jsx)(t.h3,{id:"outputs-5",children:"Outputs"}),"\n",(0,o.jsxs)(t.table,{children:[(0,o.jsx)(t.thead,{children:(0,o.jsxs)(t.tr,{children:[(0,o.jsx)(t.th,{children:"Name"}),(0,o.jsx)(t.th,{children:"Type"}),(0,o.jsx)(t.th,{children:"Description"})]})}),(0,o.jsx)(t.tbody,{children:(0,o.jsxs)(t.tr,{children:[(0,o.jsx)(t.td,{children:"run_outputs"}),(0,o.jsxs)(t.td,{children:["A ",(0,o.jsx)(t.code,{children:"List"})," of types ",(0,o.jsx)(t.code,{children:"Data"}),", ",(0,o.jsx)(t.code,{children:"Message,"})," or ",(0,o.jsx)(t.code,{children:"DataFrame"})]}),(0,o.jsx)(t.td,{children:"All outputs are generated from running the flow."})]})})]}),"\n",(0,o.jsx)(t.h2,{id:"legacy-components",children:"Legacy components"}),"\n",(0,o.jsx)(t.p,{children:"Legacy components are available to use but no longer supported."}),"\n",(0,o.jsx)(t.h3,{id:"data-conditional-router",children:"Data Conditional Router"}),"\n",(0,o.jsx)(t.admonition,{type:"important",children:(0,o.jsxs)(t.p,{children:["This component is in ",(0,o.jsx)(t.strong,{children:"Legacy"}),", which means it is no longer in active development as of Langflow version 1.3."]})}),"\n",(0,o.jsxs)(t.p,{children:["This component routes ",(0,o.jsx)(t.code,{children:"Data"})," objects based on a condition applied to a specified key, including boolean validation. It can process either a single Data object or a list of Data objects."]}),"\n",(0,o.jsx)(t.p,{children:"This component is particularly useful in workflows that require conditional routing of complex data structures, enabling dynamic decision-making based on data content."}),"\n",(0,o.jsx)(t.h4,{id:"inputs-6",children:"Inputs"}),"\n",(0,o.jsxs)(t.table,{children:[(0,o.jsx)(t.thead,{children:(0,o.jsxs)(t.tr,{children:[(0,o.jsx)(t.th,{children:"Name"}),(0,o.jsx)(t.th,{children:"Type"}),(0,o.jsx)(t.th,{children:"Description"})]})}),(0,o.jsxs)(t.tbody,{children:[(0,o.jsxs)(t.tr,{children:[(0,o.jsx)(t.td,{children:"data_input"}),(0,o.jsx)(t.td,{children:"Data"}),(0,o.jsx)(t.td,{children:"The Data object or list of Data objects to process. This input can handle both single items and lists."})]}),(0,o.jsxs)(t.tr,{children:[(0,o.jsx)(t.td,{children:"key_name"}),(0,o.jsx)(t.td,{children:"String"}),(0,o.jsx)(t.td,{children:"The name of the key in the Data object to check."})]}),(0,o.jsxs)(t.tr,{children:[(0,o.jsx)(t.td,{children:"operator"}),(0,o.jsx)(t.td,{children:"Dropdown"}),(0,o.jsx)(t.td,{children:'The operator to apply. Options: "equals", "not equals", "contains", "starts with", "ends with", "boolean validator". Default: "equals".'})]}),(0,o.jsxs)(t.tr,{children:[(0,o.jsx)(t.td,{children:"compare_value"}),(0,o.jsx)(t.td,{children:"String"}),(0,o.jsx)(t.td,{children:'The value to compare against. Not shown/used when operator is "boolean validator".'})]})]})]}),"\n",(0,o.jsx)(t.h4,{id:"outputs-6",children:"Outputs"}),"\n",(0,o.jsxs)(t.table,{children:[(0,o.jsx)(t.thead,{children:(0,o.jsxs)(t.tr,{children:[(0,o.jsx)(t.th,{children:"Name"}),(0,o.jsx)(t.th,{children:"Type"}),(0,o.jsx)(t.th,{children:"Description"})]})}),(0,o.jsxs)(t.tbody,{children:[(0,o.jsxs)(t.tr,{children:[(0,o.jsx)(t.td,{children:"true_output"}),(0,o.jsx)(t.td,{children:"Data/List"}),(0,o.jsx)(t.td,{children:"Output when the condition is met."})]}),(0,o.jsxs)(t.tr,{children:[(0,o.jsx)(t.td,{children:"false_output"}),(0,o.jsx)(t.td,{children:"Data/List"}),(0,o.jsx)(t.td,{children:"Output when the condition is not met."})]})]})]}),"\n",(0,o.jsx)(t.h4,{id:"operator-behavior-1",children:"Operator behavior"}),"\n",(0,o.jsxs)(t.ul,{children:["\n",(0,o.jsxs)(t.li,{children:[(0,o.jsx)(t.strong,{children:"equals"}),": Exact match comparison between the key's value and compare_value."]}),"\n",(0,o.jsxs)(t.li,{children:[(0,o.jsx)(t.strong,{children:"not equals"}),": Inverse of exact match."]}),"\n",(0,o.jsxs)(t.li,{children:[(0,o.jsx)(t.strong,{children:"contains"}),": Checks if compare_value is found within the key's value."]}),"\n",(0,o.jsxs)(t.li,{children:[(0,o.jsx)(t.strong,{children:"starts with"}),": Checks if the key's value begins with compare_value."]}),"\n",(0,o.jsxs)(t.li,{children:[(0,o.jsx)(t.strong,{children:"ends with"}),": Checks if the key's value ends with compare_value."]}),"\n",(0,o.jsxs)(t.li,{children:[(0,o.jsx)(t.strong,{children:"boolean validator"}),": Treats the key's value as a boolean. The following values are considered true:","\n",(0,o.jsxs)(t.ul,{children:["\n",(0,o.jsxs)(t.li,{children:["Boolean ",(0,o.jsx)(t.code,{children:"true"}),"."]}),"\n",(0,o.jsx)(t.li,{children:'Strings: "true", "1", "yes", "y", "on" (case-insensitive).'}),"\n",(0,o.jsxs)(t.li,{children:["Any other value is converted using Python's ",(0,o.jsx)(t.code,{children:"bool()"})," function."]}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,o.jsx)(t.h4,{id:"list-processing",children:"List processing"}),"\n",(0,o.jsx)(t.p,{children:"The following actions occur when processing a list of Data objects:"}),"\n",(0,o.jsxs)(t.ul,{children:["\n",(0,o.jsx)(t.li,{children:"Each object in the list is evaluated individually"}),"\n",(0,o.jsx)(t.li,{children:"Objects meeting the condition go to true_output"}),"\n",(0,o.jsx)(t.li,{children:"Objects not meeting the condition go to false_output"}),"\n",(0,o.jsx)(t.li,{children:"If all objects go to one output, the other output is empty"}),"\n"]}),"\n",(0,o.jsx)(t.h2,{id:"deprecated-components",children:"Deprecated components"}),"\n",(0,o.jsx)(t.p,{children:"Deprecated components have been replaced by newer alternatives and should not be used in new projects."}),"\n",(0,o.jsx)(t.h3,{id:"flow-as-tool",children:"Flow as tool"}),"\n",(0,o.jsx)(t.admonition,{type:"important",children:(0,o.jsxs)(t.p,{children:["This component is deprecated as of Langflow version 1.1.2.\nInstead, use the ",(0,o.jsx)(t.a,{href:"/components-logic#run-flow",children:"Run flow component"})]})}),"\n",(0,o.jsx)(t.p,{children:"This component constructs a tool from a function that runs a loaded flow."}),"\n",(0,o.jsx)(t.h4,{id:"inputs-7",children:"Inputs"}),"\n",(0,o.jsxs)(t.table,{children:[(0,o.jsx)(t.thead,{children:(0,o.jsxs)(t.tr,{children:[(0,o.jsx)(t.th,{children:"Name"}),(0,o.jsx)(t.th,{children:"Type"}),(0,o.jsx)(t.th,{children:"Description"})]})}),(0,o.jsxs)(t.tbody,{children:[(0,o.jsxs)(t.tr,{children:[(0,o.jsx)(t.td,{children:"flow_name"}),(0,o.jsx)(t.td,{children:"Dropdown"}),(0,o.jsx)(t.td,{children:"The name of the flow to run."})]}),(0,o.jsxs)(t.tr,{children:[(0,o.jsx)(t.td,{children:"tool_name"}),(0,o.jsx)(t.td,{children:"String"}),(0,o.jsx)(t.td,{children:"The name of the tool."})]}),(0,o.jsxs)(t.tr,{children:[(0,o.jsx)(t.td,{children:"tool_description"}),(0,o.jsx)(t.td,{children:"String"}),(0,o.jsx)(t.td,{children:"The description of the tool."})]}),(0,o.jsxs)(t.tr,{children:[(0,o.jsx)(t.td,{children:"return_direct"}),(0,o.jsx)(t.td,{children:"Boolean"}),(0,o.jsx)(t.td,{children:"If true, returns the result directly from the tool."})]})]})]}),"\n",(0,o.jsx)(t.h4,{id:"outputs-7",children:"Outputs"}),"\n",(0,o.jsxs)(t.table,{children:[(0,o.jsx)(t.thead,{children:(0,o.jsxs)(t.tr,{children:[(0,o.jsx)(t.th,{children:"Name"}),(0,o.jsx)(t.th,{children:"Type"}),(0,o.jsx)(t.th,{children:"Description"})]})}),(0,o.jsx)(t.tbody,{children:(0,o.jsxs)(t.tr,{children:[(0,o.jsx)(t.td,{children:"api_build_tool"}),(0,o.jsx)(t.td,{children:"Tool"}),(0,o.jsx)(t.td,{children:"The constructed tool from the flow."})]})})]}),"\n",(0,o.jsx)(t.h3,{id:"sub-flow",children:"Sub flow"}),"\n",(0,o.jsx)(t.admonition,{type:"important",children:(0,o.jsxs)(t.p,{children:["This component is deprecated as of Langflow version 1.1.2.\nInstead, use the ",(0,o.jsx)(t.a,{href:"/components-logic#run-flow",children:"Run flow component"})]})}),"\n",(0,o.jsxs)(t.p,{children:["This ",(0,o.jsx)(t.code,{children:"SubFlowComponent"})," generates a component from a flow with all of its inputs and outputs."]}),"\n",(0,o.jsx)(t.p,{children:"This component can integrate entire flows as components within a larger workflow. It dynamically generates inputs based on the selected flow and executes the flow with provided parameters."}),"\n",(0,o.jsx)(t.h4,{id:"inputs-8",children:"Inputs"}),"\n",(0,o.jsxs)(t.table,{children:[(0,o.jsx)(t.thead,{children:(0,o.jsxs)(t.tr,{children:[(0,o.jsx)(t.th,{children:"Name"}),(0,o.jsx)(t.th,{children:"Type"}),(0,o.jsx)(t.th,{children:"Description"})]})}),(0,o.jsx)(t.tbody,{children:(0,o.jsxs)(t.tr,{children:[(0,o.jsx)(t.td,{children:"flow_name"}),(0,o.jsx)(t.td,{children:"Dropdown"}),(0,o.jsx)(t.td,{children:"The name of the flow to run."})]})})]}),"\n",(0,o.jsx)(t.h4,{id:"outputs-8",children:"Outputs"}),"\n",(0,o.jsxs)(t.table,{children:[(0,o.jsx)(t.thead,{children:(0,o.jsxs)(t.tr,{children:[(0,o.jsx)(t.th,{children:"Name"}),(0,o.jsx)(t.th,{children:"Type"}),(0,o.jsx)(t.th,{children:"Description"})]})}),(0,o.jsx)(t.tbody,{children:(0,o.jsxs)(t.tr,{children:[(0,o.jsx)(t.td,{children:"flow_outputs"}),(0,o.jsx)(t.td,{children:"List[Data]"}),(0,o.jsx)(t.td,{children:"The outputs generated from the flow."})]})})]})]})}function j(e={}){const{wrapper:t}={...(0,i.R)(),...e.components};return t?(0,o.jsx)(t,{...e,children:(0,o.jsx)(x,{...e})}):x(e)}function u(e,t){throw new Error("Expected "+(t?"component":"object")+" `"+e+"` to be defined: you likely forgot to import, pass, or provide it.")}},19709:(e,t,n)=>{n.d(t,{A:()=>s});const s=n.p+"assets/images/loop-text-summarizer-bd1d7be6d26bb47765931e3ab9f98dfa.png"},89329:(e,t,n)=>{n.d(t,{A:()=>s});const s=n.p+"assets/images/component-conditional-router-be8cad83b612bf7c86bc861a1842fda3.png"},91110:(e,t,n)=>{n.d(t,{A:()=>s});const s=n.p+"assets/images/component-loop-csv-5e6704f4f2b8d511b70336ff3ddc1328.png"}}]); \ No newline at end of file diff --git a/assets/js/6e1a9721.3ffaf0d0.js b/assets/js/6e1a9721.3ffaf0d0.js deleted file mode 100644 index d88989b359..0000000000 --- a/assets/js/6e1a9721.3ffaf0d0.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunklangflow_docs=self.webpackChunklangflow_docs||[]).push([[321],{7685:(e,t,n)=>{n.d(t,{A:()=>s});const s=n.p+"assets/images/vector-store-document-ingestion-fce32e9be440846a2545397e3a18b7bf.png"},13533:(e,t,n)=>{n.d(t,{A:()=>s});const s=n.p+"assets/images/component-dataframe-operations-86f6e1111b6f414989aca7b5fe625830.png"},41502:(e,t,n)=>{n.d(t,{A:()=>s});const s=n.p+"assets/images/component-combine-text-a73b71c22cc8099bf2a9ba22170ea701.png"},45709:(e,t,n)=>{n.d(t,{A:()=>s});const s=n.p+"assets/images/component-data-to-dataframe-3e921379e4e86fedf0e34e3ffae46b51.png"},49823:(e,t,n)=>{n.d(t,{A:()=>s});const s=n.p+"assets/images/component-split-text-741a1ac37f9a2d6591ead075acc66b65.png"},59748:(e,t,n)=>{n.r(t),n.d(t,{CH:()=>h,assets:()=>c,chCodeConfig:()=>x,contentTitle:()=>l,default:()=>u,frontMatter:()=>o,metadata:()=>s,toc:()=>j});const s=JSON.parse('{"id":"Components/components-processing","title":"Processing","description":"Processing components process and transform data within a flow.","source":"@site/docs/Components/components-processing.md","sourceDirName":"Components","slug":"/components-processing","permalink":"/components-processing","draft":false,"unlisted":false,"tags":[],"version":"current","frontMatter":{"title":"Processing","slug":"/components-processing"},"sidebar":"docs","previous":{"title":"Models","permalink":"/components-models"},"next":{"title":"Prompts","permalink":"/components-prompts"}}');var r=n(74848),i=n(28453),d=n(24754),a=n(84443);const o={title:"Processing",slug:"/components-processing"},l=void 0,c={},h={annotations:d.hk,Code:d.Cy},x={staticMediaQuery:"not screen, (max-width: 768px)",lineNumbers:!0,showCopyButton:!0,themeName:"github-dark"},j=[{value:"Use a processing component in a flow",id:"use-a-processing-component-in-a-flow",level:2},{value:"Combine data",id:"combine-data",level:2},{value:"Inputs",id:"inputs",level:3},{value:"Outputs",id:"outputs",level:3},{value:"Combine text",id:"combine-text",level:2},{value:"Inputs",id:"inputs-1",level:3},{value:"Outputs",id:"outputs-1",level:3},{value:"DataFrame operations",id:"dataframe-operations",level:2},{value:"Operations",id:"operations",level:3},{value:"Inputs",id:"inputs-2",level:3},{value:"Outputs",id:"outputs-2",level:3},{value:"Data to DataFrame",id:"data-to-dataframe",level:2},{value:"Inputs",id:"inputs-3",level:3},{value:"Outputs",id:"outputs-3",level:3},{value:"Filter data",id:"filter-data",level:2},{value:"Inputs",id:"inputs-4",level:3},{value:"Outputs",id:"outputs-4",level:3},{value:"Filter values",id:"filter-values",level:2},{value:"Inputs",id:"inputs-5",level:3},{value:"Outputs",id:"outputs-5",level:3},{value:"Lambda filter",id:"lambda-filter",level:2},{value:"Inputs",id:"inputs-6",level:3},{value:"Outputs",id:"outputs-6",level:3},{value:"LLM router",id:"llm-router",level:2},{value:"Inputs",id:"inputs-7",level:3},{value:"Outputs",id:"outputs-7",level:3},{value:"Message to data",id:"message-to-data",level:2},{value:"Inputs",id:"inputs-8",level:3},{value:"Outputs",id:"outputs-8",level:3},{value:"Parser",id:"parser",level:2},{value:"Inputs",id:"inputs-9",level:3},{value:"Outputs",id:"outputs-9",level:3},{value:"Split text",id:"split-text",level:2},{value:"Inputs",id:"inputs-10",level:3},{value:"Outputs",id:"outputs-10",level:3},{value:"Update data",id:"update-data",level:2},{value:"Inputs",id:"inputs-11",level:3},{value:"Outputs",id:"outputs-11",level:3},{value:"Legacy components",id:"legacy-components",level:2},{value:"Alter metadata",id:"alter-metadata",level:3},{value:"Inputs",id:"inputs-12",level:4},{value:"Outputs",id:"outputs-12",level:4},{value:"Create data",id:"create-data",level:3},{value:"Inputs",id:"inputs-13",level:4},{value:"Outputs",id:"outputs-13",level:4},{value:"Data to message",id:"data-to-message",level:3},{value:"Inputs",id:"inputs-14",level:4},{value:"Outputs",id:"outputs-14",level:4},{value:"Parse DataFrame",id:"parse-dataframe",level:3},{value:"Inputs",id:"inputs-15",level:4},{value:"Outputs",id:"outputs-15",level:4},{value:"Parse JSON",id:"parse-json",level:3},{value:"Inputs",id:"inputs-16",level:4},{value:"Outputs",id:"outputs-16",level:4},{value:"Select data",id:"select-data",level:3},{value:"Inputs",id:"inputs-17",level:4},{value:"Outputs",id:"outputs-17",level:4}];function p(e){const t={a:"a",admonition:"admonition",code:"code",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",...(0,i.R)(),...e.components};return h||m("CH",!1),h.Code||m("CH.Code",!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."}),"\n",(0,r.jsx)(t.h2,{id:"use-a-processing-component-in-a-flow",children:"Use a processing component in a flow"}),"\n",(0,r.jsxs)(t.p,{children:["The ",(0,r.jsx)(t.strong,{children:"Split Text"})," processing component in this flow splits the incoming ",(0,r.jsx)(t.a,{href:"/concepts-objects",children:"Data"})," into chunks to be embedded into the vector store component."]}),"\n",(0,r.jsx)(t.p,{children:"The component offers control over chunk size, overlap, and separator, which affect context and granularity in vector store retrieval results."}),"\n",(0,r.jsx)(t.p,{children:(0,r.jsx)(t.img,{alt:"A vector store ingesting documents",src:n(7685).A+"",width:"1804",height:"1546"})}),"\n",(0,r.jsx)(t.h2,{id:"combine-data",children:"Combine data"}),"\n",(0,r.jsx)(t.admonition,{type:"important",children:(0,r.jsxs)(t.p,{children:["Prior to Langflow version 1.1.3, this component was named ",(0,r.jsx)(t.strong,{children:"Merge Data"}),"."]})}),"\n",(0,r.jsxs)(t.p,{children:["This component combines multiple data sources into a single unified ",(0,r.jsx)(t.a,{href:"/concepts-objects#data-object",children:"Data"})," object."]}),"\n",(0,r.jsx)(t.p,{children:"The component iterates through the input list of data objects, merging them into a single data object. If the input list is empty, it returns an empty data object. If there's only one input data object, it returns that object unchanged. The merging process uses the addition operator to combine data objects."}),"\n",(0,r.jsx)(t.h3,{id:"inputs",children:"Inputs"}),"\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.jsx)(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:"A list of data objects to be merged."})]})})]}),"\n",(0,r.jsx)(t.h3,{id:"outputs",children:"Outputs"}),"\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.jsx)(t.tbody,{children:(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"merged_data"}),(0,r.jsx)(t.td,{children:"Merged Data"}),(0,r.jsxs)(t.td,{children:["A single ",(0,r.jsx)(t.a,{href:"/concepts-objects#data-object",children:"Data"})," object containing the combined information from all input data objects."]})]})})]}),"\n",(0,r.jsx)(t.h2,{id:"combine-text",children:"Combine text"}),"\n",(0,r.jsx)(t.p,{children:"This component concatenates two text sources into a single text chunk using a specified delimiter."}),"\n",(0,r.jsxs)(t.ol,{children:["\n",(0,r.jsxs)(t.li,{children:["To use this component in a flow, connect two components that output ",(0,r.jsx)(t.a,{href:"/concepts-objects#message-object",children:"Messages"})," to the ",(0,r.jsx)(t.strong,{children:"Combine Text"})," component's ",(0,r.jsx)(t.strong,{children:"First Text"})," and ",(0,r.jsx)(t.strong,{children:"Second Text"})," inputs.\nThis example uses two ",(0,r.jsx)(t.strong,{children:"Text Input"})," components."]}),"\n"]}),"\n",(0,r.jsx)(t.p,{children:(0,r.jsx)(t.img,{alt:"Combine text component",src:n(41502).A+"",width:"1148",height:"675"})}),"\n",(0,r.jsxs)(t.ol,{start:"2",children:["\n",(0,r.jsxs)(t.li,{children:["In the ",(0,r.jsx)(t.strong,{children:"Combine Text"})," component, in the ",(0,r.jsx)(t.strong,{children:"Text"})," fields of both ",(0,r.jsx)(t.strong,{children:"Text Input"})," components, enter some text to combine."]}),"\n",(0,r.jsxs)(t.li,{children:["In the ",(0,r.jsx)(t.strong,{children:"Combine Text"})," component, enter an optional ",(0,r.jsx)(t.strong,{children:"Delimiter"})," value.\nThe delimiter character separates the combined texts.\nThis example uses ",(0,r.jsx)(t.code,{children:"\\n\\n **end first text** \\n\\n **start second text** \\n\\n"})," to label the texts and create newlines between them."]}),"\n",(0,r.jsxs)(t.li,{children:["Connect a ",(0,r.jsx)(t.strong,{children:"Chat Output"})," component to view the text combination."]}),"\n",(0,r.jsxs)(t.li,{children:["Click ",(0,r.jsx)(t.strong,{children:"Playground"}),", and then click ",(0,r.jsx)(t.strong,{children:"Run Flow"}),".\nThe combined text appears in the ",(0,r.jsx)(t.strong,{children:"Playground"}),"."]}),"\n"]}),"\n",(0,r.jsx)(h.Code,{codeConfig:x,northPanel:{tabs:[""],active:"",heightRatio:1},files:[{name:"",focus:"",code:{lines:[{tokens:[{content:"This is the first text. Let's combine text!",props:{}}]},{tokens:[{content:"end first text",props:{}}]},{tokens:[{content:"start second text",props:{}}]},{tokens:[{content:"Here's the second part. We'll see how combining text works.",props:{}}]}],lang:"text"},annotations:[]}]}),"\n",(0,r.jsx)(t.h3,{id:"inputs-1",children:"Inputs"}),"\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:"first_text"}),(0,r.jsx)(t.td,{children:"First Text"}),(0,r.jsx)(t.td,{children:"The first text input to concatenate."})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"second_text"}),(0,r.jsx)(t.td,{children:"Second Text"}),(0,r.jsx)(t.td,{children:"The second text input to concatenate."})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"delimiter"}),(0,r.jsx)(t.td,{children:"Delimiter"}),(0,r.jsx)(t.td,{children:"A string used to separate the two text inputs. Defaults to a space."})]})]})]}),"\n",(0,r.jsx)(t.h3,{id:"outputs-1",children:"Outputs"}),"\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.jsx)(t.tbody,{children:(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"message"}),(0,r.jsx)(t.td,{children:"Message"}),(0,r.jsxs)(t.td,{children:["A ",(0,r.jsx)(t.a,{href:"/concepts-objects#message-object",children:"Message"})," object containing the combined text."]})]})})]}),"\n",(0,r.jsx)(t.h2,{id:"dataframe-operations",children:"DataFrame operations"}),"\n",(0,r.jsxs)(t.p,{children:["This component performs operations on ",(0,r.jsx)(t.a,{href:"https://pandas.pydata.org/docs/reference/api/pandas.DataFrame.html",children:"DataFrame"})," rows and columns."]}),"\n",(0,r.jsxs)(t.p,{children:["To use this component in a flow, connect a component that outputs ",(0,r.jsx)(t.a,{href:"/concepts-objects#dataframe-object",children:"DataFrame"})," to the ",(0,r.jsx)(t.strong,{children:"DataFrame Operations"})," component."]}),"\n",(0,r.jsxs)(t.p,{children:["This example fetches JSON data from an API. The ",(0,r.jsx)(t.strong,{children:"Lambda filter"})," component extracts and flattens the results into a tabular DataFrame. The ",(0,r.jsx)(t.strong,{children:"DataFrame Operations"})," component can then work with the retrieved data."]}),"\n",(0,r.jsx)(t.p,{children:(0,r.jsx)(t.img,{alt:"Dataframe operations with flattened dataframe",src:n(13533).A+"",width:"983",height:"696"})}),"\n",(0,r.jsxs)(t.ol,{children:["\n",(0,r.jsxs)(t.li,{children:["The ",(0,r.jsx)(t.strong,{children:"API Request"})," component retrieves data with only ",(0,r.jsx)(t.code,{children:"source"})," and ",(0,r.jsx)(t.code,{children:"result"})," fields.\nFor this example, the desired data is nested within the ",(0,r.jsx)(t.code,{children:"result"})," field."]}),"\n",(0,r.jsxs)(t.li,{children:["Connect a ",(0,r.jsx)(t.strong,{children:"Lambda Filter"})," to the API request component, and a ",(0,r.jsx)(t.strong,{children:"Language model"})," to the ",(0,r.jsx)(t.strong,{children:"Lambda Filter"}),". This example connects a ",(0,r.jsx)(t.strong,{children:"Groq"})," model component."]}),"\n",(0,r.jsxs)(t.li,{children:["In the ",(0,r.jsx)(t.strong,{children:"Groq"})," model component, add your ",(0,r.jsx)(t.strong,{children:"Groq"})," API key."]}),"\n",(0,r.jsxs)(t.li,{children:["To filter the data, in the ",(0,r.jsx)(t.strong,{children:"Lambda filter"})," component, in the ",(0,r.jsx)(t.strong,{children:"Instructions"})," field, use natural language to describe how the data should be filtered.\nFor this example, enter:"]}),"\n"]}),"\n",(0,r.jsx)(h.Code,{codeConfig:x,northPanel:{tabs:[""],active:"",heightRatio:1},files:[{name:"",focus:"",code:{lines:[{tokens:[{content:"I want to explode the result column out into a Data object",props:{}}]}],lang:"text"},annotations:[]}]}),"\n",(0,r.jsx)(t.admonition,{type:"tip",children:(0,r.jsxs)(t.p,{children:["Avoid punctuation in the ",(0,r.jsx)(t.strong,{children:"Instructions"})," field, as it can cause errors."]})}),"\n",(0,r.jsxs)(t.ol,{start:"5",children:["\n",(0,r.jsxs)(t.li,{children:["To run the flow, in the ",(0,r.jsx)(t.strong,{children:"Lambda Filter"})," component, click ",(0,r.jsx)(a.A,{name:"Play","aria-label":"Play icon"}),"."]}),"\n",(0,r.jsxs)(t.li,{children:["To inspect the filtered data, in the ",(0,r.jsx)(t.strong,{children:"Lambda Filter"})," component, click ",(0,r.jsx)(a.A,{name:"TextSearch","aria-label":"Inspect icon"}),".\nThe result is a structured DataFrame."]}),"\n"]}),"\n",(0,r.jsx)(h.Code,{codeConfig:x,northPanel:{tabs:[""],active:"",heightRatio:1},files:[{name:"",focus:"",code:{lines:[{tokens:[{content:"id | name | company | username | email | address | zip",props:{}}]},{tokens:[{content:"---|------------------|----------------------|-----------------|------------------------------------|-------------------|-------",props:{}}]},{tokens:[{content:"1 | Emily Johnson | ABC Corporation | emily_johnson | emily.johnson@abccorporation.com | 123 Main St | 12345",props:{}}]},{tokens:[{content:"2 | Michael Williams | XYZ Corp | michael_williams| michael.williams@xyzcorp.com | 456 Elm Ave | 67890",props:{}}]}],lang:"text"},annotations:[]}]}),"\n",(0,r.jsxs)(t.ol,{start:"7",children:["\n",(0,r.jsxs)(t.li,{children:["Add the ",(0,r.jsx)(t.strong,{children:"DataFrame Operations"})," component, and a ",(0,r.jsx)(t.strong,{children:"Chat Output"})," component to the flow."]}),"\n",(0,r.jsxs)(t.li,{children:["In the ",(0,r.jsx)(t.strong,{children:"DataFrame Operations"})," component, in the ",(0,r.jsx)(t.strong,{children:"Operation"})," field, select ",(0,r.jsx)(t.strong,{children:"Filter"}),"."]}),"\n",(0,r.jsxs)(t.li,{children:["To apply a filter, in the ",(0,r.jsx)(t.strong,{children:"Column Name"})," field, enter a column to filter on. This example filters by ",(0,r.jsx)(t.code,{children:"name"}),"."]}),"\n",(0,r.jsxs)(t.li,{children:["Click ",(0,r.jsx)(t.strong,{children:"Playground"}),", and then click ",(0,r.jsx)(t.strong,{children:"Run Flow"}),".\nThe flow extracts the values from the ",(0,r.jsx)(t.code,{children:"name"})," column."]}),"\n"]}),"\n",(0,r.jsx)(h.Code,{codeConfig:x,northPanel:{tabs:[""],active:"",heightRatio:1},files:[{name:"",focus:"",code:{lines:[{tokens:[{content:"name",props:{}}]},{tokens:[{content:"Emily Johnson",props:{}}]},{tokens:[{content:"Michael Williams",props:{}}]},{tokens:[{content:"John Smith",props:{}}]},{tokens:[{content:"...",props:{}}]}],lang:"text"},annotations:[]}]}),"\n",(0,r.jsx)(t.h3,{id:"operations",children:"Operations"}),"\n",(0,r.jsxs)(t.p,{children:["This component can perform the following operations on Pandas ",(0,r.jsx)(t.a,{href:"https://pandas.pydata.org/docs/reference/api/pandas.DataFrame.html",children:"DataFrame"}),"."]}),"\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:"Operation"}),(0,r.jsx)(t.th,{children:"Description"}),(0,r.jsx)(t.th,{children:"Required Inputs"})]})}),(0,r.jsxs)(t.tbody,{children:[(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"Add Column"}),(0,r.jsx)(t.td,{children:"Adds a new column with a constant value"}),(0,r.jsx)(t.td,{children:"new_column_name, new_column_value"})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"Drop Column"}),(0,r.jsx)(t.td,{children:"Removes a specified column"}),(0,r.jsx)(t.td,{children:"column_name"})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"Filter"}),(0,r.jsx)(t.td,{children:"Filters rows based on column value"}),(0,r.jsx)(t.td,{children:"column_name, filter_value"})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"Head"}),(0,r.jsx)(t.td,{children:"Returns first n rows"}),(0,r.jsx)(t.td,{children:"num_rows"})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"Rename Column"}),(0,r.jsx)(t.td,{children:"Renames an existing column"}),(0,r.jsx)(t.td,{children:"column_name, new_column_name"})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"Replace Value"}),(0,r.jsx)(t.td,{children:"Replaces values in a column"}),(0,r.jsx)(t.td,{children:"column_name, replace_value, replacement_value"})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"Select Columns"}),(0,r.jsx)(t.td,{children:"Selects specific columns"}),(0,r.jsx)(t.td,{children:"columns_to_select"})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"Sort"}),(0,r.jsx)(t.td,{children:"Sorts DataFrame by column"}),(0,r.jsx)(t.td,{children:"column_name, ascending"})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"Tail"}),(0,r.jsx)(t.td,{children:"Returns last n rows"}),(0,r.jsx)(t.td,{children:"num_rows"})]})]})]}),"\n",(0,r.jsx)(t.h3,{id:"inputs-2",children:"Inputs"}),"\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:"df"}),(0,r.jsx)(t.td,{children:"DataFrame"}),(0,r.jsx)(t.td,{children:"The input DataFrame 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.jsx)(t.td,{children:"Select the DataFrame operation to perform. Options: Add Column, Drop Column, Filter, Head, Rename Column, Replace Value, Select Columns, Sort, Tail"})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"column_name"}),(0,r.jsx)(t.td,{children:"Column Name"}),(0,r.jsx)(t.td,{children:"The column name to use for the operation."})]}),(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:"The value to filter rows by."})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"ascending"}),(0,r.jsx)(t.td,{children:"Sort Ascending"}),(0,r.jsx)(t.td,{children:"Whether to sort in ascending order."})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"new_column_name"}),(0,r.jsx)(t.td,{children:"New Column Name"}),(0,r.jsx)(t.td,{children:"The new column name when renaming or adding a column."})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"new_column_value"}),(0,r.jsx)(t.td,{children:"New Column Value"}),(0,r.jsx)(t.td,{children:"The value to populate the new column with."})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"columns_to_select"}),(0,r.jsx)(t.td,{children:"Columns to Select"}),(0,r.jsx)(t.td,{children:"List of column names to select."})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"num_rows"}),(0,r.jsx)(t.td,{children:"Number of Rows"}),(0,r.jsx)(t.td,{children:"Number of rows to return (for head/tail). Default: 5"})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"replace_value"}),(0,r.jsx)(t.td,{children:"Value to Replace"}),(0,r.jsx)(t.td,{children:"The value to replace in the column."})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"replacement_value"}),(0,r.jsx)(t.td,{children:"Replacement Value"}),(0,r.jsx)(t.td,{children:"The value to replace with."})]})]})]}),"\n",(0,r.jsx)(t.h3,{id:"outputs-2",children:"Outputs"}),"\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.jsx)(t.tbody,{children:(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"output"}),(0,r.jsx)(t.td,{children:"DataFrame"}),(0,r.jsx)(t.td,{children:"The resulting DataFrame after the operation."})]})})]}),"\n",(0,r.jsx)(t.h2,{id:"data-to-dataframe",children:"Data to DataFrame"}),"\n",(0,r.jsxs)(t.p,{children:["This component converts one or multiple ",(0,r.jsx)(t.a,{href:"/concepts-objects#data-object",children:"Data"})," objects into a ",(0,r.jsx)(t.a,{href:"/concepts-objects#dataframe-object",children:"DataFrame"}),". Each Data object corresponds to one row in the resulting DataFrame. Fields 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 'text' column."]}),"\n",(0,r.jsxs)(t.ol,{children:["\n",(0,r.jsxs)(t.li,{children:["To use this component in a flow, connect a component that outputs ",(0,r.jsx)(t.a,{href:"/concepts-objects#data-object",children:"Data"})," to the ",(0,r.jsx)(t.strong,{children:"Data to Dataframe"})," component's input.\nThis example connects a ",(0,r.jsx)(t.strong,{children:"Webhook"})," component to convert ",(0,r.jsx)(t.code,{children:"text"})," and ",(0,r.jsx)(t.code,{children:"data"})," into a DataFrame."]}),"\n",(0,r.jsxs)(t.li,{children:["To view the flow's output, connect a ",(0,r.jsx)(t.strong,{children:"Chat Output"})," component to the ",(0,r.jsx)(t.strong,{children:"Data to Dataframe"})," component."]}),"\n"]}),"\n",(0,r.jsx)(t.p,{children:(0,r.jsx)(t.img,{alt:"A webhook and data to dataframe",src:n(45709).A+"",width:"1221",height:"468"})}),"\n",(0,r.jsxs)(t.ol,{start:"3",children:["\n",(0,r.jsxs)(t.li,{children:["Send a POST request to the ",(0,r.jsx)(t.strong,{children:"Webhook"})," containing your JSON data.\nReplace ",(0,r.jsx)(t.code,{children:"YOUR_FLOW_ID"})," with your flow ID.\nThis example uses the default Langflow server address."]}),"\n"]}),"\n",(0,r.jsx)(h.Code,{codeConfig:x,northPanel:{tabs:[""],active:"",heightRatio:1},files:[{name:"",focus:"",code:{lines:[{tokens:[{content:'curl -X POST "http://127.0.0.1:7860/api/v1/webhook/YOUR_FLOW_ID" \\',props:{}}]},{tokens:[{content:"-H 'Content-Type: application/json' \\",props:{}}]},{tokens:[{content:"-d '{",props:{}}]},{tokens:[{content:' "text": "Alex Cruz - Employee Profile",',props:{}}]},{tokens:[{content:' "data": {',props:{}}]},{tokens:[{content:' "Name": "Alex Cruz",',props:{}}]},{tokens:[{content:' "Role": "Developer",',props:{}}]},{tokens:[{content:' "Department": "Engineering"',props:{}}]},{tokens:[{content:" }",props:{}}]},{tokens:[{content:"}'",props:{}}]}],lang:"text"},annotations:[]}]}),"\n",(0,r.jsxs)(t.ol,{start:"4",children:["\n",(0,r.jsxs)(t.li,{children:["In the ",(0,r.jsx)(t.strong,{children:"Playground"}),", view the output of your flow.\nThe ",(0,r.jsx)(t.strong,{children:"Data to DataFrame"})," component converts the webhook request into a ",(0,r.jsx)(t.code,{children:"DataFrame"}),", with ",(0,r.jsx)(t.code,{children:"text"})," and ",(0,r.jsx)(t.code,{children:"data"})," fields as columns."]}),"\n"]}),"\n",(0,r.jsx)(h.Code,{codeConfig:x,northPanel:{tabs:[""],active:"",heightRatio:1},files:[{name:"",focus:"",code:{lines:[{tokens:[{content:"| text | data |",props:{}}]},{tokens:[{content:"|:-----------------------------|:------------------------------------------------------------------------|",props:{}}]},{tokens:[{content:"| Alex Cruz - Employee Profile | {'Name': 'Alex Cruz', 'Role': 'Developer', 'Department': 'Engineering'} |",props:{}}]}],lang:"text"},annotations:[]}]}),"\n",(0,r.jsxs)(t.ol,{start:"5",children:["\n",(0,r.jsx)(t.li,{children:"Send another employee data object."}),"\n"]}),"\n",(0,r.jsx)(h.Code,{codeConfig:x,northPanel:{tabs:[""],active:"",heightRatio:1},files:[{name:"",focus:"",code:{lines:[{tokens:[{content:'curl -X POST "http://127.0.0.1:7860/api/v1/webhook/YOUR_FLOW_ID" \\',props:{}}]},{tokens:[{content:"-H 'Content-Type: application/json' \\",props:{}}]},{tokens:[{content:"-d '{",props:{}}]},{tokens:[{content:' "text": "Kalani Smith - Employee Profile",',props:{}}]},{tokens:[{content:' "data": {',props:{}}]},{tokens:[{content:' "Name": "Kalani Smith",',props:{}}]},{tokens:[{content:' "Role": "Designer",',props:{}}]},{tokens:[{content:' "Department": "Design"',props:{}}]},{tokens:[{content:" }",props:{}}]},{tokens:[{content:"}'",props:{}}]}],lang:"text"},annotations:[]}]}),"\n",(0,r.jsxs)(t.ol,{start:"6",children:["\n",(0,r.jsxs)(t.li,{children:["In the ",(0,r.jsx)(t.strong,{children:"Playground"}),", this request is also converted to ",(0,r.jsx)(t.code,{children:"DataFrame"}),"."]}),"\n"]}),"\n",(0,r.jsx)(h.Code,{codeConfig:x,northPanel:{tabs:[""],active:"",heightRatio:1},files:[{name:"",focus:"",code:{lines:[{tokens:[{content:"| text | data |",props:{}}]},{tokens:[{content:"|:--------------------------------|:---------------------------------------------------------------------|",props:{}}]},{tokens:[{content:"| Kalani Smith - Employee Profile | {'Name': 'Kalani Smith', 'Role': 'Designer', 'Department': 'Design'} |",props:{}}]}],lang:"text"},annotations:[]}]}),"\n",(0,r.jsx)(t.h3,{id:"inputs-3",children:"Inputs"}),"\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.jsx)(t.tbody,{children:(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"data_list"}),(0,r.jsx)(t.td,{children:"Data or Data List"}),(0,r.jsx)(t.td,{children:"One or multiple Data objects to transform into a DataFrame."})]})})]}),"\n",(0,r.jsx)(t.h3,{id:"outputs-3",children:"Outputs"}),"\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.jsx)(t.tbody,{children:(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"dataframe"}),(0,r.jsx)(t.td,{children:"DataFrame"}),(0,r.jsx)(t.td,{children:"A DataFrame built from each Data object's fields plus a 'text' column."})]})})]}),"\n",(0,r.jsx)(t.h2,{id:"filter-data",children:"Filter data"}),"\n",(0,r.jsx)(t.admonition,{type:"important",children:(0,r.jsxs)(t.p,{children:["This component is in ",(0,r.jsx)(t.strong,{children:"Beta"})," as of Langflow version 1.1.3, and is not yet fully supported."]})}),"\n",(0,r.jsxs)(t.p,{children:["This component filters a ",(0,r.jsx)(t.a,{href:"/concepts-objects#data-object",children:"Data"})," object based on a list of keys."]}),"\n",(0,r.jsx)(t.h3,{id:"inputs-4",children:"Inputs"}),"\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:"Data object to filter."})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"filter_criteria"}),(0,r.jsx)(t.td,{children:"Filter Criteria"}),(0,r.jsx)(t.td,{children:"List of keys to filter by."})]})]})]}),"\n",(0,r.jsx)(t.h3,{id:"outputs-4",children:"Outputs"}),"\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.jsx)(t.tbody,{children:(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"filtered_data"}),(0,r.jsx)(t.td,{children:"Filtered Data"}),(0,r.jsxs)(t.td,{children:["A new ",(0,r.jsx)(t.a,{href:"/concepts-objects#data-object",children:"Data"})," object containing only the key-value pairs that match the filter criteria."]})]})})]}),"\n",(0,r.jsx)(t.h2,{id:"filter-values",children:"Filter values"}),"\n",(0,r.jsx)(t.admonition,{type:"important",children:(0,r.jsxs)(t.p,{children:["This component is in ",(0,r.jsx)(t.strong,{children:"Beta"})," as of Langflow version 1.1.3, and is not yet fully supported."]})}),"\n",(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."}),"\n",(0,r.jsx)(t.h3,{id:"inputs-5",children:"Inputs"}),"\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.jsx)(t.td,{children:"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:"The key to filter on, for example, 'route'."})]}),(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:"The value to filter by, for example, 'CMIP'."})]}),(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:"The operator to apply for comparing the values."})]})]})]}),"\n",(0,r.jsx)(t.h3,{id:"outputs-5",children:"Outputs"}),"\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.jsx)(t.tbody,{children:(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:"The resulting list of filtered data items."})]})})]}),"\n",(0,r.jsx)(t.h2,{id:"lambda-filter",children:"Lambda filter"}),"\n",(0,r.jsx)(t.p,{children:"This component uses an LLM to generate a Lambda function for filtering or transforming structured data."}),"\n",(0,r.jsxs)(t.p,{children:["To use the ",(0,r.jsx)(t.strong,{children:"Lambda filter"})," component, you must connect it to a ",(0,r.jsx)(t.a,{href:"/components-models#language-model",children:"Language Model"})," component, which the component uses to generate a function based on the natural language instructions in the ",(0,r.jsx)(t.strong,{children:"Instructions"})," field."]}),"\n",(0,r.jsxs)(t.p,{children:["This example gets JSON data from the ",(0,r.jsx)(t.code,{children:"https://jsonplaceholder.typicode.com/users"})," API endpoint.\nThe ",(0,r.jsx)(t.strong,{children:"Instructions"})," field in the ",(0,r.jsx)(t.strong,{children:"Lambda filter"})," component specifies the task ",(0,r.jsx)(t.code,{children:"extract emails"}),".\nThe connected LLM creates a filter based on the instructions, and successfully extracts a list of email addresses from the JSON data."]}),"\n",(0,r.jsx)(t.p,{children:(0,r.jsx)(t.img,{src:n(66539).A+"",width:"1742",height:"1622"})}),"\n",(0,r.jsx)(t.h3,{id:"inputs-6",children:"Inputs"}),"\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:"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:["The connection port for a ",(0,r.jsx)(t.a,{href:"/components-models",children:"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.jsxs)(t.td,{children:["Natural language instructions for how to filter or transform the data using a Lambda function, such as ",(0,r.jsx)(t.code,{children:"Filter the data to only include items where the 'status' is 'active'."})]})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"sample_size"}),(0,r.jsx)(t.td,{children:"Sample Size"}),(0,r.jsx)(t.td,{children:"For large datasets, the number of characters to sample from the dataset head and tail."})]}),(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:['The number of characters for the data to be considered "large", which triggers sampling by the ',(0,r.jsx)(t.code,{children:"sample_size"})," value."]})]})]})]}),"\n",(0,r.jsx)(t.h3,{id:"outputs-6",children:"Outputs"}),"\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:"filtered_data"}),(0,r.jsx)(t.td,{children:"Filtered Data"}),(0,r.jsxs)(t.td,{children:["The filtered or transformed ",(0,r.jsx)(t.a,{href:"/concepts-objects#data-object",children:"Data object"}),"."]})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"dataframe"}),(0,r.jsx)(t.td,{children:"DataFrame"}),(0,r.jsxs)(t.td,{children:["The filtered data as a ",(0,r.jsx)(t.a,{href:"/concepts-objects#dataframe-object",children:"DataFrame"}),"."]})]})]})]}),"\n",(0,r.jsx)(t.h2,{id:"llm-router",children:"LLM router"}),"\n",(0,r.jsx)(t.p,{children:"This component routes requests to the most appropriate LLM based on OpenRouter model specifications."}),"\n",(0,r.jsx)(t.h3,{id:"inputs-7",children:"Inputs"}),"\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:"models"}),(0,r.jsx)(t.td,{children:"Language Models"}),(0,r.jsx)(t.td,{children:"List of LLMs to route between"})]}),(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:"The input message to be routed"})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"judge_llm"}),(0,r.jsx)(t.td,{children:"Judge LLM"}),(0,r.jsx)(t.td,{children:"LLM that will evaluate and select the most appropriate model"})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"optimization"}),(0,r.jsx)(t.td,{children:"Optimization"}),(0,r.jsx)(t.td,{children:"Optimization preference (quality/speed/cost/balanced)"})]})]})]}),"\n",(0,r.jsx)(t.h3,{id:"outputs-7",children:"Outputs"}),"\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:"output"}),(0,r.jsx)(t.td,{children:"Output"}),(0,r.jsx)(t.td,{children:"The response from the selected model"})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"selected_model"}),(0,r.jsx)(t.td,{children:"Selected Model"}),(0,r.jsx)(t.td,{children:"Name of the chosen model"})]})]})]}),"\n",(0,r.jsx)(t.h2,{id:"message-to-data",children:"Message to data"}),"\n",(0,r.jsxs)(t.p,{children:["This component converts ",(0,r.jsx)(t.a,{href:"/concepts-objects#message-object",children:"Message"})," objects to ",(0,r.jsx)(t.a,{href:"/concepts-objects#data-object",children:"Data"})," objects."]}),"\n",(0,r.jsx)(t.h3,{id:"inputs-8",children:"Inputs"}),"\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.jsx)(t.tbody,{children:(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"message"}),(0,r.jsx)(t.td,{children:"Message"}),(0,r.jsxs)(t.td,{children:["The ",(0,r.jsx)(t.a,{href:"/concepts-objects#message-object",children:"Message"})," object to convert to a ",(0,r.jsx)(t.a,{href:"/concepts-objects#data-object",children:"Data"})," object."]})]})})]}),"\n",(0,r.jsx)(t.h3,{id:"outputs-8",children:"Outputs"}),"\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.jsx)(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:["The converted ",(0,r.jsx)(t.a,{href:"/concepts-objects#data-object",children:"Data"})," object."]})]})})]}),"\n",(0,r.jsx)(t.h2,{id:"parser",children:"Parser"}),"\n",(0,r.jsxs)(t.p,{children:["This component formats ",(0,r.jsx)(t.code,{children:"DataFrame"})," or ",(0,r.jsx)(t.code,{children:"Data"})," objects into text using templates, with an option to convert inputs directly to strings using ",(0,r.jsx)(t.code,{children:"stringify"}),"."]}),"\n",(0,r.jsxs)(t.p,{children:["To use this component, create variables for values in the ",(0,r.jsx)(t.code,{children:"template"})," the same way you would in a ",(0,r.jsx)(t.a,{href:"/components-prompts",children:"Prompt"})," component. For ",(0,r.jsx)(t.code,{children:"DataFrames"}),", use column names, for example ",(0,r.jsx)(t.code,{children:"Name: {Name}"}),". For ",(0,r.jsx)(t.code,{children:"Data"})," objects, use ",(0,r.jsx)(t.code,{children:"{text}"}),"."]}),"\n",(0,r.jsxs)(t.p,{children:["To use the ",(0,r.jsx)(t.strong,{children:"Parser"})," component with a ",(0,r.jsx)(t.strong,{children:"Structured Output"})," component, do the following:"]}),"\n",(0,r.jsxs)(t.ol,{children:["\n",(0,r.jsxs)(t.li,{children:["Connect a ",(0,r.jsx)(t.strong,{children:"Structured Output"})," component's ",(0,r.jsx)(t.strong,{children:"DataFrame"})," output to the ",(0,r.jsx)(t.strong,{children:"Parser"})," component's ",(0,r.jsx)(t.strong,{children:"DataFrame"})," input."]}),"\n",(0,r.jsxs)(t.li,{children:["Connect the ",(0,r.jsx)(t.strong,{children:"File"})," component to the ",(0,r.jsx)(t.strong,{children:"Structured Output"})," component's ",(0,r.jsx)(t.strong,{children:"Message"})," input."]}),"\n",(0,r.jsxs)(t.li,{children:["Connect the ",(0,r.jsx)(t.strong,{children:"OpenAI"})," model component's ",(0,r.jsx)(t.strong,{children:"Language Model"})," output to the ",(0,r.jsx)(t.strong,{children:"Structured Output"})," component's ",(0,r.jsx)(t.strong,{children:"Language Model"})," input."]}),"\n"]}),"\n",(0,r.jsx)(t.p,{children:"The flow looks like this:"}),"\n",(0,r.jsx)(t.p,{children:(0,r.jsx)(t.img,{alt:"A parser component connected to OpenAI and structured output",src:n(96218).A+"",width:"2300",height:"1436"})}),"\n",(0,r.jsxs)(t.ol,{start:"4",children:["\n",(0,r.jsxs)(t.li,{children:["In the ",(0,r.jsx)(t.strong,{children:"Structured Output"})," component, click ",(0,r.jsx)(t.strong,{children:"Open Table"}),".\nThis opens a pane for structuring your table.\nThe table contains the rows ",(0,r.jsx)(t.strong,{children:"Name"}),", ",(0,r.jsx)(t.strong,{children:"Description"}),", ",(0,r.jsx)(t.strong,{children:"Type"}),", and ",(0,r.jsx)(t.strong,{children:"Multiple"}),"."]}),"\n",(0,r.jsxs)(t.li,{children:["Create a table that maps to the data you're loading from the ",(0,r.jsx)(t.strong,{children:"File"})," loader.\nFor example, to create a table for employees, you might have the rows ",(0,r.jsx)(t.code,{children:"id"}),", ",(0,r.jsx)(t.code,{children:"name"}),", and ",(0,r.jsx)(t.code,{children:"email"}),", all of type ",(0,r.jsx)(t.code,{children:"string"}),"."]}),"\n",(0,r.jsxs)(t.li,{children:["In the ",(0,r.jsx)(t.strong,{children:"Template"})," field of the ",(0,r.jsx)(t.strong,{children:"Parser"})," component, enter a template for parsing the ",(0,r.jsx)(t.strong,{children:"Structured Output"})," component's DataFrame output into structured text.\nCreate variables for values in the ",(0,r.jsx)(t.code,{children:"template"})," the same way you would in a ",(0,r.jsx)(t.a,{href:"/components-prompts",children:"Prompt"})," component.\nFor example, to present a table of employees in Markdown:"]}),"\n"]}),"\n",(0,r.jsx)(h.Code,{codeConfig:x,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:[]}]}),"\n",(0,r.jsxs)(t.ol,{start:"7",children:["\n",(0,r.jsxs)(t.li,{children:["To run the flow, in the ",(0,r.jsx)(t.strong,{children:"Parser"})," component, click ",(0,r.jsx)(a.A,{name:"Play","aria-label":"Play icon"}),"."]}),"\n",(0,r.jsxs)(t.li,{children:["To view your parsed text, in the ",(0,r.jsx)(t.strong,{children:"Parser"})," component, click ",(0,r.jsx)(a.A,{name:"TextSearch","aria-label":"Inspect icon"}),"."]}),"\n",(0,r.jsxs)(t.li,{children:["Optionally, connect a ",(0,r.jsx)(t.strong,{children:"Chat Output"})," component, and open the ",(0,r.jsx)(t.strong,{children:"Playground"})," to see the output."]}),"\n"]}),"\n",(0,r.jsxs)(t.p,{children:["For an additional example of using the ",(0,r.jsx)(t.strong,{children:"Parser"})," component to format a DataFrame from a ",(0,r.jsx)(t.strong,{children:"Structured Output"})," component, see the ",(0,r.jsx)(t.strong,{children:"Market Research"})," template flow."]}),"\n",(0,r.jsx)(t.h3,{id:"inputs-9",children:"Inputs"}),"\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:"mode"}),(0,r.jsx)(t.td,{children:"Mode"}),(0,r.jsx)(t.td,{children:'Tab selection between "Parser" and "Stringify" modes. "Stringify" converts input to a string instead of using a template.'})]}),(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:["Template for formatting using variables in curly brackets. For DataFrames, use column names, such as ",(0,r.jsx)(t.code,{children:"Name: {Name}"}),". For Data objects, use ",(0,r.jsx)(t.code,{children:"{text}"}),"."]})]}),(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.jsx)(t.td,{children:"The input to parse - accepts either a DataFrame or Data object."})]}),(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:"String used to separate rows/items. Default: newline."})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"clean_data"}),(0,r.jsx)(t.td,{children:"Clean Data"}),(0,r.jsx)(t.td,{children:"When stringify is enabled, cleans data by removing empty rows and lines."})]})]})]}),"\n",(0,r.jsx)(t.h3,{id:"outputs-9",children:"Outputs"}),"\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.jsx)(t.tbody,{children:(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"parsed_text"}),(0,r.jsx)(t.td,{children:"Parsed Text"}),(0,r.jsxs)(t.td,{children:["The resulting formatted text as a ",(0,r.jsx)(t.a,{href:"/concepts-objects#message-object",children:"Message"})," object."]})]})})]}),"\n",(0,r.jsx)(t.h2,{id:"split-text",children:"Split text"}),"\n",(0,r.jsx)(t.p,{children:"This component splits text into chunks based on specified criteria. It's ideal for chunking data to be tokenized and embedded into vector databases."}),"\n",(0,r.jsxs)(t.p,{children:["The ",(0,r.jsx)(t.strong,{children:"Split Text"})," component outputs ",(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 individual text chunks.\nThe ",(0,r.jsx)(t.strong,{children:"DataFrame"})," output returns a structured data format, with additional ",(0,r.jsx)(t.code,{children:"text"})," and ",(0,r.jsx)(t.code,{children:"metadata"})," columns applied."]}),"\n",(0,r.jsxs)(t.ol,{children:["\n",(0,r.jsxs)(t.li,{children:["To use this component in a flow, connect a component that outputs ",(0,r.jsx)(t.a,{href:"/concepts-objects",children:"Data or DataFrame"})," to the ",(0,r.jsx)(t.strong,{children:"Split Text"})," component's ",(0,r.jsx)(t.strong,{children:"Data"})," port.\nThis example uses the ",(0,r.jsx)(t.strong,{children:"URL"})," component, which is fetching JSON placeholder data."]}),"\n"]}),"\n",(0,r.jsx)(t.p,{children:(0,r.jsx)(t.img,{alt:"Split text component and chroma-db",src:n(49823).A+"",width:"2198",height:"1626"})}),"\n",(0,r.jsxs)(t.ol,{start:"2",children:["\n",(0,r.jsxs)(t.li,{children:["In the ",(0,r.jsx)(t.strong,{children:"Split Text"})," component, define your data splitting parameters."]}),"\n"]}),"\n",(0,r.jsxs)(t.p,{children:["This example splits incoming JSON data at the separator ",(0,r.jsx)(t.code,{children:"},"}),", so each chunk contains one JSON object."]}),"\n",(0,r.jsxs)(t.p,{children:["The order of precedence is ",(0,r.jsx)(t.strong,{children:"Separator"}),", then ",(0,r.jsx)(t.strong,{children:"Chunk Size"}),", and then ",(0,r.jsx)(t.strong,{children:"Chunk Overlap"}),".\nIf any segment after separator splitting is longer than ",(0,r.jsx)(t.code,{children:"chunk_size"}),", it is split again to fit within ",(0,r.jsx)(t.code,{children:"chunk_size"}),"."]}),"\n",(0,r.jsxs)(t.p,{children:["After ",(0,r.jsx)(t.code,{children:"chunk_size"}),", ",(0,r.jsx)(t.strong,{children:"Chunk Overlap"})," is applied between chunks to maintain context."]}),"\n",(0,r.jsxs)(t.ol,{start:"3",children:["\n",(0,r.jsxs)(t.li,{children:["Connect a ",(0,r.jsx)(t.strong,{children:"Chat Output"})," component to the ",(0,r.jsx)(t.strong,{children:"Split Text"})," component's ",(0,r.jsx)(t.strong,{children:"DataFrame"})," output to view its output."]}),"\n",(0,r.jsxs)(t.li,{children:["Click ",(0,r.jsx)(t.strong,{children:"Playground"}),", and then click ",(0,r.jsx)(t.strong,{children:"Run Flow"}),".\nThe output contains a table of JSON objects split at ",(0,r.jsx)(t.code,{children:"},"}),"."]}),"\n"]}),"\n",(0,r.jsx)(h.Code,{codeConfig:x,northPanel:{tabs:[""],active:"",heightRatio:1},files:[{name:"",focus:"",code:{lines:[{tokens:[{content:"{",props:{}}]},{tokens:[{content:'"userId": 1,',props:{}}]},{tokens:[{content:'"id": 1,',props:{}}]},{tokens:[{content:'"title": "Introduction to Artificial Intelligence",',props:{}}]},{tokens:[{content:'"body": "Learn the basics of Artificial Intelligence and its applications in various industries.",',props:{}}]},{tokens:[{content:'"link": "https://example.com/article1",',props:{}}]},{tokens:[{content:'"comment_count": 8',props:{}}]},{tokens:[{content:"},",props:{}}]},{tokens:[{content:"{",props:{}}]},{tokens:[{content:'"userId": 2,',props:{}}]},{tokens:[{content:'"id": 2,',props:{}}]},{tokens:[{content:'"title": "Web Development with React",',props:{}}]},{tokens:[{content:'"body": "Build modern web applications using React.js and explore its powerful features.",',props:{}}]},{tokens:[{content:'"link": "https://example.com/article2",',props:{}}]},{tokens:[{content:'"comment_count": 12',props:{}}]},{tokens:[{content:"},",props:{}}]}],lang:"text"},annotations:[]}]}),"\n",(0,r.jsxs)(t.ol,{start:"5",children:["\n",(0,r.jsxs)(t.li,{children:["Clear the ",(0,r.jsx)(t.strong,{children:"Separator"})," field, and then run the flow again.\nInstead of JSON objects, the output contains 50-character lines of text with 10 characters of overlap."]}),"\n"]}),"\n",(0,r.jsx)(h.Code,{codeConfig:x,northPanel:{tabs:[""],active:"",heightRatio:1},files:[{name:"",focus:"",code:{lines:[{tokens:[{content:'First chunk: "title": "Introduction to Artificial Intelligence""',props:{}}]},{tokens:[{content:'Second chunk: "elligence", "body": "Learn the basics of Artif"',props:{}}]},{tokens:[{content:'Third chunk: "s of Artificial Intelligence and its applications"',props:{}}]}],lang:"text"},annotations:[]}]}),"\n",(0,r.jsx)(t.h3,{id:"inputs-10",children:"Inputs"}),"\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 Documents"}),(0,r.jsxs)(t.td,{children:["The data to split.The component accepts ",(0,r.jsx)(t.a,{href:"/concepts-objects#data-object",children:"Data"})," or ",(0,r.jsx)(t.a,{href:"/concepts-objects#dataframe-object",children:"DataFrame"})," objects."]})]}),(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:["The number of characters to overlap between chunks. 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:["The maximum number of characters in each chunk. Default: ",(0,r.jsx)(t.code,{children:"1000"}),"."]})]}),(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:["The character to split on. Default: ",(0,r.jsx)(t.code,{children:"newline"}),"."]})]}),(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:["The key to use for the text column (advanced). Default: ",(0,r.jsx)(t.code,{children:"text"}),"."]})]})]})]}),"\n",(0,r.jsx)(t.h3,{id:"outputs-10",children:"Outputs"}),"\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:"chunks"}),(0,r.jsx)(t.td,{children:"Chunks"}),(0,r.jsxs)(t.td,{children:["List of split text chunks as ",(0,r.jsx)(t.a,{href:"/concepts-objects#data-object",children:"Data"})," objects."]})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"dataframe"}),(0,r.jsx)(t.td,{children:"DataFrame"}),(0,r.jsxs)(t.td,{children:["List of split text chunks as ",(0,r.jsx)(t.a,{href:"/concepts-objects#dataframe-object",children:"DataFrame"})," objects."]})]})]})]}),"\n",(0,r.jsx)(t.h2,{id:"update-data",children:"Update data"}),"\n",(0,r.jsx)(t.p,{children:"This component dynamically updates or appends data with specified fields."}),"\n",(0,r.jsx)(t.h3,{id:"inputs-11",children:"Inputs"}),"\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:"old_data"}),(0,r.jsx)(t.td,{children:"Data"}),(0,r.jsx)(t.td,{children:"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:"Number of fields to add (max 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:"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:"Validates text key presence"})]})]})]}),"\n",(0,r.jsx)(t.h3,{id:"outputs-11",children:"Outputs"}),"\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.jsx)(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:["Updated ",(0,r.jsx)(t.a,{href:"/concepts-objects#data-object",children:"Data"})," objects."]})]})})]}),"\n",(0,r.jsx)(t.h2,{id:"legacy-components",children:"Legacy components"}),"\n",(0,r.jsxs)(t.p,{children:[(0,r.jsx)(t.strong,{children:"Legacy"})," components are available to use but no longer supported."]}),"\n",(0,r.jsx)(t.h3,{id:"alter-metadata",children:"Alter metadata"}),"\n",(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.a,{href:"/concepts-objects#message-object",children:"Message"})," and ",(0,r.jsx)(t.a,{href:"/concepts-objects#data-object",children:"Data"})," objects, and can also create a new Data object from user-provided text."]}),"\n",(0,r.jsx)(t.h4,{id:"inputs-12",children:"Inputs"}),"\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_value"}),(0,r.jsx)(t.td,{children:"Input"}),(0,r.jsx)(t.td,{children:"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:["Text input; the value will be in the 'text' attribute of the ",(0,r.jsx)(t.a,{href:"/concepts-objects#data-object",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:"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:"Metadata fields to remove"})]})]})]}),"\n",(0,r.jsx)(t.h4,{id:"outputs-12",children:"Outputs"}),"\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.jsx)(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:"List of Input objects, each with added metadata"})]})})]}),"\n",(0,r.jsx)(t.h3,{id:"create-data",children:"Create data"}),"\n",(0,r.jsx)(t.admonition,{type:"important",children:(0,r.jsxs)(t.p,{children:["This component is in ",(0,r.jsx)(t.strong,{children:"Legacy"}),", which means it is no longer in active development as of Langflow version 1.1.3."]})}),"\n",(0,r.jsxs)(t.p,{children:["This component dynamically creates a ",(0,r.jsx)(t.a,{href:"/concepts-objects#data-object",children:"Data"})," object with a specified number of fields."]}),"\n",(0,r.jsx)(t.h4,{id:"inputs-13",children:"Inputs"}),"\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:"number_of_fields"}),(0,r.jsx)(t.td,{children:"Number of Fields"}),(0,r.jsx)(t.td,{children:"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:"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:["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.jsx)(t.h4,{id:"outputs-13",children:"Outputs"}),"\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.jsx)(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:["A ",(0,r.jsx)(t.a,{href:"/concepts-objects#data-object",children:"Data"})," object created with the specified fields and text key."]})]})})]}),"\n",(0,r.jsx)(t.h3,{id:"data-to-message",children:"Data to message"}),"\n",(0,r.jsx)(t.admonition,{type:"important",children:(0,r.jsxs)(t.p,{children:["This component is in ",(0,r.jsx)(t.strong,{children:"Legacy"}),", which means it is no longer in active development as of Langflow version 1.3.\nInstead, use the ",(0,r.jsx)(t.a,{href:"#parser",children:"Parser"})," component."]})}),"\n",(0,r.jsx)(t.admonition,{type:"important",children:(0,r.jsxs)(t.p,{children:["Prior to Langflow version 1.1.3, this component was named ",(0,r.jsx)(t.strong,{children:"Parse Data"}),"."]})}),"\n",(0,r.jsx)(t.p,{children:"The ParseData component converts data objects into plain text using a specified template.\nThis component transforms structured data into human-readable text formats, allowing for customizable output through the use of templates."}),"\n",(0,r.jsx)(t.h4,{id:"inputs-14",children:"Inputs"}),"\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:"The data to convert to text."})]}),(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:["The template to use for formatting the data. It can contain the keys ",(0,r.jsx)(t.code,{children:"{text}"}),", ",(0,r.jsx)(t.code,{children:"{data}"}),", or any other key in the data."]})]}),(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:"The separator to use between multiple data items."})]})]})]}),"\n",(0,r.jsx)(t.h4,{id:"outputs-14",children:"Outputs"}),"\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.jsx)(t.tbody,{children:(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"text"}),(0,r.jsx)(t.td,{children:"Text"}),(0,r.jsxs)(t.td,{children:["The resulting formatted text string as a ",(0,r.jsx)(t.a,{href:"/concepts-objects#message-object",children:"Message"})," object."]})]})})]}),"\n",(0,r.jsx)(t.h3,{id:"parse-dataframe",children:"Parse DataFrame"}),"\n",(0,r.jsx)(t.admonition,{type:"important",children:(0,r.jsxs)(t.p,{children:["This component is in ",(0,r.jsx)(t.strong,{children:"Legacy"}),", which means it is no longer in active development as of Langflow version 1.3.\nInstead, use the ",(0,r.jsx)(t.a,{href:"#parser",children:"Parser"})," component."]})}),"\n",(0,r.jsx)(t.p,{children:"This component converts DataFrames into plain text using templates."}),"\n",(0,r.jsx)(t.h4,{id:"inputs-15",children:"Inputs"}),"\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:"df"}),(0,r.jsx)(t.td,{children:"DataFrame"}),(0,r.jsx)(t.td,{children:"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:["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:"String to join rows in output."})]})]})]}),"\n",(0,r.jsx)(t.h4,{id:"outputs-15",children:"Outputs"}),"\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.jsx)(t.tbody,{children:(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:"All rows combined into single text."})]})})]}),"\n",(0,r.jsx)(t.h3,{id:"parse-json",children:"Parse JSON"}),"\n",(0,r.jsx)(t.admonition,{type:"important",children:(0,r.jsxs)(t.p,{children:["This component is in ",(0,r.jsx)(t.strong,{children:"Legacy"}),", which means it is no longer in active development as of Langflow version 1.1.3."]})}),"\n",(0,r.jsx)(t.p,{children:"This component converts and extracts JSON fields using JQ queries."}),"\n",(0,r.jsx)(t.h4,{id:"inputs-16",children:"Inputs"}),"\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_value"}),(0,r.jsx)(t.td,{children:"Input"}),(0,r.jsxs)(t.td,{children:["Data object to filter (",(0,r.jsx)(t.a,{href:"/concepts-objects#message-object",children:"Message"})," or ",(0,r.jsx)(t.a,{href:"/concepts-objects#data-object",children:"Data"}),")."]})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"query"}),(0,r.jsx)(t.td,{children:"JQ Query"}),(0,r.jsx)(t.td,{children:"JQ Query to filter the data"})]})]})]}),"\n",(0,r.jsx)(t.h4,{id:"outputs-16",children:"Outputs"}),"\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.jsx)(t.tbody,{children:(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"filtered_data"}),(0,r.jsx)(t.td,{children:"Filtered Data"}),(0,r.jsxs)(t.td,{children:["Filtered data as list of ",(0,r.jsx)(t.a,{href:"/concepts-objects#data-object",children:"Data"})," objects."]})]})})]}),"\n",(0,r.jsx)(t.h3,{id:"select-data",children:"Select data"}),"\n",(0,r.jsx)(t.admonition,{type:"important",children:(0,r.jsxs)(t.p,{children:["This component is in ",(0,r.jsx)(t.strong,{children:"Legacy"}),", which means it is no longer in active development as of Langflow version 1.1.3."]})}),"\n",(0,r.jsxs)(t.p,{children:["This component selects a single ",(0,r.jsx)(t.a,{href:"/concepts-objects#data-object",children:"Data"})," item from a list."]}),"\n",(0,r.jsx)(t.h4,{id:"inputs-17",children:"Inputs"}),"\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_list"}),(0,r.jsx)(t.td,{children:"Data List"}),(0,r.jsx)(t.td,{children:"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:"Index of the data to select"})]})]})]}),"\n",(0,r.jsx)(t.h4,{id:"outputs-17",children:"Outputs"}),"\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.jsx)(t.tbody,{children:(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:["The selected ",(0,r.jsx)(t.a,{href:"/concepts-objects#data-object",children:"Data"})," object."]})]})})]})]})}function u(e={}){const{wrapper:t}={...(0,i.R)(),...e.components};return t?(0,r.jsx)(t,{...e,children:(0,r.jsx)(p,{...e})}):p(e)}function m(e,t){throw new Error("Expected "+(t?"component":"object")+" `"+e+"` to be defined: you likely forgot to import, pass, or provide it.")}},66539:(e,t,n)=>{n.d(t,{A:()=>s});const s=n.p+"assets/images/component-lambda-filter-c409acffcea6f80062295f4d8de4e881.png"},84443:(e,t,n)=>{n.d(t,{A:()=>i});n(96540);var s=n(64058),r=n(74848);function i(e){let{name:t,...n}=e;const i=s[t];return i?(0,r.jsx)(i,{...n}):null}},96218:(e,t,n)=>{n.d(t,{A:()=>s});const s=n.p+"assets/images/component-parser-5f97943bbc863cee6b02c74d325a062f.png"}}]); \ No newline at end of file diff --git a/assets/js/6e1a9721.b2f38580.js b/assets/js/6e1a9721.b2f38580.js new file mode 100644 index 0000000000..58ea89acaf --- /dev/null +++ b/assets/js/6e1a9721.b2f38580.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunklangflow_docs=self.webpackChunklangflow_docs||[]).push([[321],{7685:(e,t,n)=>{n.d(t,{A:()=>s});const s=n.p+"assets/images/vector-store-document-ingestion-fce32e9be440846a2545397e3a18b7bf.png"},8886:(e,t,n)=>{n.d(t,{A:()=>s});const s=n.p+"assets/images/component-url-regex-8cae4a8d6491d360115ad552f0c467d3.png"},13533:(e,t,n)=>{n.d(t,{A:()=>s});const s=n.p+"assets/images/component-dataframe-operations-86f6e1111b6f414989aca7b5fe625830.png"},35073:(e,t,n)=>{n.d(t,{A:()=>s});const s=n.p+"assets/images/component-save-to-file-67ebbb733732670897bedd9fd1b87583.png"},41502:(e,t,n)=>{n.d(t,{A:()=>s});const s=n.p+"assets/images/component-combine-text-a73b71c22cc8099bf2a9ba22170ea701.png"},45709:(e,t,n)=>{n.d(t,{A:()=>s});const s=n.p+"assets/images/component-data-to-dataframe-3e921379e4e86fedf0e34e3ffae46b51.png"},49823:(e,t,n)=>{n.d(t,{A:()=>s});const s=n.p+"assets/images/component-split-text-741a1ac37f9a2d6591ead075acc66b65.png"},59748:(e,t,n)=>{n.r(t),n.d(t,{CH:()=>h,assets:()=>l,chCodeConfig:()=>x,contentTitle:()=>a,default:()=>m,frontMatter:()=>c,metadata:()=>s,toc:()=>j});const s=JSON.parse('{"id":"Components/components-processing","title":"Processing","description":"Processing components process and transform data within a flow.","source":"@site/docs/Components/components-processing.md","sourceDirName":"Components","slug":"/components-processing","permalink":"/components-processing","draft":false,"unlisted":false,"tags":[],"version":"current","frontMatter":{"title":"Processing","slug":"/components-processing"},"sidebar":"docs","previous":{"title":"Models","permalink":"/components-models"},"next":{"title":"Prompts","permalink":"/components-prompts"}}');var r=n(74848),i=n(28453),d=n(24754),o=n(84443);const c={title:"Processing",slug:"/components-processing"},a=void 0,l={},h={annotations:d.hk,Code:d.Cy},x={staticMediaQuery:"not screen, (max-width: 768px)",lineNumbers:!0,showCopyButton:!0,themeName:"github-dark"},j=[{value:"Use a processing component in a flow",id:"use-a-processing-component-in-a-flow",level:2},{value:"Combine data",id:"combine-data",level:2},{value:"Combine text",id:"combine-text",level:2},{value:"DataFrame operations",id:"dataframe-operations",level:2},{value:"Operations",id:"operations",level:3},{value:"Data to DataFrame",id:"data-to-dataframe",level:2},{value:"Filter data",id:"filter-data",level:2},{value:"Filter values",id:"filter-values",level:2},{value:"Lambda filter",id:"lambda-filter",level:2},{value:"LLM router",id:"llm-router",level:2},{value:"Message to data",id:"message-to-data",level:2},{value:"Parser",id:"parser",level:2},{value:"Regex extractor",id:"regex-extractor",level:2},{value:"Save to File",id:"save-to-file",level:2},{value:"File input format options",id:"file-input-format-options",level:3},{value:"Split text",id:"split-text",level:2},{value:"Update data",id:"update-data",level:2},{value:"Legacy components",id:"legacy-components",level:2},{value:"Alter metadata",id:"alter-metadata",level:3},{value:"Create data",id:"create-data",level:3},{value:"JSON cleaner",id:"json-cleaner",level:3},{value:"Parse DataFrame",id:"parse-dataframe",level:3},{value:"Parse JSON",id:"parse-json",level:3},{value:"Select data",id:"select-data",level:3}];function p(e){const t={a:"a",admonition:"admonition",code:"code",h2:"h2",h3:"h3",img:"img",li:"li",ol:"ol",p:"p",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,i.R)(),...e.components},{Details:s}=t;return h||u("CH",!1),h.Code||u("CH.Code",!0),s||u("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."}),"\n",(0,r.jsx)(t.h2,{id:"use-a-processing-component-in-a-flow",children:"Use a processing component in a flow"}),"\n",(0,r.jsxs)(t.p,{children:["The ",(0,r.jsx)(t.strong,{children:"Split Text"})," processing component in this flow splits the incoming ",(0,r.jsx)(t.a,{href:"/concepts-objects",children:"Data"})," into chunks to be embedded into the vector store component."]}),"\n",(0,r.jsx)(t.p,{children:"The component offers control over chunk size, overlap, and separator, which affect context and granularity in vector store retrieval results."}),"\n",(0,r.jsx)(t.p,{children:(0,r.jsx)(t.img,{src:n(7685).A+"",width:"1804",height:"1546"})}),"\n",(0,r.jsx)(t.h2,{id:"combine-data",children:"Combine data"}),"\n",(0,r.jsx)(t.admonition,{type:"important",children:(0,r.jsxs)(t.p,{children:["Prior to Langflow version 1.1.3, this component was named ",(0,r.jsx)(t.strong,{children:"Merge Data"}),"."]})}),"\n",(0,r.jsxs)(t.p,{children:["This component combines multiple data sources into a single unified ",(0,r.jsx)(t.a,{href:"/concepts-objects#data-object",children:"Data"})," object."]}),"\n",(0,r.jsx)(t.p,{children:"The component iterates through the input list of data objects, merging them into a single data object. If the input list is empty, it returns an empty data object. If there's only one input data object, it returns that object unchanged. The merging process uses the addition operator to combine data objects."}),"\n",(0,r.jsxs)(s,{children:[(0,r.jsx)("summary",{children:"Parameters"}),(0,r.jsx)(t.p,{children:(0,r.jsx)(t.strong,{children:"Inputs"})}),(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.jsx)(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:"A list of data objects to be merged."})]})})]}),(0,r.jsx)(t.p,{children:(0,r.jsx)(t.strong,{children:"Outputs"})}),(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.jsx)(t.tbody,{children:(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"merged_data"}),(0,r.jsx)(t.td,{children:"Merged Data"}),(0,r.jsxs)(t.td,{children:["A single ",(0,r.jsx)(t.a,{href:"/concepts-objects#data-object",children:"Data"})," object containing the combined information from all input data objects."]})]})})]})]}),"\n",(0,r.jsx)(t.h2,{id:"combine-text",children:"Combine text"}),"\n",(0,r.jsx)(t.p,{children:"This component concatenates two text sources into a single text chunk using a specified delimiter."}),"\n",(0,r.jsxs)(t.ol,{children:["\n",(0,r.jsxs)(t.li,{children:["To use this component in a flow, connect two components that output ",(0,r.jsx)(t.a,{href:"/concepts-objects#message-object",children:"Messages"})," to the ",(0,r.jsx)(t.strong,{children:"Combine Text"})," component's ",(0,r.jsx)(t.strong,{children:"First Text"})," and ",(0,r.jsx)(t.strong,{children:"Second Text"})," inputs.\nThis example uses two ",(0,r.jsx)(t.strong,{children:"Text Input"})," components."]}),"\n"]}),"\n",(0,r.jsx)(t.p,{children:(0,r.jsx)(t.img,{alt:"Combine text component",src:n(41502).A+"",width:"1148",height:"675"})}),"\n",(0,r.jsxs)(t.ol,{start:"2",children:["\n",(0,r.jsxs)(t.li,{children:["In the ",(0,r.jsx)(t.strong,{children:"Combine Text"})," component, in the ",(0,r.jsx)(t.strong,{children:"Text"})," fields of both ",(0,r.jsx)(t.strong,{children:"Text Input"})," components, enter some text to combine."]}),"\n",(0,r.jsxs)(t.li,{children:["In the ",(0,r.jsx)(t.strong,{children:"Combine Text"})," component, enter an optional ",(0,r.jsx)(t.strong,{children:"Delimiter"})," value.\nThe delimiter character separates the combined texts.\nThis example uses ",(0,r.jsx)(t.code,{children:"\\n\\n **end first text** \\n\\n **start second text** \\n\\n"})," to label the texts and create newlines between them."]}),"\n",(0,r.jsxs)(t.li,{children:["Connect a ",(0,r.jsx)(t.strong,{children:"Chat Output"})," component to view the text combination."]}),"\n",(0,r.jsxs)(t.li,{children:["Click ",(0,r.jsx)(t.strong,{children:"Playground"}),", and then click ",(0,r.jsx)(t.strong,{children:"Run Flow"}),".\nThe combined text appears in the ",(0,r.jsx)(t.strong,{children:"Playground"}),"."]}),"\n"]}),"\n",(0,r.jsx)(h.Code,{codeConfig:x,northPanel:{tabs:[""],active:"",heightRatio:1},files:[{name:"",focus:"",code:{lines:[{tokens:[{content:"This is the first text. Let's combine text!",props:{}}]},{tokens:[{content:"end first text",props:{}}]},{tokens:[{content:"start second text",props:{}}]},{tokens:[{content:"Here's the second part. We'll see how combining text works.",props:{}}]}],lang:"text"},annotations:[]}]}),"\n",(0,r.jsxs)(s,{children:[(0,r.jsx)("summary",{children:"Parameters"}),(0,r.jsx)(t.p,{children:(0,r.jsx)(t.strong,{children:"Inputs"})}),(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:"first_text"}),(0,r.jsx)(t.td,{children:"First Text"}),(0,r.jsx)(t.td,{children:"The first text input to concatenate."})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"second_text"}),(0,r.jsx)(t.td,{children:"Second Text"}),(0,r.jsx)(t.td,{children:"The second text input to concatenate."})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"delimiter"}),(0,r.jsx)(t.td,{children:"Delimiter"}),(0,r.jsx)(t.td,{children:"A string used to separate the two text inputs. The default is a space."})]})]})]}),(0,r.jsx)(t.p,{children:(0,r.jsx)(t.strong,{children:"Outputs"})}),(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.jsx)(t.tbody,{children:(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"message"}),(0,r.jsx)(t.td,{children:"Message"}),(0,r.jsx)(t.td,{children:"A Message object containing the combined text."})]})})]})]}),"\n",(0,r.jsx)(t.h2,{id:"dataframe-operations",children:"DataFrame operations"}),"\n",(0,r.jsxs)(t.p,{children:["This component performs operations on ",(0,r.jsx)(t.a,{href:"https://pandas.pydata.org/docs/reference/api/pandas.DataFrame.html",children:"DataFrame"})," rows and columns."]}),"\n",(0,r.jsxs)(t.p,{children:["To use this component in a flow, connect a component that outputs ",(0,r.jsx)(t.a,{href:"/concepts-objects#dataframe-object",children:"DataFrame"})," to the ",(0,r.jsx)(t.strong,{children:"DataFrame Operations"})," component."]}),"\n",(0,r.jsxs)(t.p,{children:["This example fetches JSON data from an API. The ",(0,r.jsx)(t.strong,{children:"Lambda filter"})," component extracts and flattens the results into a tabular DataFrame. The ",(0,r.jsx)(t.strong,{children:"DataFrame Operations"})," component can then work with the retrieved data."]}),"\n",(0,r.jsx)(t.p,{children:(0,r.jsx)(t.img,{alt:"Dataframe operations with flattened dataframe",src:n(13533).A+"",width:"983",height:"696"})}),"\n",(0,r.jsxs)(t.ol,{children:["\n",(0,r.jsxs)(t.li,{children:["The ",(0,r.jsx)(t.strong,{children:"API Request"})," component retrieves data with only ",(0,r.jsx)(t.code,{children:"source"})," and ",(0,r.jsx)(t.code,{children:"result"})," fields.\nFor this example, the desired data is nested within the ",(0,r.jsx)(t.code,{children:"result"})," field."]}),"\n",(0,r.jsxs)(t.li,{children:["Connect a ",(0,r.jsx)(t.strong,{children:"Lambda Filter"})," to the API request component, and a ",(0,r.jsx)(t.strong,{children:"Language model"})," to the ",(0,r.jsx)(t.strong,{children:"Lambda Filter"}),". This example connects a ",(0,r.jsx)(t.strong,{children:"Groq"})," model component."]}),"\n",(0,r.jsxs)(t.li,{children:["In the ",(0,r.jsx)(t.strong,{children:"Groq"})," model component, add your ",(0,r.jsx)(t.strong,{children:"Groq"})," API key."]}),"\n",(0,r.jsxs)(t.li,{children:["To filter the data, in the ",(0,r.jsx)(t.strong,{children:"Lambda filter"})," component, in the ",(0,r.jsx)(t.strong,{children:"Instructions"})," field, use natural language to describe how the data should be filtered.\nFor this example, enter:"]}),"\n"]}),"\n",(0,r.jsx)(h.Code,{codeConfig:x,northPanel:{tabs:[""],active:"",heightRatio:1},files:[{name:"",focus:"",code:{lines:[{tokens:[{content:"I want to explode the result column out into a Data object",props:{}}]}],lang:"text"},annotations:[]}]}),"\n",(0,r.jsx)(t.admonition,{type:"tip",children:(0,r.jsxs)(t.p,{children:["Avoid punctuation in the ",(0,r.jsx)(t.strong,{children:"Instructions"})," field, as it can cause errors."]})}),"\n",(0,r.jsxs)(t.ol,{start:"5",children:["\n",(0,r.jsxs)(t.li,{children:["To run the flow, in the ",(0,r.jsx)(t.strong,{children:"Lambda Filter"})," component, click ",(0,r.jsx)(o.A,{name:"Play","aria-label":"Play icon"}),"."]}),"\n",(0,r.jsxs)(t.li,{children:["To inspect the filtered data, in the ",(0,r.jsx)(t.strong,{children:"Lambda Filter"})," component, click ",(0,r.jsx)(o.A,{name:"TextSearch","aria-label":"Inspect icon"}),".\nThe result is a structured DataFrame."]}),"\n"]}),"\n",(0,r.jsx)(h.Code,{codeConfig:x,northPanel:{tabs:[""],active:"",heightRatio:1},files:[{name:"",focus:"",code:{lines:[{tokens:[{content:"id | name | company | username | email | address | zip",props:{}}]},{tokens:[{content:"---|------------------|----------------------|-----------------|------------------------------------|-------------------|-------",props:{}}]},{tokens:[{content:"1 | Emily Johnson | ABC Corporation | emily_johnson | emily.johnson@abccorporation.com | 123 Main St | 12345",props:{}}]},{tokens:[{content:"2 | Michael Williams | XYZ Corp | michael_williams| michael.williams@xyzcorp.com | 456 Elm Ave | 67890",props:{}}]}],lang:"text"},annotations:[]}]}),"\n",(0,r.jsxs)(t.ol,{start:"7",children:["\n",(0,r.jsxs)(t.li,{children:["Add the ",(0,r.jsx)(t.strong,{children:"DataFrame Operations"})," component, and a ",(0,r.jsx)(t.strong,{children:"Chat Output"})," component to the flow."]}),"\n",(0,r.jsxs)(t.li,{children:["In the ",(0,r.jsx)(t.strong,{children:"DataFrame Operations"})," component, in the ",(0,r.jsx)(t.strong,{children:"Operation"})," field, select ",(0,r.jsx)(t.strong,{children:"Filter"}),"."]}),"\n",(0,r.jsxs)(t.li,{children:["To apply a filter, in the ",(0,r.jsx)(t.strong,{children:"Column Name"})," field, enter a column to filter on. This example filters by ",(0,r.jsx)(t.code,{children:"name"}),"."]}),"\n",(0,r.jsxs)(t.li,{children:["Click ",(0,r.jsx)(t.strong,{children:"Playground"}),", and then click ",(0,r.jsx)(t.strong,{children:"Run Flow"}),".\nThe flow extracts the values from the ",(0,r.jsx)(t.code,{children:"name"})," column."]}),"\n"]}),"\n",(0,r.jsx)(h.Code,{codeConfig:x,northPanel:{tabs:[""],active:"",heightRatio:1},files:[{name:"",focus:"",code:{lines:[{tokens:[{content:"name",props:{}}]},{tokens:[{content:"Emily Johnson",props:{}}]},{tokens:[{content:"Michael Williams",props:{}}]},{tokens:[{content:"John Smith",props:{}}]},{tokens:[{content:"...",props:{}}]}],lang:"text"},annotations:[]}]}),"\n",(0,r.jsx)(t.h3,{id:"operations",children:"Operations"}),"\n",(0,r.jsxs)(t.p,{children:["This component can perform the following operations on Pandas ",(0,r.jsx)(t.a,{href:"https://pandas.pydata.org/docs/reference/api/pandas.DataFrame.html",children:"DataFrame"}),"."]}),"\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:"Operation"}),(0,r.jsx)(t.th,{children:"Description"}),(0,r.jsx)(t.th,{children:"Required Inputs"})]})}),(0,r.jsxs)(t.tbody,{children:[(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"Add Column"}),(0,r.jsx)(t.td,{children:"Adds a new column with a constant value"}),(0,r.jsx)(t.td,{children:"new_column_name, new_column_value"})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"Drop Column"}),(0,r.jsx)(t.td,{children:"Removes a specified column"}),(0,r.jsx)(t.td,{children:"column_name"})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"Filter"}),(0,r.jsx)(t.td,{children:"Filters rows based on column value"}),(0,r.jsx)(t.td,{children:"column_name, filter_value"})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"Head"}),(0,r.jsx)(t.td,{children:"Returns first n rows"}),(0,r.jsx)(t.td,{children:"num_rows"})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"Rename Column"}),(0,r.jsx)(t.td,{children:"Renames an existing column"}),(0,r.jsx)(t.td,{children:"column_name, new_column_name"})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"Replace Value"}),(0,r.jsx)(t.td,{children:"Replaces values in a column"}),(0,r.jsx)(t.td,{children:"column_name, replace_value, replacement_value"})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"Select Columns"}),(0,r.jsx)(t.td,{children:"Selects specific columns"}),(0,r.jsx)(t.td,{children:"columns_to_select"})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"Sort"}),(0,r.jsx)(t.td,{children:"Sorts DataFrame by column"}),(0,r.jsx)(t.td,{children:"column_name, ascending"})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"Tail"}),(0,r.jsx)(t.td,{children:"Returns last n rows"}),(0,r.jsx)(t.td,{children:"num_rows"})]})]})]}),"\n",(0,r.jsxs)(s,{children:[(0,r.jsx)("summary",{children:"Parameters"}),(0,r.jsx)(t.p,{children:(0,r.jsx)(t.strong,{children:"Inputs"})}),(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:"The input DataFrame 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.jsx)(t.td,{children:"The DataFrame operation to perform. Options include Add Column, Drop Column, Filter, Head, Rename Column, Replace Value, Select Columns, Sort, and Tail."})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"column_name"}),(0,r.jsx)(t.td,{children:"Column Name"}),(0,r.jsx)(t.td,{children:"The column name to use for the operation."})]}),(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:"The value to filter rows by."})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"ascending"}),(0,r.jsx)(t.td,{children:"Sort Ascending"}),(0,r.jsx)(t.td,{children:"Whether to sort in ascending order."})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"new_column_name"}),(0,r.jsx)(t.td,{children:"New Column Name"}),(0,r.jsx)(t.td,{children:"The new column name when renaming or adding a column."})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"new_column_value"}),(0,r.jsx)(t.td,{children:"New Column Value"}),(0,r.jsx)(t.td,{children:"The value to populate the new column with."})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"columns_to_select"}),(0,r.jsx)(t.td,{children:"Columns to Select"}),(0,r.jsx)(t.td,{children:"A list of column names to select."})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"num_rows"}),(0,r.jsx)(t.td,{children:"Number of Rows"}),(0,r.jsx)(t.td,{children:"The number of rows to return for head/tail operations. The default is 5."})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"replace_value"}),(0,r.jsx)(t.td,{children:"Value to Replace"}),(0,r.jsx)(t.td,{children:"The value to replace in the column."})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"replacement_value"}),(0,r.jsx)(t.td,{children:"Replacement Value"}),(0,r.jsx)(t.td,{children:"The value to replace with."})]})]})]}),(0,r.jsx)(t.p,{children:(0,r.jsx)(t.strong,{children:"Outputs"})}),(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.jsx)(t.tbody,{children:(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"output"}),(0,r.jsx)(t.td,{children:"DataFrame"}),(0,r.jsx)(t.td,{children:"The resulting DataFrame after the operation."})]})})]})]}),"\n",(0,r.jsx)(t.h2,{id:"data-to-dataframe",children:"Data to DataFrame"}),"\n",(0,r.jsxs)(t.p,{children:["This component converts one or multiple ",(0,r.jsx)(t.a,{href:"/concepts-objects#data-object",children:"Data"})," objects into a ",(0,r.jsx)(t.a,{href:"/concepts-objects#dataframe-object",children:"DataFrame"}),". Each Data object corresponds to one row in the resulting DataFrame. Fields 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 'text' column."]}),"\n",(0,r.jsxs)(t.ol,{children:["\n",(0,r.jsxs)(t.li,{children:["To use this component in a flow, connect a component that outputs ",(0,r.jsx)(t.a,{href:"/concepts-objects#data-object",children:"Data"})," to the ",(0,r.jsx)(t.strong,{children:"Data to Dataframe"})," component's input.\nThis example connects a ",(0,r.jsx)(t.strong,{children:"Webhook"})," component to convert ",(0,r.jsx)(t.code,{children:"text"})," and ",(0,r.jsx)(t.code,{children:"data"})," into a DataFrame."]}),"\n",(0,r.jsxs)(t.li,{children:["To view the flow's output, connect a ",(0,r.jsx)(t.strong,{children:"Chat Output"})," component to the ",(0,r.jsx)(t.strong,{children:"Data to Dataframe"})," component."]}),"\n"]}),"\n",(0,r.jsx)(t.p,{children:(0,r.jsx)(t.img,{alt:"A webhook and data to dataframe",src:n(45709).A+"",width:"1221",height:"468"})}),"\n",(0,r.jsxs)(t.ol,{start:"3",children:["\n",(0,r.jsxs)(t.li,{children:["Send a POST request to the ",(0,r.jsx)(t.strong,{children:"Webhook"})," containing your JSON data.\nReplace ",(0,r.jsx)(t.code,{children:"YOUR_FLOW_ID"})," with your flow ID.\nThis example uses the default Langflow server address."]}),"\n"]}),"\n",(0,r.jsx)(h.Code,{codeConfig:x,northPanel:{tabs:[""],active:"",heightRatio:1},files:[{name:"",focus:"",code:{lines:[{tokens:[{content:'curl -X POST "http://127.0.0.1:7860/api/v1/webhook/YOUR_FLOW_ID" \\',props:{}}]},{tokens:[{content:"-H 'Content-Type: application/json' \\",props:{}}]},{tokens:[{content:"-d '{",props:{}}]},{tokens:[{content:' "text": "Alex Cruz - Employee Profile",',props:{}}]},{tokens:[{content:' "data": {',props:{}}]},{tokens:[{content:' "Name": "Alex Cruz",',props:{}}]},{tokens:[{content:' "Role": "Developer",',props:{}}]},{tokens:[{content:' "Department": "Engineering"',props:{}}]},{tokens:[{content:" }",props:{}}]},{tokens:[{content:"}'",props:{}}]}],lang:"text"},annotations:[]}]}),"\n",(0,r.jsxs)(t.ol,{start:"4",children:["\n",(0,r.jsxs)(t.li,{children:["In the ",(0,r.jsx)(t.strong,{children:"Playground"}),", view the output of your flow.\nThe ",(0,r.jsx)(t.strong,{children:"Data to DataFrame"})," component converts the webhook request into a ",(0,r.jsx)(t.code,{children:"DataFrame"}),", with ",(0,r.jsx)(t.code,{children:"text"})," and ",(0,r.jsx)(t.code,{children:"data"})," fields as columns."]}),"\n"]}),"\n",(0,r.jsx)(h.Code,{codeConfig:x,northPanel:{tabs:[""],active:"",heightRatio:1},files:[{name:"",focus:"",code:{lines:[{tokens:[{content:"| text | data |",props:{}}]},{tokens:[{content:"|:-----------------------------|:------------------------------------------------------------------------|",props:{}}]},{tokens:[{content:"| Alex Cruz - Employee Profile | {'Name': 'Alex Cruz', 'Role': 'Developer', 'Department': 'Engineering'} |",props:{}}]}],lang:"text"},annotations:[]}]}),"\n",(0,r.jsxs)(t.ol,{start:"5",children:["\n",(0,r.jsx)(t.li,{children:"Send another employee data object."}),"\n"]}),"\n",(0,r.jsx)(h.Code,{codeConfig:x,northPanel:{tabs:[""],active:"",heightRatio:1},files:[{name:"",focus:"",code:{lines:[{tokens:[{content:'curl -X POST "http://127.0.0.1:7860/api/v1/webhook/YOUR_FLOW_ID" \\',props:{}}]},{tokens:[{content:"-H 'Content-Type: application/json' \\",props:{}}]},{tokens:[{content:"-d '{",props:{}}]},{tokens:[{content:' "text": "Kalani Smith - Employee Profile",',props:{}}]},{tokens:[{content:' "data": {',props:{}}]},{tokens:[{content:' "Name": "Kalani Smith",',props:{}}]},{tokens:[{content:' "Role": "Designer",',props:{}}]},{tokens:[{content:' "Department": "Design"',props:{}}]},{tokens:[{content:" }",props:{}}]},{tokens:[{content:"}'",props:{}}]}],lang:"text"},annotations:[]}]}),"\n",(0,r.jsxs)(t.ol,{start:"6",children:["\n",(0,r.jsxs)(t.li,{children:["In the ",(0,r.jsx)(t.strong,{children:"Playground"}),", this request is also converted to ",(0,r.jsx)(t.code,{children:"DataFrame"}),"."]}),"\n"]}),"\n",(0,r.jsx)(h.Code,{codeConfig:x,northPanel:{tabs:[""],active:"",heightRatio:1},files:[{name:"",focus:"",code:{lines:[{tokens:[{content:"| text | data |",props:{}}]},{tokens:[{content:"|:--------------------------------|:---------------------------------------------------------------------|",props:{}}]},{tokens:[{content:"| Kalani Smith - Employee Profile | {'Name': 'Kalani Smith', 'Role': 'Designer', 'Department': 'Design'} |",props:{}}]}],lang:"text"},annotations:[]}]}),"\n",(0,r.jsxs)(s,{children:[(0,r.jsx)("summary",{children:"Parameters"}),(0,r.jsx)(t.p,{children:(0,r.jsx)(t.strong,{children:"Inputs"})}),(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.jsx)(t.tbody,{children:(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"data_list"}),(0,r.jsx)(t.td,{children:"Data or Data List"}),(0,r.jsx)(t.td,{children:"One or multiple Data objects to transform into a DataFrame."})]})})]}),(0,r.jsx)(t.p,{children:(0,r.jsx)(t.strong,{children:"Outputs"})}),(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.jsx)(t.tbody,{children:(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"dataframe"}),(0,r.jsx)(t.td,{children:"DataFrame"}),(0,r.jsx)(t.td,{children:"A DataFrame built from each Data object's fields plus a text column."})]})})]})]}),"\n",(0,r.jsx)(t.h2,{id:"filter-data",children:"Filter data"}),"\n",(0,r.jsx)(t.admonition,{type:"important",children:(0,r.jsxs)(t.p,{children:["This component is in ",(0,r.jsx)(t.strong,{children:"Beta"})," as of Langflow version 1.1.3, and is not yet fully supported."]})}),"\n",(0,r.jsxs)(t.p,{children:["This component filters a ",(0,r.jsx)(t.a,{href:"/concepts-objects#data-object",children:"Data"})," object based on a list of keys."]}),"\n",(0,r.jsxs)(s,{children:[(0,r.jsx)("summary",{children:"Parameters"}),(0,r.jsx)(t.p,{children:(0,r.jsx)(t.strong,{children:"Inputs"})}),(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:"The Data object to filter."})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"filter_criteria"}),(0,r.jsx)(t.td,{children:"Filter Criteria"}),(0,r.jsx)(t.td,{children:"A list of keys to filter by."})]})]})]}),(0,r.jsx)(t.p,{children:(0,r.jsx)(t.strong,{children:"Outputs"})}),(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.jsx)(t.tbody,{children:(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:"A new Data object containing only the key-value pairs that match the filter criteria."})]})})]})]}),"\n",(0,r.jsx)(t.h2,{id:"filter-values",children:"Filter values"}),"\n",(0,r.jsx)(t.admonition,{type:"important",children:(0,r.jsxs)(t.p,{children:["This component is in ",(0,r.jsx)(t.strong,{children:"Beta"})," as of Langflow version 1.1.3, and is not yet fully supported."]})}),"\n",(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."}),"\n",(0,r.jsxs)(s,{children:[(0,r.jsx)("summary",{children:"Parameters"}),(0,r.jsx)(t.p,{children:(0,r.jsx)(t.strong,{children:"Inputs"})}),(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:"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:"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:"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:"The operator to apply for comparing the values."})]})]})]}),(0,r.jsx)(t.p,{children:(0,r.jsx)(t.strong,{children:"Outputs"})}),(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.jsx)(t.tbody,{children:(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:"The resulting list of filtered data items."})]})})]})]}),"\n",(0,r.jsx)(t.h2,{id:"lambda-filter",children:"Lambda filter"}),"\n",(0,r.jsx)(t.p,{children:"This component uses an LLM to generate a Lambda function for filtering or transforming structured data."}),"\n",(0,r.jsxs)(t.p,{children:["To use the ",(0,r.jsx)(t.strong,{children:"Lambda filter"})," component, you must connect it to a ",(0,r.jsx)(t.a,{href:"/components-models#language-model",children:"Language Model"})," component, which the component uses to generate a function based on the natural language instructions in the ",(0,r.jsx)(t.strong,{children:"Instructions"})," field."]}),"\n",(0,r.jsxs)(t.p,{children:["This example gets JSON data from the ",(0,r.jsx)(t.code,{children:"https://jsonplaceholder.typicode.com/users"})," API endpoint.\nThe ",(0,r.jsx)(t.strong,{children:"Instructions"})," field in the ",(0,r.jsx)(t.strong,{children:"Lambda filter"})," component specifies the task ",(0,r.jsx)(t.code,{children:"extract emails"}),".\nThe connected LLM creates a filter based on the instructions, and successfully extracts a list of email addresses from the JSON data."]}),"\n",(0,r.jsx)(t.p,{children:(0,r.jsx)(t.img,{src:n(66539).A+"",width:"1742",height:"1622"})}),"\n",(0,r.jsxs)(s,{children:[(0,r.jsx)("summary",{children:"Parameters"}),(0,r.jsx)(t.p,{children:(0,r.jsx)(t.strong,{children:"Inputs"})}),(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:"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:["The connection port for a ",(0,r.jsx)(t.a,{href:"/components-models",children:"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.jsxs)(t.td,{children:["The natural language instructions for how to filter or transform the data using a Lambda function, such as ",(0,r.jsx)(t.code,{children:"Filter the data to only include items where the 'status' is 'active'"}),"."]})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"sample_size"}),(0,r.jsx)(t.td,{children:"Sample Size"}),(0,r.jsx)(t.td,{children:"For large datasets, the number of characters to sample from the dataset head and tail."})]}),(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:['The number of characters for the data to be considered "large", which triggers sampling by the ',(0,r.jsx)(t.code,{children:"sample_size"})," value."]})]})]})]}),(0,r.jsx)(t.p,{children:(0,r.jsx)(t.strong,{children:"Outputs"})}),(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:"filtered_data"}),(0,r.jsx)(t.td,{children:"Filtered Data"}),(0,r.jsxs)(t.td,{children:["The filtered or transformed ",(0,r.jsx)(t.a,{href:"/concepts-objects#data-object",children:"Data object"}),"."]})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"dataframe"}),(0,r.jsx)(t.td,{children:"DataFrame"}),(0,r.jsxs)(t.td,{children:["The filtered data as a ",(0,r.jsx)(t.a,{href:"/concepts-objects#dataframe-object",children:"DataFrame"}),"."]})]})]})]})]}),"\n",(0,r.jsx)(t.h2,{id:"llm-router",children:"LLM router"}),"\n",(0,r.jsx)(t.p,{children:"This component routes requests to the most appropriate LLM based on OpenRouter model specifications."}),"\n",(0,r.jsxs)(s,{children:[(0,r.jsx)("summary",{children:"Parameters"}),(0,r.jsx)(t.p,{children:(0,r.jsx)(t.strong,{children:"Inputs"})}),(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:"models"}),(0,r.jsx)(t.td,{children:"Language Models"}),(0,r.jsx)(t.td,{children:"A list of LLMs to route between."})]}),(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:"The input message to be routed."})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"judge_llm"}),(0,r.jsx)(t.td,{children:"Judge LLM"}),(0,r.jsx)(t.td,{children:"The LLM that evaluates and selects the most appropriate model."})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"optimization"}),(0,r.jsx)(t.td,{children:"Optimization"}),(0,r.jsx)(t.td,{children:"The optimization preference between quality, speed, cost, or balanced."})]})]})]}),(0,r.jsx)(t.p,{children:(0,r.jsx)(t.strong,{children:"Outputs"})}),(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:"output"}),(0,r.jsx)(t.td,{children:"Output"}),(0,r.jsx)(t.td,{children:"The response from the selected model."})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"selected_model"}),(0,r.jsx)(t.td,{children:"Selected Model"}),(0,r.jsx)(t.td,{children:"The name of the chosen model."})]})]})]})]}),"\n",(0,r.jsx)(t.h2,{id:"message-to-data",children:"Message to data"}),"\n",(0,r.jsxs)(t.p,{children:["This component converts ",(0,r.jsx)(t.a,{href:"/concepts-objects#message-object",children:"Message"})," objects to ",(0,r.jsx)(t.a,{href:"/concepts-objects#data-object",children:"Data"})," objects."]}),"\n",(0,r.jsxs)(s,{children:[(0,r.jsx)("summary",{children:"Parameters"}),(0,r.jsx)(t.p,{children:(0,r.jsx)(t.strong,{children:"Inputs"})}),(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.jsx)(t.tbody,{children:(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"message"}),(0,r.jsx)(t.td,{children:"Message"}),(0,r.jsx)(t.td,{children:"The Message object to convert to a Data object."})]})})]}),(0,r.jsx)(t.p,{children:(0,r.jsx)(t.strong,{children:"Outputs"})}),(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.jsx)(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:"The converted Data object."})]})})]})]}),"\n",(0,r.jsx)(t.h2,{id:"parser",children:"Parser"}),"\n",(0,r.jsxs)(t.p,{children:["This component formats ",(0,r.jsx)(t.code,{children:"DataFrame"})," or ",(0,r.jsx)(t.code,{children:"Data"})," objects into text using templates, with an option to convert inputs directly to strings using ",(0,r.jsx)(t.code,{children:"stringify"}),"."]}),"\n",(0,r.jsxs)(t.p,{children:["To use this component, create variables for values in the ",(0,r.jsx)(t.code,{children:"template"})," the same way you would in a ",(0,r.jsx)(t.a,{href:"/components-prompts",children:"Prompt"})," component. For ",(0,r.jsx)(t.code,{children:"DataFrames"}),", use column names, for example ",(0,r.jsx)(t.code,{children:"Name: {Name}"}),". For ",(0,r.jsx)(t.code,{children:"Data"})," objects, use ",(0,r.jsx)(t.code,{children:"{text}"}),"."]}),"\n",(0,r.jsxs)(t.p,{children:["To use the ",(0,r.jsx)(t.strong,{children:"Parser"})," component with a ",(0,r.jsx)(t.strong,{children:"Structured Output"})," component, do the following:"]}),"\n",(0,r.jsxs)(t.ol,{children:["\n",(0,r.jsxs)(t.li,{children:["Connect a ",(0,r.jsx)(t.strong,{children:"Structured Output"})," component's ",(0,r.jsx)(t.strong,{children:"DataFrame"})," output to the ",(0,r.jsx)(t.strong,{children:"Parser"})," component's ",(0,r.jsx)(t.strong,{children:"DataFrame"})," input."]}),"\n",(0,r.jsxs)(t.li,{children:["Connect the ",(0,r.jsx)(t.strong,{children:"File"})," component to the ",(0,r.jsx)(t.strong,{children:"Structured Output"})," component's ",(0,r.jsx)(t.strong,{children:"Message"})," input."]}),"\n",(0,r.jsxs)(t.li,{children:["Connect the ",(0,r.jsx)(t.strong,{children:"OpenAI"})," model component's ",(0,r.jsx)(t.strong,{children:"Language Model"})," output to the ",(0,r.jsx)(t.strong,{children:"Structured Output"})," component's ",(0,r.jsx)(t.strong,{children:"Language Model"})," input."]}),"\n"]}),"\n",(0,r.jsx)(t.p,{children:"The flow looks like this:"}),"\n",(0,r.jsx)(t.p,{children:(0,r.jsx)(t.img,{alt:"A parser component connected to OpenAI and structured output",src:n(96218).A+"",width:"2300",height:"1436"})}),"\n",(0,r.jsxs)(t.ol,{start:"4",children:["\n",(0,r.jsxs)(t.li,{children:["In the ",(0,r.jsx)(t.strong,{children:"Structured Output"})," component, click ",(0,r.jsx)(t.strong,{children:"Open Table"}),".\nThis opens a pane for structuring your table.\nThe table contains the rows ",(0,r.jsx)(t.strong,{children:"Name"}),", ",(0,r.jsx)(t.strong,{children:"Description"}),", ",(0,r.jsx)(t.strong,{children:"Type"}),", and ",(0,r.jsx)(t.strong,{children:"Multiple"}),"."]}),"\n",(0,r.jsxs)(t.li,{children:["Create a table that maps to the data you're loading from the ",(0,r.jsx)(t.strong,{children:"File"})," loader.\nFor example, to create a table for employees, you might have the rows ",(0,r.jsx)(t.code,{children:"id"}),", ",(0,r.jsx)(t.code,{children:"name"}),", and ",(0,r.jsx)(t.code,{children:"email"}),", all of type ",(0,r.jsx)(t.code,{children:"string"}),"."]}),"\n",(0,r.jsxs)(t.li,{children:["In the ",(0,r.jsx)(t.strong,{children:"Template"})," field of the ",(0,r.jsx)(t.strong,{children:"Parser"})," component, enter a template for parsing the ",(0,r.jsx)(t.strong,{children:"Structured Output"})," component's DataFrame output into structured text.\nCreate variables for values in the ",(0,r.jsx)(t.code,{children:"template"})," the same way you would in a ",(0,r.jsx)(t.a,{href:"/components-prompts",children:"Prompt"})," component.\nFor example, to present a table of employees in Markdown:"]}),"\n"]}),"\n",(0,r.jsx)(h.Code,{codeConfig:x,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:[]}]}),"\n",(0,r.jsxs)(t.ol,{start:"7",children:["\n",(0,r.jsxs)(t.li,{children:["To run the flow, in the ",(0,r.jsx)(t.strong,{children:"Parser"})," component, click ",(0,r.jsx)(o.A,{name:"Play","aria-label":"Play icon"}),"."]}),"\n",(0,r.jsxs)(t.li,{children:["To view your parsed text, in the ",(0,r.jsx)(t.strong,{children:"Parser"})," component, click ",(0,r.jsx)(o.A,{name:"TextSearch","aria-label":"Inspect icon"}),"."]}),"\n",(0,r.jsxs)(t.li,{children:["Optionally, connect a ",(0,r.jsx)(t.strong,{children:"Chat Output"})," component, and open the ",(0,r.jsx)(t.strong,{children:"Playground"})," to see the output."]}),"\n"]}),"\n",(0,r.jsxs)(t.p,{children:["For an additional example of using the ",(0,r.jsx)(t.strong,{children:"Parser"})," component to format a DataFrame from a ",(0,r.jsx)(t.strong,{children:"Structured Output"})," component, see the ",(0,r.jsx)(t.strong,{children:"Market Research"})," template flow."]}),"\n",(0,r.jsxs)(s,{children:[(0,r.jsx)("summary",{children:"Parameters"}),(0,r.jsx)(t.p,{children:(0,r.jsx)(t.strong,{children:"Inputs"})}),(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:"mode"}),(0,r.jsx)(t.td,{children:"Mode"}),(0,r.jsx)(t.td,{children:'The tab selection between "Parser" and "Stringify" modes. "Stringify" converts input to a string instead of using a template.'})]}),(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:["The template for formatting using variables in curly brackets. For DataFrames, use column names, such as ",(0,r.jsx)(t.code,{children:"Name: {Name}"}),". For Data objects, use ",(0,r.jsx)(t.code,{children:"{text}"}),"."]})]}),(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.jsx)(t.td,{children:"The input to parse. Accepts either a DataFrame or Data object."})]}),(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:"The string used to separate rows or items. The default is a newline."})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"clean_data"}),(0,r.jsx)(t.td,{children:"Clean Data"}),(0,r.jsx)(t.td,{children:"When stringify is enabled, this option cleans data by removing empty rows and lines."})]})]})]}),(0,r.jsx)(t.p,{children:(0,r.jsx)(t.strong,{children:"Outputs"})}),(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.jsx)(t.tbody,{children:(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"parsed_text"}),(0,r.jsx)(t.td,{children:"Parsed Text"}),(0,r.jsxs)(t.td,{children:["The resulting formatted text as a ",(0,r.jsx)(t.a,{href:"/concepts-objects#message-object",children:"Message"})," object."]})]})})]})]}),"\n",(0,r.jsx)(t.h2,{id:"regex-extractor",children:"Regex extractor"}),"\n",(0,r.jsx)(t.p,{children:"This component extracts patterns from text using regular expressions. It can be used to find and extract specific patterns or information from text data."}),"\n",(0,r.jsx)(t.p,{children:"To use this component in a flow:"}),"\n",(0,r.jsxs)(t.ol,{children:["\n",(0,r.jsxs)(t.li,{children:["Connect the ",(0,r.jsx)(t.strong,{children:"Regex Extractor"})," to a ",(0,r.jsx)(t.strong,{children:"URL"})," component and a ",(0,r.jsx)(t.strong,{children:"Chat Output"})," component."]}),"\n"]}),"\n",(0,r.jsx)(t.p,{children:(0,r.jsx)(t.img,{alt:"Regex extractor connected to url component",src:n(8886).A+"",width:"1606",height:"848"})}),"\n",(0,r.jsxs)(t.ol,{start:"2",children:["\n",(0,r.jsxs)(t.li,{children:["In the ",(0,r.jsx)(t.strong,{children:"Regex Extractor"})," tool, enter a pattern to extract text from the ",(0,r.jsx)(t.strong,{children:"URL"}),' component\'s raw output.\nThis example extracts the first paragraph from the "In the News" section of ',(0,r.jsx)(t.code,{children:"https://en.wikipedia.org/wiki/Main_Page"}),":"]}),"\n"]}),"\n",(0,r.jsx)(h.Code,{codeConfig:x,northPanel:{tabs:[""],active:"",heightRatio:1},files:[{name:"",focus:"",code:{lines:[{tokens:[{content:"In the news\\s*\\n(.*?)(?=\\n\\n)",props:{}}]}],lang:"text"},annotations:[]}]}),"\n",(0,r.jsx)(t.p,{children:"Result:"}),"\n",(0,r.jsx)(h.Code,{codeConfig:x,northPanel:{tabs:[""],active:"",heightRatio:1},files:[{name:"",focus:"",code:{lines:[{tokens:[{content:"Peruvian writer and Nobel Prize in Literature laureate Mario Vargas Llosa (pictured) dies at the age of 89.",props:{}}]}],lang:"text"},annotations:[]}]}),"\n",(0,r.jsx)(t.h2,{id:"save-to-file",children:"Save to File"}),"\n",(0,r.jsxs)(t.p,{children:["This component saves ",(0,r.jsx)(t.a,{href:"/concepts-objects",children:"DataFrames, Data, or Messages"})," to various file formats."]}),"\n",(0,r.jsxs)(t.ol,{children:["\n",(0,r.jsxs)(t.li,{children:["To use this component in a flow, connect a component that outputs ",(0,r.jsx)(t.a,{href:"/concepts-objects",children:"DataFrames, Data, or Messages"})," to the ",(0,r.jsx)(t.strong,{children:"Save to File"})," component's input.\nThe following example connects a ",(0,r.jsx)(t.strong,{children:"Webhook"})," component to two ",(0,r.jsx)(t.strong,{children:"Save to File"})," components to demonstrate the different outputs."]}),"\n"]}),"\n",(0,r.jsx)(t.p,{children:(0,r.jsx)(t.img,{alt:"Two Save-to File components connected to a webhook",src:n(35073).A+"",width:"1458",height:"1732"})}),"\n",(0,r.jsxs)(t.ol,{start:"2",children:["\n",(0,r.jsxs)(t.li,{children:["In the ",(0,r.jsx)(t.strong,{children:"Save to File"})," component's ",(0,r.jsx)(t.strong,{children:"Input Type"})," field, select the expected input type.\nThis example expects ",(0,r.jsx)(t.strong,{children:"Data"})," from the ",(0,r.jsx)(t.strong,{children:"Webhook"}),"."]}),"\n",(0,r.jsxs)(t.li,{children:["In the ",(0,r.jsx)(t.strong,{children:"File Format"})," field, select the file type for your saved file.\nThis example uses ",(0,r.jsx)(t.code,{children:".md"})," in one ",(0,r.jsx)(t.strong,{children:"Save to File"})," component, and ",(0,r.jsx)(t.code,{children:".xlsx"})," in another."]}),"\n",(0,r.jsxs)(t.li,{children:["In the ",(0,r.jsx)(t.strong,{children:"File Path"})," field, enter the path for your saved file.\nThis example uses ",(0,r.jsx)(t.code,{children:"./output/employees.xlsx"})," and ",(0,r.jsx)(t.code,{children:"./output/employees.md"})," to save the files in a directory relative to where Langflow is running.\nThe component accepts both relative and absolute paths, and creates any necessary directories if they don't exist."]}),"\n"]}),"\n",(0,r.jsx)(t.admonition,{type:"tip",children:(0,r.jsxs)(t.p,{children:["If you enter a format in the ",(0,r.jsx)(t.code,{children:"file_path"})," that is not accepted, the component appends the proper format to the file.\nFor example, if the selected ",(0,r.jsx)(t.code,{children:"file_format"})," is ",(0,r.jsx)(t.code,{children:"csv"}),", and you enter ",(0,r.jsx)(t.code,{children:"file_path"})," as ",(0,r.jsx)(t.code,{children:"./output/test.txt"}),", the file is saved as ",(0,r.jsx)(t.code,{children:"./output/test.txt.csv"})," so the file is not corrupted."]})}),"\n",(0,r.jsxs)(t.ol,{start:"5",children:["\n",(0,r.jsxs)(t.li,{children:["Send a POST request to the ",(0,r.jsx)(t.strong,{children:"Webhook"})," containing your JSON data.\nReplace ",(0,r.jsx)(t.code,{children:"YOUR_FLOW_ID"})," with your flow ID.\nThis example uses the default Langflow server address."]}),"\n"]}),"\n",(0,r.jsx)(h.Code,{codeConfig:x,northPanel:{tabs:[""],active:"",heightRatio:1},files:[{name:"",focus:"",code:{lines:[{tokens:[{content:'curl -X POST "http://127.0.0.1:7860/api/v1/webhook/YOUR_FLOW_ID" \\',props:{}}]},{tokens:[{content:"-H 'Content-Type: application/json' \\",props:{}}]},{tokens:[{content:"-d '{",props:{}}]},{tokens:[{content:' "Name": ["Alex Cruz", "Kalani Smith", "Noam Johnson"],',props:{}}]},{tokens:[{content:' "Role": ["Developer", "Designer", "Manager"],',props:{}}]},{tokens:[{content:' "Department": ["Engineering", "Design", "Management"]',props:{}}]},{tokens:[{content:"}'",props:{}}]}],lang:"text"},annotations:[]}]}),"\n",(0,r.jsxs)(t.ol,{start:"6",children:["\n",(0,r.jsxs)(t.li,{children:["In your local filesystem, open the ",(0,r.jsx)(t.code,{children:"outputs"})," directory.\nYou should see two files created from the data you've sent: one in ",(0,r.jsx)(t.code,{children:".xlsx"})," for structured spreadsheets, and one in Markdown."]}),"\n"]}),"\n",(0,r.jsx)(h.Code,{codeConfig:x,northPanel:{tabs:[""],active:"",heightRatio:1},files:[{name:"",focus:"",code:{lines:[{tokens:[{content:"| Name | Role | Department |",props:{}}]},{tokens:[{content:"|:-------------|:----------|:-------------|",props:{}}]},{tokens:[{content:"| Alex Cruz | Developer | Engineering |",props:{}}]},{tokens:[{content:"| Kalani Smith | Designer | Design |",props:{}}]},{tokens:[{content:"| Noam Johnson | Manager | Management |",props:{}}]}],lang:"text"},annotations:[]}]}),"\n",(0,r.jsx)(t.h3,{id:"file-input-format-options",children:"File input format options"}),"\n",(0,r.jsxs)(t.p,{children:["For ",(0,r.jsx)(t.code,{children:"DataFrame"})," and ",(0,r.jsx)(t.code,{children:"Data"})," inputs, the component can create:"]}),"\n",(0,r.jsxs)(t.ul,{children:["\n",(0,r.jsx)(t.li,{children:(0,r.jsx)(t.code,{children:"csv"})}),"\n",(0,r.jsx)(t.li,{children:(0,r.jsx)(t.code,{children:"excel"})}),"\n",(0,r.jsx)(t.li,{children:(0,r.jsx)(t.code,{children:"json"})}),"\n",(0,r.jsx)(t.li,{children:(0,r.jsx)(t.code,{children:"markdown"})}),"\n",(0,r.jsx)(t.li,{children:(0,r.jsx)(t.code,{children:"pdf"})}),"\n"]}),"\n",(0,r.jsxs)(t.p,{children:["For ",(0,r.jsx)(t.code,{children:"Message"})," inputs, the component can create:"]}),"\n",(0,r.jsxs)(t.ul,{children:["\n",(0,r.jsx)(t.li,{children:(0,r.jsx)(t.code,{children:"txt"})}),"\n",(0,r.jsx)(t.li,{children:(0,r.jsx)(t.code,{children:"json"})}),"\n",(0,r.jsx)(t.li,{children:(0,r.jsx)(t.code,{children:"markdown"})}),"\n",(0,r.jsx)(t.li,{children:(0,r.jsx)(t.code,{children:"pdf"})}),"\n"]}),"\n",(0,r.jsxs)(s,{children:[(0,r.jsx)("summary",{children:"Parameters"}),(0,r.jsx)(t.p,{children:(0,r.jsx)(t.strong,{children:"Inputs"})}),(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_text"}),(0,r.jsx)(t.td,{children:"Input Text"}),(0,r.jsx)(t.td,{children:"The text to analyze and extract patterns from."})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"pattern"}),(0,r.jsx)(t.td,{children:"Regex Pattern"}),(0,r.jsx)(t.td,{children:"The regular expression pattern to match in the text."})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"input_type"}),(0,r.jsx)(t.td,{children:"Input Type"}),(0,r.jsx)(t.td,{children:"The type of input to save."})]}),(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:"The DataFrame to save."})]}),(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:"The Data object to save."})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"message"}),(0,r.jsx)(t.td,{children:"Message"}),(0,r.jsx)(t.td,{children:"The Message to save."})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"file_format"}),(0,r.jsx)(t.td,{children:"File Format"}),(0,r.jsx)(t.td,{children:"The file format to save the input in."})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"file_path"}),(0,r.jsx)(t.td,{children:"File Path"}),(0,r.jsx)(t.td,{children:"The full file path including filename and extension."})]})]})]}),(0,r.jsx)(t.p,{children:(0,r.jsx)(t.strong,{children:"Outputs"})}),(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:"A list of extracted matches as Data objects."})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"text"}),(0,r.jsx)(t.td,{children:"Message"}),(0,r.jsx)(t.td,{children:"The extracted matches formatted as a Message object."})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"confirmation"}),(0,r.jsx)(t.td,{children:"Confirmation"}),(0,r.jsx)(t.td,{children:"The confirmation message after saving the file."})]})]})]})]}),"\n",(0,r.jsx)(t.h2,{id:"split-text",children:"Split text"}),"\n",(0,r.jsx)(t.p,{children:"This component splits text into chunks based on specified criteria. It's ideal for chunking data to be tokenized and embedded into vector databases."}),"\n",(0,r.jsxs)(t.p,{children:["The ",(0,r.jsx)(t.strong,{children:"Split Text"})," component outputs ",(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 individual text chunks.\nThe ",(0,r.jsx)(t.strong,{children:"DataFrame"})," output returns a structured data format, with additional ",(0,r.jsx)(t.code,{children:"text"})," and ",(0,r.jsx)(t.code,{children:"metadata"})," columns applied."]}),"\n",(0,r.jsxs)(t.ol,{children:["\n",(0,r.jsxs)(t.li,{children:["To use this component in a flow, connect a component that outputs ",(0,r.jsx)(t.a,{href:"/concepts-objects",children:"Data or DataFrame"})," to the ",(0,r.jsx)(t.strong,{children:"Split Text"})," component's ",(0,r.jsx)(t.strong,{children:"Data"})," port.\nThis example uses the ",(0,r.jsx)(t.strong,{children:"URL"})," component, which is fetching JSON placeholder data."]}),"\n"]}),"\n",(0,r.jsx)(t.p,{children:(0,r.jsx)(t.img,{alt:"Split text component and chroma-db",src:n(49823).A+"",width:"2198",height:"1626"})}),"\n",(0,r.jsxs)(t.ol,{start:"2",children:["\n",(0,r.jsxs)(t.li,{children:["In the ",(0,r.jsx)(t.strong,{children:"Split Text"})," component, define your data splitting parameters."]}),"\n"]}),"\n",(0,r.jsxs)(t.p,{children:["This example splits incoming JSON data at the separator ",(0,r.jsx)(t.code,{children:"},"}),", so each chunk contains one JSON object."]}),"\n",(0,r.jsxs)(t.p,{children:["The order of precedence is ",(0,r.jsx)(t.strong,{children:"Separator"}),", then ",(0,r.jsx)(t.strong,{children:"Chunk Size"}),", and then ",(0,r.jsx)(t.strong,{children:"Chunk Overlap"}),".\nIf any segment after separator splitting is longer than ",(0,r.jsx)(t.code,{children:"chunk_size"}),", it is split again to fit within ",(0,r.jsx)(t.code,{children:"chunk_size"}),"."]}),"\n",(0,r.jsxs)(t.p,{children:["After ",(0,r.jsx)(t.code,{children:"chunk_size"}),", ",(0,r.jsx)(t.strong,{children:"Chunk Overlap"})," is applied between chunks to maintain context."]}),"\n",(0,r.jsxs)(t.ol,{start:"3",children:["\n",(0,r.jsxs)(t.li,{children:["Connect a ",(0,r.jsx)(t.strong,{children:"Chat Output"})," component to the ",(0,r.jsx)(t.strong,{children:"Split Text"})," component's ",(0,r.jsx)(t.strong,{children:"DataFrame"})," output to view its output."]}),"\n",(0,r.jsxs)(t.li,{children:["Click ",(0,r.jsx)(t.strong,{children:"Playground"}),", and then click ",(0,r.jsx)(t.strong,{children:"Run Flow"}),".\nThe output contains a table of JSON objects split at ",(0,r.jsx)(t.code,{children:"},"}),"."]}),"\n"]}),"\n",(0,r.jsx)(h.Code,{codeConfig:x,northPanel:{tabs:[""],active:"",heightRatio:1},files:[{name:"",focus:"",code:{lines:[{tokens:[{content:"{",props:{}}]},{tokens:[{content:'"userId": 1,',props:{}}]},{tokens:[{content:'"id": 1,',props:{}}]},{tokens:[{content:'"title": "Introduction to Artificial Intelligence",',props:{}}]},{tokens:[{content:'"body": "Learn the basics of Artificial Intelligence and its applications in various industries.",',props:{}}]},{tokens:[{content:'"link": "https://example.com/article1",',props:{}}]},{tokens:[{content:'"comment_count": 8',props:{}}]},{tokens:[{content:"},",props:{}}]},{tokens:[{content:"{",props:{}}]},{tokens:[{content:'"userId": 2,',props:{}}]},{tokens:[{content:'"id": 2,',props:{}}]},{tokens:[{content:'"title": "Web Development with React",',props:{}}]},{tokens:[{content:'"body": "Build modern web applications using React.js and explore its powerful features.",',props:{}}]},{tokens:[{content:'"link": "https://example.com/article2",',props:{}}]},{tokens:[{content:'"comment_count": 12',props:{}}]},{tokens:[{content:"},",props:{}}]}],lang:"text"},annotations:[]}]}),"\n",(0,r.jsxs)(t.ol,{start:"5",children:["\n",(0,r.jsxs)(t.li,{children:["Clear the ",(0,r.jsx)(t.strong,{children:"Separator"})," field, and then run the flow again.\nInstead of JSON objects, the output contains 50-character lines of text with 10 characters of overlap."]}),"\n"]}),"\n",(0,r.jsx)(h.Code,{codeConfig:x,northPanel:{tabs:[""],active:"",heightRatio:1},files:[{name:"",focus:"",code:{lines:[{tokens:[{content:'First chunk: "title": "Introduction to Artificial Intelligence""',props:{}}]},{tokens:[{content:'Second chunk: "elligence", "body": "Learn the basics of Artif"',props:{}}]},{tokens:[{content:'Third chunk: "s of Artificial Intelligence and its applications"',props:{}}]}],lang:"text"},annotations:[]}]}),"\n",(0,r.jsxs)(s,{children:[(0,r.jsx)("summary",{children:"Parameters"}),(0,r.jsx)(t.p,{children:(0,r.jsx)(t.strong,{children:"Inputs"})}),(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 Documents"}),(0,r.jsxs)(t.td,{children:["The data to split. The component accepts ",(0,r.jsx)(t.a,{href:"/concepts-objects#data-object",children:"Data"})," or ",(0,r.jsx)(t.a,{href:"/concepts-objects#dataframe-object",children:"DataFrame"})," objects."]})]}),(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:["The number of characters to overlap between chunks. 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:["The maximum number of characters in each chunk. Default: ",(0,r.jsx)(t.code,{children:"1000"}),"."]})]}),(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:["The character to split on. Default: ",(0,r.jsx)(t.code,{children:"newline"}),"."]})]}),(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:["The key to use for the text column. Default: ",(0,r.jsx)(t.code,{children:"text"}),"."]})]})]})]}),(0,r.jsx)(t.p,{children:(0,r.jsx)(t.strong,{children:"Outputs"})}),(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:"chunks"}),(0,r.jsx)(t.td,{children:"Chunks"}),(0,r.jsxs)(t.td,{children:["A list of split text chunks as ",(0,r.jsx)(t.a,{href:"/concepts-objects#data-object",children:"Data"})," objects."]})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"dataframe"}),(0,r.jsx)(t.td,{children:"DataFrame"}),(0,r.jsxs)(t.td,{children:["A list of split text chunks as ",(0,r.jsx)(t.a,{href:"/concepts-objects#dataframe-object",children:"DataFrame"})," objects."]})]})]})]})]}),"\n",(0,r.jsx)(t.h2,{id:"update-data",children:"Update data"}),"\n",(0,r.jsx)(t.p,{children:"This component dynamically updates or appends data with specified fields."}),"\n",(0,r.jsxs)(s,{children:[(0,r.jsx)("summary",{children:"Parameters"}),(0,r.jsx)(t.p,{children:(0,r.jsx)(t.strong,{children:"Inputs"})}),(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:"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:"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:"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:"Validates the text key presence."})]})]})]}),(0,r.jsx)(t.p,{children:(0,r.jsx)(t.strong,{children:"Outputs"})}),(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.jsx)(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:"The updated Data objects."})]})})]})]}),"\n",(0,r.jsx)(t.h2,{id:"legacy-components",children:"Legacy components"}),"\n",(0,r.jsxs)(t.p,{children:[(0,r.jsx)(t.strong,{children:"Legacy"})," components are available for use but are no longer supported."]}),"\n",(0,r.jsx)(t.h3,{id:"alter-metadata",children:"Alter metadata"}),"\n",(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.a,{href:"/concepts-objects#message-object",children:"Message"})," and ",(0,r.jsx)(t.a,{href:"/concepts-objects#data-object",children:"Data"})," objects, and can also create a new Data object from user-provided text."]}),"\n",(0,r.jsxs)(s,{children:[(0,r.jsx)("summary",{children:"Parameters"}),(0,r.jsx)(t.p,{children:(0,r.jsx)(t.strong,{children:"Inputs"})}),(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:"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:["Text input; the value is contained in the 'text' attribute of the ",(0,r.jsx)(t.a,{href:"/concepts-objects#data-object",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:"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:"Metadata fields to remove"})]})]})]}),(0,r.jsx)(t.p,{children:(0,r.jsx)(t.strong,{children:"Outputs"})}),(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.jsx)(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:"List of Input objects, each with added metadata"})]})})]})]}),"\n",(0,r.jsx)(t.h3,{id:"create-data",children:"Create data"}),"\n",(0,r.jsx)(t.admonition,{type:"important",children:(0,r.jsxs)(t.p,{children:["This component is in ",(0,r.jsx)(t.strong,{children:"Legacy"}),", which means it is no longer in active development as of Langflow version 1.1.3."]})}),"\n",(0,r.jsxs)(t.p,{children:["This component dynamically creates a ",(0,r.jsx)(t.a,{href:"/concepts-objects#data-object",children:"Data"})," object with a specified number of fields."]}),"\n",(0,r.jsxs)(s,{children:[(0,r.jsx)("summary",{children:"Parameters"}),(0,r.jsx)(t.p,{children:(0,r.jsx)(t.strong,{children:"Inputs"})}),(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:"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:"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:["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"}),"."]})]})]})]}),(0,r.jsx)(t.p,{children:(0,r.jsx)(t.strong,{children:"Outputs"})}),(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.jsx)(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:["A ",(0,r.jsx)(t.a,{href:"/concepts-objects#data-object",children:"Data"})," object created with the specified fields and text key."]})]})})]})]}),"\n",(0,r.jsx)(t.h3,{id:"json-cleaner",children:"JSON cleaner"}),"\n",(0,r.jsx)(t.p,{children:"The JSON cleaner component cleans JSON strings to ensure they are fully compliant with the JSON specification."}),"\n",(0,r.jsxs)(s,{children:[(0,r.jsx)("summary",{children:"Parameters"}),(0,r.jsx)(t.p,{children:(0,r.jsx)(t.strong,{children:"Inputs"})}),(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:"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.jsx)(t.td,{children:"If set to 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:"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.jsx)(t.td,{children:"If set to 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.jsx)(t.p,{children:(0,r.jsx)(t.strong,{children:"Outputs"})}),(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.jsx)(t.tbody,{children:(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:"The resulting cleaned, repaired, and validated JSON string that fully complies with the JSON specification."})]})})]})]}),"\n",(0,r.jsx)(t.h3,{id:"parse-dataframe",children:"Parse DataFrame"}),"\n",(0,r.jsx)(t.admonition,{type:"important",children:(0,r.jsxs)(t.p,{children:["This component is in ",(0,r.jsx)(t.strong,{children:"Legacy"}),", which means it is no longer in active development as of Langflow version 1.3.\nInstead, use the ",(0,r.jsx)(t.a,{href:"#parser",children:"Parser"})," component."]})}),"\n",(0,r.jsx)(t.p,{children:"This component converts DataFrames into plain text using templates."}),"\n",(0,r.jsxs)(s,{children:[(0,r.jsx)("summary",{children:"Parameters"}),(0,r.jsx)(t.p,{children:(0,r.jsx)(t.strong,{children:"Inputs"})}),(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:"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:["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:"String to join rows in output."})]})]})]}),(0,r.jsx)(t.p,{children:(0,r.jsx)(t.strong,{children:"Outputs"})}),(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.jsx)(t.tbody,{children:(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:"All rows combined into single text."})]})})]})]}),"\n",(0,r.jsx)(t.h3,{id:"parse-json",children:"Parse JSON"}),"\n",(0,r.jsx)(t.admonition,{type:"important",children:(0,r.jsxs)(t.p,{children:["This component is in ",(0,r.jsx)(t.strong,{children:"Legacy"}),", which means it is no longer in active development as of Langflow version 1.1.3."]})}),"\n",(0,r.jsx)(t.p,{children:"This component converts and extracts JSON fields using JQ queries."}),"\n",(0,r.jsxs)(s,{children:[(0,r.jsx)("summary",{children:"Parameters"}),(0,r.jsx)(t.p,{children:(0,r.jsx)(t.strong,{children:"Inputs"})}),(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.jsxs)(t.td,{children:["Data object to filter (",(0,r.jsx)(t.a,{href:"/concepts-objects#message-object",children:"Message"})," or ",(0,r.jsx)(t.a,{href:"/concepts-objects#data-object",children:"Data"}),")."]})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"query"}),(0,r.jsx)(t.td,{children:"JQ Query"}),(0,r.jsx)(t.td,{children:"JQ Query to filter the data"})]})]})]}),(0,r.jsx)(t.p,{children:(0,r.jsx)(t.strong,{children:"Outputs"})}),(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.jsx)(t.tbody,{children:(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"filtered_data"}),(0,r.jsx)(t.td,{children:"Filtered Data"}),(0,r.jsxs)(t.td,{children:["Filtered data as list of ",(0,r.jsx)(t.a,{href:"/concepts-objects#data-object",children:"Data"})," objects."]})]})})]})]}),"\n",(0,r.jsx)(t.h3,{id:"select-data",children:"Select data"}),"\n",(0,r.jsx)(t.admonition,{type:"important",children:(0,r.jsxs)(t.p,{children:["This component is in ",(0,r.jsx)(t.strong,{children:"Legacy"}),", which means it is no longer in active development as of Langflow version 1.1.3."]})}),"\n",(0,r.jsxs)(t.p,{children:["This component selects a single ",(0,r.jsx)(t.a,{href:"/concepts-objects#data-object",children:"Data"})," item from a list."]}),"\n",(0,r.jsxs)(s,{children:[(0,r.jsx)("summary",{children:"Parameters"}),(0,r.jsx)(t.p,{children:(0,r.jsx)(t.strong,{children:"Inputs"})}),(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:"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:"Index of the data to select"})]})]})]}),(0,r.jsx)(t.p,{children:(0,r.jsx)(t.strong,{children:"Outputs"})}),(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.jsx)(t.tbody,{children:(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:["The selected ",(0,r.jsx)(t.a,{href:"/concepts-objects#data-object",children:"Data"})," object."]})]})})]})]})]})}function m(e={}){const{wrapper:t}={...(0,i.R)(),...e.components};return t?(0,r.jsx)(t,{...e,children:(0,r.jsx)(p,{...e})}):p(e)}function u(e,t){throw new Error("Expected "+(t?"component":"object")+" `"+e+"` to be defined: you likely forgot to import, pass, or provide it.")}},66539:(e,t,n)=>{n.d(t,{A:()=>s});const s=n.p+"assets/images/component-lambda-filter-c409acffcea6f80062295f4d8de4e881.png"},84443:(e,t,n)=>{n.d(t,{A:()=>i});n(96540);var s=n(64058),r=n(74848);function i(e){let{name:t,...n}=e;const i=s[t];return i?(0,r.jsx)(i,{...n}):null}},96218:(e,t,n)=>{n.d(t,{A:()=>s});const s=n.p+"assets/images/component-parser-5f97943bbc863cee6b02c74d325a062f.png"}}]); \ No newline at end of file diff --git a/assets/js/885eb549.5304d422.js b/assets/js/885eb549.b5bc7ea1.js similarity index 98% rename from assets/js/885eb549.5304d422.js rename to assets/js/885eb549.b5bc7ea1.js index 7416334234..de732b0209 100644 --- a/assets/js/885eb549.5304d422.js +++ b/assets/js/885eb549.b5bc7ea1.js @@ -1 +1 @@ -"use strict";(self.webpackChunklangflow_docs=self.webpackChunklangflow_docs||[]).push([[5647],{62211:(e,t,o)=>{o.r(t),o.d(t,{CH:()=>a,assets:()=>p,chCodeConfig:()=>h,contentTitle:()=>d,default:()=>u,frontMatter:()=>i,metadata:()=>n,toc:()=>x});const n=JSON.parse('{"id":"Concepts/concepts-components","title":"Components","description":"A\xa0component\xa0is a single building block within a flow with inputs, outputs, functions, and parameters that define its functionality. A single component is like a class within a larger application.","source":"@site/docs/Concepts/concepts-components.md","sourceDirName":"Concepts","slug":"/concepts-components","permalink":"/concepts-components","draft":false,"unlisted":false,"tags":[],"version":"current","frontMatter":{"title":"Components","slug":"/concepts-components"},"sidebar":"docs","previous":{"title":"Playground","permalink":"/concepts-playground"},"next":{"title":"Flows","permalink":"/concepts-flows"}}');var s=o(74848),r=o(28453),c=o(24754),l=o(84443);const i={title:"Components",slug:"/concepts-components"},d="Langflow components overview",p={},a={annotations:c.hk,Code:c.Cy},h={staticMediaQuery:"not screen, (max-width: 768px)",lineNumbers:!0,showCopyButton:!0,themeName:"github-dark"},x=[{value:"Component menu",id:"component-menu",level:2},{value:"Component ports",id:"component-ports",level:2},{value:"Component port data type colors",id:"component-port-data-type-colors",level:3},{value:"Component code",id:"component-code",level:2},{value:"Freeze",id:"freeze",level:2},{value:"Additional component options",id:"additional-component-options",level:2},{value:"Component shortcuts",id:"component-shortcuts",level:3},{value:"Group components in the workspace",id:"group-components-in-the-workspace",level:2},{value:"Component version",id:"component-version",level:2},{value:"Components sidebar",id:"components-sidebar",level:2}];function j(e){const t={a:"a",code:"code",h1:"h1",h2:"h2",h3:"h3",header:"header",li:"li",ol:"ol",p:"p",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,r.R)(),...e.components},{Details:o}=t;return a||m("CH",!1),a.Code||m("CH.Code",!0),o||m("Details",!0),(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)("style",{dangerouslySetInnerHTML:{__html:'[data-ch-theme="github-dark"] { --ch-t-colorScheme: dark;--ch-t-foreground: #c9d1d9;--ch-t-background: #0d1117;--ch-t-lighter-inlineBackground: #0d1117e6;--ch-t-editor-background: #0d1117;--ch-t-editor-foreground: #c9d1d9;--ch-t-editor-lineHighlightBackground: #6e76811a;--ch-t-editor-rangeHighlightBackground: #ffffff0b;--ch-t-editor-infoForeground: #3794FF;--ch-t-editor-selectionBackground: #264F78;--ch-t-focusBorder: #1f6feb;--ch-t-tab-activeBackground: #0d1117;--ch-t-tab-activeForeground: #c9d1d9;--ch-t-tab-inactiveBackground: #010409;--ch-t-tab-inactiveForeground: #8b949e;--ch-t-tab-border: #30363d;--ch-t-tab-activeBorder: #0d1117;--ch-t-editorGroup-border: #30363d;--ch-t-editorGroupHeader-tabsBackground: #010409;--ch-t-editorLineNumber-foreground: #6e7681;--ch-t-input-background: #0d1117;--ch-t-input-foreground: #c9d1d9;--ch-t-input-border: #30363d;--ch-t-icon-foreground: #8b949e;--ch-t-sideBar-background: #010409;--ch-t-sideBar-foreground: #c9d1d9;--ch-t-sideBar-border: #30363d;--ch-t-list-activeSelectionBackground: #6e768166;--ch-t-list-activeSelectionForeground: #c9d1d9;--ch-t-list-hoverBackground: #6e76811a;--ch-t-list-hoverForeground: #c9d1d9; }'}}),"\n","\n",(0,s.jsx)(t.header,{children:(0,s.jsx)(t.h1,{id:"langflow-components-overview",children:"Langflow components overview"})}),"\n",(0,s.jsx)(t.p,{children:"A\xa0component\xa0is a single building block within a flow with inputs, outputs, functions, and parameters that define its functionality. A single component is like a class within a larger application."}),"\n",(0,s.jsxs)(t.p,{children:["To add a component to a flow, drag it from the ",(0,s.jsx)(t.strong,{children:"Component"})," menu to the ",(0,s.jsx)(t.strong,{children:"Workspace"}),"."]}),"\n",(0,s.jsx)(t.p,{children:"Learn more about components and how they work on this page."}),"\n",(0,s.jsx)(t.h2,{id:"component-menu",children:"Component menu"}),"\n",(0,s.jsx)(t.p,{children:"Each component is unique, but all have a menu bar at the top that looks something like the following:"}),"\n",(0,s.jsx)("img",{src:"/img/openai-model-component.png",alt:"Open AI component",style:{display:"block",margin:"auto",width:300}}),"\n",(0,s.jsx)(t.p,{children:"Use the component controls to do the following:"}),"\n",(0,s.jsxs)(t.ul,{children:["\n",(0,s.jsxs)(t.li,{children:[(0,s.jsx)(t.strong,{children:"Code"}),"\xa0\u2014 Modify the component's Python code and save your changes."]}),"\n",(0,s.jsxs)(t.li,{children:[(0,s.jsx)(t.strong,{children:"Controls"}),"\xa0\u2014 Adjust all component parameters."]}),"\n",(0,s.jsxs)(t.li,{children:[(0,s.jsx)(t.strong,{children:"Freeze"}),"\xa0\u2014 After a component runs, lock its previous output state to prevent it from re-running."]}),"\n"]}),"\n",(0,s.jsxs)(t.p,{children:["Click\xa0",(0,s.jsx)(l.A,{name:"Ellipsis","aria-label":"Horizontal ellipsis"})," ",(0,s.jsx)(t.strong,{children:"All"}),"\xa0to see additional options for a component."]}),"\n",(0,s.jsxs)(t.p,{children:["To view a component\u2019s output and logs, click the ",(0,s.jsx)(l.A,{name:"TextSearch","aria-label":"Search and filter"})," icon."]}),"\n",(0,s.jsxs)(t.p,{children:["To run a single component, click ",(0,s.jsx)(l.A,{name:"Play","aria-label":"Play button"})," ",(0,s.jsx)(t.strong,{children:"Play"}),"."]}),"\n",(0,s.jsxs)(t.p,{children:["A ",(0,s.jsx)(l.A,{name:"Check","aria-label":"Checkmark"}),(0,s.jsx)(t.strong,{children:"Checkmark"})," indicates that the component ran successfully."]}),"\n",(0,s.jsxs)(t.p,{children:["Running a single component with the ",(0,s.jsx)(t.strong,{children:"Play"})," button is different from running the entire flow. In a single component run, the ",(0,s.jsx)(t.code,{children:"build_vertex"})," function is called, which builds and runs only the single component with direct inputs provided through the UI (the ",(0,s.jsx)(t.code,{children:"inputs_dict"})," parameter). The ",(0,s.jsx)(t.code,{children:"VertexBuildResult"})," data is passed to the ",(0,s.jsx)(t.code,{children:"build_and_run"})," method, which calls the component's ",(0,s.jsx)(t.code,{children:"build"})," method and runs it. Unlike running the full flow, running a single component does not automatically execute its upstream dependencies."]}),"\n",(0,s.jsx)(t.h2,{id:"component-ports",children:"Component ports"}),"\n",(0,s.jsxs)(t.p,{children:["Handles (",(0,s.jsx)(l.A,{name:"Circle",size:"16","aria-label":"A circle on the side of a component"}),") on the side of a component indicate the types of inputs and outputs that can be connected at that port. Hover over a handle to see connection details."]}),"\n",(0,s.jsx)("img",{src:"/img/prompt-component.png",alt:"Prompt component",style:{display:"block",margin:"auto",width:300}}),"\n",(0,s.jsx)(t.h3,{id:"component-port-data-type-colors",children:"Component port data type colors"}),"\n",(0,s.jsx)(t.p,{children:"The following table lists the handle colors and their corresponding data types:"}),"\n",(0,s.jsxs)(t.table,{children:[(0,s.jsx)(t.thead,{children:(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.th,{children:"Data type"}),(0,s.jsx)(t.th,{children:"Handle color"}),(0,s.jsx)(t.th,{children:"Handle"})]})}),(0,s.jsxs)(t.tbody,{children:[(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:"BaseLanguageModel"}),(0,s.jsx)(t.td,{children:"Fuchsia"}),(0,s.jsx)(t.td,{children:(0,s.jsx)(l.A,{name:"Circle",size:"16","aria-label":"A circle on the side of a component",style:{color:"#c026d3"}})})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:"Data"}),(0,s.jsx)(t.td,{children:"Red"}),(0,s.jsx)(t.td,{children:(0,s.jsx)(l.A,{name:"Circle",size:"16","aria-label":"A circle on the side of a component",style:{color:"#dc2626"}})})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:"Document"}),(0,s.jsx)(t.td,{children:"Lime"}),(0,s.jsx)(t.td,{children:(0,s.jsx)(l.A,{name:"Circle",size:"16","aria-label":"A circle on the side of a component",style:{color:"#65a30d"}})})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:"Embeddings"}),(0,s.jsx)(t.td,{children:"Emerald"}),(0,s.jsx)(t.td,{children:(0,s.jsx)(l.A,{name:"Circle",size:"16","aria-label":"A circle on the side of a component",style:{color:"#10b981"}})})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:"LanguageModel"}),(0,s.jsx)(t.td,{children:"Fuchsia"}),(0,s.jsx)(t.td,{children:(0,s.jsx)(l.A,{name:"Circle",size:"16","aria-label":"A circle on the side of a component",style:{color:"#c026d3"}})})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:"Message"}),(0,s.jsx)(t.td,{children:"Indigo"}),(0,s.jsx)(t.td,{children:(0,s.jsx)(l.A,{name:"Circle",size:"16","aria-label":"A circle on the side of a component",style:{color:"#4f46e5"}})})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:"Prompt"}),(0,s.jsx)(t.td,{children:"Violet"}),(0,s.jsx)(t.td,{children:(0,s.jsx)(l.A,{name:"Circle",size:"16","aria-label":"A circle on the side of a component",style:{color:"#7c3aed"}})})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:"str"}),(0,s.jsx)(t.td,{children:"Indigo"}),(0,s.jsx)(t.td,{children:(0,s.jsx)(l.A,{name:"Circle",size:"16","aria-label":"A circle on the side of a component",style:{color:"#4F46E5"}})})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:"Text"}),(0,s.jsx)(t.td,{children:"Indigo"}),(0,s.jsx)(t.td,{children:(0,s.jsx)(l.A,{name:"Circle",size:"16","aria-label":"A circle on the side of a component",style:{color:"#4F46E5"}})})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:"unknown"}),(0,s.jsx)(t.td,{children:"Gray"}),(0,s.jsx)(t.td,{children:(0,s.jsx)(l.A,{name:"Circle",size:"16","aria-label":"A circle on the side of a component",style:{color:"#9CA3AF"}})})]})]})]}),"\n",(0,s.jsx)(t.h2,{id:"component-code",children:"Component code"}),"\n",(0,s.jsxs)(t.p,{children:["A component inherits from a base ",(0,s.jsx)(t.code,{children:"Component"})," class that defines its interface and behavior."]}),"\n",(0,s.jsxs)(t.p,{children:["For example, the ",(0,s.jsx)(t.a,{href:"https://github.com/langflow-ai/langflow/blob/main/src/backend/base/langflow/components/langchain_utilities/recursive_character.py",children:"Recursive character text splitter"})," is a child of the ",(0,s.jsx)(t.a,{href:"https://github.com/langflow-ai/langflow/blob/main/src/backend/base/langflow/base/textsplitters/model.py",children:"LCTextSplitterComponent"})," class."]}),"\n",(0,s.jsxs)(o,{children:[(0,s.jsx)("summary",{children:"Recursive character text splitter code"}),(0,s.jsx)(a.Code,{codeConfig:h,northPanel:{tabs:[""],active:"",heightRatio:1},files:[{name:"",focus:"",code:{lines:[{tokens:[{content:"from",props:{style:{color:"#FF7B72"}}},{content:" typing ",props:{style:{color:"#C9D1D9"}}},{content:"import",props:{style:{color:"#FF7B72"}}},{content:" Any",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:"",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:"from",props:{style:{color:"#FF7B72"}}},{content:" langchain_text_splitters ",props:{style:{color:"#C9D1D9"}}},{content:"import",props:{style:{color:"#FF7B72"}}},{content:" RecursiveCharacterTextSplitter, TextSplitter",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:"",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:"from",props:{style:{color:"#FF7B72"}}},{content:" langflow.base.textsplitters.model ",props:{style:{color:"#C9D1D9"}}},{content:"import",props:{style:{color:"#FF7B72"}}},{content:" LCTextSplitterComponent",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:"from",props:{style:{color:"#FF7B72"}}},{content:" langflow.inputs.inputs ",props:{style:{color:"#C9D1D9"}}},{content:"import",props:{style:{color:"#FF7B72"}}},{content:" DataInput, IntInput, MessageTextInput",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:"from",props:{style:{color:"#FF7B72"}}},{content:" langflow.utils.util ",props:{style:{color:"#C9D1D9"}}},{content:"import",props:{style:{color:"#FF7B72"}}},{content:" unescape_string",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:"",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:"class ",props:{style:{color:"#FF7B72"}}},{content:"RecursiveCharacterTextSplitterComponent",props:{style:{color:"#FFA657"}}},{content:"(",props:{style:{color:"#C9D1D9"}}},{content:"LCTextSplitterComponent",props:{style:{color:"#79C0FF"}}},{content:"):",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" display_name: ",props:{style:{color:"#C9D1D9"}}},{content:"str ",props:{style:{color:"#79C0FF"}}},{content:"= ",props:{style:{color:"#FF7B72"}}},{content:'"Recursive Character Text Splitter"',props:{style:{color:"#A5D6FF"}}}]},{tokens:[{content:" description: ",props:{style:{color:"#C9D1D9"}}},{content:"str ",props:{style:{color:"#79C0FF"}}},{content:"= ",props:{style:{color:"#FF7B72"}}},{content:'"Split text trying to keep all related text together."',props:{style:{color:"#A5D6FF"}}}]},{tokens:[{content:" documentation: ",props:{style:{color:"#C9D1D9"}}},{content:"str ",props:{style:{color:"#79C0FF"}}},{content:"= ",props:{style:{color:"#FF7B72"}}},{content:'"https://docs.langflow.org/components-processing"',props:{style:{color:"#A5D6FF"}}}]},{tokens:[{content:" name ",props:{style:{color:"#C9D1D9"}}},{content:"= ",props:{style:{color:"#FF7B72"}}},{content:'"RecursiveCharacterTextSplitter"',props:{style:{color:"#A5D6FF"}}}]},{tokens:[{content:" icon ",props:{style:{color:"#C9D1D9"}}},{content:"= ",props:{style:{color:"#FF7B72"}}},{content:'"LangChain"',props:{style:{color:"#A5D6FF"}}}]},{tokens:[{content:"",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" inputs ",props:{style:{color:"#C9D1D9"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:" [",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" IntInput(",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" name",props:{style:{color:"#FFA657"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:'"chunk_size"',props:{style:{color:"#A5D6FF"}}},{content:",",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" display_name",props:{style:{color:"#FFA657"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:'"Chunk Size"',props:{style:{color:"#A5D6FF"}}},{content:",",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" info",props:{style:{color:"#FFA657"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:'"The maximum length of each chunk."',props:{style:{color:"#A5D6FF"}}},{content:",",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" value",props:{style:{color:"#FFA657"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:"1000",props:{style:{color:"#79C0FF"}}},{content:",",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" ),",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" IntInput(",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" name",props:{style:{color:"#FFA657"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:'"chunk_overlap"',props:{style:{color:"#A5D6FF"}}},{content:",",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" display_name",props:{style:{color:"#FFA657"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:'"Chunk Overlap"',props:{style:{color:"#A5D6FF"}}},{content:",",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" info",props:{style:{color:"#FFA657"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:'"The amount of overlap between chunks."',props:{style:{color:"#A5D6FF"}}},{content:",",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" value",props:{style:{color:"#FFA657"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:"200",props:{style:{color:"#79C0FF"}}},{content:",",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" ),",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" DataInput(",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" name",props:{style:{color:"#FFA657"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:'"data_input"',props:{style:{color:"#A5D6FF"}}},{content:",",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" display_name",props:{style:{color:"#FFA657"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:'"Input"',props:{style:{color:"#A5D6FF"}}},{content:",",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" info",props:{style:{color:"#FFA657"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:'"The texts to split."',props:{style:{color:"#A5D6FF"}}},{content:",",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" input_types",props:{style:{color:"#FFA657"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:"[",props:{style:{color:"#C9D1D9"}}},{content:'"Document"',props:{style:{color:"#A5D6FF"}}},{content:", ",props:{style:{color:"#C9D1D9"}}},{content:'"Data"',props:{style:{color:"#A5D6FF"}}},{content:"],",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" ),",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" MessageTextInput(",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" name",props:{style:{color:"#FFA657"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:'"separators"',props:{style:{color:"#A5D6FF"}}},{content:",",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" display_name",props:{style:{color:"#FFA657"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:'"Separators"',props:{style:{color:"#A5D6FF"}}},{content:",",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" info",props:{style:{color:"#FFA657"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:"'The characters to split on.",props:{style:{color:"#A5D6FF"}}},{content:"\\n",props:{style:{color:"#79C0FF"}}},{content:'If left empty defaults to ["',props:{style:{color:"#A5D6FF"}}},{content:"\\\\",props:{style:{color:"#79C0FF"}}},{content:"n",props:{style:{color:"#A5D6FF"}}},{content:"\\\\",props:{style:{color:"#79C0FF"}}},{content:'n", "',props:{style:{color:"#A5D6FF"}}},{content:"\\\\",props:{style:{color:"#79C0FF"}}},{content:'n", " ", ""].\'',props:{style:{color:"#A5D6FF"}}},{content:",",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" is_list",props:{style:{color:"#FFA657"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:"True",props:{style:{color:"#79C0FF"}}},{content:",",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" ),",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" ]",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:"",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" def ",props:{style:{color:"#FF7B72"}}},{content:"get_data_input",props:{style:{color:"#D2A8FF"}}},{content:"(self) -> Any:",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" return ",props:{style:{color:"#FF7B72"}}},{content:"self",props:{style:{color:"#79C0FF"}}},{content:".data_input",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:"",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" def ",props:{style:{color:"#FF7B72"}}},{content:"build_text_splitter",props:{style:{color:"#D2A8FF"}}},{content:"(self) -> TextSplitter:",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" if not ",props:{style:{color:"#FF7B72"}}},{content:"self",props:{style:{color:"#79C0FF"}}},{content:".separators:",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" separators: list[",props:{style:{color:"#C9D1D9"}}},{content:"str",props:{style:{color:"#79C0FF"}}},{content:"] ",props:{style:{color:"#C9D1D9"}}},{content:"| ",props:{style:{color:"#FF7B72"}}},{content:"None ",props:{style:{color:"#79C0FF"}}},{content:"= ",props:{style:{color:"#FF7B72"}}},{content:"None",props:{style:{color:"#79C0FF"}}}]},{tokens:[{content:" else",props:{style:{color:"#FF7B72"}}},{content:":",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" # check if the separators list has escaped characters",props:{style:{color:"#8B949E"}}}]},{tokens:[{content:" # if there are escaped characters, unescape them",props:{style:{color:"#8B949E"}}}]},{tokens:[{content:" separators ",props:{style:{color:"#C9D1D9"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:" [unescape_string(x) ",props:{style:{color:"#C9D1D9"}}},{content:"for",props:{style:{color:"#FF7B72"}}},{content:" x ",props:{style:{color:"#C9D1D9"}}},{content:"in ",props:{style:{color:"#FF7B72"}}},{content:"self",props:{style:{color:"#79C0FF"}}},{content:".separators]",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:"",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" return",props:{style:{color:"#FF7B72"}}},{content:" RecursiveCharacterTextSplitter(",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" separators",props:{style:{color:"#FFA657"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:"separators,",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" chunk_size",props:{style:{color:"#FFA657"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:"self",props:{style:{color:"#79C0FF"}}},{content:".chunk_size,",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" chunk_overlap",props:{style:{color:"#FFA657"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:"self",props:{style:{color:"#79C0FF"}}},{content:".chunk_overlap,",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" )",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:"",props:{style:{color:"#C9D1D9"}}}]}],lang:"python"},annotations:[]}]})]}),"\n",(0,s.jsx)(t.p,{children:"Components include definitions for inputs and outputs, which are represented in the UI with color-coded ports."}),"\n",(0,s.jsxs)(t.p,{children:[(0,s.jsx)(t.strong,{children:"Input Definition:"})," Each input (like ",(0,s.jsx)(t.code,{children:"IntInput"})," or ",(0,s.jsx)(t.code,{children:"DataInput"}),") specifies an input's type, name, and display properties, which appear as configurable fields in the component's UI panel."]}),"\n",(0,s.jsxs)(t.p,{children:[(0,s.jsx)(t.strong,{children:"Methods:"})," Components have methods or functions that handle their functionality. This component has two methods.\n",(0,s.jsx)(t.code,{children:"get_data_input"})," retrieves the text data to be split from the component's input. This makes the data available to the class.\n",(0,s.jsx)(t.code,{children:"build_text_splitter"})," creates a ",(0,s.jsx)(t.code,{children:"RecursiveCharacterTextSplitter"})," object by calling its parent class's ",(0,s.jsx)(t.code,{children:"build"})," method. The text is split with the created splitter and passed to the next component.\nWhen used in a flow, this component:"]}),"\n",(0,s.jsxs)(t.ol,{children:["\n",(0,s.jsx)(t.li,{children:"Displays its configuration options in the UI."}),"\n",(0,s.jsx)(t.li,{children:"Validates user inputs based on the input types."}),"\n",(0,s.jsx)(t.li,{children:"Processes data using the configured parameters."}),"\n",(0,s.jsx)(t.li,{children:"Passes results to the next component."}),"\n"]}),"\n",(0,s.jsx)(t.h2,{id:"freeze",children:"Freeze"}),"\n",(0,s.jsxs)(t.p,{children:["After a component runs, ",(0,s.jsx)(t.strong,{children:"Freeze"})," locks the component's previous output state to prevent it from re-running."]}),"\n",(0,s.jsxs)(t.p,{children:["If you\u2019re expecting consistent output from a component and don\u2019t need to re-run it, click ",(0,s.jsx)(t.strong,{children:"Freeze"}),"."]}),"\n",(0,s.jsxs)(t.p,{children:["Enabling ",(0,s.jsx)(t.strong,{children:"Freeze"})," freezes all components upstream of the selected component."]}),"\n",(0,s.jsx)(t.h2,{id:"additional-component-options",children:"Additional component options"}),"\n",(0,s.jsxs)(t.p,{children:["Click\xa0",(0,s.jsx)(l.A,{name:"Ellipsis","aria-label":"Horizontal ellipsis"})," ",(0,s.jsx)(t.strong,{children:"All"}),"\xa0to see additional options for a component."]}),"\n",(0,s.jsxs)(t.p,{children:["To modify a component's name or description, double-click in the ",(0,s.jsx)(t.strong,{children:"Name"})," or ",(0,s.jsx)(t.strong,{children:"Description"})," fields. Component descriptions accept Markdown syntax."]}),"\n",(0,s.jsx)(t.h3,{id:"component-shortcuts",children:"Component shortcuts"}),"\n",(0,s.jsx)(t.p,{children:"The following keyboard shortcuts are available when a component is selected."}),"\n",(0,s.jsxs)(t.table,{children:[(0,s.jsx)(t.thead,{children:(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.th,{children:"Menu item"}),(0,s.jsx)(t.th,{children:"Windows shortcut"}),(0,s.jsx)(t.th,{children:"Mac shortcut"}),(0,s.jsx)(t.th,{children:"Description"})]})}),(0,s.jsxs)(t.tbody,{children:[(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:"Code"}),(0,s.jsx)(t.td,{children:"Space"}),(0,s.jsx)(t.td,{children:"Space"}),(0,s.jsx)(t.td,{children:"Opens the code editor for the component."})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:"Advanced Settings"}),(0,s.jsx)(t.td,{children:"Ctrl + Shift + A"}),(0,s.jsx)(t.td,{children:"\u2318 + Shift + A"}),(0,s.jsx)(t.td,{children:"Opens advanced settings for the component."})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:"Save Changes"}),(0,s.jsx)(t.td,{children:"Ctrl + S"}),(0,s.jsx)(t.td,{children:"\u2318 + S"}),(0,s.jsx)(t.td,{children:"Saves changes to the current flow."})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:"Save Component"}),(0,s.jsx)(t.td,{children:"Ctrl + Alt + S"}),(0,s.jsx)(t.td,{children:"\u2318 + Alt + S"}),(0,s.jsx)(t.td,{children:"Saves the current component to Saved components."})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:"Duplicate"}),(0,s.jsx)(t.td,{children:"Ctrl + D"}),(0,s.jsx)(t.td,{children:"\u2318 + D"}),(0,s.jsx)(t.td,{children:"Creates a duplicate of the component."})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:"Copy"}),(0,s.jsx)(t.td,{children:"Ctrl + C"}),(0,s.jsx)(t.td,{children:"\u2318 + C"}),(0,s.jsx)(t.td,{children:"Copies the selected component."})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:"Cut"}),(0,s.jsx)(t.td,{children:"Ctrl + X"}),(0,s.jsx)(t.td,{children:"\u2318 + X"}),(0,s.jsx)(t.td,{children:"Cuts the selected component."})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:"Paste"}),(0,s.jsx)(t.td,{children:"Ctrl + V"}),(0,s.jsx)(t.td,{children:"\u2318 + V"}),(0,s.jsx)(t.td,{children:"Pastes the copied/cut component."})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:"Docs"}),(0,s.jsx)(t.td,{children:"Ctrl + Shift + D"}),(0,s.jsx)(t.td,{children:"\u2318 + Shift + D"}),(0,s.jsx)(t.td,{children:"Opens related documentation."})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:"Minimize"}),(0,s.jsx)(t.td,{children:"Ctrl + ."}),(0,s.jsx)(t.td,{children:"\u2318 + ."}),(0,s.jsx)(t.td,{children:"Minimizes the current component."})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:"Freeze"}),(0,s.jsx)(t.td,{children:"Ctrl + Shift + F"}),(0,s.jsx)(t.td,{children:"\u2318 + Shift + F"}),(0,s.jsx)(t.td,{children:"Freezes component state and upstream components."})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:"Download"}),(0,s.jsx)(t.td,{children:"Ctrl + J"}),(0,s.jsx)(t.td,{children:"\u2318 + J"}),(0,s.jsx)(t.td,{children:"Downloads the component as JSON."})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:"Delete"}),(0,s.jsx)(t.td,{children:"Backspace"}),(0,s.jsx)(t.td,{children:"Backspace"}),(0,s.jsx)(t.td,{children:"Deletes the component."})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:"Group"}),(0,s.jsx)(t.td,{children:"Ctrl + G"}),(0,s.jsx)(t.td,{children:"\u2318 + G"}),(0,s.jsx)(t.td,{children:"Groups selected components."})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:"Undo"}),(0,s.jsx)(t.td,{children:"Ctrl + Z"}),(0,s.jsx)(t.td,{children:"\u2318 + Z"}),(0,s.jsx)(t.td,{children:"Undoes the last action."})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:"Redo"}),(0,s.jsx)(t.td,{children:"Ctrl + Y"}),(0,s.jsx)(t.td,{children:"\u2318 + Y"}),(0,s.jsx)(t.td,{children:"Redoes the last undone action."})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:"Redo (alternative)"}),(0,s.jsx)(t.td,{children:"Ctrl + Shift + Z"}),(0,s.jsx)(t.td,{children:"\u2318 + Shift + Z"}),(0,s.jsx)(t.td,{children:"Alternative shortcut for redo."})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:"Share Component"}),(0,s.jsx)(t.td,{children:"Ctrl + Shift + S"}),(0,s.jsx)(t.td,{children:"\u2318 + Shift + S"}),(0,s.jsx)(t.td,{children:"Shares the component."})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:"Share Flow"}),(0,s.jsx)(t.td,{children:"Ctrl + Shift + B"}),(0,s.jsx)(t.td,{children:"\u2318 + Shift + B"}),(0,s.jsx)(t.td,{children:"Shares the entire flow."})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:"Toggle Sidebar"}),(0,s.jsx)(t.td,{children:"Ctrl + B"}),(0,s.jsx)(t.td,{children:"\u2318 + B"}),(0,s.jsx)(t.td,{children:"Shows/hides the sidebar."})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:"Search Components"}),(0,s.jsx)(t.td,{children:"/"}),(0,s.jsx)(t.td,{children:"/"}),(0,s.jsx)(t.td,{children:"Focuses the component search bar."})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:"Tool Mode"}),(0,s.jsx)(t.td,{children:"Ctrl + Shift + M"}),(0,s.jsx)(t.td,{children:"\u2318 + Shift + M"}),(0,s.jsx)(t.td,{children:"Toggles tool mode."})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:"Update"}),(0,s.jsx)(t.td,{children:"Ctrl + U"}),(0,s.jsx)(t.td,{children:"\u2318 + U"}),(0,s.jsx)(t.td,{children:"Updates the component."})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:"Open Playground"}),(0,s.jsx)(t.td,{children:"Ctrl + K"}),(0,s.jsx)(t.td,{children:"\u2318 + K"}),(0,s.jsx)(t.td,{children:"Opens the playground."})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:"Output Inspection"}),(0,s.jsx)(t.td,{children:"O"}),(0,s.jsx)(t.td,{children:"O"}),(0,s.jsx)(t.td,{children:"Opens output inspection."})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:"Play"}),(0,s.jsx)(t.td,{children:"P"}),(0,s.jsx)(t.td,{children:"P"}),(0,s.jsx)(t.td,{children:"Plays/executes the flow."})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:"API"}),(0,s.jsx)(t.td,{children:"R"}),(0,s.jsx)(t.td,{children:"R"}),(0,s.jsx)(t.td,{children:"Opens the API view."})]})]})]}),"\n",(0,s.jsx)(t.h2,{id:"group-components-in-the-workspace",children:"Group components in the workspace"}),"\n",(0,s.jsx)(t.p,{children:"Multiple components can be grouped into a single component for reuse. This is useful when combining large flows into single components, for example RAG with a vector database, and saving space."}),"\n",(0,s.jsxs)(t.ol,{children:["\n",(0,s.jsxs)(t.li,{children:["Hold\xa0",(0,s.jsx)(t.strong,{children:"Shift"}),"\xa0and drag to select components."]}),"\n",(0,s.jsxs)(t.li,{children:["Select\xa0",(0,s.jsx)(t.strong,{children:"Group"}),".\nThe components merge into a single component."]}),"\n",(0,s.jsx)(t.li,{children:"Double-click the name and description to change them."}),"\n",(0,s.jsx)(t.li,{children:"Save your grouped component to the sidebar for later use."}),"\n"]}),"\n",(0,s.jsx)(t.h2,{id:"component-version",children:"Component version"}),"\n",(0,s.jsx)(t.p,{children:"A component's initial state is stored in a database. As soon as you drag a component from the sidebar to the workspace, the two components are no longer in parity."}),"\n",(0,s.jsxs)(t.p,{children:["A component keeps the version number it is initialized to the workspace with. If a component is at version ",(0,s.jsx)(t.code,{children:"1.0"})," when it is dragged to the workspace, it will stay at version ",(0,s.jsx)(t.code,{children:"1.0"})," until you update it."]}),"\n",(0,s.jsxs)(t.p,{children:["Langflow notifies you when a component's workspace version is behind the database version and an update is available.\nClick the ",(0,s.jsx)(l.A,{name:"AlertTriangle","aria-label":"Exclamation mark"})," ",(0,s.jsx)(t.strong,{children:"Update Component"}),"\xa0icon to update the component to the\xa0",(0,s.jsx)(t.code,{children:"latest"}),"\xa0version. This will change the code of the component in place so you can validate that the component was updated by checking its Python code before and after updating it."]}),"\n",(0,s.jsx)(t.h2,{id:"components-sidebar",children:"Components sidebar"}),"\n",(0,s.jsx)(t.p,{children:"Components are listed in the sidebar by component type."}),"\n",(0,s.jsxs)(t.p,{children:["Component ",(0,s.jsx)(t.strong,{children:"bundles"})," are components grouped by provider. For example, Langchain modules like ",(0,s.jsx)(t.strong,{children:"RunnableExecutor"})," and ",(0,s.jsx)(t.strong,{children:"CharacterTextSplitter"})," are grouped under the ",(0,s.jsx)(t.strong,{children:"Langchain"})," bundle."]}),"\n",(0,s.jsxs)(t.p,{children:["The sidebar includes a component ",(0,s.jsx)(t.strong,{children:"Search"})," bar, and includes flags for showing or hiding ",(0,s.jsx)(t.strong,{children:"Beta"})," and ",(0,s.jsx)(t.strong,{children:"Legacy"})," components."]}),"\n",(0,s.jsxs)(t.p,{children:[(0,s.jsx)(t.strong,{children:"Beta"})," components are still being tested and are not suitable for production workloads."]}),"\n",(0,s.jsxs)(t.p,{children:[(0,s.jsx)(t.strong,{children:"Legacy"})," components are available to use but no longer supported."]})]})}function u(e={}){const{wrapper:t}={...(0,r.R)(),...e.components};return t?(0,s.jsx)(t,{...e,children:(0,s.jsx)(j,{...e})}):j(e)}function m(e,t){throw new Error("Expected "+(t?"component":"object")+" `"+e+"` to be defined: you likely forgot to import, pass, or provide it.")}},84443:(e,t,o)=>{o.d(t,{A:()=>r});o(96540);var n=o(64058),s=o(74848);function r(e){let{name:t,...o}=e;const r=n[t];return r?(0,s.jsx)(r,{...o}):null}}}]); \ No newline at end of file +"use strict";(self.webpackChunklangflow_docs=self.webpackChunklangflow_docs||[]).push([[5647],{62211:(e,t,o)=>{o.r(t),o.d(t,{CH:()=>a,assets:()=>p,chCodeConfig:()=>h,contentTitle:()=>d,default:()=>u,frontMatter:()=>i,metadata:()=>n,toc:()=>x});const n=JSON.parse('{"id":"Concepts/concepts-components","title":"Components","description":"A\xa0component\xa0is a single building block within a flow with inputs, outputs, functions, and parameters that define its functionality. A single component is like a class within a larger application.","source":"@site/docs/Concepts/concepts-components.md","sourceDirName":"Concepts","slug":"/concepts-components","permalink":"/concepts-components","draft":false,"unlisted":false,"tags":[],"version":"current","frontMatter":{"title":"Components","slug":"/concepts-components"},"sidebar":"docs","previous":{"title":"Playground","permalink":"/concepts-playground"},"next":{"title":"Flows","permalink":"/concepts-flows"}}');var s=o(74848),r=o(28453),c=o(24754),l=o(84443);const i={title:"Components",slug:"/concepts-components"},d="Langflow components overview",p={},a={annotations:c.hk,Code:c.Cy},h={staticMediaQuery:"not screen, (max-width: 768px)",lineNumbers:!0,showCopyButton:!0,themeName:"github-dark"},x=[{value:"Component menu",id:"component-menu",level:2},{value:"Component ports",id:"component-ports",level:2},{value:"Component port data type colors",id:"component-port-data-type-colors",level:3},{value:"Component code",id:"component-code",level:2},{value:"Freeze",id:"freeze",level:2},{value:"Additional component options",id:"additional-component-options",level:2},{value:"Component shortcuts",id:"component-shortcuts",level:3},{value:"Group components in the workspace",id:"group-components-in-the-workspace",level:2},{value:"Component version",id:"component-version",level:2},{value:"Components sidebar",id:"components-sidebar",level:2}];function j(e){const t={a:"a",code:"code",h1:"h1",h2:"h2",h3:"h3",header:"header",li:"li",ol:"ol",p:"p",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,r.R)(),...e.components},{Details:o}=t;return a||m("CH",!1),a.Code||m("CH.Code",!0),o||m("Details",!0),(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)("style",{dangerouslySetInnerHTML:{__html:'[data-ch-theme="github-dark"] { --ch-t-colorScheme: dark;--ch-t-foreground: #c9d1d9;--ch-t-background: #0d1117;--ch-t-lighter-inlineBackground: #0d1117e6;--ch-t-editor-background: #0d1117;--ch-t-editor-foreground: #c9d1d9;--ch-t-editor-lineHighlightBackground: #6e76811a;--ch-t-editor-rangeHighlightBackground: #ffffff0b;--ch-t-editor-infoForeground: #3794FF;--ch-t-editor-selectionBackground: #264F78;--ch-t-focusBorder: #1f6feb;--ch-t-tab-activeBackground: #0d1117;--ch-t-tab-activeForeground: #c9d1d9;--ch-t-tab-inactiveBackground: #010409;--ch-t-tab-inactiveForeground: #8b949e;--ch-t-tab-border: #30363d;--ch-t-tab-activeBorder: #0d1117;--ch-t-editorGroup-border: #30363d;--ch-t-editorGroupHeader-tabsBackground: #010409;--ch-t-editorLineNumber-foreground: #6e7681;--ch-t-input-background: #0d1117;--ch-t-input-foreground: #c9d1d9;--ch-t-input-border: #30363d;--ch-t-icon-foreground: #8b949e;--ch-t-sideBar-background: #010409;--ch-t-sideBar-foreground: #c9d1d9;--ch-t-sideBar-border: #30363d;--ch-t-list-activeSelectionBackground: #6e768166;--ch-t-list-activeSelectionForeground: #c9d1d9;--ch-t-list-hoverBackground: #6e76811a;--ch-t-list-hoverForeground: #c9d1d9; }'}}),"\n","\n",(0,s.jsx)(t.header,{children:(0,s.jsx)(t.h1,{id:"langflow-components-overview",children:"Langflow components overview"})}),"\n",(0,s.jsx)(t.p,{children:"A\xa0component\xa0is a single building block within a flow with inputs, outputs, functions, and parameters that define its functionality. A single component is like a class within a larger application."}),"\n",(0,s.jsxs)(t.p,{children:["To add a component to a flow, drag it from the ",(0,s.jsx)(t.strong,{children:"Component"})," menu to the ",(0,s.jsx)(t.strong,{children:"Workspace"}),"."]}),"\n",(0,s.jsx)(t.p,{children:"Learn more about components and how they work on this page."}),"\n",(0,s.jsx)(t.h2,{id:"component-menu",children:"Component menu"}),"\n",(0,s.jsx)(t.p,{children:"Each component is unique, but all have a menu bar at the top that looks something like the following:"}),"\n",(0,s.jsx)("img",{src:"/img/openai-model-component.png",alt:"Open AI component",style:{display:"block",margin:"auto",width:300}}),"\n",(0,s.jsx)(t.p,{children:"Use the component controls to do the following:"}),"\n",(0,s.jsxs)(t.ul,{children:["\n",(0,s.jsxs)(t.li,{children:[(0,s.jsx)(t.strong,{children:"Code"}),"\xa0\u2014 Modify the component's Python code and save your changes."]}),"\n",(0,s.jsxs)(t.li,{children:[(0,s.jsx)(t.strong,{children:"Controls"}),"\xa0\u2014 Adjust all component parameters."]}),"\n",(0,s.jsxs)(t.li,{children:[(0,s.jsx)(t.strong,{children:"Freeze"}),"\xa0\u2014 After a component runs, lock its previous output state to prevent it from re-running."]}),"\n"]}),"\n",(0,s.jsxs)(t.p,{children:["Click\xa0",(0,s.jsx)(l.A,{name:"Ellipsis","aria-label":"Horizontal ellipsis"})," ",(0,s.jsx)(t.strong,{children:"All"}),"\xa0to see additional options for a component."]}),"\n",(0,s.jsxs)(t.p,{children:["To view a component\u2019s output and logs, click the ",(0,s.jsx)(l.A,{name:"TextSearch","aria-label":"Search and filter"})," icon."]}),"\n",(0,s.jsxs)(t.p,{children:["To run a single component, click ",(0,s.jsx)(l.A,{name:"Play","aria-label":"Play button"})," ",(0,s.jsx)(t.strong,{children:"Play"}),"."]}),"\n",(0,s.jsxs)(t.p,{children:["A ",(0,s.jsx)(l.A,{name:"Check","aria-label":"Checkmark"}),(0,s.jsx)(t.strong,{children:"Checkmark"})," indicates that the component ran successfully."]}),"\n",(0,s.jsxs)(t.p,{children:["Running a single component with the ",(0,s.jsx)(t.strong,{children:"Play"})," button is different from running the entire flow. In a single component run, the ",(0,s.jsx)(t.code,{children:"build_vertex"})," function is called, which builds and runs only the single component with direct inputs provided through the UI (the ",(0,s.jsx)(t.code,{children:"inputs_dict"})," parameter). The ",(0,s.jsx)(t.code,{children:"VertexBuildResult"})," data is passed to the ",(0,s.jsx)(t.code,{children:"build_and_run"})," method, which calls the component's ",(0,s.jsx)(t.code,{children:"build"})," method and runs it. Unlike running the full flow, running a single component does not automatically execute its upstream dependencies."]}),"\n",(0,s.jsx)(t.h2,{id:"component-ports",children:"Component ports"}),"\n",(0,s.jsxs)(t.p,{children:["Handles (",(0,s.jsx)(l.A,{name:"Circle",size:"16","aria-label":"A circle on the side of a component"}),") on the side of a component indicate the types of inputs and outputs that can be connected at that port. Hover over a handle to see connection details."]}),"\n",(0,s.jsx)("img",{src:"/img/prompt-component.png",alt:"Prompt component",style:{display:"block",margin:"auto",width:300}}),"\n",(0,s.jsx)(t.h3,{id:"component-port-data-type-colors",children:"Component port data type colors"}),"\n",(0,s.jsx)(t.p,{children:"The following table lists the handle colors and their corresponding data types:"}),"\n",(0,s.jsxs)(t.table,{children:[(0,s.jsx)(t.thead,{children:(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.th,{children:"Data type"}),(0,s.jsx)(t.th,{children:"Handle color"}),(0,s.jsx)(t.th,{children:"Handle"})]})}),(0,s.jsxs)(t.tbody,{children:[(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:"BaseLanguageModel"}),(0,s.jsx)(t.td,{children:"Fuchsia"}),(0,s.jsx)(t.td,{children:(0,s.jsx)(l.A,{name:"Circle",size:"16","aria-label":"A circle on the side of a component",style:{color:"#c026d3"}})})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:"Data"}),(0,s.jsx)(t.td,{children:"Red"}),(0,s.jsx)(t.td,{children:(0,s.jsx)(l.A,{name:"Circle",size:"16","aria-label":"A circle on the side of a component",style:{color:"#dc2626"}})})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:"Document"}),(0,s.jsx)(t.td,{children:"Lime"}),(0,s.jsx)(t.td,{children:(0,s.jsx)(l.A,{name:"Circle",size:"16","aria-label":"A circle on the side of a component",style:{color:"#65a30d"}})})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:"Embeddings"}),(0,s.jsx)(t.td,{children:"Emerald"}),(0,s.jsx)(t.td,{children:(0,s.jsx)(l.A,{name:"Circle",size:"16","aria-label":"A circle on the side of a component",style:{color:"#10b981"}})})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:"LanguageModel"}),(0,s.jsx)(t.td,{children:"Fuchsia"}),(0,s.jsx)(t.td,{children:(0,s.jsx)(l.A,{name:"Circle",size:"16","aria-label":"A circle on the side of a component",style:{color:"#c026d3"}})})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:"Message"}),(0,s.jsx)(t.td,{children:"Indigo"}),(0,s.jsx)(t.td,{children:(0,s.jsx)(l.A,{name:"Circle",size:"16","aria-label":"A circle on the side of a component",style:{color:"#4f46e5"}})})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:"Prompt"}),(0,s.jsx)(t.td,{children:"Violet"}),(0,s.jsx)(t.td,{children:(0,s.jsx)(l.A,{name:"Circle",size:"16","aria-label":"A circle on the side of a component",style:{color:"#7c3aed"}})})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:"str"}),(0,s.jsx)(t.td,{children:"Indigo"}),(0,s.jsx)(t.td,{children:(0,s.jsx)(l.A,{name:"Circle",size:"16","aria-label":"A circle on the side of a component",style:{color:"#4F46E5"}})})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:"Text"}),(0,s.jsx)(t.td,{children:"Indigo"}),(0,s.jsx)(t.td,{children:(0,s.jsx)(l.A,{name:"Circle",size:"16","aria-label":"A circle on the side of a component",style:{color:"#4F46E5"}})})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:"unknown"}),(0,s.jsx)(t.td,{children:"Gray"}),(0,s.jsx)(t.td,{children:(0,s.jsx)(l.A,{name:"Circle",size:"16","aria-label":"A circle on the side of a component",style:{color:"#9CA3AF"}})})]})]})]}),"\n",(0,s.jsx)(t.h2,{id:"component-code",children:"Component code"}),"\n",(0,s.jsxs)(t.p,{children:["A component inherits from a base ",(0,s.jsx)(t.code,{children:"Component"})," class that defines its interface and behavior."]}),"\n",(0,s.jsxs)(t.p,{children:["For example, the ",(0,s.jsx)(t.a,{href:"https://github.com/langflow-ai/langflow/blob/main/src/backend/base/langflow/components/langchain_utilities/recursive_character.py",children:"Recursive character text splitter"})," is a child of the ",(0,s.jsx)(t.a,{href:"https://github.com/langflow-ai/langflow/blob/main/src/backend/base/langflow/base/textsplitters/model.py",children:"LCTextSplitterComponent"})," class."]}),"\n",(0,s.jsxs)(o,{children:[(0,s.jsx)("summary",{children:"Recursive character text splitter code"}),(0,s.jsx)(a.Code,{codeConfig:h,northPanel:{tabs:[""],active:"",heightRatio:1},files:[{name:"",focus:"",code:{lines:[{tokens:[{content:"from",props:{style:{color:"#FF7B72"}}},{content:" typing ",props:{style:{color:"#C9D1D9"}}},{content:"import",props:{style:{color:"#FF7B72"}}},{content:" Any",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:"",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:"from",props:{style:{color:"#FF7B72"}}},{content:" langchain_text_splitters ",props:{style:{color:"#C9D1D9"}}},{content:"import",props:{style:{color:"#FF7B72"}}},{content:" RecursiveCharacterTextSplitter, TextSplitter",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:"",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:"from",props:{style:{color:"#FF7B72"}}},{content:" langflow.base.textsplitters.model ",props:{style:{color:"#C9D1D9"}}},{content:"import",props:{style:{color:"#FF7B72"}}},{content:" LCTextSplitterComponent",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:"from",props:{style:{color:"#FF7B72"}}},{content:" langflow.inputs.inputs ",props:{style:{color:"#C9D1D9"}}},{content:"import",props:{style:{color:"#FF7B72"}}},{content:" DataInput, IntInput, MessageTextInput",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:"from",props:{style:{color:"#FF7B72"}}},{content:" langflow.utils.util ",props:{style:{color:"#C9D1D9"}}},{content:"import",props:{style:{color:"#FF7B72"}}},{content:" unescape_string",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:"",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:"class ",props:{style:{color:"#FF7B72"}}},{content:"RecursiveCharacterTextSplitterComponent",props:{style:{color:"#FFA657"}}},{content:"(",props:{style:{color:"#C9D1D9"}}},{content:"LCTextSplitterComponent",props:{style:{color:"#79C0FF"}}},{content:"):",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" display_name: ",props:{style:{color:"#C9D1D9"}}},{content:"str ",props:{style:{color:"#79C0FF"}}},{content:"= ",props:{style:{color:"#FF7B72"}}},{content:'"Recursive Character Text Splitter"',props:{style:{color:"#A5D6FF"}}}]},{tokens:[{content:" description: ",props:{style:{color:"#C9D1D9"}}},{content:"str ",props:{style:{color:"#79C0FF"}}},{content:"= ",props:{style:{color:"#FF7B72"}}},{content:'"Split text trying to keep all related text together."',props:{style:{color:"#A5D6FF"}}}]},{tokens:[{content:" documentation: ",props:{style:{color:"#C9D1D9"}}},{content:"str ",props:{style:{color:"#79C0FF"}}},{content:"= ",props:{style:{color:"#FF7B72"}}},{content:'"https://docs.langflow.org/components-processing"',props:{style:{color:"#A5D6FF"}}}]},{tokens:[{content:" name ",props:{style:{color:"#C9D1D9"}}},{content:"= ",props:{style:{color:"#FF7B72"}}},{content:'"RecursiveCharacterTextSplitter"',props:{style:{color:"#A5D6FF"}}}]},{tokens:[{content:" icon ",props:{style:{color:"#C9D1D9"}}},{content:"= ",props:{style:{color:"#FF7B72"}}},{content:'"LangChain"',props:{style:{color:"#A5D6FF"}}}]},{tokens:[{content:"",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" inputs ",props:{style:{color:"#C9D1D9"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:" [",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" IntInput(",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" name",props:{style:{color:"#FFA657"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:'"chunk_size"',props:{style:{color:"#A5D6FF"}}},{content:",",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" display_name",props:{style:{color:"#FFA657"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:'"Chunk Size"',props:{style:{color:"#A5D6FF"}}},{content:",",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" info",props:{style:{color:"#FFA657"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:'"The maximum length of each chunk."',props:{style:{color:"#A5D6FF"}}},{content:",",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" value",props:{style:{color:"#FFA657"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:"1000",props:{style:{color:"#79C0FF"}}},{content:",",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" ),",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" IntInput(",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" name",props:{style:{color:"#FFA657"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:'"chunk_overlap"',props:{style:{color:"#A5D6FF"}}},{content:",",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" display_name",props:{style:{color:"#FFA657"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:'"Chunk Overlap"',props:{style:{color:"#A5D6FF"}}},{content:",",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" info",props:{style:{color:"#FFA657"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:'"The amount of overlap between chunks."',props:{style:{color:"#A5D6FF"}}},{content:",",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" value",props:{style:{color:"#FFA657"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:"200",props:{style:{color:"#79C0FF"}}},{content:",",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" ),",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" DataInput(",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" name",props:{style:{color:"#FFA657"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:'"data_input"',props:{style:{color:"#A5D6FF"}}},{content:",",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" display_name",props:{style:{color:"#FFA657"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:'"Input"',props:{style:{color:"#A5D6FF"}}},{content:",",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" info",props:{style:{color:"#FFA657"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:'"The texts to split."',props:{style:{color:"#A5D6FF"}}},{content:",",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" input_types",props:{style:{color:"#FFA657"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:"[",props:{style:{color:"#C9D1D9"}}},{content:'"Document"',props:{style:{color:"#A5D6FF"}}},{content:", ",props:{style:{color:"#C9D1D9"}}},{content:'"Data"',props:{style:{color:"#A5D6FF"}}},{content:"],",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" ),",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" MessageTextInput(",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" name",props:{style:{color:"#FFA657"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:'"separators"',props:{style:{color:"#A5D6FF"}}},{content:",",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" display_name",props:{style:{color:"#FFA657"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:'"Separators"',props:{style:{color:"#A5D6FF"}}},{content:",",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" info",props:{style:{color:"#FFA657"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:"'The characters to split on.",props:{style:{color:"#A5D6FF"}}},{content:"\\n",props:{style:{color:"#79C0FF"}}},{content:'If left empty defaults to ["',props:{style:{color:"#A5D6FF"}}},{content:"\\\\",props:{style:{color:"#79C0FF"}}},{content:"n",props:{style:{color:"#A5D6FF"}}},{content:"\\\\",props:{style:{color:"#79C0FF"}}},{content:'n", "',props:{style:{color:"#A5D6FF"}}},{content:"\\\\",props:{style:{color:"#79C0FF"}}},{content:'n", " ", ""].\'',props:{style:{color:"#A5D6FF"}}},{content:",",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" is_list",props:{style:{color:"#FFA657"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:"True",props:{style:{color:"#79C0FF"}}},{content:",",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" ),",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" ]",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:"",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" def ",props:{style:{color:"#FF7B72"}}},{content:"get_data_input",props:{style:{color:"#D2A8FF"}}},{content:"(self) -> Any:",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" return ",props:{style:{color:"#FF7B72"}}},{content:"self",props:{style:{color:"#79C0FF"}}},{content:".data_input",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:"",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" def ",props:{style:{color:"#FF7B72"}}},{content:"build_text_splitter",props:{style:{color:"#D2A8FF"}}},{content:"(self) -> TextSplitter:",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" if not ",props:{style:{color:"#FF7B72"}}},{content:"self",props:{style:{color:"#79C0FF"}}},{content:".separators:",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" separators: list[",props:{style:{color:"#C9D1D9"}}},{content:"str",props:{style:{color:"#79C0FF"}}},{content:"] ",props:{style:{color:"#C9D1D9"}}},{content:"| ",props:{style:{color:"#FF7B72"}}},{content:"None ",props:{style:{color:"#79C0FF"}}},{content:"= ",props:{style:{color:"#FF7B72"}}},{content:"None",props:{style:{color:"#79C0FF"}}}]},{tokens:[{content:" else",props:{style:{color:"#FF7B72"}}},{content:":",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" # check if the separators list has escaped characters",props:{style:{color:"#8B949E"}}}]},{tokens:[{content:" # if there are escaped characters, unescape them",props:{style:{color:"#8B949E"}}}]},{tokens:[{content:" separators ",props:{style:{color:"#C9D1D9"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:" [unescape_string(x) ",props:{style:{color:"#C9D1D9"}}},{content:"for",props:{style:{color:"#FF7B72"}}},{content:" x ",props:{style:{color:"#C9D1D9"}}},{content:"in ",props:{style:{color:"#FF7B72"}}},{content:"self",props:{style:{color:"#79C0FF"}}},{content:".separators]",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:"",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" return",props:{style:{color:"#FF7B72"}}},{content:" RecursiveCharacterTextSplitter(",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" separators",props:{style:{color:"#FFA657"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:"separators,",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" chunk_size",props:{style:{color:"#FFA657"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:"self",props:{style:{color:"#79C0FF"}}},{content:".chunk_size,",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" chunk_overlap",props:{style:{color:"#FFA657"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:"self",props:{style:{color:"#79C0FF"}}},{content:".chunk_overlap,",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" )",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:"",props:{style:{color:"#C9D1D9"}}}]}],lang:"python"},annotations:[]}]})]}),"\n",(0,s.jsx)(t.p,{children:"Components include definitions for inputs and outputs, which are represented in the UI with color-coded ports."}),"\n",(0,s.jsxs)(t.p,{children:[(0,s.jsx)(t.strong,{children:"Input Definition:"})," Each input (like ",(0,s.jsx)(t.code,{children:"IntInput"})," or ",(0,s.jsx)(t.code,{children:"DataInput"}),") specifies an input's type, name, and display properties, which appear as configurable fields in the component's UI panel."]}),"\n",(0,s.jsxs)(t.p,{children:[(0,s.jsx)(t.strong,{children:"Methods:"})," Components have methods or functions that handle their functionality. This component has two methods.\n",(0,s.jsx)(t.code,{children:"get_data_input"})," retrieves the text data to be split from the component's input. This makes the data available to the class.\n",(0,s.jsx)(t.code,{children:"build_text_splitter"})," creates a ",(0,s.jsx)(t.code,{children:"RecursiveCharacterTextSplitter"})," object by calling its parent class's ",(0,s.jsx)(t.code,{children:"build"})," method. The text is split with the created splitter and passed to the next component.\nWhen used in a flow, this component:"]}),"\n",(0,s.jsxs)(t.ol,{children:["\n",(0,s.jsx)(t.li,{children:"Displays its configuration options in the UI."}),"\n",(0,s.jsx)(t.li,{children:"Validates user inputs based on the input types."}),"\n",(0,s.jsx)(t.li,{children:"Processes data using the configured parameters."}),"\n",(0,s.jsx)(t.li,{children:"Passes results to the next component."}),"\n"]}),"\n",(0,s.jsx)(t.h2,{id:"freeze",children:"Freeze"}),"\n",(0,s.jsxs)(t.p,{children:["After a component runs, ",(0,s.jsx)(t.strong,{children:"Freeze"})," locks the component's previous output state to prevent it from re-running."]}),"\n",(0,s.jsxs)(t.p,{children:["If you\u2019re expecting consistent output from a component and don\u2019t need to re-run it, click ",(0,s.jsx)(t.strong,{children:"Freeze"}),"."]}),"\n",(0,s.jsxs)(t.p,{children:["Enabling ",(0,s.jsx)(t.strong,{children:"Freeze"})," freezes all components upstream of the selected component."]}),"\n",(0,s.jsx)(t.h2,{id:"additional-component-options",children:"Additional component options"}),"\n",(0,s.jsxs)(t.p,{children:["Click\xa0",(0,s.jsx)(l.A,{name:"Ellipsis","aria-label":"Horizontal ellipsis"})," ",(0,s.jsx)(t.strong,{children:"All"}),"\xa0to see additional options for a component."]}),"\n",(0,s.jsxs)(t.p,{children:["To modify a component's name or description, double-click in the ",(0,s.jsx)(t.strong,{children:"Name"})," or ",(0,s.jsx)(t.strong,{children:"Description"})," fields. Component descriptions accept Markdown syntax."]}),"\n",(0,s.jsx)(t.h3,{id:"component-shortcuts",children:"Component shortcuts"}),"\n",(0,s.jsx)(t.p,{children:"The following keyboard shortcuts are available when a component is selected."}),"\n",(0,s.jsxs)(t.table,{children:[(0,s.jsx)(t.thead,{children:(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.th,{children:"Menu item"}),(0,s.jsx)(t.th,{children:"Windows shortcut"}),(0,s.jsx)(t.th,{children:"Mac shortcut"}),(0,s.jsx)(t.th,{children:"Description"})]})}),(0,s.jsxs)(t.tbody,{children:[(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:"Code"}),(0,s.jsx)(t.td,{children:"Space"}),(0,s.jsx)(t.td,{children:"Space"}),(0,s.jsx)(t.td,{children:"Opens the code editor for the component."})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:"Advanced Settings"}),(0,s.jsx)(t.td,{children:"Ctrl + Shift + A"}),(0,s.jsx)(t.td,{children:"\u2318 + Shift + A"}),(0,s.jsx)(t.td,{children:"Opens advanced settings for the component."})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:"Save Changes"}),(0,s.jsx)(t.td,{children:"Ctrl + S"}),(0,s.jsx)(t.td,{children:"\u2318 + S"}),(0,s.jsx)(t.td,{children:"Saves changes to the current flow."})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:"Save Component"}),(0,s.jsx)(t.td,{children:"Ctrl + Alt + S"}),(0,s.jsx)(t.td,{children:"\u2318 + Alt + S"}),(0,s.jsx)(t.td,{children:"Saves the current component to Saved components."})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:"Duplicate"}),(0,s.jsx)(t.td,{children:"Ctrl + D"}),(0,s.jsx)(t.td,{children:"\u2318 + D"}),(0,s.jsx)(t.td,{children:"Creates a duplicate of the component."})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:"Copy"}),(0,s.jsx)(t.td,{children:"Ctrl + C"}),(0,s.jsx)(t.td,{children:"\u2318 + C"}),(0,s.jsx)(t.td,{children:"Copies the selected component."})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:"Cut"}),(0,s.jsx)(t.td,{children:"Ctrl + X"}),(0,s.jsx)(t.td,{children:"\u2318 + X"}),(0,s.jsx)(t.td,{children:"Cuts the selected component."})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:"Paste"}),(0,s.jsx)(t.td,{children:"Ctrl + V"}),(0,s.jsx)(t.td,{children:"\u2318 + V"}),(0,s.jsx)(t.td,{children:"Pastes the copied/cut component."})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:"Docs"}),(0,s.jsx)(t.td,{children:"Ctrl + Shift + D"}),(0,s.jsx)(t.td,{children:"\u2318 + Shift + D"}),(0,s.jsx)(t.td,{children:"Opens related documentation."})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:"Minimize"}),(0,s.jsx)(t.td,{children:"Ctrl + ."}),(0,s.jsx)(t.td,{children:"\u2318 + ."}),(0,s.jsx)(t.td,{children:"Minimizes the current component."})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:"Freeze"}),(0,s.jsx)(t.td,{children:"Ctrl + Shift + F"}),(0,s.jsx)(t.td,{children:"\u2318 + Shift + F"}),(0,s.jsx)(t.td,{children:"Freezes component state and upstream components."})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:"Download"}),(0,s.jsx)(t.td,{children:"Ctrl + J"}),(0,s.jsx)(t.td,{children:"\u2318 + J"}),(0,s.jsx)(t.td,{children:"Downloads the component as JSON."})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:"Delete"}),(0,s.jsx)(t.td,{children:"Backspace"}),(0,s.jsx)(t.td,{children:"Backspace"}),(0,s.jsx)(t.td,{children:"Deletes the component."})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:"Group"}),(0,s.jsx)(t.td,{children:"Ctrl + G"}),(0,s.jsx)(t.td,{children:"\u2318 + G"}),(0,s.jsx)(t.td,{children:"Groups selected components."})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:"Undo"}),(0,s.jsx)(t.td,{children:"Ctrl + Z"}),(0,s.jsx)(t.td,{children:"\u2318 + Z"}),(0,s.jsx)(t.td,{children:"Undoes the last action."})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:"Redo"}),(0,s.jsx)(t.td,{children:"Ctrl + Y"}),(0,s.jsx)(t.td,{children:"\u2318 + Y"}),(0,s.jsx)(t.td,{children:"Redoes the last undone action."})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:"Redo (alternative)"}),(0,s.jsx)(t.td,{children:"Ctrl + Shift + Z"}),(0,s.jsx)(t.td,{children:"\u2318 + Shift + Z"}),(0,s.jsx)(t.td,{children:"Alternative shortcut for redo."})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:"Share Component"}),(0,s.jsx)(t.td,{children:"Ctrl + Shift + S"}),(0,s.jsx)(t.td,{children:"\u2318 + Shift + S"}),(0,s.jsx)(t.td,{children:"Shares the component."})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:"Share Flow"}),(0,s.jsx)(t.td,{children:"Ctrl + Shift + B"}),(0,s.jsx)(t.td,{children:"\u2318 + Shift + B"}),(0,s.jsx)(t.td,{children:"Shares the entire flow."})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:"Toggle Sidebar"}),(0,s.jsx)(t.td,{children:"Ctrl + B"}),(0,s.jsx)(t.td,{children:"\u2318 + B"}),(0,s.jsx)(t.td,{children:"Shows/hides the sidebar."})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:"Search Components"}),(0,s.jsx)(t.td,{children:"/"}),(0,s.jsx)(t.td,{children:"/"}),(0,s.jsx)(t.td,{children:"Focuses the component search bar."})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:"Tool Mode"}),(0,s.jsx)(t.td,{children:"Ctrl + Shift + M"}),(0,s.jsx)(t.td,{children:"\u2318 + Shift + M"}),(0,s.jsx)(t.td,{children:"Toggles tool mode."})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:"Update"}),(0,s.jsx)(t.td,{children:"Ctrl + U"}),(0,s.jsx)(t.td,{children:"\u2318 + U"}),(0,s.jsx)(t.td,{children:"Updates the component."})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:"Open Playground"}),(0,s.jsx)(t.td,{children:"Ctrl + K"}),(0,s.jsx)(t.td,{children:"\u2318 + K"}),(0,s.jsx)(t.td,{children:"Opens the playground."})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:"Output Inspection"}),(0,s.jsx)(t.td,{children:"O"}),(0,s.jsx)(t.td,{children:"O"}),(0,s.jsx)(t.td,{children:"Opens output inspection."})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:"Play"}),(0,s.jsx)(t.td,{children:"P"}),(0,s.jsx)(t.td,{children:"P"}),(0,s.jsx)(t.td,{children:"Plays/executes the flow."})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:"API"}),(0,s.jsx)(t.td,{children:"R"}),(0,s.jsx)(t.td,{children:"R"}),(0,s.jsx)(t.td,{children:"Opens the API view."})]})]})]}),"\n",(0,s.jsx)(t.h2,{id:"group-components-in-the-workspace",children:"Group components in the workspace"}),"\n",(0,s.jsx)(t.p,{children:"Multiple components can be grouped into a single component for reuse. This is useful when combining large flows into single components, for example RAG with a vector database, and saving space."}),"\n",(0,s.jsxs)(t.ol,{children:["\n",(0,s.jsxs)(t.li,{children:["Hold\xa0",(0,s.jsx)(t.strong,{children:"Shift"}),"\xa0and drag to select components."]}),"\n",(0,s.jsxs)(t.li,{children:["Select\xa0",(0,s.jsx)(t.strong,{children:"Group"}),".\nThe components merge into a single component."]}),"\n",(0,s.jsx)(t.li,{children:"Double-click the name and description to change them."}),"\n",(0,s.jsx)(t.li,{children:"Save your grouped component to the sidebar for later use."}),"\n"]}),"\n",(0,s.jsx)(t.h2,{id:"component-version",children:"Component version"}),"\n",(0,s.jsx)(t.p,{children:"A component's initial state is stored in a database. As soon as you drag a component from the sidebar to the workspace, the two components are no longer in parity."}),"\n",(0,s.jsxs)(t.p,{children:["A component keeps the version number it is initialized to the workspace with. If a component is at version ",(0,s.jsx)(t.code,{children:"1.0"})," when it is dragged to the workspace, it will stay at version ",(0,s.jsx)(t.code,{children:"1.0"})," until you update it."]}),"\n",(0,s.jsxs)(t.p,{children:["Langflow notifies you when a component's workspace version is behind the database version and an update is available.\nClick the ",(0,s.jsx)(l.A,{name:"AlertTriangle","aria-label":"Exclamation mark"})," ",(0,s.jsx)(t.strong,{children:"Update Component"}),"\xa0icon to update the component to the\xa0",(0,s.jsx)(t.code,{children:"latest"}),"\xa0version. This will change the code of the component in place so you can validate that the component was updated by checking its Python code before and after updating it."]}),"\n",(0,s.jsx)(t.h2,{id:"components-sidebar",children:"Components sidebar"}),"\n",(0,s.jsx)(t.p,{children:"Components are listed in the sidebar by component type."}),"\n",(0,s.jsxs)(t.p,{children:["Component ",(0,s.jsx)(t.strong,{children:"bundles"})," are components grouped by provider. For example, Langchain modules like ",(0,s.jsx)(t.strong,{children:"RunnableExecutor"})," and ",(0,s.jsx)(t.strong,{children:"CharacterTextSplitter"})," are grouped under the ",(0,s.jsx)(t.strong,{children:"Langchain"})," bundle."]}),"\n",(0,s.jsxs)(t.p,{children:["The sidebar includes a component ",(0,s.jsx)(t.strong,{children:"Search"})," bar, and includes flags for showing or hiding ",(0,s.jsx)(t.strong,{children:"Beta"})," and ",(0,s.jsx)(t.strong,{children:"Legacy"})," components."]}),"\n",(0,s.jsxs)(t.p,{children:[(0,s.jsx)(t.strong,{children:"Beta"})," components are still being tested and are not suitable for production workloads."]}),"\n",(0,s.jsx)(t.p,{children:"Legacy components are available for use but are no longer supported."})]})}function u(e={}){const{wrapper:t}={...(0,r.R)(),...e.components};return t?(0,s.jsx)(t,{...e,children:(0,s.jsx)(j,{...e})}):j(e)}function m(e,t){throw new Error("Expected "+(t?"component":"object")+" `"+e+"` to be defined: you likely forgot to import, pass, or provide it.")}},84443:(e,t,o)=>{o.d(t,{A:()=>r});o(96540);var n=o(64058),s=o(74848);function r(e){let{name:t,...o}=e;const r=n[t];return r?(0,s.jsx)(r,{...o}):null}}}]); \ No newline at end of file diff --git a/assets/js/8f774222.d1261411.js b/assets/js/8f774222.d1261411.js deleted file mode 100644 index beb3f54a44..0000000000 --- a/assets/js/8f774222.d1261411.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunklangflow_docs=self.webpackChunklangflow_docs||[]).push([[8661],{12378:(e,s,t)=>{t.r(s),t.d(s,{assets:()=>h,contentTitle:()=>c,default:()=>l,frontMatter:()=>d,metadata:()=>n,toc:()=>a});const n=JSON.parse('{"id":"Components/components-memories","title":"Memories","description":"Memory components store and retrieve chat messages by session_id.","source":"@site/docs/Components/components-memories.md","sourceDirName":"Components","slug":"/components-memories","permalink":"/components-memories","draft":false,"unlisted":false,"tags":[],"version":"current","frontMatter":{"title":"Memories","slug":"/components-memories"},"sidebar":"docs","previous":{"title":"Logic","permalink":"/components-logic"},"next":{"title":"Models","permalink":"/components-models"}}');var r=t(74848),i=t(28453);const d={title:"Memories",slug:"/components-memories"},c="Memory components in Langflow",h={},a=[{value:"Use a memory component in a flow",id:"use-a-memory-component-in-a-flow",level:2},{value:"AstraDBChatMemory Component",id:"astradbchatmemory-component",level:2},{value:"Inputs",id:"inputs",level:3},{value:"Outputs",id:"outputs",level:3},{value:"CassandraChatMemory Component",id:"cassandrachatmemory-component",level:2},{value:"Inputs",id:"inputs-1",level:3},{value:"Outputs",id:"outputs-1",level:3},{value:"Mem0 Chat Memory",id:"mem0-chat-memory",level:2},{value:"Inputs",id:"inputs-2",level:3},{value:"Outputs",id:"outputs-2",level:3},{value:"Redis Chat Memory",id:"redis-chat-memory",level:2},{value:"Inputs",id:"inputs-3",level:3},{value:"Outputs",id:"outputs-3",level:3},{value:"Legacy components",id:"legacy-components",level:2},{value:"ZepChatMemory Component",id:"zepchatmemory-component",level:3},{value:"Inputs",id:"inputs-4",level:4},{value:"Outputs",id:"outputs-4",level:4}];function o(e){const s={a:"a",code:"code",h1:"h1",h2:"h2",h3:"h3",h4:"h4",header:"header",img:"img",p:"p",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",...(0,i.R)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(s.header,{children:(0,r.jsx)(s.h1,{id:"memory-components-in-langflow",children:"Memory components in Langflow"})}),"\n",(0,r.jsxs)(s.p,{children:["Memory components store and retrieve chat messages by ",(0,r.jsx)(s.code,{children:"session_id"}),"."]}),"\n",(0,r.jsx)(s.p,{children:"They are distinct from vector store components, because they are built specifically for storing and retrieving chat messages from external databases."}),"\n",(0,r.jsxs)(s.p,{children:["Memory components provide access to their respective external databases ",(0,r.jsx)(s.strong,{children:"as memory"}),". This allows Large Language Models (LLMs) or ",(0,r.jsx)(s.a,{href:"/components-agents",children:"agents"})," to access external memory for persistence and context retention."]}),"\n",(0,r.jsx)(s.h2,{id:"use-a-memory-component-in-a-flow",children:"Use a memory component in a flow"}),"\n",(0,r.jsxs)(s.p,{children:["This example flow stores and retrieves chat history from an ",(0,r.jsx)(s.strong,{children:"Astra DB Chat Memory"})," component with ",(0,r.jsx)(s.strong,{children:"Store Message"})," and ",(0,r.jsx)(s.strong,{children:"Chat Memory"})," components."]}),"\n",(0,r.jsxs)(s.p,{children:["The ",(0,r.jsx)(s.strong,{children:"Store Message"})," helper component stores chat memories as ",(0,r.jsx)(s.a,{href:"/concepts-objects",children:"Data"})," objects, and the ",(0,r.jsx)(s.strong,{children:"Message History"})," helper component retrieves chat messages as ",(0,r.jsx)(s.a,{href:"/concepts-objects",children:"Data"})," objects or strings."]}),"\n",(0,r.jsx)(s.p,{children:(0,r.jsx)(s.img,{alt:"Sample Flow storing Chat Memory in AstraDB",src:t(72654).A+"",width:"3178",height:"1228"})}),"\n",(0,r.jsx)(s.h2,{id:"astradbchatmemory-component",children:"AstraDBChatMemory Component"}),"\n",(0,r.jsxs)(s.p,{children:["This component creates an ",(0,r.jsx)(s.code,{children:"AstraDBChatMessageHistory"})," instance, which stores and retrieves chat messages using Astra DB, a cloud-native database service."]}),"\n",(0,r.jsx)(s.h3,{id:"inputs",children:"Inputs"}),"\n",(0,r.jsxs)(s.table,{children:[(0,r.jsx)(s.thead,{children:(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.th,{children:"Name"}),(0,r.jsx)(s.th,{children:"Type"}),(0,r.jsx)(s.th,{children:"Description"})]})}),(0,r.jsxs)(s.tbody,{children:[(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:"collection_name"}),(0,r.jsx)(s.td,{children:"String"}),(0,r.jsx)(s.td,{children:"Name of the Astra DB collection for storing messages. Required."})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:"token"}),(0,r.jsx)(s.td,{children:"SecretString"}),(0,r.jsx)(s.td,{children:"Authentication token for Astra DB access. Required."})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:"api_endpoint"}),(0,r.jsx)(s.td,{children:"SecretString"}),(0,r.jsx)(s.td,{children:"API endpoint URL for the Astra DB service. Required."})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:"namespace"}),(0,r.jsx)(s.td,{children:"String"}),(0,r.jsx)(s.td,{children:"Optional namespace within Astra DB for the collection."})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:"session_id"}),(0,r.jsx)(s.td,{children:"MessageText"}),(0,r.jsx)(s.td,{children:"Chat session ID. Uses current session ID if not provided."})]})]})]}),"\n",(0,r.jsx)(s.h3,{id:"outputs",children:"Outputs"}),"\n",(0,r.jsxs)(s.table,{children:[(0,r.jsx)(s.thead,{children:(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.th,{children:"Name"}),(0,r.jsx)(s.th,{children:"Type"}),(0,r.jsx)(s.th,{children:"Description"})]})}),(0,r.jsx)(s.tbody,{children:(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:"message_history"}),(0,r.jsx)(s.td,{children:"BaseChatMessageHistory"}),(0,r.jsx)(s.td,{children:"An instance of AstraDBChatMessageHistory for the session."})]})})]}),"\n",(0,r.jsx)(s.h2,{id:"cassandrachatmemory-component",children:"CassandraChatMemory Component"}),"\n",(0,r.jsxs)(s.p,{children:["This component creates a ",(0,r.jsx)(s.code,{children:"CassandraChatMessageHistory"})," instance, enabling storage and retrieval of chat messages using Apache Cassandra or DataStax Astra DB."]}),"\n",(0,r.jsx)(s.h3,{id:"inputs-1",children:"Inputs"}),"\n",(0,r.jsxs)(s.table,{children:[(0,r.jsx)(s.thead,{children:(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.th,{children:"Name"}),(0,r.jsx)(s.th,{children:"Type"}),(0,r.jsx)(s.th,{children:"Description"})]})}),(0,r.jsxs)(s.tbody,{children:[(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:"database_ref"}),(0,r.jsx)(s.td,{children:"MessageText"}),(0,r.jsx)(s.td,{children:"Contact points for Cassandra or Astra DB database ID. Required."})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:"username"}),(0,r.jsx)(s.td,{children:"MessageText"}),(0,r.jsx)(s.td,{children:"Username for Cassandra (leave empty for Astra DB)."})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:"token"}),(0,r.jsx)(s.td,{children:"SecretString"}),(0,r.jsx)(s.td,{children:"Password for Cassandra or token for Astra DB. Required."})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:"keyspace"}),(0,r.jsx)(s.td,{children:"MessageText"}),(0,r.jsx)(s.td,{children:"Keyspace in Cassandra or namespace in Astra DB. Required."})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:"table_name"}),(0,r.jsx)(s.td,{children:"MessageText"}),(0,r.jsx)(s.td,{children:"Name of the table or collection for storing messages. Required."})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:"session_id"}),(0,r.jsx)(s.td,{children:"MessageText"}),(0,r.jsx)(s.td,{children:"Unique identifier for the chat session. Optional."})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:"cluster_kwargs"}),(0,r.jsx)(s.td,{children:"Dictionary"}),(0,r.jsx)(s.td,{children:"Additional keyword arguments for Cassandra cluster configuration. Optional."})]})]})]}),"\n",(0,r.jsx)(s.h3,{id:"outputs-1",children:"Outputs"}),"\n",(0,r.jsxs)(s.table,{children:[(0,r.jsx)(s.thead,{children:(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.th,{children:"Name"}),(0,r.jsx)(s.th,{children:"Type"}),(0,r.jsx)(s.th,{children:"Description"})]})}),(0,r.jsx)(s.tbody,{children:(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:"message_history"}),(0,r.jsx)(s.td,{children:"BaseChatMessageHistory"}),(0,r.jsx)(s.td,{children:"An instance of CassandraChatMessageHistory for the session."})]})})]}),"\n",(0,r.jsx)(s.h2,{id:"mem0-chat-memory",children:"Mem0 Chat Memory"}),"\n",(0,r.jsx)(s.p,{children:"The Mem0 Chat Memory component retrieves and stores chat messages using Mem0 memory storage."}),"\n",(0,r.jsx)(s.h3,{id:"inputs-2",children:"Inputs"}),"\n",(0,r.jsxs)(s.table,{children:[(0,r.jsx)(s.thead,{children:(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.th,{children:"Name"}),(0,r.jsx)(s.th,{children:"Display Name"}),(0,r.jsx)(s.th,{children:"Info"})]})}),(0,r.jsxs)(s.tbody,{children:[(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:"mem0_config"}),(0,r.jsx)(s.td,{children:"Mem0 Configuration"}),(0,r.jsx)(s.td,{children:"Configuration dictionary for initializing Mem0 memory instance."})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:"ingest_message"}),(0,r.jsx)(s.td,{children:"Message to Ingest"}),(0,r.jsx)(s.td,{children:"The message content to be ingested into Mem0 memory."})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:"existing_memory"}),(0,r.jsx)(s.td,{children:"Existing Memory Instance"}),(0,r.jsx)(s.td,{children:"Optional existing Mem0 memory instance."})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:"user_id"}),(0,r.jsx)(s.td,{children:"User ID"}),(0,r.jsx)(s.td,{children:"Identifier for the user associated with the messages."})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:"search_query"}),(0,r.jsx)(s.td,{children:"Search Query"}),(0,r.jsx)(s.td,{children:"Input text for searching related memories in Mem0."})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:"mem0_api_key"}),(0,r.jsx)(s.td,{children:"Mem0 API Key"}),(0,r.jsx)(s.td,{children:"API key for Mem0 platform (leave empty to use the local version)."})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:"metadata"}),(0,r.jsx)(s.td,{children:"Metadata"}),(0,r.jsx)(s.td,{children:"Additional metadata to associate with the ingested message."})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:"openai_api_key"}),(0,r.jsx)(s.td,{children:"OpenAI API Key"}),(0,r.jsx)(s.td,{children:"API key for OpenAI. This item is required if you use OpenAI embeddings without a provided configuration."})]})]})]}),"\n",(0,r.jsx)(s.h3,{id:"outputs-2",children:"Outputs"}),"\n",(0,r.jsxs)(s.table,{children:[(0,r.jsx)(s.thead,{children:(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.th,{children:"Name"}),(0,r.jsx)(s.th,{children:"Display Name"}),(0,r.jsx)(s.th,{children:"Info"})]})}),(0,r.jsxs)(s.tbody,{children:[(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:"memory"}),(0,r.jsx)(s.td,{children:"Mem0 Memory"}),(0,r.jsx)(s.td,{children:"The resulting Mem0 Memory object after ingesting data."})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:"search_results"}),(0,r.jsx)(s.td,{children:"Search Results"}),(0,r.jsx)(s.td,{children:"The search results from querying Mem0 memory."})]})]})]}),"\n",(0,r.jsx)(s.h2,{id:"redis-chat-memory",children:"Redis Chat Memory"}),"\n",(0,r.jsx)(s.p,{children:"This component retrieves and stores chat messages from Redis."}),"\n",(0,r.jsx)(s.h3,{id:"inputs-3",children:"Inputs"}),"\n",(0,r.jsxs)(s.table,{children:[(0,r.jsx)(s.thead,{children:(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.th,{children:"Name"}),(0,r.jsx)(s.th,{children:"Display Name"}),(0,r.jsx)(s.th,{children:"Info"})]})}),(0,r.jsxs)(s.tbody,{children:[(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:"host"}),(0,r.jsx)(s.td,{children:"hostname"}),(0,r.jsx)(s.td,{children:"IP address or hostname."})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:"port"}),(0,r.jsx)(s.td,{children:"port"}),(0,r.jsx)(s.td,{children:"Redis Port Number."})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:"database"}),(0,r.jsx)(s.td,{children:"database"}),(0,r.jsx)(s.td,{children:"Redis database."})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:"username"}),(0,r.jsx)(s.td,{children:"Username"}),(0,r.jsx)(s.td,{children:"The Redis user name."})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:"password"}),(0,r.jsx)(s.td,{children:"Password"}),(0,r.jsx)(s.td,{children:"The password for username."})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:"key_prefix"}),(0,r.jsx)(s.td,{children:"Key prefix"}),(0,r.jsx)(s.td,{children:"Key prefix."})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:"session_id"}),(0,r.jsx)(s.td,{children:"Session ID"}),(0,r.jsx)(s.td,{children:"Session ID for the message."})]})]})]}),"\n",(0,r.jsx)(s.h3,{id:"outputs-3",children:"Outputs"}),"\n",(0,r.jsxs)(s.table,{children:[(0,r.jsx)(s.thead,{children:(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.th,{children:"Name"}),(0,r.jsx)(s.th,{children:"Display Name"}),(0,r.jsx)(s.th,{children:"Info"})]})}),(0,r.jsx)(s.tbody,{children:(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:"memory"}),(0,r.jsx)(s.td,{children:"Memory"}),(0,r.jsx)(s.td,{children:"The Redis chat message history object"})]})})]}),"\n",(0,r.jsx)(s.h2,{id:"legacy-components",children:"Legacy components"}),"\n",(0,r.jsxs)(s.p,{children:[(0,r.jsx)(s.strong,{children:"Legacy"})," components are available to use but no longer supported."]}),"\n",(0,r.jsx)(s.h3,{id:"zepchatmemory-component",children:"ZepChatMemory Component"}),"\n",(0,r.jsxs)(s.p,{children:["This component creates a ",(0,r.jsx)(s.code,{children:"ZepChatMessageHistory"})," instance, enabling storage and retrieval of chat messages using Zep, a memory server for Large Language Models (LLMs)."]}),"\n",(0,r.jsx)(s.h4,{id:"inputs-4",children:"Inputs"}),"\n",(0,r.jsxs)(s.table,{children:[(0,r.jsx)(s.thead,{children:(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.th,{children:"Name"}),(0,r.jsx)(s.th,{children:"Type"}),(0,r.jsx)(s.th,{children:"Description"})]})}),(0,r.jsxs)(s.tbody,{children:[(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:"url"}),(0,r.jsx)(s.td,{children:"MessageText"}),(0,r.jsx)(s.td,{children:"URL of the Zep instance. Required."})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:"api_key"}),(0,r.jsx)(s.td,{children:"SecretString"}),(0,r.jsx)(s.td,{children:"API Key for authentication with the Zep instance."})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:"api_base_path"}),(0,r.jsx)(s.td,{children:"Dropdown"}),(0,r.jsx)(s.td,{children:'API version to use. Options: "api/v1" or "api/v2".'})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:"session_id"}),(0,r.jsx)(s.td,{children:"MessageText"}),(0,r.jsx)(s.td,{children:"Unique identifier for the chat session. Optional."})]})]})]}),"\n",(0,r.jsx)(s.h4,{id:"outputs-4",children:"Outputs"}),"\n",(0,r.jsxs)(s.table,{children:[(0,r.jsx)(s.thead,{children:(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.th,{children:"Name"}),(0,r.jsx)(s.th,{children:"Type"}),(0,r.jsx)(s.th,{children:"Description"})]})}),(0,r.jsx)(s.tbody,{children:(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:"message_history"}),(0,r.jsx)(s.td,{children:"BaseChatMessageHistory"}),(0,r.jsx)(s.td,{children:"An instance of ZepChatMessageHistory for the session."})]})})]})]})}function l(e={}){const{wrapper:s}={...(0,i.R)(),...e.components};return s?(0,r.jsx)(s,{...e,children:(0,r.jsx)(o,{...e})}):o(e)}},28453:(e,s,t)=>{t.d(s,{R:()=>d,x:()=>c});var n=t(96540);const r={},i=n.createContext(r);function d(e){const s=n.useContext(i);return n.useMemo((function(){return"function"==typeof e?e(s):{...s,...e}}),[s,e])}function c(e){let s;return s=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:d(e.components),n.createElement(i.Provider,{value:s},e.children)}},72654:(e,s,t)=>{t.d(s,{A:()=>n});const n=t.p+"assets/images/astra_db_chat_memory_rounded-9746ca2bb69d3b07ac0a071f4b9471b3.png"}}]); \ No newline at end of file diff --git a/assets/js/8f774222.d4baa7a3.js b/assets/js/8f774222.d4baa7a3.js new file mode 100644 index 0000000000..ad011e410e --- /dev/null +++ b/assets/js/8f774222.d4baa7a3.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunklangflow_docs=self.webpackChunklangflow_docs||[]).push([[8661],{12378:(e,s,r)=>{r.r(s),r.d(s,{assets:()=>c,contentTitle:()=>h,default:()=>l,frontMatter:()=>d,metadata:()=>n,toc:()=>o});const n=JSON.parse('{"id":"Components/components-memories","title":"Memories","description":"Memory components store and retrieve chat messages by session_id.","source":"@site/docs/Components/components-memories.md","sourceDirName":"Components","slug":"/components-memories","permalink":"/components-memories","draft":false,"unlisted":false,"tags":[],"version":"current","frontMatter":{"title":"Memories","slug":"/components-memories"},"sidebar":"docs","previous":{"title":"Logic","permalink":"/components-logic"},"next":{"title":"Models","permalink":"/components-models"}}');var t=r(74848),i=r(28453);const d={title:"Memories",slug:"/components-memories"},h="Memory components in Langflow",c={},o=[{value:"Use a memory component in a flow",id:"use-a-memory-component-in-a-flow",level:2},{value:"AstraDBChatMemory Component",id:"astradbchatmemory-component",level:2},{value:"CassandraChatMemory Component",id:"cassandrachatmemory-component",level:2},{value:"Mem0 Chat Memory",id:"mem0-chat-memory",level:2},{value:"Redis Chat Memory",id:"redis-chat-memory",level:2},{value:"Legacy components",id:"legacy-components",level:2},{value:"ZepChatMemory Component",id:"zepchatmemory-component",level:3}];function a(e){const s={a:"a",code:"code",h1:"h1",h2:"h2",h3:"h3",header:"header",img:"img",p:"p",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",...(0,i.R)(),...e.components},{Details:n}=s;return n||function(e,s){throw new Error("Expected "+(s?"component":"object")+" `"+e+"` to be defined: you likely forgot to import, pass, or provide it.")}("Details",!0),(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(s.header,{children:(0,t.jsx)(s.h1,{id:"memory-components-in-langflow",children:"Memory components in Langflow"})}),"\n",(0,t.jsxs)(s.p,{children:["Memory components store and retrieve chat messages by ",(0,t.jsx)(s.code,{children:"session_id"}),"."]}),"\n",(0,t.jsx)(s.p,{children:"They are distinct from vector store components, because they are built specifically for storing and retrieving chat messages from external databases."}),"\n",(0,t.jsxs)(s.p,{children:["Memory components provide access to their respective external databases ",(0,t.jsx)(s.strong,{children:"as memory"}),". This allows Large Language Models (LLMs) or ",(0,t.jsx)(s.a,{href:"/components-agents",children:"agents"})," to access external memory for persistence and context retention."]}),"\n",(0,t.jsx)(s.h2,{id:"use-a-memory-component-in-a-flow",children:"Use a memory component in a flow"}),"\n",(0,t.jsxs)(s.p,{children:["This example flow stores and retrieves chat history from an ",(0,t.jsx)(s.strong,{children:"Astra DB Chat Memory"})," component with ",(0,t.jsx)(s.strong,{children:"Store Message"})," and ",(0,t.jsx)(s.strong,{children:"Chat Memory"})," components."]}),"\n",(0,t.jsxs)(s.p,{children:["The ",(0,t.jsx)(s.strong,{children:"Store Message"})," helper component stores chat memories as ",(0,t.jsx)(s.a,{href:"/concepts-objects",children:"Data"})," objects, and the ",(0,t.jsx)(s.strong,{children:"Message History"})," helper component retrieves chat messages as ",(0,t.jsx)(s.a,{href:"/concepts-objects",children:"Data"})," objects or strings."]}),"\n",(0,t.jsx)(s.p,{children:(0,t.jsx)(s.img,{alt:"Sample Flow storing Chat Memory in AstraDB",src:r(72654).A+"",width:"3178",height:"1228"})}),"\n",(0,t.jsx)(s.h2,{id:"astradbchatmemory-component",children:"AstraDBChatMemory Component"}),"\n",(0,t.jsxs)(s.p,{children:["This component creates an ",(0,t.jsx)(s.code,{children:"AstraDBChatMessageHistory"})," instance, which stores and retrieves chat messages using Astra DB, a cloud-native database service."]}),"\n",(0,t.jsxs)(n,{children:[(0,t.jsx)("summary",{children:"Parameters"}),(0,t.jsx)(s.p,{children:(0,t.jsx)(s.strong,{children:"Inputs"})}),(0,t.jsxs)(s.table,{children:[(0,t.jsx)(s.thead,{children:(0,t.jsxs)(s.tr,{children:[(0,t.jsx)(s.th,{children:"Name"}),(0,t.jsx)(s.th,{children:"Type"}),(0,t.jsx)(s.th,{children:"Description"})]})}),(0,t.jsxs)(s.tbody,{children:[(0,t.jsxs)(s.tr,{children:[(0,t.jsx)(s.td,{children:"collection_name"}),(0,t.jsx)(s.td,{children:"String"}),(0,t.jsx)(s.td,{children:"The name of the Astra DB collection for storing messages. Required."})]}),(0,t.jsxs)(s.tr,{children:[(0,t.jsx)(s.td,{children:"token"}),(0,t.jsx)(s.td,{children:"SecretString"}),(0,t.jsx)(s.td,{children:"The authentication token for Astra DB access. Required."})]}),(0,t.jsxs)(s.tr,{children:[(0,t.jsx)(s.td,{children:"api_endpoint"}),(0,t.jsx)(s.td,{children:"SecretString"}),(0,t.jsx)(s.td,{children:"The API endpoint URL for the Astra DB service. Required."})]}),(0,t.jsxs)(s.tr,{children:[(0,t.jsx)(s.td,{children:"namespace"}),(0,t.jsx)(s.td,{children:"String"}),(0,t.jsx)(s.td,{children:"The optional namespace within Astra DB for the collection."})]}),(0,t.jsxs)(s.tr,{children:[(0,t.jsx)(s.td,{children:"session_id"}),(0,t.jsx)(s.td,{children:"MessageText"}),(0,t.jsx)(s.td,{children:"The chat session ID. Uses the current session ID if not provided."})]})]})]}),(0,t.jsx)(s.p,{children:(0,t.jsx)(s.strong,{children:"Outputs"})}),(0,t.jsxs)(s.table,{children:[(0,t.jsx)(s.thead,{children:(0,t.jsxs)(s.tr,{children:[(0,t.jsx)(s.th,{children:"Name"}),(0,t.jsx)(s.th,{children:"Type"}),(0,t.jsx)(s.th,{children:"Description"})]})}),(0,t.jsx)(s.tbody,{children:(0,t.jsxs)(s.tr,{children:[(0,t.jsx)(s.td,{children:"message_history"}),(0,t.jsx)(s.td,{children:"BaseChatMessageHistory"}),(0,t.jsx)(s.td,{children:"An instance of AstraDBChatMessageHistory for the session."})]})})]})]}),"\n",(0,t.jsx)(s.h2,{id:"cassandrachatmemory-component",children:"CassandraChatMemory Component"}),"\n",(0,t.jsxs)(s.p,{children:["This component creates a ",(0,t.jsx)(s.code,{children:"CassandraChatMessageHistory"})," instance, enabling storage and retrieval of chat messages using Apache Cassandra or DataStax Astra DB."]}),"\n",(0,t.jsxs)(n,{children:[(0,t.jsx)("summary",{children:"Parameters"}),(0,t.jsx)(s.p,{children:(0,t.jsx)(s.strong,{children:"Inputs"})}),(0,t.jsxs)(s.table,{children:[(0,t.jsx)(s.thead,{children:(0,t.jsxs)(s.tr,{children:[(0,t.jsx)(s.th,{children:"Name"}),(0,t.jsx)(s.th,{children:"Type"}),(0,t.jsx)(s.th,{children:"Description"})]})}),(0,t.jsxs)(s.tbody,{children:[(0,t.jsxs)(s.tr,{children:[(0,t.jsx)(s.td,{children:"database_ref"}),(0,t.jsx)(s.td,{children:"MessageText"}),(0,t.jsx)(s.td,{children:"The contact points for the Cassandra database or Astra DB database ID. Required."})]}),(0,t.jsxs)(s.tr,{children:[(0,t.jsx)(s.td,{children:"username"}),(0,t.jsx)(s.td,{children:"MessageText"}),(0,t.jsx)(s.td,{children:"The username for Cassandra. Leave empty for Astra DB."})]}),(0,t.jsxs)(s.tr,{children:[(0,t.jsx)(s.td,{children:"token"}),(0,t.jsx)(s.td,{children:"SecretString"}),(0,t.jsx)(s.td,{children:"The password for Cassandra or the token for Astra DB. Required."})]}),(0,t.jsxs)(s.tr,{children:[(0,t.jsx)(s.td,{children:"keyspace"}),(0,t.jsx)(s.td,{children:"MessageText"}),(0,t.jsx)(s.td,{children:"The keyspace in Cassandra or namespace in Astra DB. Required."})]}),(0,t.jsxs)(s.tr,{children:[(0,t.jsx)(s.td,{children:"table_name"}),(0,t.jsx)(s.td,{children:"MessageText"}),(0,t.jsx)(s.td,{children:"The name of the table or collection for storing messages. Required."})]}),(0,t.jsxs)(s.tr,{children:[(0,t.jsx)(s.td,{children:"session_id"}),(0,t.jsx)(s.td,{children:"MessageText"}),(0,t.jsx)(s.td,{children:"The unique identifier for the chat session. Optional."})]}),(0,t.jsxs)(s.tr,{children:[(0,t.jsx)(s.td,{children:"cluster_kwargs"}),(0,t.jsx)(s.td,{children:"Dictionary"}),(0,t.jsx)(s.td,{children:"Additional keyword arguments for the Cassandra cluster configuration. Optional."})]})]})]}),(0,t.jsx)(s.p,{children:(0,t.jsx)(s.strong,{children:"Outputs"})}),(0,t.jsxs)(s.table,{children:[(0,t.jsx)(s.thead,{children:(0,t.jsxs)(s.tr,{children:[(0,t.jsx)(s.th,{children:"Name"}),(0,t.jsx)(s.th,{children:"Type"}),(0,t.jsx)(s.th,{children:"Description"})]})}),(0,t.jsx)(s.tbody,{children:(0,t.jsxs)(s.tr,{children:[(0,t.jsx)(s.td,{children:"message_history"}),(0,t.jsx)(s.td,{children:"BaseChatMessageHistory"}),(0,t.jsx)(s.td,{children:"An instance of CassandraChatMessageHistory for the session."})]})})]})]}),"\n",(0,t.jsx)(s.h2,{id:"mem0-chat-memory",children:"Mem0 Chat Memory"}),"\n",(0,t.jsx)(s.p,{children:"The Mem0 Chat Memory component retrieves and stores chat messages using Mem0 memory storage."}),"\n",(0,t.jsxs)(n,{children:[(0,t.jsx)("summary",{children:"Parameters"}),(0,t.jsx)(s.p,{children:(0,t.jsx)(s.strong,{children:"Inputs"})}),(0,t.jsxs)(s.table,{children:[(0,t.jsx)(s.thead,{children:(0,t.jsxs)(s.tr,{children:[(0,t.jsx)(s.th,{children:"Name"}),(0,t.jsx)(s.th,{children:"Display Name"}),(0,t.jsx)(s.th,{children:"Info"})]})}),(0,t.jsxs)(s.tbody,{children:[(0,t.jsxs)(s.tr,{children:[(0,t.jsx)(s.td,{children:"mem0_config"}),(0,t.jsx)(s.td,{children:"Mem0 Configuration"}),(0,t.jsx)(s.td,{children:"The configuration dictionary for initializing the Mem0 memory instance."})]}),(0,t.jsxs)(s.tr,{children:[(0,t.jsx)(s.td,{children:"ingest_message"}),(0,t.jsx)(s.td,{children:"Message to Ingest"}),(0,t.jsx)(s.td,{children:"The message content to be ingested into Mem0 memory."})]}),(0,t.jsxs)(s.tr,{children:[(0,t.jsx)(s.td,{children:"existing_memory"}),(0,t.jsx)(s.td,{children:"Existing Memory Instance"}),(0,t.jsx)(s.td,{children:"An optional existing Mem0 memory instance."})]}),(0,t.jsxs)(s.tr,{children:[(0,t.jsx)(s.td,{children:"user_id"}),(0,t.jsx)(s.td,{children:"User ID"}),(0,t.jsx)(s.td,{children:"The identifier for the user associated with the messages."})]}),(0,t.jsxs)(s.tr,{children:[(0,t.jsx)(s.td,{children:"search_query"}),(0,t.jsx)(s.td,{children:"Search Query"}),(0,t.jsx)(s.td,{children:"The input text for searching related memories in Mem0."})]}),(0,t.jsxs)(s.tr,{children:[(0,t.jsx)(s.td,{children:"mem0_api_key"}),(0,t.jsx)(s.td,{children:"Mem0 API Key"}),(0,t.jsx)(s.td,{children:"The API key for the Mem0 platform. Leave empty to use the local version."})]}),(0,t.jsxs)(s.tr,{children:[(0,t.jsx)(s.td,{children:"metadata"}),(0,t.jsx)(s.td,{children:"Metadata"}),(0,t.jsx)(s.td,{children:"The additional metadata to associate with the ingested message."})]}),(0,t.jsxs)(s.tr,{children:[(0,t.jsx)(s.td,{children:"openai_api_key"}),(0,t.jsx)(s.td,{children:"OpenAI API Key"}),(0,t.jsx)(s.td,{children:"The API key for OpenAI. Required when using OpenAI embeddings without a provided configuration."})]})]})]}),(0,t.jsx)(s.p,{children:(0,t.jsx)(s.strong,{children:"Outputs"})}),(0,t.jsxs)(s.table,{children:[(0,t.jsx)(s.thead,{children:(0,t.jsxs)(s.tr,{children:[(0,t.jsx)(s.th,{children:"Name"}),(0,t.jsx)(s.th,{children:"Display Name"}),(0,t.jsx)(s.th,{children:"Info"})]})}),(0,t.jsxs)(s.tbody,{children:[(0,t.jsxs)(s.tr,{children:[(0,t.jsx)(s.td,{children:"memory"}),(0,t.jsx)(s.td,{children:"Mem0 Memory"}),(0,t.jsx)(s.td,{children:"The resulting Mem0 Memory object after ingesting data."})]}),(0,t.jsxs)(s.tr,{children:[(0,t.jsx)(s.td,{children:"search_results"}),(0,t.jsx)(s.td,{children:"Search Results"}),(0,t.jsx)(s.td,{children:"The search results from querying Mem0 memory."})]})]})]})]}),"\n",(0,t.jsx)(s.h2,{id:"redis-chat-memory",children:"Redis Chat Memory"}),"\n",(0,t.jsx)(s.p,{children:"This component retrieves and stores chat messages from Redis."}),"\n",(0,t.jsxs)(n,{children:[(0,t.jsx)("summary",{children:"Parameters"}),(0,t.jsx)(s.p,{children:(0,t.jsx)(s.strong,{children:"Inputs"})}),(0,t.jsxs)(s.table,{children:[(0,t.jsx)(s.thead,{children:(0,t.jsxs)(s.tr,{children:[(0,t.jsx)(s.th,{children:"Name"}),(0,t.jsx)(s.th,{children:"Display Name"}),(0,t.jsx)(s.th,{children:"Info"})]})}),(0,t.jsxs)(s.tbody,{children:[(0,t.jsxs)(s.tr,{children:[(0,t.jsx)(s.td,{children:"host"}),(0,t.jsx)(s.td,{children:"hostname"}),(0,t.jsx)(s.td,{children:"The IP address or hostname."})]}),(0,t.jsxs)(s.tr,{children:[(0,t.jsx)(s.td,{children:"port"}),(0,t.jsx)(s.td,{children:"port"}),(0,t.jsx)(s.td,{children:"The Redis Port Number."})]}),(0,t.jsxs)(s.tr,{children:[(0,t.jsx)(s.td,{children:"database"}),(0,t.jsx)(s.td,{children:"database"}),(0,t.jsx)(s.td,{children:"The Redis database."})]}),(0,t.jsxs)(s.tr,{children:[(0,t.jsx)(s.td,{children:"username"}),(0,t.jsx)(s.td,{children:"Username"}),(0,t.jsx)(s.td,{children:"The Redis username."})]}),(0,t.jsxs)(s.tr,{children:[(0,t.jsx)(s.td,{children:"password"}),(0,t.jsx)(s.td,{children:"Password"}),(0,t.jsx)(s.td,{children:"The password for the username."})]}),(0,t.jsxs)(s.tr,{children:[(0,t.jsx)(s.td,{children:"key_prefix"}),(0,t.jsx)(s.td,{children:"Key prefix"}),(0,t.jsx)(s.td,{children:"The key prefix."})]}),(0,t.jsxs)(s.tr,{children:[(0,t.jsx)(s.td,{children:"session_id"}),(0,t.jsx)(s.td,{children:"Session ID"}),(0,t.jsx)(s.td,{children:"The session ID for the message."})]})]})]}),(0,t.jsx)(s.p,{children:(0,t.jsx)(s.strong,{children:"Outputs"})}),(0,t.jsxs)(s.table,{children:[(0,t.jsx)(s.thead,{children:(0,t.jsxs)(s.tr,{children:[(0,t.jsx)(s.th,{children:"Name"}),(0,t.jsx)(s.th,{children:"Display Name"}),(0,t.jsx)(s.th,{children:"Info"})]})}),(0,t.jsx)(s.tbody,{children:(0,t.jsxs)(s.tr,{children:[(0,t.jsx)(s.td,{children:"memory"}),(0,t.jsx)(s.td,{children:"Memory"}),(0,t.jsx)(s.td,{children:"The Redis chat message history object."})]})})]})]}),"\n",(0,t.jsx)(s.h2,{id:"legacy-components",children:"Legacy components"}),"\n",(0,t.jsxs)(s.p,{children:[(0,t.jsx)(s.strong,{children:"Legacy"})," components are available for use but are no longer supported."]}),"\n",(0,t.jsx)(s.h3,{id:"zepchatmemory-component",children:"ZepChatMemory Component"}),"\n",(0,t.jsxs)(s.p,{children:["This component creates a ",(0,t.jsx)(s.code,{children:"ZepChatMessageHistory"})," instance, enabling storage and retrieval of chat messages using Zep, a memory server for Large Language Models (LLMs)."]}),"\n",(0,t.jsxs)(n,{children:[(0,t.jsx)("summary",{children:"Parameters"}),(0,t.jsx)(s.p,{children:(0,t.jsx)(s.strong,{children:"Inputs"})}),(0,t.jsxs)(s.table,{children:[(0,t.jsx)(s.thead,{children:(0,t.jsxs)(s.tr,{children:[(0,t.jsx)(s.th,{children:"Name"}),(0,t.jsx)(s.th,{children:"Type"}),(0,t.jsx)(s.th,{children:"Description"})]})}),(0,t.jsxs)(s.tbody,{children:[(0,t.jsxs)(s.tr,{children:[(0,t.jsx)(s.td,{children:"url"}),(0,t.jsx)(s.td,{children:"MessageText"}),(0,t.jsx)(s.td,{children:"The URL of the Zep instance. Required."})]}),(0,t.jsxs)(s.tr,{children:[(0,t.jsx)(s.td,{children:"api_key"}),(0,t.jsx)(s.td,{children:"SecretString"}),(0,t.jsx)(s.td,{children:"The API Key for authentication with the Zep instance."})]}),(0,t.jsxs)(s.tr,{children:[(0,t.jsx)(s.td,{children:"api_base_path"}),(0,t.jsx)(s.td,{children:"Dropdown"}),(0,t.jsx)(s.td,{children:"The API version to use. Options include api/v1 or api/v2."})]}),(0,t.jsxs)(s.tr,{children:[(0,t.jsx)(s.td,{children:"session_id"}),(0,t.jsx)(s.td,{children:"MessageText"}),(0,t.jsx)(s.td,{children:"The unique identifier for the chat session. Optional."})]})]})]}),(0,t.jsx)(s.p,{children:(0,t.jsx)(s.strong,{children:"Outputs"})}),(0,t.jsxs)(s.table,{children:[(0,t.jsx)(s.thead,{children:(0,t.jsxs)(s.tr,{children:[(0,t.jsx)(s.th,{children:"Name"}),(0,t.jsx)(s.th,{children:"Type"}),(0,t.jsx)(s.th,{children:"Description"})]})}),(0,t.jsx)(s.tbody,{children:(0,t.jsxs)(s.tr,{children:[(0,t.jsx)(s.td,{children:"message_history"}),(0,t.jsx)(s.td,{children:"BaseChatMessageHistory"}),(0,t.jsx)(s.td,{children:"An instance of ZepChatMessageHistory for the session."})]})})]})]})]})}function l(e={}){const{wrapper:s}={...(0,i.R)(),...e.components};return s?(0,t.jsx)(s,{...e,children:(0,t.jsx)(a,{...e})}):a(e)}},28453:(e,s,r)=>{r.d(s,{R:()=>d,x:()=>h});var n=r(96540);const t={},i=n.createContext(t);function d(e){const s=n.useContext(i);return n.useMemo((function(){return"function"==typeof e?e(s):{...s,...e}}),[s,e])}function h(e){let s;return s=e.disableParentContext?"function"==typeof e.components?e.components(t):e.components||t:d(e.components),n.createElement(i.Provider,{value:s},e.children)}},72654:(e,s,r)=>{r.d(s,{A:()=>n});const n=r.p+"assets/images/astra_db_chat_memory_rounded-9746ca2bb69d3b07ac0a071f4b9471b3.png"}}]); \ No newline at end of file diff --git a/assets/js/921b5fc1.4fa35110.js b/assets/js/921b5fc1.4fa35110.js new file mode 100644 index 0000000000..9a4d6a0f94 --- /dev/null +++ b/assets/js/921b5fc1.4fa35110.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunklangflow_docs=self.webpackChunklangflow_docs||[]).push([[7462],{7369:(e,n,s)=>{s.d(n,{A:()=>d});const d=s.p+"assets/images/component-ollama-embeddings-chromadb-c02d6ef9e753b61c274778d90f2a6eec.png"},28453:(e,n,s)=>{s.d(n,{R:()=>r,x:()=>l});var d=s(96540);const t={},i=d.createContext(t);function r(e){const n=d.useContext(i);return d.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function l(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(t):e.components||t:r(e.components),d.createElement(i.Provider,{value:n},e.children)}},56088:(e,n,s)=>{s.r(n),s.d(n,{assets:()=>c,contentTitle:()=>h,default:()=>x,frontMatter:()=>l,metadata:()=>d,toc:()=>o});const d=JSON.parse('{"id":"Components/components-embedding-models","title":"Embeddings","description":"Embeddings models convert text into numerical vectors. These embeddings capture the semantic meaning of the input text, and allow LLMs to understand context.","source":"@site/docs/Components/components-embedding-models.md","sourceDirName":"Components","slug":"/components-embedding-models","permalink":"/components-embedding-models","draft":false,"unlisted":false,"tags":[],"version":"current","frontMatter":{"title":"Embeddings","slug":"/components-embedding-models"},"sidebar":"docs","previous":{"title":"Data","permalink":"/components-data"},"next":{"title":"Helpers","permalink":"/components-helpers"}}');var t=s(74848),i=s(28453),r=s(84443);const l={title:"Embeddings",slug:"/components-embedding-models"},h="Embeddings models in Langflow",c={},o=[{value:"Use an embeddings model component in a flow",id:"use-an-embeddings-model-component-in-a-flow",level:2},{value:"AI/ML",id:"aiml",level:2},{value:"Amazon Bedrock Embeddings",id:"amazon-bedrock-embeddings",level:2},{value:"Astra DB vectorize",id:"astra-db-vectorize",level:2},{value:"Azure OpenAI Embeddings",id:"azure-openai-embeddings",level:2},{value:"Cloudflare Workers AI Embeddings",id:"cloudflare-workers-ai-embeddings",level:2},{value:"Cohere Embeddings",id:"cohere-embeddings",level:2},{value:"Embedding similarity",id:"embedding-similarity",level:2},{value:"Google generative AI embeddings",id:"google-generative-ai-embeddings",level:2},{value:"Hugging Face Embeddings",id:"hugging-face-embeddings",level:2},{value:"Hugging Face embeddings inference",id:"hugging-face-embeddings-inference",level:2},{value:"Connect the Hugging Face component to a local embeddings model",id:"connect-the-hugging-face-component-to-a-local-embeddings-model",level:3},{value:"IBM watsonx embeddings",id:"ibm-watsonx-embeddings",level:2},{value:"Default models",id:"default-models",level:3},{value:"LM Studio Embeddings",id:"lm-studio-embeddings",level:2},{value:"MistralAI",id:"mistralai",level:2},{value:"NVIDIA",id:"nvidia",level:2},{value:"Ollama embeddings",id:"ollama-embeddings",level:2},{value:"OpenAI Embeddings",id:"openai-embeddings",level:2},{value:"Text embedder",id:"text-embedder",level:2},{value:"VertexAI Embeddings",id:"vertexai-embeddings",level:2}];function a(e){const n={a:"a",admonition:"admonition",code:"code",h1:"h1",h2:"h2",h3:"h3",header:"header",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,i.R)(),...e.components},{Details:d}=n;return d||function(e,n){throw new Error("Expected "+(n?"component":"object")+" `"+e+"` to be defined: you likely forgot to import, pass, or provide it.")}("Details",!0),(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(n.header,{children:(0,t.jsx)(n.h1,{id:"embeddings-models-in-langflow",children:"Embeddings models in Langflow"})}),"\n",(0,t.jsx)(n.p,{children:"Embeddings models convert text into numerical vectors. These embeddings capture the semantic meaning of the input text, and allow LLMs to understand context."}),"\n",(0,t.jsx)(n.p,{children:"Refer to your specific component's documentation for more information on parameters."}),"\n",(0,t.jsx)(n.h2,{id:"use-an-embeddings-model-component-in-a-flow",children:"Use an embeddings model component in a flow"}),"\n",(0,t.jsxs)(n.p,{children:["In this example of a document ingestion pipeline, the ",(0,t.jsx)(n.strong,{children:"OpenAI"})," embeddings model is connected to a vector database. The component converts the text chunks into vectors and stores them in the vector database. The vectorized data can be used to inform AI workloads like chatbots, similarity searches, and agents."]}),"\n",(0,t.jsx)(n.p,{children:"This embeddings component uses an OpenAI API key for authentication. Refer to your specific embeddings component's documentation for more information on authentication."}),"\n",(0,t.jsx)(n.p,{children:(0,t.jsx)(n.img,{alt:"URL component in a data ingestion pipeline",src:s(80352).A+"",width:"2306",height:"1632"})}),"\n",(0,t.jsx)(n.h2,{id:"aiml",children:"AI/ML"}),"\n",(0,t.jsxs)(n.p,{children:["This component generates embeddings using the ",(0,t.jsx)(n.a,{href:"https://docs.aimlapi.com/api-overview/embeddings",children:"AI/ML API"}),"."]}),"\n",(0,t.jsxs)(d,{children:[(0,t.jsx)("summary",{children:"Parameters"}),(0,t.jsx)(n.p,{children:(0,t.jsx)(n.strong,{children:"Inputs"})}),(0,t.jsxs)(n.table,{children:[(0,t.jsx)(n.thead,{children:(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.th,{children:"Name"}),(0,t.jsx)(n.th,{children:"Type"}),(0,t.jsx)(n.th,{children:"Description"})]})}),(0,t.jsxs)(n.tbody,{children:[(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:"model_name"}),(0,t.jsx)(n.td,{children:"String"}),(0,t.jsx)(n.td,{children:"The name of the AI/ML embedding model to use."})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:"aiml_api_key"}),(0,t.jsx)(n.td,{children:"SecretString"}),(0,t.jsx)(n.td,{children:"The API key required for authenticating with the AI/ML service."})]})]})]}),(0,t.jsx)(n.p,{children:(0,t.jsx)(n.strong,{children:"Outputs"})}),(0,t.jsxs)(n.table,{children:[(0,t.jsx)(n.thead,{children:(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.th,{children:"Name"}),(0,t.jsx)(n.th,{children:"Type"}),(0,t.jsx)(n.th,{children:"Description"})]})}),(0,t.jsx)(n.tbody,{children:(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:"embeddings"}),(0,t.jsx)(n.td,{children:"Embeddings"}),(0,t.jsxs)(n.td,{children:["An instance of ",(0,t.jsx)(n.code,{children:"AIMLEmbeddingsImpl"})," for generating embeddings."]})]})})]})]}),"\n",(0,t.jsx)(n.h2,{id:"amazon-bedrock-embeddings",children:"Amazon Bedrock Embeddings"}),"\n",(0,t.jsxs)(n.p,{children:["This component is used to load embedding models from ",(0,t.jsx)(n.a,{href:"https://aws.amazon.com/bedrock/",children:"Amazon Bedrock"}),"."]}),"\n",(0,t.jsxs)(d,{children:[(0,t.jsx)("summary",{children:"Parameters"}),(0,t.jsx)(n.p,{children:(0,t.jsx)(n.strong,{children:"Inputs"})}),(0,t.jsxs)(n.table,{children:[(0,t.jsx)(n.thead,{children:(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.th,{children:"Name"}),(0,t.jsx)(n.th,{children:"Type"}),(0,t.jsx)(n.th,{children:"Description"})]})}),(0,t.jsxs)(n.tbody,{children:[(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:"credentials_profile_name"}),(0,t.jsx)(n.td,{children:"String"}),(0,t.jsxs)(n.td,{children:["The name of the AWS credentials profile in ",(0,t.jsx)(n.code,{children:"~/.aws/credentials"})," or ",(0,t.jsx)(n.code,{children:"~/.aws/config"}),", which has access keys or role information."]})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:"model_id"}),(0,t.jsx)(n.td,{children:"String"}),(0,t.jsxs)(n.td,{children:["The ID of the model to call, such as ",(0,t.jsx)(n.code,{children:"amazon.titan-embed-text-v1"}),". This is equivalent to the ",(0,t.jsx)(n.code,{children:"modelId"})," property in the ",(0,t.jsx)(n.code,{children:"list-foundation-models"})," API."]})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:"endpoint_url"}),(0,t.jsx)(n.td,{children:"String"}),(0,t.jsx)(n.td,{children:"The URL to set a specific service endpoint other than the default AWS endpoint."})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:"region_name"}),(0,t.jsx)(n.td,{children:"String"}),(0,t.jsxs)(n.td,{children:["The AWS region to use, such as ",(0,t.jsx)(n.code,{children:"us-west-2"}),". Falls back to the ",(0,t.jsx)(n.code,{children:"AWS_DEFAULT_REGION"})," environment variable or region specified in ",(0,t.jsx)(n.code,{children:"~/.aws/config"})," if not provided."]})]})]})]}),(0,t.jsx)(n.p,{children:(0,t.jsx)(n.strong,{children:"Outputs"})}),(0,t.jsxs)(n.table,{children:[(0,t.jsx)(n.thead,{children:(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.th,{children:"Name"}),(0,t.jsx)(n.th,{children:"Type"}),(0,t.jsx)(n.th,{children:"Description"})]})}),(0,t.jsx)(n.tbody,{children:(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:"embeddings"}),(0,t.jsx)(n.td,{children:"Embeddings"}),(0,t.jsx)(n.td,{children:"An instance for generating embeddings using Amazon Bedrock."})]})})]})]}),"\n",(0,t.jsx)(n.h2,{id:"astra-db-vectorize",children:"Astra DB vectorize"}),"\n",(0,t.jsx)(n.admonition,{type:"important",children:(0,t.jsxs)(n.p,{children:["This component is deprecated as of Langflow version 1.1.2.\nInstead, use the ",(0,t.jsx)(n.a,{href:"/components-vector-stores#astra-db-vector-store",children:"Astra DB vector store component"}),"."]})}),"\n",(0,t.jsxs)(n.p,{children:["Connect this component to the ",(0,t.jsx)(n.strong,{children:"Embeddings"})," port of the ",(0,t.jsx)(n.a,{href:"/components-vector-stores#astra-db-vector-store",children:"Astra DB vector store component"})," to generate embeddings."]}),"\n",(0,t.jsxs)(n.p,{children:["This component requires that your Astra DB database has a collection that uses a vectorize embedding provider integration.\nFor more information and instructions, see ",(0,t.jsx)(n.a,{href:"https://docs.datastax.com/en/astra-db-serverless/databases/embedding-generation.html",children:"Embedding Generation"}),"."]}),"\n",(0,t.jsxs)(d,{children:[(0,t.jsx)("summary",{children:"Parameters"}),(0,t.jsx)(n.p,{children:(0,t.jsx)(n.strong,{children:"Inputs"})}),(0,t.jsxs)(n.table,{children:[(0,t.jsx)(n.thead,{children:(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.th,{children:"Name"}),(0,t.jsx)(n.th,{children:"Display Name"}),(0,t.jsx)(n.th,{children:"Info"})]})}),(0,t.jsxs)(n.tbody,{children:[(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:"provider"}),(0,t.jsx)(n.td,{children:"Embedding Provider"}),(0,t.jsx)(n.td,{children:"The embedding provider to use."})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:"model_name"}),(0,t.jsx)(n.td,{children:"Model Name"}),(0,t.jsx)(n.td,{children:"The embedding model to use."})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:"authentication"}),(0,t.jsx)(n.td,{children:"Authentication"}),(0,t.jsxs)(n.td,{children:["The name of the API key in Astra that stores your ",(0,t.jsx)(n.a,{href:"https://docs.datastax.com/en/astra-db-serverless/databases/embedding-generation.html#embedding-provider-authentication",children:"vectorize embedding provider credentials"}),". (Not required if using an ",(0,t.jsx)(n.a,{href:"https://docs.datastax.com/en/astra-db-serverless/databases/embedding-generation.html#supported-embedding-providers",children:"Astra-hosted embedding provider"}),".)"]})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:"provider_api_key"}),(0,t.jsx)(n.td,{children:"Provider API Key"}),(0,t.jsxs)(n.td,{children:["As an alternative to ",(0,t.jsx)(n.code,{children:"authentication"}),", directly provide your embedding provider credentials."]})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:"model_parameters"}),(0,t.jsx)(n.td,{children:"Model Parameters"}),(0,t.jsx)(n.td,{children:"Additional model parameters."})]})]})]}),(0,t.jsx)(n.p,{children:(0,t.jsx)(n.strong,{children:"Outputs"})}),(0,t.jsxs)(n.table,{children:[(0,t.jsx)(n.thead,{children:(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.th,{children:"Name"}),(0,t.jsx)(n.th,{children:"Type"}),(0,t.jsx)(n.th,{children:"Description"})]})}),(0,t.jsx)(n.tbody,{children:(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:"embeddings"}),(0,t.jsx)(n.td,{children:"Embeddings"}),(0,t.jsx)(n.td,{children:"An instance for generating embeddings using Astra vectorize."})]})})]})]}),"\n",(0,t.jsx)(n.h2,{id:"azure-openai-embeddings",children:"Azure OpenAI Embeddings"}),"\n",(0,t.jsx)(n.p,{children:"This component generates embeddings using Azure OpenAI models."}),"\n",(0,t.jsxs)(d,{children:[(0,t.jsx)("summary",{children:"Parameters"}),(0,t.jsx)(n.p,{children:(0,t.jsx)(n.strong,{children:"Inputs"})}),(0,t.jsxs)(n.table,{children:[(0,t.jsx)(n.thead,{children:(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.th,{children:"Name"}),(0,t.jsx)(n.th,{children:"Type"}),(0,t.jsx)(n.th,{children:"Description"})]})}),(0,t.jsxs)(n.tbody,{children:[(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:"Model"}),(0,t.jsx)(n.td,{children:"String"}),(0,t.jsxs)(n.td,{children:["The name of the model to use. Default: ",(0,t.jsx)(n.code,{children:"text-embedding-3-small"}),"."]})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:"Azure Endpoint"}),(0,t.jsx)(n.td,{children:"String"}),(0,t.jsxs)(n.td,{children:["Your Azure endpoint, including the resource, such as ",(0,t.jsx)(n.code,{children:"https://example-resource.azure.openai.com/"}),"."]})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:"Deployment Name"}),(0,t.jsx)(n.td,{children:"String"}),(0,t.jsx)(n.td,{children:"The name of the deployment."})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:"API Version"}),(0,t.jsx)(n.td,{children:"String"}),(0,t.jsx)(n.td,{children:"The API version to use, with options including various dates."})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:"API Key"}),(0,t.jsx)(n.td,{children:"String"}),(0,t.jsx)(n.td,{children:"The API key required to access the Azure OpenAI service."})]})]})]}),(0,t.jsx)(n.p,{children:(0,t.jsx)(n.strong,{children:"Outputs"})}),(0,t.jsxs)(n.table,{children:[(0,t.jsx)(n.thead,{children:(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.th,{children:"Name"}),(0,t.jsx)(n.th,{children:"Type"}),(0,t.jsx)(n.th,{children:"Description"})]})}),(0,t.jsx)(n.tbody,{children:(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:"embeddings"}),(0,t.jsx)(n.td,{children:"Embeddings"}),(0,t.jsx)(n.td,{children:"An instance for generating embeddings using Azure OpenAI."})]})})]})]}),"\n",(0,t.jsx)(n.h2,{id:"cloudflare-workers-ai-embeddings",children:"Cloudflare Workers AI Embeddings"}),"\n",(0,t.jsxs)(n.p,{children:["This component generates embeddings using ",(0,t.jsx)(n.a,{href:"https://developers.cloudflare.com/workers-ai/",children:"Cloudflare Workers AI models"}),"."]}),"\n",(0,t.jsxs)(d,{children:[(0,t.jsx)("summary",{children:"Parameters"}),(0,t.jsx)(n.p,{children:(0,t.jsx)(n.strong,{children:"Inputs"})}),(0,t.jsxs)(n.table,{children:[(0,t.jsx)(n.thead,{children:(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.th,{children:"Name"}),(0,t.jsx)(n.th,{children:"Display Name"}),(0,t.jsx)(n.th,{children:"Info"})]})}),(0,t.jsxs)(n.tbody,{children:[(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:"account_id"}),(0,t.jsx)(n.td,{children:"Cloudflare account ID"}),(0,t.jsxs)(n.td,{children:[(0,t.jsx)(n.a,{href:"https://developers.cloudflare.com/fundamentals/setup/find-account-and-zone-ids/#find-account-id-workers-and-pages",children:"Find your Cloudflare account ID"}),"."]})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:"api_token"}),(0,t.jsx)(n.td,{children:"Cloudflare API token"}),(0,t.jsxs)(n.td,{children:[(0,t.jsx)(n.a,{href:"https://developers.cloudflare.com/fundamentals/api/get-started/create-token/",children:"Create an API token"}),"."]})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:"model_name"}),(0,t.jsx)(n.td,{children:"Model Name"}),(0,t.jsxs)(n.td,{children:[(0,t.jsx)(n.a,{href:"https://developers.cloudflare.com/workers-ai/models/#text-embeddings",children:"List of supported models"}),"."]})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:"strip_new_lines"}),(0,t.jsx)(n.td,{children:"Strip New Lines"}),(0,t.jsx)(n.td,{children:"Whether to strip new lines from the input text."})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:"batch_size"}),(0,t.jsx)(n.td,{children:"Batch Size"}),(0,t.jsx)(n.td,{children:"The number of texts to embed in each batch."})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:"api_base_url"}),(0,t.jsx)(n.td,{children:"Cloudflare API base URL"}),(0,t.jsx)(n.td,{children:"The base URL for the Cloudflare API."})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:"headers"}),(0,t.jsx)(n.td,{children:"Headers"}),(0,t.jsx)(n.td,{children:"Additional request headers."})]})]})]}),(0,t.jsx)(n.p,{children:(0,t.jsx)(n.strong,{children:"Outputs"})}),(0,t.jsxs)(n.table,{children:[(0,t.jsx)(n.thead,{children:(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.th,{children:"Name"}),(0,t.jsx)(n.th,{children:"Display Name"}),(0,t.jsx)(n.th,{children:"Info"})]})}),(0,t.jsx)(n.tbody,{children:(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:"embeddings"}),(0,t.jsx)(n.td,{children:"Embeddings"}),(0,t.jsx)(n.td,{children:"An instance for generating embeddings using Cloudflare Workers."})]})})]})]}),"\n",(0,t.jsx)(n.h2,{id:"cohere-embeddings",children:"Cohere Embeddings"}),"\n",(0,t.jsxs)(n.p,{children:["This component is used to load embedding models from ",(0,t.jsx)(n.a,{href:"https://cohere.com/",children:"Cohere"}),"."]}),"\n",(0,t.jsxs)(d,{children:[(0,t.jsx)("summary",{children:"Parameters"}),(0,t.jsx)(n.p,{children:(0,t.jsx)(n.strong,{children:"Inputs"})}),(0,t.jsxs)(n.table,{children:[(0,t.jsx)(n.thead,{children:(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.th,{children:"Name"}),(0,t.jsx)(n.th,{children:"Type"}),(0,t.jsx)(n.th,{children:"Description"})]})}),(0,t.jsxs)(n.tbody,{children:[(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:"cohere_api_key"}),(0,t.jsx)(n.td,{children:"String"}),(0,t.jsx)(n.td,{children:"The API key required to authenticate with the Cohere service."})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:"model"}),(0,t.jsx)(n.td,{children:"String"}),(0,t.jsxs)(n.td,{children:["The language model used for embedding text documents and performing queries. Default: ",(0,t.jsx)(n.code,{children:"embed-english-v2.0"}),"."]})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:"truncate"}),(0,t.jsx)(n.td,{children:"Boolean"}),(0,t.jsxs)(n.td,{children:["Whether to truncate the input text to fit within the model's constraints. Default: ",(0,t.jsx)(n.code,{children:"False"}),"."]})]})]})]}),(0,t.jsx)(n.p,{children:(0,t.jsx)(n.strong,{children:"Outputs"})}),(0,t.jsxs)(n.table,{children:[(0,t.jsx)(n.thead,{children:(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.th,{children:"Name"}),(0,t.jsx)(n.th,{children:"Type"}),(0,t.jsx)(n.th,{children:"Description"})]})}),(0,t.jsx)(n.tbody,{children:(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:"embeddings"}),(0,t.jsx)(n.td,{children:"Embeddings"}),(0,t.jsx)(n.td,{children:"An instance for generating embeddings using Cohere."})]})})]})]}),"\n",(0,t.jsx)(n.h2,{id:"embedding-similarity",children:"Embedding similarity"}),"\n",(0,t.jsx)(n.p,{children:"This component computes selected forms of similarity between two embedding vectors."}),"\n",(0,t.jsxs)(d,{children:[(0,t.jsx)("summary",{children:"Parameters"}),(0,t.jsx)(n.p,{children:(0,t.jsx)(n.strong,{children:"Inputs"})}),(0,t.jsxs)(n.table,{children:[(0,t.jsx)(n.thead,{children:(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.th,{children:"Name"}),(0,t.jsx)(n.th,{children:"Display Name"}),(0,t.jsx)(n.th,{children:"Info"})]})}),(0,t.jsxs)(n.tbody,{children:[(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:"embedding_vectors"}),(0,t.jsx)(n.td,{children:"Embedding Vectors"}),(0,t.jsx)(n.td,{children:"A list containing exactly two data objects with embedding vectors to compare."})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:"similarity_metric"}),(0,t.jsx)(n.td,{children:"Similarity Metric"}),(0,t.jsx)(n.td,{children:'Select the similarity metric to use. Options: "Cosine Similarity", "Euclidean Distance", "Manhattan Distance".'})]})]})]}),(0,t.jsx)(n.p,{children:(0,t.jsx)(n.strong,{children:"Outputs"})}),(0,t.jsxs)(n.table,{children:[(0,t.jsx)(n.thead,{children:(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.th,{children:"Name"}),(0,t.jsx)(n.th,{children:"Display Name"}),(0,t.jsx)(n.th,{children:"Info"})]})}),(0,t.jsx)(n.tbody,{children:(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:"similarity_data"}),(0,t.jsx)(n.td,{children:"Similarity Data"}),(0,t.jsx)(n.td,{children:"A data object containing the computed similarity score and additional information."})]})})]})]}),"\n",(0,t.jsx)(n.h2,{id:"google-generative-ai-embeddings",children:"Google generative AI embeddings"}),"\n",(0,t.jsxs)(n.p,{children:["This component connects to Google's generative AI embedding service using the GoogleGenerativeAIEmbeddings class from the ",(0,t.jsx)(n.code,{children:"langchain-google-genai"})," package."]}),"\n",(0,t.jsxs)(d,{children:[(0,t.jsx)("summary",{children:"Parameters"}),(0,t.jsx)(n.p,{children:(0,t.jsx)(n.strong,{children:"Inputs"})}),(0,t.jsxs)(n.table,{children:[(0,t.jsx)(n.thead,{children:(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.th,{children:"Name"}),(0,t.jsx)(n.th,{children:"Display Name"}),(0,t.jsx)(n.th,{children:"Info"})]})}),(0,t.jsxs)(n.tbody,{children:[(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:"api_key"}),(0,t.jsx)(n.td,{children:"API Key"}),(0,t.jsx)(n.td,{children:"The secret API key for accessing Google's generative AI service. Required."})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:"model_name"}),(0,t.jsx)(n.td,{children:"Model Name"}),(0,t.jsx)(n.td,{children:'The name of the embedding model to use. Default: "models/text-embedding-004".'})]})]})]}),(0,t.jsx)(n.p,{children:(0,t.jsx)(n.strong,{children:"Outputs"})}),(0,t.jsxs)(n.table,{children:[(0,t.jsx)(n.thead,{children:(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.th,{children:"Name"}),(0,t.jsx)(n.th,{children:"Display Name"}),(0,t.jsx)(n.th,{children:"Info"})]})}),(0,t.jsx)(n.tbody,{children:(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:"embeddings"}),(0,t.jsx)(n.td,{children:"Embeddings"}),(0,t.jsx)(n.td,{children:"The built GoogleGenerativeAIEmbeddings object."})]})})]})]}),"\n",(0,t.jsx)(n.h2,{id:"hugging-face-embeddings",children:"Hugging Face Embeddings"}),"\n",(0,t.jsx)(n.admonition,{type:"note",children:(0,t.jsxs)(n.p,{children:["This component is deprecated as of Langflow version 1.0.18.\nInstead, use the ",(0,t.jsx)(n.a,{href:"#hugging-face-embeddings-inference",children:"Hugging Face Embeddings Inference component"}),"."]})}),"\n",(0,t.jsx)(n.p,{children:"This component loads embedding models from HuggingFace."}),"\n",(0,t.jsx)(n.p,{children:"Use this component to generate embeddings using locally downloaded Hugging Face models. Ensure you have sufficient computational resources to run the models."}),"\n",(0,t.jsxs)(d,{children:[(0,t.jsx)("summary",{children:"Parameters"}),(0,t.jsx)(n.p,{children:(0,t.jsx)(n.strong,{children:"Inputs"})}),(0,t.jsxs)(n.table,{children:[(0,t.jsx)(n.thead,{children:(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.th,{children:"Name"}),(0,t.jsx)(n.th,{children:"Display Name"}),(0,t.jsx)(n.th,{children:"Info"})]})}),(0,t.jsxs)(n.tbody,{children:[(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:"Cache Folder"}),(0,t.jsx)(n.td,{children:"Cache Folder"}),(0,t.jsx)(n.td,{children:"The folder path to cache HuggingFace models."})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:"Encode Kwargs"}),(0,t.jsx)(n.td,{children:"Encoding Arguments"}),(0,t.jsx)(n.td,{children:"Additional arguments for the encoding process."})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:"Model Kwargs"}),(0,t.jsx)(n.td,{children:"Model Arguments"}),(0,t.jsx)(n.td,{children:"Additional arguments for the model."})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:"Model Name"}),(0,t.jsx)(n.td,{children:"Model Name"}),(0,t.jsx)(n.td,{children:"The name of the HuggingFace model to use."})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:"Multi Process"}),(0,t.jsx)(n.td,{children:"Multi-Process"}),(0,t.jsx)(n.td,{children:"Whether to use multiple processes."})]})]})]}),(0,t.jsx)(n.p,{children:(0,t.jsx)(n.strong,{children:"Outputs"})}),(0,t.jsxs)(n.table,{children:[(0,t.jsx)(n.thead,{children:(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.th,{children:"Name"}),(0,t.jsx)(n.th,{children:"Display Name"}),(0,t.jsx)(n.th,{children:"Info"})]})}),(0,t.jsx)(n.tbody,{children:(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:"embeddings"}),(0,t.jsx)(n.td,{children:"Embeddings"}),(0,t.jsx)(n.td,{children:"The generated embeddings."})]})})]})]}),"\n",(0,t.jsx)(n.h2,{id:"hugging-face-embeddings-inference",children:"Hugging Face embeddings inference"}),"\n",(0,t.jsxs)(n.p,{children:["This component generates embeddings using ",(0,t.jsx)(n.a,{href:"https://huggingface.co/",children:"Hugging Face Inference API models"})," and requires a ",(0,t.jsx)(n.a,{href:"https://huggingface.co/docs/hub/security-tokens",children:"Hugging Face API token"})," to authenticate. Local inference models do not require an API key."]}),"\n",(0,t.jsx)(n.p,{children:"Use this component to create embeddings with Hugging Face's hosted models, or to connect to your own locally hosted models."}),"\n",(0,t.jsxs)(d,{children:[(0,t.jsx)("summary",{children:"Parameters"}),(0,t.jsx)(n.p,{children:(0,t.jsx)(n.strong,{children:"Inputs"})}),(0,t.jsxs)(n.table,{children:[(0,t.jsx)(n.thead,{children:(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.th,{children:"Name"}),(0,t.jsx)(n.th,{children:"Display Name"}),(0,t.jsx)(n.th,{children:"Info"})]})}),(0,t.jsxs)(n.tbody,{children:[(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:"API Key"}),(0,t.jsx)(n.td,{children:"API Key"}),(0,t.jsx)(n.td,{children:"The API key for accessing the Hugging Face Inference API."})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:"API URL"}),(0,t.jsx)(n.td,{children:"API URL"}),(0,t.jsx)(n.td,{children:"The URL of the Hugging Face Inference API."})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:"Model Name"}),(0,t.jsx)(n.td,{children:"Model Name"}),(0,t.jsx)(n.td,{children:"The name of the model to use for embeddings."})]})]})]}),(0,t.jsx)(n.p,{children:(0,t.jsx)(n.strong,{children:"Outputs"})}),(0,t.jsxs)(n.table,{children:[(0,t.jsx)(n.thead,{children:(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.th,{children:"Name"}),(0,t.jsx)(n.th,{children:"Display Name"}),(0,t.jsx)(n.th,{children:"Info"})]})}),(0,t.jsx)(n.tbody,{children:(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:"embeddings"}),(0,t.jsx)(n.td,{children:"Embeddings"}),(0,t.jsx)(n.td,{children:"The generated embeddings."})]})})]})]}),"\n",(0,t.jsx)(n.h3,{id:"connect-the-hugging-face-component-to-a-local-embeddings-model",children:"Connect the Hugging Face component to a local embeddings model"}),"\n",(0,t.jsxs)(n.p,{children:["To run an embeddings inference locally, see the ",(0,t.jsx)(n.a,{href:"https://huggingface.co/docs/text-embeddings-inference/local_cpu",children:"HuggingFace documentation"}),"."]}),"\n",(0,t.jsxs)(n.p,{children:["To connect the local Hugging Face model to the ",(0,t.jsx)(n.strong,{children:"Hugging Face embeddings inference"})," component and use it in a flow, follow these steps:"]}),"\n",(0,t.jsxs)(n.ol,{children:["\n",(0,t.jsxs)(n.li,{children:["Create a ",(0,t.jsx)(n.a,{href:"/starter-projects-vector-store-rag",children:"Vector store RAG flow"}),".\nThere are two embeddings models in this flow that you can replace with ",(0,t.jsx)(n.strong,{children:"Hugging Face"})," embeddings inference components."]}),"\n",(0,t.jsxs)(n.li,{children:["Replace both ",(0,t.jsx)(n.strong,{children:"OpenAI"})," embeddings model components with ",(0,t.jsx)(n.strong,{children:"Hugging Face"})," model components."]}),"\n",(0,t.jsxs)(n.li,{children:["Connect both ",(0,t.jsx)(n.strong,{children:"Hugging Face"})," components to the ",(0,t.jsx)(n.strong,{children:"Embeddings"})," ports of the ",(0,t.jsx)(n.strong,{children:"Astra DB vector store"})," components."]}),"\n",(0,t.jsxs)(n.li,{children:["In the ",(0,t.jsx)(n.strong,{children:"Hugging Face"})," components, set the ",(0,t.jsx)(n.strong,{children:"Inference Endpoint"})," field to the URL of your local inference model. ",(0,t.jsxs)(n.strong,{children:["The ",(0,t.jsx)(n.strong,{children:"API Key"})," field is not required for local inference."]})]}),"\n",(0,t.jsx)(n.li,{children:"Run the flow. The local inference models generate embeddings for the input text."}),"\n"]}),"\n",(0,t.jsx)(n.h2,{id:"ibm-watsonx-embeddings",children:"IBM watsonx embeddings"}),"\n",(0,t.jsxs)(n.p,{children:["This component generates text using ",(0,t.jsx)(n.a,{href:"https://www.ibm.com/watsonx",children:"IBM watsonx.ai"})," foundation models."]}),"\n",(0,t.jsxs)(n.p,{children:["To use ",(0,t.jsx)(n.strong,{children:"IBM watsonx.ai"})," embeddings components, replace an embeddings component with the IBM watsonx.ai component in a flow."]}),"\n",(0,t.jsx)(n.p,{children:"An example document processing flow looks like the following:"}),"\n",(0,t.jsx)(n.p,{children:(0,t.jsx)(n.img,{alt:"IBM watsonx embeddings model loading a chroma-db with split text",src:s(96425).A+"",width:"1714",height:"1486"})}),"\n",(0,t.jsx)(n.p,{children:"This flow loads a PDF file from local storage and splits the text into chunks."}),"\n",(0,t.jsxs)(n.p,{children:["The ",(0,t.jsx)(n.strong,{children:"IBM watsonx"})," embeddings component converts the text chunks into embeddings, which are then stored in a Chroma DB vector store."]}),"\n",(0,t.jsxs)(n.p,{children:["The values for ",(0,t.jsx)(n.strong,{children:"API endpoint"}),", ",(0,t.jsx)(n.strong,{children:"Project ID"}),", ",(0,t.jsx)(n.strong,{children:"API key"}),", and ",(0,t.jsx)(n.strong,{children:"Model Name"})," are found in your IBM watsonx.ai deployment.\nFor more information, see the ",(0,t.jsx)(n.a,{href:"https://python.langchain.com/docs/integrations/text_embedding/ibm_watsonx/",children:"Langchain documentation"}),"."]}),"\n",(0,t.jsx)(n.h3,{id:"default-models",children:"Default models"}),"\n",(0,t.jsx)(n.p,{children:"The component supports several default models with the following vector dimensions:"}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.code,{children:"sentence-transformers/all-minilm-l12-v2"}),": 384-dimensional embeddings"]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.code,{children:"ibm/slate-125m-english-rtrvr-v2"}),": 768-dimensional embeddings"]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.code,{children:"ibm/slate-30m-english-rtrvr-v2"}),": 768-dimensional embeddings"]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.code,{children:"intfloat/multilingual-e5-large"}),": 1024-dimensional embeddings"]}),"\n"]}),"\n",(0,t.jsx)(n.p,{children:"The component automatically fetches and updates the list of available models from your watsonx.ai instance when you provide your API endpoint and credentials."}),"\n",(0,t.jsxs)(d,{children:[(0,t.jsx)("summary",{children:"Parameters"}),(0,t.jsx)(n.p,{children:(0,t.jsx)(n.strong,{children:"Inputs"})}),(0,t.jsxs)(n.table,{children:[(0,t.jsx)(n.thead,{children:(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.th,{children:"Name"}),(0,t.jsx)(n.th,{children:"Display Name"}),(0,t.jsx)(n.th,{children:"Info"})]})}),(0,t.jsxs)(n.tbody,{children:[(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:"url"}),(0,t.jsx)(n.td,{children:"watsonx API Endpoint"}),(0,t.jsx)(n.td,{children:"The base URL of the API."})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:"project_id"}),(0,t.jsx)(n.td,{children:"watsonx project id"}),(0,t.jsx)(n.td,{children:"The project ID for your watsonx.ai instance."})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:"api_key"}),(0,t.jsx)(n.td,{children:"API Key"}),(0,t.jsx)(n.td,{children:"The API Key to use for the model."})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:"model_name"}),(0,t.jsx)(n.td,{children:"Model Name"}),(0,t.jsx)(n.td,{children:"The name of the embedding model to use."})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:"truncate_input_tokens"}),(0,t.jsx)(n.td,{children:"Truncate Input Tokens"}),(0,t.jsxs)(n.td,{children:["The maximum number of tokens to process. Default: ",(0,t.jsx)(n.code,{children:"200"}),"."]})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:"input_text"}),(0,t.jsx)(n.td,{children:"Include the original text in the output"}),(0,t.jsxs)(n.td,{children:["Determines if the original text is included in the output. Default: ",(0,t.jsx)(n.code,{children:"True"}),"."]})]})]})]}),(0,t.jsx)(n.p,{children:(0,t.jsx)(n.strong,{children:"Outputs"})}),(0,t.jsxs)(n.table,{children:[(0,t.jsx)(n.thead,{children:(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.th,{children:"Name"}),(0,t.jsx)(n.th,{children:"Display Name"}),(0,t.jsx)(n.th,{children:"Info"})]})}),(0,t.jsx)(n.tbody,{children:(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:"embeddings"}),(0,t.jsx)(n.td,{children:"Embeddings"}),(0,t.jsx)(n.td,{children:"An instance for generating embeddings using watsonx.ai."})]})})]})]}),"\n",(0,t.jsx)(n.h2,{id:"lm-studio-embeddings",children:"LM Studio Embeddings"}),"\n",(0,t.jsxs)(n.p,{children:["This component generates embeddings using ",(0,t.jsx)(n.a,{href:"https://lmstudio.ai/docs",children:"LM Studio"})," models."]}),"\n",(0,t.jsxs)(d,{children:[(0,t.jsx)("summary",{children:"Parameters"}),(0,t.jsx)(n.p,{children:(0,t.jsx)(n.strong,{children:"Inputs"})}),(0,t.jsxs)(n.table,{children:[(0,t.jsx)(n.thead,{children:(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.th,{children:"Name"}),(0,t.jsx)(n.th,{children:"Display Name"}),(0,t.jsx)(n.th,{children:"Info"})]})}),(0,t.jsxs)(n.tbody,{children:[(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:"model"}),(0,t.jsx)(n.td,{children:"Model"}),(0,t.jsx)(n.td,{children:"The LM Studio model to use for generating embeddings."})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:"base_url"}),(0,t.jsx)(n.td,{children:"LM Studio Base URL"}),(0,t.jsx)(n.td,{children:"The base URL for the LM Studio API."})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:"api_key"}),(0,t.jsx)(n.td,{children:"LM Studio API Key"}),(0,t.jsx)(n.td,{children:"The API key for authentication with LM Studio."})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:"temperature"}),(0,t.jsx)(n.td,{children:"Model Temperature"}),(0,t.jsx)(n.td,{children:"The temperature setting for the model."})]})]})]}),(0,t.jsx)(n.p,{children:(0,t.jsx)(n.strong,{children:"Outputs"})}),(0,t.jsxs)(n.table,{children:[(0,t.jsx)(n.thead,{children:(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.th,{children:"Name"}),(0,t.jsx)(n.th,{children:"Display Name"}),(0,t.jsx)(n.th,{children:"Info"})]})}),(0,t.jsx)(n.tbody,{children:(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:"embeddings"}),(0,t.jsx)(n.td,{children:"Embeddings"}),(0,t.jsx)(n.td,{children:"The generated embeddings."})]})})]})]}),"\n",(0,t.jsx)(n.h2,{id:"mistralai",children:"MistralAI"}),"\n",(0,t.jsxs)(n.p,{children:["This component generates embeddings using ",(0,t.jsx)(n.a,{href:"https://docs.mistral.ai/",children:"MistralAI"})," models."]}),"\n",(0,t.jsxs)(d,{children:[(0,t.jsx)("summary",{children:"Parameters"}),(0,t.jsx)(n.p,{children:(0,t.jsx)(n.strong,{children:"Inputs"})}),(0,t.jsxs)(n.table,{children:[(0,t.jsx)(n.thead,{children:(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.th,{children:"Name"}),(0,t.jsx)(n.th,{children:"Type"}),(0,t.jsx)(n.th,{children:"Description"})]})}),(0,t.jsxs)(n.tbody,{children:[(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:"model"}),(0,t.jsx)(n.td,{children:"String"}),(0,t.jsx)(n.td,{children:'The MistralAI model to use. Default: "mistral-embed".'})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:"mistral_api_key"}),(0,t.jsx)(n.td,{children:"SecretString"}),(0,t.jsx)(n.td,{children:"The API key for authenticating with MistralAI."})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:"max_concurrent_requests"}),(0,t.jsx)(n.td,{children:"Integer"}),(0,t.jsx)(n.td,{children:"The maximum number of concurrent API requests. Default: 64."})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:"max_retries"}),(0,t.jsx)(n.td,{children:"Integer"}),(0,t.jsx)(n.td,{children:"The maximum number of retry attempts for failed requests. Default: 5."})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:"timeout"}),(0,t.jsx)(n.td,{children:"Integer"}),(0,t.jsx)(n.td,{children:"The request timeout in seconds. Default: 120."})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:"endpoint"}),(0,t.jsx)(n.td,{children:"String"}),(0,t.jsxs)(n.td,{children:["The custom API endpoint URL. Default: ",(0,t.jsx)(n.code,{children:"https://api.mistral.ai/v1/"}),")."]})]})]})]}),(0,t.jsx)(n.p,{children:(0,t.jsx)(n.strong,{children:"Outputs"})}),(0,t.jsxs)(n.table,{children:[(0,t.jsx)(n.thead,{children:(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.th,{children:"Name"}),(0,t.jsx)(n.th,{children:"Type"}),(0,t.jsx)(n.th,{children:"Description"})]})}),(0,t.jsx)(n.tbody,{children:(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:"embeddings"}),(0,t.jsx)(n.td,{children:"Embeddings"}),(0,t.jsx)(n.td,{children:"A MistralAIEmbeddings instance for generating embeddings."})]})})]})]}),"\n",(0,t.jsx)(n.h2,{id:"nvidia",children:"NVIDIA"}),"\n",(0,t.jsxs)(n.p,{children:["This component generates embeddings using ",(0,t.jsx)(n.a,{href:"https://docs.nvidia.com",children:"NVIDIA models"}),"."]}),"\n",(0,t.jsxs)(d,{children:[(0,t.jsx)("summary",{children:"Parameters"}),(0,t.jsx)(n.p,{children:(0,t.jsx)(n.strong,{children:"Inputs"})}),(0,t.jsxs)(n.table,{children:[(0,t.jsx)(n.thead,{children:(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.th,{children:"Name"}),(0,t.jsx)(n.th,{children:"Type"}),(0,t.jsx)(n.th,{children:"Description"})]})}),(0,t.jsxs)(n.tbody,{children:[(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:"model"}),(0,t.jsx)(n.td,{children:"String"}),(0,t.jsxs)(n.td,{children:["The NVIDIA model to use for embeddings, such as ",(0,t.jsx)(n.code,{children:"nvidia/nv-embed-v1"}),"."]})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:"base_url"}),(0,t.jsx)(n.td,{children:"String"}),(0,t.jsxs)(n.td,{children:["The base URL for the NVIDIA API. Default: ",(0,t.jsx)(n.code,{children:"https://integrate.api.nvidia.com/v1"}),"."]})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:"nvidia_api_key"}),(0,t.jsx)(n.td,{children:"SecretString"}),(0,t.jsx)(n.td,{children:"The API key for authenticating with NVIDIA's service."})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:"temperature"}),(0,t.jsx)(n.td,{children:"Float"}),(0,t.jsxs)(n.td,{children:["The model temperature for embedding generation. Default: ",(0,t.jsx)(n.code,{children:"0.1"}),"."]})]})]})]}),(0,t.jsx)(n.p,{children:(0,t.jsx)(n.strong,{children:"Outputs"})}),(0,t.jsxs)(n.table,{children:[(0,t.jsx)(n.thead,{children:(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.th,{children:"Name"}),(0,t.jsx)(n.th,{children:"Type"}),(0,t.jsx)(n.th,{children:"Description"})]})}),(0,t.jsx)(n.tbody,{children:(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:"embeddings"}),(0,t.jsx)(n.td,{children:"Embeddings"}),(0,t.jsx)(n.td,{children:"A NVIDIAEmbeddings instance for generating embeddings."})]})})]})]}),"\n",(0,t.jsx)(n.h2,{id:"ollama-embeddings",children:"Ollama embeddings"}),"\n",(0,t.jsxs)(n.p,{children:["This component generates embeddings using ",(0,t.jsx)(n.a,{href:"https://ollama.com/",children:"Ollama models"}),"."]}),"\n",(0,t.jsxs)(n.p,{children:["For a list of Ollama embeddings models, see the ",(0,t.jsx)(n.a,{href:"https://ollama.com/search?c=embedding",children:"Ollama documentation"}),"."]}),"\n",(0,t.jsx)(n.p,{children:"To use this component in a flow, connect Langflow to your locally running Ollama server and select an embeddings model."}),"\n",(0,t.jsxs)(n.ol,{children:["\n",(0,t.jsxs)(n.li,{children:["In the Ollama component, in the ",(0,t.jsx)(n.strong,{children:"Ollama Base URL"})," field, enter the address for your locally running Ollama server.\nThis value is set as the ",(0,t.jsx)(n.code,{children:"OLLAMA_HOST"})," environment variable in Ollama. The default base URL is ",(0,t.jsx)(n.code,{children:"http://127.0.0.1:11434"}),"."]}),"\n",(0,t.jsxs)(n.li,{children:["To refresh the server's list of models, click ",(0,t.jsx)(r.A,{name:"RefreshCw","aria-label":"Refresh"}),"."]}),"\n",(0,t.jsxs)(n.li,{children:["In the ",(0,t.jsx)(n.strong,{children:"Ollama Model"})," field, select an embeddings model. This example uses ",(0,t.jsx)(n.code,{children:"all-minilm:latest"}),"."]}),"\n",(0,t.jsxs)(n.li,{children:["Connect the ",(0,t.jsx)(n.strong,{children:"Ollama"})," embeddings component to a flow.\nFor example, this flow connects a local Ollama server running a ",(0,t.jsx)(n.code,{children:"all-minilm:latest"})," embeddings model to a ",(0,t.jsx)(n.a,{href:"/components-vector-stores#chroma-db",children:"Chroma DB"})," vector store to generate embeddings for split text."]}),"\n"]}),"\n",(0,t.jsx)(n.p,{children:(0,t.jsx)(n.img,{alt:"Ollama embeddings connected to Chroma DB",src:s(7369).A+"",width:"1098",height:"811"})}),"\n",(0,t.jsxs)(n.p,{children:["For more information, see the ",(0,t.jsx)(n.a,{href:"https://ollama.com/",children:"Ollama documentation"}),"."]}),"\n",(0,t.jsxs)(d,{children:[(0,t.jsx)("summary",{children:"Parameters"}),(0,t.jsx)(n.p,{children:(0,t.jsx)(n.strong,{children:"Inputs"})}),(0,t.jsxs)(n.table,{children:[(0,t.jsx)(n.thead,{children:(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.th,{children:"Name"}),(0,t.jsx)(n.th,{children:"Type"}),(0,t.jsx)(n.th,{children:"Description"})]})}),(0,t.jsxs)(n.tbody,{children:[(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:"Ollama Model"}),(0,t.jsx)(n.td,{children:"String"}),(0,t.jsxs)(n.td,{children:["The name of the Ollama model to use. Default: ",(0,t.jsx)(n.code,{children:"llama2"}),"."]})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:"Ollama Base URL"}),(0,t.jsx)(n.td,{children:"String"}),(0,t.jsxs)(n.td,{children:["The base URL of the Ollama API. Default: ",(0,t.jsx)(n.code,{children:"http://localhost:11434"}),"."]})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:"Model Temperature"}),(0,t.jsx)(n.td,{children:"Float"}),(0,t.jsx)(n.td,{children:"The temperature parameter for the model. Adjusts the randomness in the generated embeddings."})]})]})]}),(0,t.jsx)(n.p,{children:(0,t.jsx)(n.strong,{children:"Outputs"})}),(0,t.jsxs)(n.table,{children:[(0,t.jsx)(n.thead,{children:(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.th,{children:"Name"}),(0,t.jsx)(n.th,{children:"Type"}),(0,t.jsx)(n.th,{children:"Description"})]})}),(0,t.jsx)(n.tbody,{children:(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:"embeddings"}),(0,t.jsx)(n.td,{children:"Embeddings"}),(0,t.jsx)(n.td,{children:"An instance for generating embeddings using Ollama."})]})})]})]}),"\n",(0,t.jsx)(n.h2,{id:"openai-embeddings",children:"OpenAI Embeddings"}),"\n",(0,t.jsxs)(n.p,{children:["This component is used to load embedding models from ",(0,t.jsx)(n.a,{href:"https://openai.com/",children:"OpenAI"}),"."]}),"\n",(0,t.jsxs)(d,{children:[(0,t.jsx)("summary",{children:"Parameters"}),(0,t.jsx)(n.p,{children:(0,t.jsx)(n.strong,{children:"Inputs"})}),(0,t.jsxs)(n.table,{children:[(0,t.jsx)(n.thead,{children:(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.th,{children:"Name"}),(0,t.jsx)(n.th,{children:"Type"}),(0,t.jsx)(n.th,{children:"Description"})]})}),(0,t.jsxs)(n.tbody,{children:[(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:"OpenAI API Key"}),(0,t.jsx)(n.td,{children:"String"}),(0,t.jsx)(n.td,{children:"The API key to use for accessing the OpenAI API."})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:"Default Headers"}),(0,t.jsx)(n.td,{children:"Dict"}),(0,t.jsx)(n.td,{children:"The default headers for the HTTP requests."})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:"Default Query"}),(0,t.jsx)(n.td,{children:"NestedDict"}),(0,t.jsx)(n.td,{children:"The default query parameters for the HTTP requests."})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:"Allowed Special"}),(0,t.jsx)(n.td,{children:"List"}),(0,t.jsxs)(n.td,{children:["The special tokens allowed for processing. Default: ",(0,t.jsx)(n.code,{children:"[]"}),"."]})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:"Disallowed Special"}),(0,t.jsx)(n.td,{children:"List"}),(0,t.jsxs)(n.td,{children:["The special tokens disallowed for processing. Default: ",(0,t.jsx)(n.code,{children:'["all"]'}),"."]})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:"Chunk Size"}),(0,t.jsx)(n.td,{children:"Integer"}),(0,t.jsxs)(n.td,{children:["The chunk size for processing. Default: ",(0,t.jsx)(n.code,{children:"1000"}),"."]})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:"Client"}),(0,t.jsx)(n.td,{children:"Any"}),(0,t.jsx)(n.td,{children:"The HTTP client for making requests."})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:"Deployment"}),(0,t.jsx)(n.td,{children:"String"}),(0,t.jsxs)(n.td,{children:["The deployment name for the model. Default: ",(0,t.jsx)(n.code,{children:"text-embedding-3-small"}),"."]})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:"Embedding Context Length"}),(0,t.jsx)(n.td,{children:"Integer"}),(0,t.jsxs)(n.td,{children:["The length of embedding context. Default: ",(0,t.jsx)(n.code,{children:"8191"}),"."]})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:"Max Retries"}),(0,t.jsx)(n.td,{children:"Integer"}),(0,t.jsxs)(n.td,{children:["The maximum number of retries for failed requests. Default: ",(0,t.jsx)(n.code,{children:"6"}),"."]})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:"Model"}),(0,t.jsx)(n.td,{children:"String"}),(0,t.jsxs)(n.td,{children:["The name of the model to use. Default: ",(0,t.jsx)(n.code,{children:"text-embedding-3-small"}),"."]})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:"Model Kwargs"}),(0,t.jsx)(n.td,{children:"NestedDict"}),(0,t.jsx)(n.td,{children:"Additional keyword arguments for the model."})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:"OpenAI API Base"}),(0,t.jsx)(n.td,{children:"String"}),(0,t.jsx)(n.td,{children:"The base URL of the OpenAI API."})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:"OpenAI API Type"}),(0,t.jsx)(n.td,{children:"String"}),(0,t.jsx)(n.td,{children:"The type of the OpenAI API."})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:"OpenAI API Version"}),(0,t.jsx)(n.td,{children:"String"}),(0,t.jsx)(n.td,{children:"The version of the OpenAI API."})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:"OpenAI Organization"}),(0,t.jsx)(n.td,{children:"String"}),(0,t.jsx)(n.td,{children:"The organization associated with the API key."})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:"OpenAI Proxy"}),(0,t.jsx)(n.td,{children:"String"}),(0,t.jsx)(n.td,{children:"The proxy server for the requests."})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:"Request Timeout"}),(0,t.jsx)(n.td,{children:"Float"}),(0,t.jsx)(n.td,{children:"The timeout for the HTTP requests."})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:"Show Progress Bar"}),(0,t.jsx)(n.td,{children:"Boolean"}),(0,t.jsxs)(n.td,{children:["Whether to show a progress bar for processing. Default: ",(0,t.jsx)(n.code,{children:"False"}),"."]})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:"Skip Empty"}),(0,t.jsx)(n.td,{children:"Boolean"}),(0,t.jsxs)(n.td,{children:["Whether to skip empty inputs. Default: ",(0,t.jsx)(n.code,{children:"False"}),"."]})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:"TikToken Enable"}),(0,t.jsx)(n.td,{children:"Boolean"}),(0,t.jsxs)(n.td,{children:["Whether to enable TikToken. Default: ",(0,t.jsx)(n.code,{children:"True"}),"."]})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:"TikToken Model Name"}),(0,t.jsx)(n.td,{children:"String"}),(0,t.jsx)(n.td,{children:"The name of the TikToken model."})]})]})]}),(0,t.jsx)(n.p,{children:(0,t.jsx)(n.strong,{children:"Outputs"})}),(0,t.jsxs)(n.table,{children:[(0,t.jsx)(n.thead,{children:(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.th,{children:"Name"}),(0,t.jsx)(n.th,{children:"Type"}),(0,t.jsx)(n.th,{children:"Description"})]})}),(0,t.jsx)(n.tbody,{children:(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:"embeddings"}),(0,t.jsx)(n.td,{children:"Embeddings"}),(0,t.jsx)(n.td,{children:"An instance for generating embeddings using OpenAI."})]})})]})]}),"\n",(0,t.jsx)(n.h2,{id:"text-embedder",children:"Text embedder"}),"\n",(0,t.jsx)(n.p,{children:"This component generates embeddings for a given message using a specified embedding model."}),"\n",(0,t.jsxs)(d,{children:[(0,t.jsx)("summary",{children:"Parameters"}),(0,t.jsx)(n.p,{children:(0,t.jsx)(n.strong,{children:"Inputs"})}),(0,t.jsxs)(n.table,{children:[(0,t.jsx)(n.thead,{children:(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.th,{children:"Name"}),(0,t.jsx)(n.th,{children:"Display Name"}),(0,t.jsx)(n.th,{children:"Info"})]})}),(0,t.jsxs)(n.tbody,{children:[(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:"embedding_model"}),(0,t.jsx)(n.td,{children:"Embedding Model"}),(0,t.jsx)(n.td,{children:"The embedding model to use for generating embeddings."})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:"message"}),(0,t.jsx)(n.td,{children:"Message"}),(0,t.jsx)(n.td,{children:"The message for which to generate embeddings."})]})]})]}),(0,t.jsx)(n.p,{children:(0,t.jsx)(n.strong,{children:"Outputs"})}),(0,t.jsxs)(n.table,{children:[(0,t.jsx)(n.thead,{children:(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.th,{children:"Name"}),(0,t.jsx)(n.th,{children:"Display Name"}),(0,t.jsx)(n.th,{children:"Info"})]})}),(0,t.jsx)(n.tbody,{children:(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:"embeddings"}),(0,t.jsx)(n.td,{children:"Embedding Data"}),(0,t.jsx)(n.td,{children:"A data object containing the original text and its embedding vector."})]})})]})]}),"\n",(0,t.jsx)(n.h2,{id:"vertexai-embeddings",children:"VertexAI Embeddings"}),"\n",(0,t.jsxs)(n.p,{children:["This component is a wrapper around ",(0,t.jsx)(n.a,{href:"https://cloud.google.com/vertex-ai",children:"Google Vertex AI"})," ",(0,t.jsx)(n.a,{href:"https://cloud.google.com/vertex-ai/docs/generative-ai/embeddings/get-text-embeddings",children:"Embeddings API"}),"."]}),"\n",(0,t.jsxs)(d,{children:[(0,t.jsx)("summary",{children:"Parameters"}),(0,t.jsx)(n.p,{children:(0,t.jsx)(n.strong,{children:"Inputs"})}),(0,t.jsxs)(n.table,{children:[(0,t.jsx)(n.thead,{children:(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.th,{children:"Name"}),(0,t.jsx)(n.th,{children:"Type"}),(0,t.jsx)(n.th,{children:"Description"})]})}),(0,t.jsxs)(n.tbody,{children:[(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:"credentials"}),(0,t.jsx)(n.td,{children:"Credentials"}),(0,t.jsx)(n.td,{children:"The default custom credentials to use."})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:"location"}),(0,t.jsx)(n.td,{children:"String"}),(0,t.jsxs)(n.td,{children:["The default location to use when making API calls. Default: ",(0,t.jsx)(n.code,{children:"us-central1"}),"."]})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:"max_output_tokens"}),(0,t.jsx)(n.td,{children:"Integer"}),(0,t.jsxs)(n.td,{children:["The token limit determines the maximum amount of text output from one prompt. Default: ",(0,t.jsx)(n.code,{children:"128"}),"."]})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:"model_name"}),(0,t.jsx)(n.td,{children:"String"}),(0,t.jsxs)(n.td,{children:["The name of the Vertex AI large language model. Default: ",(0,t.jsx)(n.code,{children:"text-bison"}),"."]})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:"project"}),(0,t.jsx)(n.td,{children:"String"}),(0,t.jsx)(n.td,{children:"The default GCP project to use when making Vertex API calls."})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:"request_parallelism"}),(0,t.jsx)(n.td,{children:"Integer"}),(0,t.jsxs)(n.td,{children:["The amount of parallelism allowed for requests issued to VertexAI models. Default: ",(0,t.jsx)(n.code,{children:"5"}),"."]})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:"temperature"}),(0,t.jsx)(n.td,{children:"Float"}),(0,t.jsxs)(n.td,{children:["Tunes the degree of randomness in text generations. Should be a non-negative value. Default: ",(0,t.jsx)(n.code,{children:"0"}),"."]})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:"top_k"}),(0,t.jsx)(n.td,{children:"Integer"}),(0,t.jsxs)(n.td,{children:["How the model selects tokens for output. The next token is selected from the top ",(0,t.jsx)(n.code,{children:"k"})," tokens. Default: ",(0,t.jsx)(n.code,{children:"40"}),"."]})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:"top_p"}),(0,t.jsx)(n.td,{children:"Float"}),(0,t.jsxs)(n.td,{children:["Tokens are selected from the most probable to least until the sum of their probabilities exceeds the top ",(0,t.jsx)(n.code,{children:"p"})," value. Default: ",(0,t.jsx)(n.code,{children:"0.95"}),"."]})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:"tuned_model_name"}),(0,t.jsx)(n.td,{children:"String"}),(0,t.jsxs)(n.td,{children:["The name of a tuned model. If provided, ",(0,t.jsx)(n.code,{children:"model_name"})," is ignored."]})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:"verbose"}),(0,t.jsx)(n.td,{children:"Boolean"}),(0,t.jsxs)(n.td,{children:["This parameter controls the level of detail in the output. When set to ",(0,t.jsx)(n.code,{children:"True"}),", it prints internal states of the chain to help debug. Default: ",(0,t.jsx)(n.code,{children:"False"}),"."]})]})]})]}),(0,t.jsx)(n.p,{children:(0,t.jsx)(n.strong,{children:"Outputs"})}),(0,t.jsxs)(n.table,{children:[(0,t.jsx)(n.thead,{children:(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.th,{children:"Name"}),(0,t.jsx)(n.th,{children:"Type"}),(0,t.jsx)(n.th,{children:"Description"})]})}),(0,t.jsx)(n.tbody,{children:(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:"embeddings"}),(0,t.jsx)(n.td,{children:"Embeddings"}),(0,t.jsx)(n.td,{children:"An instance for generating embeddings using VertexAI."})]})})]})]})]})}function x(e={}){const{wrapper:n}={...(0,i.R)(),...e.components};return n?(0,t.jsx)(n,{...e,children:(0,t.jsx)(a,{...e})}):a(e)}},80352:(e,n,s)=>{s.d(n,{A:()=>d});const d=s.p+"assets/images/url-component-fb712df73581345c0f344013ce6ff2fd.png"},84443:(e,n,s)=>{s.d(n,{A:()=>i});s(96540);var d=s(64058),t=s(74848);function i(e){let{name:n,...s}=e;const i=d[n];return i?(0,t.jsx)(i,{...s}):null}},96425:(e,n,s)=>{s.d(n,{A:()=>d});const d=s.p+"assets/images/component-watsonx-embeddings-chroma-591e45d59ab635d1e1e68ab8036cfed7.png"}}]); \ No newline at end of file diff --git a/assets/js/921b5fc1.5b0d7c49.js b/assets/js/921b5fc1.5b0d7c49.js deleted file mode 100644 index f4a4e89065..0000000000 --- a/assets/js/921b5fc1.5b0d7c49.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunklangflow_docs=self.webpackChunklangflow_docs||[]).push([[7462],{7369:(e,n,d)=>{d.d(n,{A:()=>s});const s=d.p+"assets/images/component-ollama-embeddings-chromadb-c02d6ef9e753b61c274778d90f2a6eec.png"},28453:(e,n,d)=>{d.d(n,{R:()=>r,x:()=>l});var s=d(96540);const t={},i=s.createContext(t);function r(e){const n=s.useContext(i);return s.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function l(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(t):e.components||t:r(e.components),s.createElement(i.Provider,{value:n},e.children)}},56088:(e,n,d)=>{d.r(n),d.d(n,{assets:()=>c,contentTitle:()=>h,default:()=>x,frontMatter:()=>l,metadata:()=>s,toc:()=>o});const s=JSON.parse('{"id":"Components/components-embedding-models","title":"Embeddings","description":"Embeddings models convert text into numerical vectors. These embeddings capture semantic meaning of the input text, and allow LLMs to understand context.","source":"@site/docs/Components/components-embedding-models.md","sourceDirName":"Components","slug":"/components-embedding-models","permalink":"/components-embedding-models","draft":false,"unlisted":false,"tags":[],"version":"current","frontMatter":{"title":"Embeddings","slug":"/components-embedding-models"},"sidebar":"docs","previous":{"title":"Data","permalink":"/components-data"},"next":{"title":"Helpers","permalink":"/components-helpers"}}');var t=d(74848),i=d(28453),r=d(84443);const l={title:"Embeddings",slug:"/components-embedding-models"},h="Embeddings models in Langflow",c={},o=[{value:"Use an embeddings model component in a flow",id:"use-an-embeddings-model-component-in-a-flow",level:2},{value:"AI/ML",id:"aiml",level:2},{value:"Inputs",id:"inputs",level:3},{value:"Outputs",id:"outputs",level:3},{value:"Amazon Bedrock Embeddings",id:"amazon-bedrock-embeddings",level:2},{value:"Inputs",id:"inputs-1",level:3},{value:"Outputs",id:"outputs-1",level:3},{value:"Astra DB vectorize",id:"astra-db-vectorize",level:2},{value:"Inputs",id:"inputs-2",level:3},{value:"Outputs",id:"outputs-2",level:3},{value:"Azure OpenAI Embeddings",id:"azure-openai-embeddings",level:2},{value:"Inputs",id:"inputs-3",level:3},{value:"Outputs",id:"outputs-3",level:3},{value:"Cloudflare Workers AI Embeddings",id:"cloudflare-workers-ai-embeddings",level:2},{value:"Inputs",id:"inputs-4",level:3},{value:"Outputs",id:"outputs-4",level:3},{value:"Cohere Embeddings",id:"cohere-embeddings",level:2},{value:"Inputs",id:"inputs-5",level:3},{value:"Outputs",id:"outputs-5",level:3},{value:"Embedding similarity",id:"embedding-similarity",level:2},{value:"Inputs",id:"inputs-6",level:3},{value:"Outputs",id:"outputs-6",level:3},{value:"Google generative AI embeddings",id:"google-generative-ai-embeddings",level:2},{value:"Inputs",id:"inputs-7",level:3},{value:"Outputs",id:"outputs-7",level:3},{value:"Hugging Face Embeddings",id:"hugging-face-embeddings",level:2},{value:"Inputs",id:"inputs-8",level:3},{value:"Outputs",id:"outputs-8",level:3},{value:"Hugging Face embeddings inference",id:"hugging-face-embeddings-inference",level:2},{value:"Inputs",id:"inputs-9",level:3},{value:"Outputs",id:"outputs-9",level:3},{value:"Connect the Hugging Face component to a local embeddings model",id:"connect-the-hugging-face-component-to-a-local-embeddings-model",level:3},{value:"IBM watsonx embeddings",id:"ibm-watsonx-embeddings",level:2},{value:"Default models",id:"default-models",level:3},{value:"Inputs",id:"inputs-10",level:3},{value:"Outputs",id:"outputs-10",level:3},{value:"LM Studio Embeddings",id:"lm-studio-embeddings",level:2},{value:"Inputs",id:"inputs-11",level:3},{value:"Outputs",id:"outputs-11",level:3},{value:"MistralAI",id:"mistralai",level:2},{value:"Inputs",id:"inputs-12",level:3},{value:"Outputs",id:"outputs-12",level:3},{value:"NVIDIA",id:"nvidia",level:2},{value:"Inputs",id:"inputs-13",level:3},{value:"Outputs",id:"outputs-13",level:3},{value:"Ollama embeddings",id:"ollama-embeddings",level:2},{value:"Inputs",id:"inputs-14",level:3},{value:"Outputs",id:"outputs-14",level:3},{value:"OpenAI Embeddings",id:"openai-embeddings",level:2},{value:"Inputs",id:"inputs-15",level:3},{value:"Outputs",id:"outputs-15",level:3},{value:"Text embedder",id:"text-embedder",level:2},{value:"Inputs",id:"inputs-16",level:3},{value:"Outputs",id:"outputs-16",level:3},{value:"VertexAI Embeddings",id:"vertexai-embeddings",level:2},{value:"Inputs",id:"inputs-17",level:3},{value:"Outputs",id:"outputs-17",level:3}];function a(e){const n={a:"a",admonition:"admonition",code:"code",h1:"h1",h2:"h2",h3:"h3",header:"header",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,i.R)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(n.header,{children:(0,t.jsx)(n.h1,{id:"embeddings-models-in-langflow",children:"Embeddings models in Langflow"})}),"\n",(0,t.jsx)(n.p,{children:"Embeddings models convert text into numerical vectors. These embeddings capture semantic meaning of the input text, and allow LLMs to understand context."}),"\n",(0,t.jsx)(n.p,{children:"Refer to your specific component's documentation for more information on parameters."}),"\n",(0,t.jsx)(n.h2,{id:"use-an-embeddings-model-component-in-a-flow",children:"Use an embeddings model component in a flow"}),"\n",(0,t.jsxs)(n.p,{children:["In this example of a document ingestion pipeline, the ",(0,t.jsx)(n.strong,{children:"OpenAI"})," embeddings model is connected to a vector database. The component converts the text chunks into vectors and stores them in the vector database. The vectorized data can be used to inform AI workloads like chatbots, similarity searches, and agents."]}),"\n",(0,t.jsx)(n.p,{children:"This embeddings component uses an OpenAI API key for authentication. Refer to your specific embeddings component's documentation for more information on authentication."}),"\n",(0,t.jsx)(n.p,{children:(0,t.jsx)(n.img,{alt:"URL component in a data ingestion pipeline",src:d(80352).A+"",width:"2306",height:"1632"})}),"\n",(0,t.jsx)(n.h2,{id:"aiml",children:"AI/ML"}),"\n",(0,t.jsxs)(n.p,{children:["This component generates embeddings using the ",(0,t.jsx)(n.a,{href:"https://docs.aimlapi.com/api-overview/embeddings",children:"AI/ML API"}),"."]}),"\n",(0,t.jsx)(n.h3,{id:"inputs",children:"Inputs"}),"\n",(0,t.jsxs)(n.table,{children:[(0,t.jsx)(n.thead,{children:(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.th,{children:"Name"}),(0,t.jsx)(n.th,{children:"Type"}),(0,t.jsx)(n.th,{children:"Description"})]})}),(0,t.jsxs)(n.tbody,{children:[(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:"model_name"}),(0,t.jsx)(n.td,{children:"String"}),(0,t.jsx)(n.td,{children:"The name of the AI/ML embedding model to use"})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:"aiml_api_key"}),(0,t.jsx)(n.td,{children:"SecretString"}),(0,t.jsx)(n.td,{children:"API key for authenticating with the AI/ML service"})]})]})]}),"\n",(0,t.jsx)(n.h3,{id:"outputs",children:"Outputs"}),"\n",(0,t.jsxs)(n.table,{children:[(0,t.jsx)(n.thead,{children:(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.th,{children:"Name"}),(0,t.jsx)(n.th,{children:"Type"}),(0,t.jsx)(n.th,{children:"Description"})]})}),(0,t.jsx)(n.tbody,{children:(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:"embeddings"}),(0,t.jsx)(n.td,{children:"Embeddings"}),(0,t.jsx)(n.td,{children:"An instance of AIMLEmbeddingsImpl for generating embeddings"})]})})]}),"\n",(0,t.jsx)(n.h2,{id:"amazon-bedrock-embeddings",children:"Amazon Bedrock Embeddings"}),"\n",(0,t.jsxs)(n.p,{children:["This component is used to load embedding models from ",(0,t.jsx)(n.a,{href:"https://aws.amazon.com/bedrock/",children:"Amazon Bedrock"}),"."]}),"\n",(0,t.jsx)(n.h3,{id:"inputs-1",children:"Inputs"}),"\n",(0,t.jsxs)(n.table,{children:[(0,t.jsx)(n.thead,{children:(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.th,{children:"Name"}),(0,t.jsx)(n.th,{children:"Type"}),(0,t.jsx)(n.th,{children:"Description"})]})}),(0,t.jsxs)(n.tbody,{children:[(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:"credentials_profile_name"}),(0,t.jsx)(n.td,{children:"String"}),(0,t.jsx)(n.td,{children:"Name of the AWS credentials profile in ~/.aws/credentials or ~/.aws/config, which has access keys or role information"})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:"model_id"}),(0,t.jsx)(n.td,{children:"String"}),(0,t.jsxs)(n.td,{children:["ID of the model to call, e.g., ",(0,t.jsx)(n.code,{children:"amazon.titan-embed-text-v1"}),". This is equivalent to the ",(0,t.jsx)(n.code,{children:"modelId"})," property in the ",(0,t.jsx)(n.code,{children:"list-foundation-models"})," API"]})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:"endpoint_url"}),(0,t.jsx)(n.td,{children:"String"}),(0,t.jsx)(n.td,{children:"URL to set a specific service endpoint other than the default AWS endpoint"})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:"region_name"}),(0,t.jsx)(n.td,{children:"String"}),(0,t.jsxs)(n.td,{children:["AWS region to use, e.g., ",(0,t.jsx)(n.code,{children:"us-west-2"}),". Falls back to ",(0,t.jsx)(n.code,{children:"AWS_DEFAULT_REGION"})," environment variable or region specified in ~/.aws/config if not provided"]})]})]})]}),"\n",(0,t.jsx)(n.h3,{id:"outputs-1",children:"Outputs"}),"\n",(0,t.jsxs)(n.table,{children:[(0,t.jsx)(n.thead,{children:(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.th,{children:"Name"}),(0,t.jsx)(n.th,{children:"Type"}),(0,t.jsx)(n.th,{children:"Description"})]})}),(0,t.jsx)(n.tbody,{children:(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:"embeddings"}),(0,t.jsx)(n.td,{children:"Embeddings"}),(0,t.jsx)(n.td,{children:"An instance for generating embeddings using Amazon Bedrock"})]})})]}),"\n",(0,t.jsx)(n.h2,{id:"astra-db-vectorize",children:"Astra DB vectorize"}),"\n",(0,t.jsx)(n.admonition,{type:"important",children:(0,t.jsxs)(n.p,{children:["This component is deprecated as of Langflow version 1.1.2.\nInstead, use the ",(0,t.jsx)(n.a,{href:"/components-vector-stores#astra-db-vector-store",children:"Astra DB vector store component"})]})}),"\n",(0,t.jsxs)(n.p,{children:["Connect this component to the ",(0,t.jsx)(n.strong,{children:"Embeddings"})," port of the ",(0,t.jsx)(n.a,{href:"/components-vector-stores#astra-db-vector-store",children:"Astra DB vector store component"})," to generate embeddings."]}),"\n",(0,t.jsxs)(n.p,{children:["This component requires that your Astra DB database has a collection that uses a vectorize embedding provider integration.\nFor more information and instructions, see ",(0,t.jsx)(n.a,{href:"https://docs.datastax.com/en/astra-db-serverless/databases/embedding-generation.html",children:"Embedding Generation"}),"."]}),"\n",(0,t.jsx)(n.h3,{id:"inputs-2",children:"Inputs"}),"\n",(0,t.jsxs)(n.table,{children:[(0,t.jsx)(n.thead,{children:(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.th,{children:"Name"}),(0,t.jsx)(n.th,{children:"Display Name"}),(0,t.jsx)(n.th,{children:"Info"})]})}),(0,t.jsxs)(n.tbody,{children:[(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:"provider"}),(0,t.jsx)(n.td,{children:"Embedding Provider"}),(0,t.jsx)(n.td,{children:"The embedding provider to use"})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:"model_name"}),(0,t.jsx)(n.td,{children:"Model Name"}),(0,t.jsx)(n.td,{children:"The embedding model to use"})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:"authentication"}),(0,t.jsx)(n.td,{children:"Authentication"}),(0,t.jsxs)(n.td,{children:["The name of the API key in Astra that stores your ",(0,t.jsx)(n.a,{href:"https://docs.datastax.com/en/astra-db-serverless/databases/embedding-generation.html#embedding-provider-authentication",children:"vectorize embedding provider credentials"}),". (Not required if using an ",(0,t.jsx)(n.a,{href:"https://docs.datastax.com/en/astra-db-serverless/databases/embedding-generation.html#supported-embedding-providers",children:"Astra-hosted embedding provider"}),".)"]})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:"provider_api_key"}),(0,t.jsx)(n.td,{children:"Provider API Key"}),(0,t.jsxs)(n.td,{children:["As an alternative to ",(0,t.jsx)(n.code,{children:"authentication"}),", directly provide your embedding provider credentials."]})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:"model_parameters"}),(0,t.jsx)(n.td,{children:"Model Parameters"}),(0,t.jsx)(n.td,{children:"Additional model parameters"})]})]})]}),"\n",(0,t.jsx)(n.h3,{id:"outputs-2",children:"Outputs"}),"\n",(0,t.jsxs)(n.table,{children:[(0,t.jsx)(n.thead,{children:(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.th,{children:"Name"}),(0,t.jsx)(n.th,{children:"Type"}),(0,t.jsx)(n.th,{children:"Description"})]})}),(0,t.jsx)(n.tbody,{children:(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:"embeddings"}),(0,t.jsx)(n.td,{children:"Embeddings"}),(0,t.jsx)(n.td,{children:"An instance for generating embeddings using Astra vectorize"})]})})]}),"\n",(0,t.jsx)(n.h2,{id:"azure-openai-embeddings",children:"Azure OpenAI Embeddings"}),"\n",(0,t.jsx)(n.p,{children:"This component generates embeddings using Azure OpenAI models."}),"\n",(0,t.jsx)(n.h3,{id:"inputs-3",children:"Inputs"}),"\n",(0,t.jsxs)(n.table,{children:[(0,t.jsx)(n.thead,{children:(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.th,{children:"Name"}),(0,t.jsx)(n.th,{children:"Type"}),(0,t.jsx)(n.th,{children:"Description"})]})}),(0,t.jsxs)(n.tbody,{children:[(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:"Model"}),(0,t.jsx)(n.td,{children:"String"}),(0,t.jsxs)(n.td,{children:["Name of the model to use (default: ",(0,t.jsx)(n.code,{children:"text-embedding-3-small"}),")"]})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:"Azure Endpoint"}),(0,t.jsx)(n.td,{children:"String"}),(0,t.jsxs)(n.td,{children:["Your Azure endpoint, including the resource. Example: ",(0,t.jsx)(n.code,{children:"https://example-resource.azure.openai.com/"})]})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:"Deployment Name"}),(0,t.jsx)(n.td,{children:"String"}),(0,t.jsx)(n.td,{children:"The name of the deployment"})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:"API Version"}),(0,t.jsx)(n.td,{children:"String"}),(0,t.jsx)(n.td,{children:"The API version to use, options include various dates"})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:"API Key"}),(0,t.jsx)(n.td,{children:"String"}),(0,t.jsx)(n.td,{children:"The API key to access the Azure OpenAI service"})]})]})]}),"\n",(0,t.jsx)(n.h3,{id:"outputs-3",children:"Outputs"}),"\n",(0,t.jsxs)(n.table,{children:[(0,t.jsx)(n.thead,{children:(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.th,{children:"Name"}),(0,t.jsx)(n.th,{children:"Type"}),(0,t.jsx)(n.th,{children:"Description"})]})}),(0,t.jsx)(n.tbody,{children:(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:"embeddings"}),(0,t.jsx)(n.td,{children:"Embeddings"}),(0,t.jsx)(n.td,{children:"An instance for generating embeddings using Azure OpenAI"})]})})]}),"\n",(0,t.jsx)(n.h2,{id:"cloudflare-workers-ai-embeddings",children:"Cloudflare Workers AI Embeddings"}),"\n",(0,t.jsxs)(n.p,{children:["This component generates embeddings using ",(0,t.jsx)(n.a,{href:"https://developers.cloudflare.com/workers-ai/",children:"Cloudflare Workers AI models"}),"."]}),"\n",(0,t.jsx)(n.h3,{id:"inputs-4",children:"Inputs"}),"\n",(0,t.jsxs)(n.table,{children:[(0,t.jsx)(n.thead,{children:(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.th,{children:"Name"}),(0,t.jsx)(n.th,{children:"Display Name"}),(0,t.jsx)(n.th,{children:"Info"})]})}),(0,t.jsxs)(n.tbody,{children:[(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:"account_id"}),(0,t.jsx)(n.td,{children:"Cloudflare account ID"}),(0,t.jsx)(n.td,{children:(0,t.jsx)(n.a,{href:"https://developers.cloudflare.com/fundamentals/setup/find-account-and-zone-ids/#find-account-id-workers-and-pages",children:"Find your Cloudflare account ID"})})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:"api_token"}),(0,t.jsx)(n.td,{children:"Cloudflare API token"}),(0,t.jsx)(n.td,{children:(0,t.jsx)(n.a,{href:"https://developers.cloudflare.com/fundamentals/api/get-started/create-token/",children:"Create an API token"})})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:"model_name"}),(0,t.jsx)(n.td,{children:"Model Name"}),(0,t.jsx)(n.td,{children:(0,t.jsx)(n.a,{href:"https://developers.cloudflare.com/workers-ai/models/#text-embeddings",children:"List of supported models"})})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:"strip_new_lines"}),(0,t.jsx)(n.td,{children:"Strip New Lines"}),(0,t.jsx)(n.td,{children:"Whether to strip new lines from the input text"})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:"batch_size"}),(0,t.jsx)(n.td,{children:"Batch Size"}),(0,t.jsx)(n.td,{children:"Number of texts to embed in each batch"})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:"api_base_url"}),(0,t.jsx)(n.td,{children:"Cloudflare API base URL"}),(0,t.jsx)(n.td,{children:"Base URL for the Cloudflare API"})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:"headers"}),(0,t.jsx)(n.td,{children:"Headers"}),(0,t.jsx)(n.td,{children:"Additional request headers"})]})]})]}),"\n",(0,t.jsx)(n.h3,{id:"outputs-4",children:"Outputs"}),"\n",(0,t.jsxs)(n.table,{children:[(0,t.jsx)(n.thead,{children:(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.th,{children:"Name"}),(0,t.jsx)(n.th,{children:"Display Name"}),(0,t.jsx)(n.th,{children:"Info"})]})}),(0,t.jsx)(n.tbody,{children:(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:"embeddings"}),(0,t.jsx)(n.td,{children:"Embeddings"}),(0,t.jsx)(n.td,{children:"An instance for generating embeddings using Cloudflare Workers"})]})})]}),"\n",(0,t.jsx)(n.h2,{id:"cohere-embeddings",children:"Cohere Embeddings"}),"\n",(0,t.jsxs)(n.p,{children:["This component is used to load embedding models from ",(0,t.jsx)(n.a,{href:"https://cohere.com/",children:"Cohere"}),"."]}),"\n",(0,t.jsx)(n.h3,{id:"inputs-5",children:"Inputs"}),"\n",(0,t.jsxs)(n.table,{children:[(0,t.jsx)(n.thead,{children:(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.th,{children:"Name"}),(0,t.jsx)(n.th,{children:"Type"}),(0,t.jsx)(n.th,{children:"Description"})]})}),(0,t.jsxs)(n.tbody,{children:[(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:"cohere_api_key"}),(0,t.jsx)(n.td,{children:"String"}),(0,t.jsx)(n.td,{children:"API key required to authenticate with the Cohere service"})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:"model"}),(0,t.jsx)(n.td,{children:"String"}),(0,t.jsxs)(n.td,{children:["Language model used for embedding text documents and performing queries (default: ",(0,t.jsx)(n.code,{children:"embed-english-v2.0"}),")"]})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:"truncate"}),(0,t.jsx)(n.td,{children:"Boolean"}),(0,t.jsxs)(n.td,{children:["Whether to truncate the input text to fit within the model's constraints (default: ",(0,t.jsx)(n.code,{children:"False"}),")"]})]})]})]}),"\n",(0,t.jsx)(n.h3,{id:"outputs-5",children:"Outputs"}),"\n",(0,t.jsxs)(n.table,{children:[(0,t.jsx)(n.thead,{children:(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.th,{children:"Name"}),(0,t.jsx)(n.th,{children:"Type"}),(0,t.jsx)(n.th,{children:"Description"})]})}),(0,t.jsx)(n.tbody,{children:(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:"embeddings"}),(0,t.jsx)(n.td,{children:"Embeddings"}),(0,t.jsx)(n.td,{children:"An instance for generating embeddings using Cohere"})]})})]}),"\n",(0,t.jsx)(n.h2,{id:"embedding-similarity",children:"Embedding similarity"}),"\n",(0,t.jsx)(n.p,{children:"This component computes selected forms of similarity between two embedding vectors."}),"\n",(0,t.jsx)(n.h3,{id:"inputs-6",children:"Inputs"}),"\n",(0,t.jsxs)(n.table,{children:[(0,t.jsx)(n.thead,{children:(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.th,{children:"Name"}),(0,t.jsx)(n.th,{children:"Display Name"}),(0,t.jsx)(n.th,{children:"Info"})]})}),(0,t.jsxs)(n.tbody,{children:[(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:"embedding_vectors"}),(0,t.jsx)(n.td,{children:"Embedding Vectors"}),(0,t.jsx)(n.td,{children:"A list containing exactly two data objects with embedding vectors to compare."})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:"similarity_metric"}),(0,t.jsx)(n.td,{children:"Similarity Metric"}),(0,t.jsx)(n.td,{children:'Select the similarity metric to use. Options: "Cosine Similarity", "Euclidean Distance", "Manhattan Distance".'})]})]})]}),"\n",(0,t.jsx)(n.h3,{id:"outputs-6",children:"Outputs"}),"\n",(0,t.jsxs)(n.table,{children:[(0,t.jsx)(n.thead,{children:(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.th,{children:"Name"}),(0,t.jsx)(n.th,{children:"Display Name"}),(0,t.jsx)(n.th,{children:"Info"})]})}),(0,t.jsx)(n.tbody,{children:(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:"similarity_data"}),(0,t.jsx)(n.td,{children:"Similarity Data"}),(0,t.jsx)(n.td,{children:"Data object containing the computed similarity score and additional information."})]})})]}),"\n",(0,t.jsx)(n.h2,{id:"google-generative-ai-embeddings",children:"Google generative AI embeddings"}),"\n",(0,t.jsxs)(n.p,{children:["This component connects to Google's generative AI embedding service using the GoogleGenerativeAIEmbeddings class from the ",(0,t.jsx)(n.code,{children:"langchain-google-genai"})," package."]}),"\n",(0,t.jsx)(n.h3,{id:"inputs-7",children:"Inputs"}),"\n",(0,t.jsxs)(n.table,{children:[(0,t.jsx)(n.thead,{children:(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.th,{children:"Name"}),(0,t.jsx)(n.th,{children:"Display Name"}),(0,t.jsx)(n.th,{children:"Info"})]})}),(0,t.jsxs)(n.tbody,{children:[(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:"api_key"}),(0,t.jsx)(n.td,{children:"API Key"}),(0,t.jsx)(n.td,{children:"Secret API key for accessing Google's generative AI service (required)"})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:"model_name"}),(0,t.jsx)(n.td,{children:"Model Name"}),(0,t.jsx)(n.td,{children:'Name of the embedding model to use (default: "models/text-embedding-004")'})]})]})]}),"\n",(0,t.jsx)(n.h3,{id:"outputs-7",children:"Outputs"}),"\n",(0,t.jsxs)(n.table,{children:[(0,t.jsx)(n.thead,{children:(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.th,{children:"Name"}),(0,t.jsx)(n.th,{children:"Display Name"}),(0,t.jsx)(n.th,{children:"Info"})]})}),(0,t.jsx)(n.tbody,{children:(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:"embeddings"}),(0,t.jsx)(n.td,{children:"Embeddings"}),(0,t.jsx)(n.td,{children:"Built GoogleGenerativeAIEmbeddings object"})]})})]}),"\n",(0,t.jsx)(n.h2,{id:"hugging-face-embeddings",children:"Hugging Face Embeddings"}),"\n",(0,t.jsx)(n.admonition,{type:"note",children:(0,t.jsxs)(n.p,{children:["This component is deprecated as of Langflow version 1.0.18.\nInstead, use the ",(0,t.jsx)(n.a,{href:"#hugging-face-embeddings-inference",children:"Hugging Face Embeddings Inference component"}),"."]})}),"\n",(0,t.jsx)(n.p,{children:"This component loads embedding models from HuggingFace."}),"\n",(0,t.jsx)(n.p,{children:"Use this component to generate embeddings using locally downloaded Hugging Face models. Ensure you have sufficient computational resources to run the models."}),"\n",(0,t.jsx)(n.h3,{id:"inputs-8",children:"Inputs"}),"\n",(0,t.jsxs)(n.table,{children:[(0,t.jsx)(n.thead,{children:(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.th,{children:"Name"}),(0,t.jsx)(n.th,{children:"Display Name"}),(0,t.jsx)(n.th,{children:"Info"})]})}),(0,t.jsxs)(n.tbody,{children:[(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:"Cache Folder"}),(0,t.jsx)(n.td,{children:"Cache Folder"}),(0,t.jsx)(n.td,{children:"Folder path to cache HuggingFace models"})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:"Encode Kwargs"}),(0,t.jsx)(n.td,{children:"Encoding Arguments"}),(0,t.jsx)(n.td,{children:"Additional arguments for the encoding process"})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:"Model Kwargs"}),(0,t.jsx)(n.td,{children:"Model Arguments"}),(0,t.jsx)(n.td,{children:"Additional arguments for the model"})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:"Model Name"}),(0,t.jsx)(n.td,{children:"Model Name"}),(0,t.jsx)(n.td,{children:"Name of the HuggingFace model to use"})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:"Multi Process"}),(0,t.jsx)(n.td,{children:"Multi-Process"}),(0,t.jsx)(n.td,{children:"Whether to use multiple processes"})]})]})]}),"\n",(0,t.jsx)(n.h3,{id:"outputs-8",children:"Outputs"}),"\n",(0,t.jsxs)(n.table,{children:[(0,t.jsx)(n.thead,{children:(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.th,{children:"Name"}),(0,t.jsx)(n.th,{children:"Display Name"}),(0,t.jsx)(n.th,{children:"Info"})]})}),(0,t.jsx)(n.tbody,{children:(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:"embeddings"}),(0,t.jsx)(n.td,{children:"Embeddings"}),(0,t.jsx)(n.td,{children:"The generated embeddings"})]})})]}),"\n",(0,t.jsx)(n.h2,{id:"hugging-face-embeddings-inference",children:"Hugging Face embeddings inference"}),"\n",(0,t.jsxs)(n.p,{children:["This component generates embeddings using ",(0,t.jsx)(n.a,{href:"https://huggingface.co/",children:"Hugging Face Inference API models"})," and requires a ",(0,t.jsx)(n.a,{href:"https://huggingface.co/docs/hub/security-tokens",children:"Hugging Face API token"})," to authenticate. Local inference models do not require an API key."]}),"\n",(0,t.jsx)(n.p,{children:"Use this component to create embeddings with Hugging Face's hosted models, or to connect to your own locally hosted models."}),"\n",(0,t.jsx)(n.h3,{id:"inputs-9",children:"Inputs"}),"\n",(0,t.jsxs)(n.table,{children:[(0,t.jsx)(n.thead,{children:(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.th,{children:"Name"}),(0,t.jsx)(n.th,{children:"Display Name"}),(0,t.jsx)(n.th,{children:"Info"})]})}),(0,t.jsxs)(n.tbody,{children:[(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:"API Key"}),(0,t.jsx)(n.td,{children:"API Key"}),(0,t.jsx)(n.td,{children:"The API key for accessing the Hugging Face Inference API."})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:"API URL"}),(0,t.jsx)(n.td,{children:"API URL"}),(0,t.jsx)(n.td,{children:"The URL of the Hugging Face Inference API."})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:"Model Name"}),(0,t.jsx)(n.td,{children:"Model Name"}),(0,t.jsx)(n.td,{children:"The name of the model to use for embeddings."})]})]})]}),"\n",(0,t.jsx)(n.h3,{id:"outputs-9",children:"Outputs"}),"\n",(0,t.jsxs)(n.table,{children:[(0,t.jsx)(n.thead,{children:(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.th,{children:"Name"}),(0,t.jsx)(n.th,{children:"Display Name"}),(0,t.jsx)(n.th,{children:"Info"})]})}),(0,t.jsx)(n.tbody,{children:(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:"embeddings"}),(0,t.jsx)(n.td,{children:"Embeddings"}),(0,t.jsx)(n.td,{children:"The generated embeddings."})]})})]}),"\n",(0,t.jsx)(n.h3,{id:"connect-the-hugging-face-component-to-a-local-embeddings-model",children:"Connect the Hugging Face component to a local embeddings model"}),"\n",(0,t.jsxs)(n.p,{children:["To run an embeddings inference locally, see the ",(0,t.jsx)(n.a,{href:"https://huggingface.co/docs/text-embeddings-inference/local_cpu",children:"HuggingFace documentation"}),"."]}),"\n",(0,t.jsxs)(n.p,{children:["To connect the local Hugging Face model to the ",(0,t.jsx)(n.strong,{children:"Hugging Face embeddings inference"})," component and use it in a flow, follow these steps:"]}),"\n",(0,t.jsxs)(n.ol,{children:["\n",(0,t.jsxs)(n.li,{children:["Create a ",(0,t.jsx)(n.a,{href:"/starter-projects-vector-store-rag",children:"Vector store RAG flow"}),".\nThere are two embeddings models in this flow that you can replace with ",(0,t.jsx)(n.strong,{children:"Hugging Face"})," embeddings inference components."]}),"\n",(0,t.jsxs)(n.li,{children:["Replace both ",(0,t.jsx)(n.strong,{children:"OpenAI"})," embeddings model components with ",(0,t.jsx)(n.strong,{children:"Hugging Face"})," model components."]}),"\n",(0,t.jsxs)(n.li,{children:["Connect both ",(0,t.jsx)(n.strong,{children:"Hugging Face"})," components to the ",(0,t.jsx)(n.strong,{children:"Embeddings"})," ports of the ",(0,t.jsx)(n.strong,{children:"Astra DB vector store"})," components."]}),"\n",(0,t.jsxs)(n.li,{children:["In the ",(0,t.jsx)(n.strong,{children:"Hugging Face"})," components, set the ",(0,t.jsx)(n.strong,{children:"Inference Endpoint"})," field to the URL of your local inference model. ",(0,t.jsxs)(n.strong,{children:["The ",(0,t.jsx)(n.strong,{children:"API Key"})," field is not required for local inference."]})]}),"\n",(0,t.jsx)(n.li,{children:"Run the flow. The local inference models generate embeddings for the input text."}),"\n"]}),"\n",(0,t.jsx)(n.h2,{id:"ibm-watsonx-embeddings",children:"IBM watsonx embeddings"}),"\n",(0,t.jsxs)(n.p,{children:["This component generates text using ",(0,t.jsx)(n.a,{href:"https://www.ibm.com/watsonx",children:"IBM watsonx.ai"})," foundation models."]}),"\n",(0,t.jsxs)(n.p,{children:["To use ",(0,t.jsx)(n.strong,{children:"IBM watsonx.ai"})," embeddings components, replace an embeddings component with the IBM watsonx.ai component in a flow."]}),"\n",(0,t.jsx)(n.p,{children:"An example document processing flow looks like the following:"}),"\n",(0,t.jsx)(n.p,{children:(0,t.jsx)(n.img,{alt:"IBM watsonx embeddings model loading a chroma-db with split text",src:d(96425).A+"",width:"1714",height:"1486"})}),"\n",(0,t.jsx)(n.p,{children:"This flow loads a PDF file from local storage and splits the text into chunks."}),"\n",(0,t.jsxs)(n.p,{children:["The ",(0,t.jsx)(n.strong,{children:"IBM watsonx"})," embeddings component converts the text chunks into embeddings, which are then stored in a Chroma DB vector store."]}),"\n",(0,t.jsxs)(n.p,{children:["The values for ",(0,t.jsx)(n.strong,{children:"API endpoint"}),", ",(0,t.jsx)(n.strong,{children:"Project ID"}),", ",(0,t.jsx)(n.strong,{children:"API key"}),", and ",(0,t.jsx)(n.strong,{children:"Model Name"})," are found in your IBM watsonx.ai deployment.\nFor more information, see the ",(0,t.jsx)(n.a,{href:"https://python.langchain.com/docs/integrations/text_embedding/ibm_watsonx/",children:"Langchain documentation"}),"."]}),"\n",(0,t.jsx)(n.h3,{id:"default-models",children:"Default models"}),"\n",(0,t.jsx)(n.p,{children:"The component supports several default models with the following vector dimensions:"}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.code,{children:"sentence-transformers/all-minilm-l12-v2"}),": 384-dimensional embeddings"]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.code,{children:"ibm/slate-125m-english-rtrvr-v2"}),": 768-dimensional embeddings"]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.code,{children:"ibm/slate-30m-english-rtrvr-v2"}),": 768-dimensional embeddings"]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.code,{children:"intfloat/multilingual-e5-large"}),": 1024-dimensional embeddings"]}),"\n"]}),"\n",(0,t.jsx)(n.p,{children:"The component automatically fetches and updates the list of available models from your watsonx.ai instance when you provide your API endpoint and credentials."}),"\n",(0,t.jsx)(n.h3,{id:"inputs-10",children:"Inputs"}),"\n",(0,t.jsxs)(n.table,{children:[(0,t.jsx)(n.thead,{children:(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.th,{children:"Name"}),(0,t.jsx)(n.th,{children:"Display Name"}),(0,t.jsx)(n.th,{children:"Info"})]})}),(0,t.jsxs)(n.tbody,{children:[(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:"url"}),(0,t.jsx)(n.td,{children:"watsonx API Endpoint"}),(0,t.jsx)(n.td,{children:"The base URL of the API."})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:"project_id"}),(0,t.jsx)(n.td,{children:"watsonx project id"}),(0,t.jsx)(n.td,{children:"The project ID for your watsonx.ai instance."})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:"api_key"}),(0,t.jsx)(n.td,{children:"API Key"}),(0,t.jsx)(n.td,{children:"The API Key to use for the model."})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:"model_name"}),(0,t.jsx)(n.td,{children:"Model Name"}),(0,t.jsx)(n.td,{children:"The name of the embedding model to use."})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:"truncate_input_tokens"}),(0,t.jsx)(n.td,{children:"Truncate Input Tokens"}),(0,t.jsxs)(n.td,{children:["The maximum number of tokens to process. Default: ",(0,t.jsx)(n.code,{children:"200"}),"."]})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:"input_text"}),(0,t.jsx)(n.td,{children:"Include the original text in the output"}),(0,t.jsxs)(n.td,{children:["Determines if the original text is included in the output. Default: ",(0,t.jsx)(n.code,{children:"True"}),"."]})]})]})]}),"\n",(0,t.jsx)(n.h3,{id:"outputs-10",children:"Outputs"}),"\n",(0,t.jsxs)(n.table,{children:[(0,t.jsx)(n.thead,{children:(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.th,{children:"Name"}),(0,t.jsx)(n.th,{children:"Display Name"}),(0,t.jsx)(n.th,{children:"Info"})]})}),(0,t.jsx)(n.tbody,{children:(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:"embeddings"}),(0,t.jsx)(n.td,{children:"Embeddings"}),(0,t.jsx)(n.td,{children:"An instance for generating embeddings using watsonx.ai"})]})})]}),"\n",(0,t.jsx)(n.h2,{id:"lm-studio-embeddings",children:"LM Studio Embeddings"}),"\n",(0,t.jsxs)(n.p,{children:["This component generates embeddings using ",(0,t.jsx)(n.a,{href:"https://lmstudio.ai/docs",children:"LM Studio"})," models."]}),"\n",(0,t.jsx)(n.h3,{id:"inputs-11",children:"Inputs"}),"\n",(0,t.jsxs)(n.table,{children:[(0,t.jsx)(n.thead,{children:(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.th,{children:"Name"}),(0,t.jsx)(n.th,{children:"Display Name"}),(0,t.jsx)(n.th,{children:"Info"})]})}),(0,t.jsxs)(n.tbody,{children:[(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:"model"}),(0,t.jsx)(n.td,{children:"Model"}),(0,t.jsx)(n.td,{children:"The LM Studio model to use for generating embeddings"})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:"base_url"}),(0,t.jsx)(n.td,{children:"LM Studio Base URL"}),(0,t.jsx)(n.td,{children:"The base URL for the LM Studio API"})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:"api_key"}),(0,t.jsx)(n.td,{children:"LM Studio API Key"}),(0,t.jsx)(n.td,{children:"API key for authentication with LM Studio"})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:"temperature"}),(0,t.jsx)(n.td,{children:"Model Temperature"}),(0,t.jsx)(n.td,{children:"Temperature setting for the model"})]})]})]}),"\n",(0,t.jsx)(n.h3,{id:"outputs-11",children:"Outputs"}),"\n",(0,t.jsxs)(n.table,{children:[(0,t.jsx)(n.thead,{children:(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.th,{children:"Name"}),(0,t.jsx)(n.th,{children:"Display Name"}),(0,t.jsx)(n.th,{children:"Info"})]})}),(0,t.jsx)(n.tbody,{children:(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:"embeddings"}),(0,t.jsx)(n.td,{children:"Embeddings"}),(0,t.jsx)(n.td,{children:"The generated embeddings"})]})})]}),"\n",(0,t.jsx)(n.h2,{id:"mistralai",children:"MistralAI"}),"\n",(0,t.jsxs)(n.p,{children:["This component generates embeddings using ",(0,t.jsx)(n.a,{href:"https://docs.mistral.ai/",children:"MistralAI"})," models."]}),"\n",(0,t.jsx)(n.h3,{id:"inputs-12",children:"Inputs"}),"\n",(0,t.jsxs)(n.table,{children:[(0,t.jsx)(n.thead,{children:(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.th,{children:"Name"}),(0,t.jsx)(n.th,{children:"Type"}),(0,t.jsx)(n.th,{children:"Description"})]})}),(0,t.jsxs)(n.tbody,{children:[(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:"model"}),(0,t.jsx)(n.td,{children:"String"}),(0,t.jsx)(n.td,{children:'The MistralAI model to use (default: "mistral-embed")'})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:"mistral_api_key"}),(0,t.jsx)(n.td,{children:"SecretString"}),(0,t.jsx)(n.td,{children:"API key for authenticating with MistralAI"})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:"max_concurrent_requests"}),(0,t.jsx)(n.td,{children:"Integer"}),(0,t.jsx)(n.td,{children:"Maximum number of concurrent API requests (default: 64)"})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:"max_retries"}),(0,t.jsx)(n.td,{children:"Integer"}),(0,t.jsx)(n.td,{children:"Maximum number of retry attempts for failed requests (default: 5)"})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:"timeout"}),(0,t.jsx)(n.td,{children:"Integer"}),(0,t.jsx)(n.td,{children:"Request timeout in seconds (default: 120)"})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:"endpoint"}),(0,t.jsx)(n.td,{children:"String"}),(0,t.jsxs)(n.td,{children:["Custom API endpoint URL (default: ",(0,t.jsx)(n.code,{children:"https://api.mistral.ai/v1/"}),")"]})]})]})]}),"\n",(0,t.jsx)(n.h3,{id:"outputs-12",children:"Outputs"}),"\n",(0,t.jsxs)(n.table,{children:[(0,t.jsx)(n.thead,{children:(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.th,{children:"Name"}),(0,t.jsx)(n.th,{children:"Type"}),(0,t.jsx)(n.th,{children:"Description"})]})}),(0,t.jsx)(n.tbody,{children:(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:"embeddings"}),(0,t.jsx)(n.td,{children:"Embeddings"}),(0,t.jsx)(n.td,{children:"MistralAIEmbeddings instance for generating embeddings"})]})})]}),"\n",(0,t.jsx)(n.h2,{id:"nvidia",children:"NVIDIA"}),"\n",(0,t.jsxs)(n.p,{children:["This component generates embeddings using ",(0,t.jsx)(n.a,{href:"https://docs.nvidia.com",children:"NVIDIA models"}),"."]}),"\n",(0,t.jsx)(n.h3,{id:"inputs-13",children:"Inputs"}),"\n",(0,t.jsxs)(n.table,{children:[(0,t.jsx)(n.thead,{children:(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.th,{children:"Name"}),(0,t.jsx)(n.th,{children:"Type"}),(0,t.jsx)(n.th,{children:"Description"})]})}),(0,t.jsxs)(n.tbody,{children:[(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:"model"}),(0,t.jsx)(n.td,{children:"String"}),(0,t.jsxs)(n.td,{children:["The NVIDIA model to use for embeddings (e.g., ",(0,t.jsx)(n.code,{children:"nvidia/nv-embed-v1"}),")"]})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:"base_url"}),(0,t.jsx)(n.td,{children:"String"}),(0,t.jsxs)(n.td,{children:["Base URL for the NVIDIA API (default: ",(0,t.jsx)(n.code,{children:"https://integrate.api.nvidia.com/v1"}),")"]})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:"nvidia_api_key"}),(0,t.jsx)(n.td,{children:"SecretString"}),(0,t.jsx)(n.td,{children:"API key for authenticating with NVIDIA's service"})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:"temperature"}),(0,t.jsx)(n.td,{children:"Float"}),(0,t.jsxs)(n.td,{children:["Model temperature for embedding generation (default: ",(0,t.jsx)(n.code,{children:"0.1"}),")"]})]})]})]}),"\n",(0,t.jsx)(n.h3,{id:"outputs-13",children:"Outputs"}),"\n",(0,t.jsxs)(n.table,{children:[(0,t.jsx)(n.thead,{children:(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.th,{children:"Name"}),(0,t.jsx)(n.th,{children:"Type"}),(0,t.jsx)(n.th,{children:"Description"})]})}),(0,t.jsx)(n.tbody,{children:(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:"embeddings"}),(0,t.jsx)(n.td,{children:"Embeddings"}),(0,t.jsx)(n.td,{children:"NVIDIAEmbeddings instance for generating embeddings"})]})})]}),"\n",(0,t.jsx)(n.h2,{id:"ollama-embeddings",children:"Ollama embeddings"}),"\n",(0,t.jsxs)(n.p,{children:["This component generates embeddings using ",(0,t.jsx)(n.a,{href:"https://ollama.com/",children:"Ollama models"}),"."]}),"\n",(0,t.jsxs)(n.p,{children:["For a list of Ollama embeddings models, see the ",(0,t.jsx)(n.a,{href:"https://ollama.com/search?c=embedding",children:"Ollama documentation"}),"."]}),"\n",(0,t.jsx)(n.p,{children:"To use this component in a flow, connect Langflow to your locally running Ollama server and select an embeddings model."}),"\n",(0,t.jsxs)(n.ol,{children:["\n",(0,t.jsxs)(n.li,{children:["In the Ollama component, in the ",(0,t.jsx)(n.strong,{children:"Ollama Base URL"})," field, enter the address for your locally running Ollama server.\nThis value is set as the ",(0,t.jsx)(n.code,{children:"OLLAMA_HOST"})," environment variable in Ollama. The default base URL is ",(0,t.jsx)(n.code,{children:"http://127.0.0.1:11434"}),"."]}),"\n",(0,t.jsxs)(n.li,{children:["To refresh the server's list of models, click ",(0,t.jsx)(r.A,{name:"RefreshCw","aria-label":"Refresh"}),"."]}),"\n",(0,t.jsxs)(n.li,{children:["In the ",(0,t.jsx)(n.strong,{children:"Ollama Model"})," field, select an embeddings model. This example uses ",(0,t.jsx)(n.code,{children:"all-minilm:latest"}),"."]}),"\n",(0,t.jsxs)(n.li,{children:["Connect the ",(0,t.jsx)(n.strong,{children:"Ollama"})," embeddings component to a flow.\nFor example, this flow connects a local Ollama server running a ",(0,t.jsx)(n.code,{children:"all-minilm:latest"})," embeddings model to a ",(0,t.jsx)(n.a,{href:"/components-vector-stores#chroma-db",children:"Chroma DB"})," vector store to generate embeddings for split text."]}),"\n"]}),"\n",(0,t.jsx)(n.p,{children:(0,t.jsx)(n.img,{alt:"Ollama embeddings connected to Chroma DB",src:d(7369).A+"",width:"1098",height:"811"})}),"\n",(0,t.jsxs)(n.p,{children:["For more information, see the ",(0,t.jsx)(n.a,{href:"https://ollama.com/",children:"Ollama documentation"}),"."]}),"\n",(0,t.jsx)(n.h3,{id:"inputs-14",children:"Inputs"}),"\n",(0,t.jsxs)(n.table,{children:[(0,t.jsx)(n.thead,{children:(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.th,{children:"Name"}),(0,t.jsx)(n.th,{children:"Type"}),(0,t.jsx)(n.th,{children:"Description"})]})}),(0,t.jsxs)(n.tbody,{children:[(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:"Ollama Model"}),(0,t.jsx)(n.td,{children:"String"}),(0,t.jsxs)(n.td,{children:["Name of the Ollama model to use (default: ",(0,t.jsx)(n.code,{children:"llama2"}),")"]})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:"Ollama Base URL"}),(0,t.jsx)(n.td,{children:"String"}),(0,t.jsxs)(n.td,{children:["Base URL of the Ollama API (default: ",(0,t.jsx)(n.code,{children:"http://localhost:11434"}),")"]})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:"Model Temperature"}),(0,t.jsx)(n.td,{children:"Float"}),(0,t.jsx)(n.td,{children:"Temperature parameter for the model. Adjusts the randomness in the generated embeddings"})]})]})]}),"\n",(0,t.jsx)(n.h3,{id:"outputs-14",children:"Outputs"}),"\n",(0,t.jsxs)(n.table,{children:[(0,t.jsx)(n.thead,{children:(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.th,{children:"Name"}),(0,t.jsx)(n.th,{children:"Type"}),(0,t.jsx)(n.th,{children:"Description"})]})}),(0,t.jsx)(n.tbody,{children:(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:"embeddings"}),(0,t.jsx)(n.td,{children:"Embeddings"}),(0,t.jsx)(n.td,{children:"An instance for generating embeddings using Ollama"})]})})]}),"\n",(0,t.jsx)(n.h2,{id:"openai-embeddings",children:"OpenAI Embeddings"}),"\n",(0,t.jsxs)(n.p,{children:["This component is used to load embedding models from ",(0,t.jsx)(n.a,{href:"https://openai.com/",children:"OpenAI"}),"."]}),"\n",(0,t.jsx)(n.h3,{id:"inputs-15",children:"Inputs"}),"\n",(0,t.jsxs)(n.table,{children:[(0,t.jsx)(n.thead,{children:(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.th,{children:"Name"}),(0,t.jsx)(n.th,{children:"Type"}),(0,t.jsx)(n.th,{children:"Description"})]})}),(0,t.jsxs)(n.tbody,{children:[(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:"OpenAI API Key"}),(0,t.jsx)(n.td,{children:"String"}),(0,t.jsx)(n.td,{children:"The API key to use for accessing the OpenAI API"})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:"Default Headers"}),(0,t.jsx)(n.td,{children:"Dict"}),(0,t.jsx)(n.td,{children:"Default headers for the HTTP requests"})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:"Default Query"}),(0,t.jsx)(n.td,{children:"NestedDict"}),(0,t.jsx)(n.td,{children:"Default query parameters for the HTTP requests"})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:"Allowed Special"}),(0,t.jsx)(n.td,{children:"List"}),(0,t.jsxs)(n.td,{children:["Special tokens allowed for processing (default: ",(0,t.jsx)(n.code,{children:"[]"}),")"]})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:"Disallowed Special"}),(0,t.jsx)(n.td,{children:"List"}),(0,t.jsxs)(n.td,{children:["Special tokens disallowed for processing (default: ",(0,t.jsx)(n.code,{children:'["all"]'}),")"]})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:"Chunk Size"}),(0,t.jsx)(n.td,{children:"Integer"}),(0,t.jsxs)(n.td,{children:["Chunk size for processing (default: ",(0,t.jsx)(n.code,{children:"1000"}),")"]})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:"Client"}),(0,t.jsx)(n.td,{children:"Any"}),(0,t.jsx)(n.td,{children:"HTTP client for making requests"})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:"Deployment"}),(0,t.jsx)(n.td,{children:"String"}),(0,t.jsxs)(n.td,{children:["Deployment name for the model (default: ",(0,t.jsx)(n.code,{children:"text-embedding-3-small"}),")"]})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:"Embedding Context Length"}),(0,t.jsx)(n.td,{children:"Integer"}),(0,t.jsxs)(n.td,{children:["Length of embedding context (default: ",(0,t.jsx)(n.code,{children:"8191"}),")"]})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:"Max Retries"}),(0,t.jsx)(n.td,{children:"Integer"}),(0,t.jsxs)(n.td,{children:["Maximum number of retries for failed requests (default: ",(0,t.jsx)(n.code,{children:"6"}),")"]})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:"Model"}),(0,t.jsx)(n.td,{children:"String"}),(0,t.jsxs)(n.td,{children:["Name of the model to use (default: ",(0,t.jsx)(n.code,{children:"text-embedding-3-small"}),")"]})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:"Model Kwargs"}),(0,t.jsx)(n.td,{children:"NestedDict"}),(0,t.jsx)(n.td,{children:"Additional keyword arguments for the model"})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:"OpenAI API Base"}),(0,t.jsx)(n.td,{children:"String"}),(0,t.jsx)(n.td,{children:"Base URL of the OpenAI API"})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:"OpenAI API Type"}),(0,t.jsx)(n.td,{children:"String"}),(0,t.jsx)(n.td,{children:"Type of the OpenAI API"})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:"OpenAI API Version"}),(0,t.jsx)(n.td,{children:"String"}),(0,t.jsx)(n.td,{children:"Version of the OpenAI API"})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:"OpenAI Organization"}),(0,t.jsx)(n.td,{children:"String"}),(0,t.jsx)(n.td,{children:"Organization associated with the API key"})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:"OpenAI Proxy"}),(0,t.jsx)(n.td,{children:"String"}),(0,t.jsx)(n.td,{children:"Proxy server for the requests"})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:"Request Timeout"}),(0,t.jsx)(n.td,{children:"Float"}),(0,t.jsx)(n.td,{children:"Timeout for the HTTP requests"})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:"Show Progress Bar"}),(0,t.jsx)(n.td,{children:"Boolean"}),(0,t.jsxs)(n.td,{children:["Whether to show a progress bar for processing (default: ",(0,t.jsx)(n.code,{children:"False"}),")"]})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:"Skip Empty"}),(0,t.jsx)(n.td,{children:"Boolean"}),(0,t.jsxs)(n.td,{children:["Whether to skip empty inputs (default: ",(0,t.jsx)(n.code,{children:"False"}),")"]})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:"TikToken Enable"}),(0,t.jsx)(n.td,{children:"Boolean"}),(0,t.jsxs)(n.td,{children:["Whether to enable TikToken (default: ",(0,t.jsx)(n.code,{children:"True"}),")"]})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:"TikToken Model Name"}),(0,t.jsx)(n.td,{children:"String"}),(0,t.jsx)(n.td,{children:"Name of the TikToken model"})]})]})]}),"\n",(0,t.jsx)(n.h3,{id:"outputs-15",children:"Outputs"}),"\n",(0,t.jsxs)(n.table,{children:[(0,t.jsx)(n.thead,{children:(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.th,{children:"Name"}),(0,t.jsx)(n.th,{children:"Type"}),(0,t.jsx)(n.th,{children:"Description"})]})}),(0,t.jsx)(n.tbody,{children:(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:"embeddings"}),(0,t.jsx)(n.td,{children:"Embeddings"}),(0,t.jsx)(n.td,{children:"An instance for generating embeddings using OpenAI"})]})})]}),"\n",(0,t.jsx)(n.h2,{id:"text-embedder",children:"Text embedder"}),"\n",(0,t.jsx)(n.p,{children:"This component generates embeddings for a given message using a specified embedding model."}),"\n",(0,t.jsx)(n.h3,{id:"inputs-16",children:"Inputs"}),"\n",(0,t.jsxs)(n.table,{children:[(0,t.jsx)(n.thead,{children:(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.th,{children:"Name"}),(0,t.jsx)(n.th,{children:"Display Name"}),(0,t.jsx)(n.th,{children:"Info"})]})}),(0,t.jsxs)(n.tbody,{children:[(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:"embedding_model"}),(0,t.jsx)(n.td,{children:"Embedding Model"}),(0,t.jsx)(n.td,{children:"The embedding model to use for generating embeddings."})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:"message"}),(0,t.jsx)(n.td,{children:"Message"}),(0,t.jsx)(n.td,{children:"The message for which to generate embeddings."})]})]})]}),"\n",(0,t.jsx)(n.h3,{id:"outputs-16",children:"Outputs"}),"\n",(0,t.jsxs)(n.table,{children:[(0,t.jsx)(n.thead,{children:(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.th,{children:"Name"}),(0,t.jsx)(n.th,{children:"Display Name"}),(0,t.jsx)(n.th,{children:"Info"})]})}),(0,t.jsx)(n.tbody,{children:(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:"embeddings"}),(0,t.jsx)(n.td,{children:"Embedding Data"}),(0,t.jsx)(n.td,{children:"Data object containing the original text and its embedding vector."})]})})]}),"\n",(0,t.jsx)(n.h2,{id:"vertexai-embeddings",children:"VertexAI Embeddings"}),"\n",(0,t.jsxs)(n.p,{children:["This component is a wrapper around ",(0,t.jsx)(n.a,{href:"https://cloud.google.com/vertex-ai",children:"Google Vertex AI"})," ",(0,t.jsx)(n.a,{href:"https://cloud.google.com/vertex-ai/docs/generative-ai/embeddings/get-text-embeddings",children:"Embeddings API"}),"."]}),"\n",(0,t.jsx)(n.h3,{id:"inputs-17",children:"Inputs"}),"\n",(0,t.jsxs)(n.table,{children:[(0,t.jsx)(n.thead,{children:(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.th,{children:"Name"}),(0,t.jsx)(n.th,{children:"Type"}),(0,t.jsx)(n.th,{children:"Description"})]})}),(0,t.jsxs)(n.tbody,{children:[(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:"credentials"}),(0,t.jsx)(n.td,{children:"Credentials"}),(0,t.jsx)(n.td,{children:"The default custom credentials to use"})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:"location"}),(0,t.jsx)(n.td,{children:"String"}),(0,t.jsxs)(n.td,{children:["The default location to use when making API calls (default: ",(0,t.jsx)(n.code,{children:"us-central1"}),")"]})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:"max_output_tokens"}),(0,t.jsx)(n.td,{children:"Integer"}),(0,t.jsxs)(n.td,{children:["Token limit determines the maximum amount of text output from one prompt (default: ",(0,t.jsx)(n.code,{children:"128"}),")"]})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:"model_name"}),(0,t.jsx)(n.td,{children:"String"}),(0,t.jsxs)(n.td,{children:["The name of the Vertex AI large language model (default: ",(0,t.jsx)(n.code,{children:"text-bison"}),")"]})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:"project"}),(0,t.jsx)(n.td,{children:"String"}),(0,t.jsx)(n.td,{children:"The default GCP project to use when making Vertex API calls"})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:"request_parallelism"}),(0,t.jsx)(n.td,{children:"Integer"}),(0,t.jsxs)(n.td,{children:["The amount of parallelism allowed for requests issued to VertexAI models (default: ",(0,t.jsx)(n.code,{children:"5"}),")"]})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:"temperature"}),(0,t.jsx)(n.td,{children:"Float"}),(0,t.jsxs)(n.td,{children:["Tunes the degree of randomness in text generations. Should be a non-negative value (default: ",(0,t.jsx)(n.code,{children:"0"}),")"]})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:"top_k"}),(0,t.jsx)(n.td,{children:"Integer"}),(0,t.jsxs)(n.td,{children:["How the model selects tokens for output, the next token is selected from the top ",(0,t.jsx)(n.code,{children:"k"})," tokens (default: ",(0,t.jsx)(n.code,{children:"40"}),")"]})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:"top_p"}),(0,t.jsx)(n.td,{children:"Float"}),(0,t.jsxs)(n.td,{children:["Tokens are selected from the most probable to least until the sum of their probabilities exceeds the top ",(0,t.jsx)(n.code,{children:"p"})," value (default: ",(0,t.jsx)(n.code,{children:"0.95"}),")"]})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:"tuned_model_name"}),(0,t.jsx)(n.td,{children:"String"}),(0,t.jsxs)(n.td,{children:["The name of a tuned model. If provided, ",(0,t.jsx)(n.code,{children:"model_name"})," is ignored"]})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:"verbose"}),(0,t.jsx)(n.td,{children:"Boolean"}),(0,t.jsxs)(n.td,{children:["This parameter controls the level of detail in the output. When set to ",(0,t.jsx)(n.code,{children:"True"}),", it prints internal states of the chain to help debug (default: ",(0,t.jsx)(n.code,{children:"False"}),")"]})]})]})]}),"\n",(0,t.jsx)(n.h3,{id:"outputs-17",children:"Outputs"}),"\n",(0,t.jsxs)(n.table,{children:[(0,t.jsx)(n.thead,{children:(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.th,{children:"Name"}),(0,t.jsx)(n.th,{children:"Type"}),(0,t.jsx)(n.th,{children:"Description"})]})}),(0,t.jsx)(n.tbody,{children:(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:"embeddings"}),(0,t.jsx)(n.td,{children:"Embeddings"}),(0,t.jsx)(n.td,{children:"An instance for generating embeddings using VertexAI"})]})})]})]})}function x(e={}){const{wrapper:n}={...(0,i.R)(),...e.components};return n?(0,t.jsx)(n,{...e,children:(0,t.jsx)(a,{...e})}):a(e)}},80352:(e,n,d)=>{d.d(n,{A:()=>s});const s=d.p+"assets/images/url-component-fb712df73581345c0f344013ce6ff2fd.png"},84443:(e,n,d)=>{d.d(n,{A:()=>i});d(96540);var s=d(64058),t=d(74848);function i(e){let{name:n,...d}=e;const i=s[n];return i?(0,t.jsx)(i,{...d}):null}},96425:(e,n,d)=>{d.d(n,{A:()=>s});const s=d.p+"assets/images/component-watsonx-embeddings-chroma-591e45d59ab635d1e1e68ab8036cfed7.png"}}]); \ No newline at end of file diff --git a/assets/js/adef6868.7239ff5d.js b/assets/js/adef6868.7239ff5d.js new file mode 100644 index 0000000000..6ecee3a611 --- /dev/null +++ b/assets/js/adef6868.7239ff5d.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunklangflow_docs=self.webpackChunklangflow_docs||[]).push([[8953],{28453:(e,t,n)=>{n.d(t,{R:()=>i,x:()=>o});var s=n(96540);const r={},d=s.createContext(r);function i(e){const t=s.useContext(d);return s.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function o(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:i(e.components),s.createElement(d.Provider,{value:t},e.children)}},46571:(e,t,n)=>{n.d(t,{A:()=>s});const s=n.p+"assets/images/starter-flow-unstructured-qa-4260fdd42821cf2cbd056661b96be655.png"},67836:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>l,contentTitle:()=>o,default:()=>h,frontMatter:()=>i,metadata:()=>s,toc:()=>c});const s=JSON.parse('{"id":"Components/components-loaders","title":"Loaders","description":"As of Langflow 1.1, loader components are now found in the Components menu under Bundles.","source":"@site/docs/Components/components-loaders.md","sourceDirName":"Components","slug":"/components-loaders","permalink":"/components-loaders","draft":false,"unlisted":false,"tags":[],"version":"current","frontMatter":{"title":"Loaders","slug":"/components-loaders"},"sidebar":"docs","previous":{"title":"Inputs and outputs","permalink":"/components-io"},"next":{"title":"Logic","permalink":"/components-logic"}}');var r=n(74848),d=n(28453);const i={title:"Loaders",slug:"/components-loaders"},o="Loader components in Langflow",l={},c=[{value:"Use a loader component in a flow",id:"use-a-loader-component-in-a-flow",level:2},{value:"Confluence",id:"confluence",level:2},{value:"GitLoader",id:"gitloader",level:2},{value:"Unstructured",id:"unstructured",level:2}];function a(e){const t={a:"a",admonition:"admonition",h1:"h1",h2:"h2",header:"header",img:"img",p:"p",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",...(0,d.R)(),...e.components},{Details:s}=t;return s||function(e,t){throw new Error("Expected "+(t?"component":"object")+" `"+e+"` to be defined: you likely forgot to import, pass, or provide it.")}("Details",!0),(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(t.header,{children:(0,r.jsx)(t.h1,{id:"loader-components-in-langflow",children:"Loader components in Langflow"})}),"\n",(0,r.jsx)(t.admonition,{type:"info",children:(0,r.jsxs)(t.p,{children:["As of Langflow 1.1, loader components are now found in the ",(0,r.jsx)(t.strong,{children:"Components"})," menu under ",(0,r.jsx)(t.strong,{children:"Bundles"}),"."]})}),"\n",(0,r.jsx)(t.p,{children:"Loaders fetch data into Langflow from various sources, such as databases, websites, and local files."}),"\n",(0,r.jsx)(t.h2,{id:"use-a-loader-component-in-a-flow",children:"Use a loader component in a flow"}),"\n",(0,r.jsxs)(t.p,{children:["This flow creates a question-and-answer chatbot for documents that are loaded into the flow.\nThe ",(0,r.jsx)(t.a,{href:"https://unstructured.io/",children:"Unstructured.io"})," loader component loads files from your local machine, and then parses them into a list of structured ",(0,r.jsx)(t.a,{href:"/concepts-objects",children:"Data"})," objects.\nThis loaded data informs the ",(0,r.jsx)(t.strong,{children:"Open AI"})," component's responses to your questions."]}),"\n",(0,r.jsx)(t.p,{children:(0,r.jsx)(t.img,{alt:"Sample Flow retrieving data with unstructured",src:n(46571).A+"",width:"2950",height:"1238"})}),"\n",(0,r.jsx)(t.h2,{id:"confluence",children:"Confluence"}),"\n",(0,r.jsx)(t.p,{children:"The Confluence component integrates with the Confluence wiki collaboration platform to load and process documents. It utilizes the ConfluenceLoader from LangChain to fetch content from a specified Confluence space."}),"\n",(0,r.jsxs)(s,{children:[(0,r.jsx)("summary",{children:"Parameters"}),(0,r.jsx)(t.p,{children:(0,r.jsx)(t.strong,{children:"Inputs"})}),(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:"url"}),(0,r.jsx)(t.td,{children:"Site URL"}),(0,r.jsxs)(t.td,{children:["The base URL of the Confluence Space, for example ",(0,r.jsx)(t.a,{href:"https://company.atlassian.net/wiki",children:"https://company.atlassian.net/wiki"}),"."]})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"username"}),(0,r.jsx)(t.td,{children:"Username"}),(0,r.jsxs)(t.td,{children:["The Atlassian User E-mail, for example ",(0,r.jsx)(t.a,{href:"mailto:email@example.com",children:"email@example.com"}),"."]})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"api_key"}),(0,r.jsx)(t.td,{children:"API Key"}),(0,r.jsxs)(t.td,{children:["The Atlassian API Key. Create an API key at ",(0,r.jsx)(t.a,{href:"https://id.atlassian.com/manage-profile/security/api-tokens",children:"Atlassian"}),"."]})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"space_key"}),(0,r.jsx)(t.td,{children:"Space Key"}),(0,r.jsx)(t.td,{children:"The key of the Confluence space to access."})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"cloud"}),(0,r.jsx)(t.td,{children:"Use Cloud?"}),(0,r.jsx)(t.td,{children:"Whether to use Confluence Cloud. Default is true."})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"content_format"}),(0,r.jsx)(t.td,{children:"Content Format"}),(0,r.jsx)(t.td,{children:"The content format. Default is STORAGE."})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"max_pages"}),(0,r.jsx)(t.td,{children:"Max Pages"}),(0,r.jsx)(t.td,{children:"The maximum number of pages to retrieve. Default is 1000."})]})]})]}),(0,r.jsx)(t.p,{children:(0,r.jsx)(t.strong,{children:"Outputs"})}),(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.jsx)(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:"A list of Data objects containing the loaded Confluence documents."})]})})]})]}),"\n",(0,r.jsx)(t.h2,{id:"gitloader",children:"GitLoader"}),"\n",(0,r.jsx)(t.p,{children:"The GitLoader component uses the GitLoader from LangChain to fetch and load documents from a specified Git repository."}),"\n",(0,r.jsxs)(s,{children:[(0,r.jsx)("summary",{children:"Parameters"}),(0,r.jsx)(t.p,{children:(0,r.jsx)(t.strong,{children:"Inputs"})}),(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:"repo_path"}),(0,r.jsx)(t.td,{children:"Repository Path"}),(0,r.jsx)(t.td,{children:"The local path to the Git repository."})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"clone_url"}),(0,r.jsx)(t.td,{children:"Clone URL"}),(0,r.jsx)(t.td,{children:"The URL to clone the Git repository from. This field is optional."})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"branch"}),(0,r.jsx)(t.td,{children:"Branch"}),(0,r.jsx)(t.td,{children:"The branch to load files from. Default is main."})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"file_filter"}),(0,r.jsx)(t.td,{children:"File Filter"}),(0,r.jsx)(t.td,{children:"The patterns to filter files. Use .py to include only Python files, or !.py to exclude Python files."})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"content_filter"}),(0,r.jsx)(t.td,{children:"Content Filter"}),(0,r.jsx)(t.td,{children:"A regex pattern to filter files based on their content."})]})]})]}),(0,r.jsx)(t.p,{children:(0,r.jsx)(t.strong,{children:"Outputs"})}),(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.jsx)(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:"A list of Data objects containing the loaded Git repository documents."})]})})]})]}),"\n",(0,r.jsx)(t.h2,{id:"unstructured",children:"Unstructured"}),"\n",(0,r.jsxs)(t.p,{children:["This component uses the ",(0,r.jsx)(t.a,{href:"https://unstructured.io/",children:"Unstructured.io"})," Serverless API to load and parse files into a list of structured ",(0,r.jsx)(t.a,{href:"/concepts-objects",children:"Data"})," objects."]}),"\n",(0,r.jsxs)(s,{children:[(0,r.jsx)("summary",{children:"Parameters"}),(0,r.jsx)(t.p,{children:(0,r.jsx)(t.strong,{children:"Inputs"})}),(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:"file"}),(0,r.jsx)(t.td,{children:"File"}),(0,r.jsxs)(t.td,{children:["The path to the file to be parsed. Supported types are listed in the ",(0,r.jsx)(t.a,{href:"https://docs.unstructured.io/api-reference/api-services/overview#supported-file-types",children:"Unstructured documentation"}),"."]})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"api_key"}),(0,r.jsx)(t.td,{children:"API Key"}),(0,r.jsx)(t.td,{children:"The Unstructured.io Serverless API Key."})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"api_url"}),(0,r.jsx)(t.td,{children:"Unstructured.io API URL"}),(0,r.jsx)(t.td,{children:"The URL for the Unstructured API. This field is optional."})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"chunking_strategy"}),(0,r.jsx)(t.td,{children:"Chunking Strategy"}),(0,r.jsx)(t.td,{children:"The strategy for chunking the document. Options include basic, by_title, by_page, and by_similarity."})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"unstructured_args"}),(0,r.jsx)(t.td,{children:"Additional Arguments"}),(0,r.jsx)(t.td,{children:"A dictionary of additional arguments for the Unstructured.io API. This field is optional."})]})]})]}),(0,r.jsx)(t.p,{children:(0,r.jsx)(t.strong,{children:"Outputs"})}),(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.jsx)(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:"A list of Data objects containing the parsed content from the input file."})]})})]})]})]})}function h(e={}){const{wrapper:t}={...(0,d.R)(),...e.components};return t?(0,r.jsx)(t,{...e,children:(0,r.jsx)(a,{...e})}):a(e)}}}]); \ No newline at end of file diff --git a/assets/js/adef6868.f5324ebd.js b/assets/js/adef6868.f5324ebd.js deleted file mode 100644 index 30c1c98bbe..0000000000 --- a/assets/js/adef6868.f5324ebd.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunklangflow_docs=self.webpackChunklangflow_docs||[]).push([[8953],{28453:(e,t,n)=>{n.d(t,{R:()=>i,x:()=>l});var s=n(96540);const r={},d=s.createContext(r);function i(e){const t=s.useContext(d);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(r):e.components||r:i(e.components),s.createElement(d.Provider,{value:t},e.children)}},46571:(e,t,n)=>{n.d(t,{A:()=>s});const s=n.p+"assets/images/starter-flow-unstructured-qa-4260fdd42821cf2cbd056661b96be655.png"},67836:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>o,contentTitle:()=>l,default:()=>h,frontMatter:()=>i,metadata:()=>s,toc:()=>c});const s=JSON.parse('{"id":"Components/components-loaders","title":"Loaders","description":"As of Langflow 1.1, loader components are now found in the Components menu under Bundles.","source":"@site/docs/Components/components-loaders.md","sourceDirName":"Components","slug":"/components-loaders","permalink":"/components-loaders","draft":false,"unlisted":false,"tags":[],"version":"current","frontMatter":{"title":"Loaders","slug":"/components-loaders"},"sidebar":"docs","previous":{"title":"Inputs and outputs","permalink":"/components-io"},"next":{"title":"Logic","permalink":"/components-logic"}}');var r=n(74848),d=n(28453);const i={title:"Loaders",slug:"/components-loaders"},l="Loader components in Langflow",o={},c=[{value:"Use a loader component in a flow",id:"use-a-loader-component-in-a-flow",level:2},{value:"Confluence",id:"confluence",level:2},{value:"Inputs",id:"inputs",level:3},{value:"Outputs",id:"outputs",level:3},{value:"GitLoader",id:"gitloader",level:2},{value:"Inputs",id:"inputs-1",level:3},{value:"Outputs",id:"outputs-1",level:3},{value:"Unstructured",id:"unstructured",level:2},{value:"Inputs",id:"inputs-2",level:3},{value:"Outputs",id:"outputs-2",level:3}];function a(e){const t={a:"a",admonition:"admonition",code:"code",h1:"h1",h2:"h2",h3:"h3",header:"header",img:"img",p:"p",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",...(0,d.R)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(t.header,{children:(0,r.jsx)(t.h1,{id:"loader-components-in-langflow",children:"Loader components in Langflow"})}),"\n",(0,r.jsx)(t.admonition,{type:"info",children:(0,r.jsxs)(t.p,{children:["As of Langflow 1.1, loader components are now found in the ",(0,r.jsx)(t.strong,{children:"Components"})," menu under ",(0,r.jsx)(t.strong,{children:"Bundles"}),"."]})}),"\n",(0,r.jsx)(t.p,{children:"Loaders fetch data into Langflow from various sources, such as databases, websites, and local files."}),"\n",(0,r.jsx)(t.h2,{id:"use-a-loader-component-in-a-flow",children:"Use a loader component in a flow"}),"\n",(0,r.jsxs)(t.p,{children:["This flow creates a question-and-answer chatbot for documents that are loaded into the flow.\nThe ",(0,r.jsx)(t.a,{href:"https://unstructured.io/",children:"Unstructured.io"})," loader component loads files from your local machine, and then parses them into a list of structured ",(0,r.jsx)(t.a,{href:"/concepts-objects",children:"Data"})," objects.\nThis loaded data informs the ",(0,r.jsx)(t.strong,{children:"Open AI"})," component's responses to your questions."]}),"\n",(0,r.jsx)(t.p,{children:(0,r.jsx)(t.img,{alt:"Sample Flow retrieving data with unstructured",src:n(46571).A+"",width:"2950",height:"1238"})}),"\n",(0,r.jsx)(t.h2,{id:"confluence",children:"Confluence"}),"\n",(0,r.jsx)(t.p,{children:"The Confluence component integrates with the Confluence wiki collaboration platform to load and process documents. It utilizes the ConfluenceLoader from LangChain to fetch content from a specified Confluence space."}),"\n",(0,r.jsx)(t.h3,{id:"inputs",children:"Inputs"}),"\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:"url"}),(0,r.jsx)(t.td,{children:"Site URL"}),(0,r.jsxs)(t.td,{children:["The base URL of the Confluence Space (e.g., ",(0,r.jsx)(t.code,{children:"https://company.atlassian.net/wiki"}),")"]})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"username"}),(0,r.jsx)(t.td,{children:"Username"}),(0,r.jsxs)(t.td,{children:["Atlassian User E-mail (e.g., ",(0,r.jsx)(t.code,{children:"email@example.com"}),")"]})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"api_key"}),(0,r.jsx)(t.td,{children:"API Key"}),(0,r.jsxs)(t.td,{children:["Atlassian API Key (Create an API key at: ",(0,r.jsx)(t.a,{href:"https://id.atlassian.com/manage-profile/security/api-tokens",children:"Atlassian"}),")"]})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"space_key"}),(0,r.jsx)(t.td,{children:"Space Key"}),(0,r.jsx)(t.td,{children:"The key of the Confluence space to access"})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"cloud"}),(0,r.jsx)(t.td,{children:"Use Cloud?"}),(0,r.jsx)(t.td,{children:"Whether to use Confluence Cloud (default: true)"})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"content_format"}),(0,r.jsx)(t.td,{children:"Content Format"}),(0,r.jsx)(t.td,{children:"Specify content format (default: STORAGE)"})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"max_pages"}),(0,r.jsx)(t.td,{children:"Max Pages"}),(0,r.jsx)(t.td,{children:"Maximum number of pages to retrieve (default: 1000)"})]})]})]}),"\n",(0,r.jsx)(t.h3,{id:"outputs",children:"Outputs"}),"\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.jsx)(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:"List of Data objects containing the loaded Confluence documents"})]})})]}),"\n",(0,r.jsx)(t.h2,{id:"gitloader",children:"GitLoader"}),"\n",(0,r.jsx)(t.p,{children:"The GitLoader component uses the GitLoader from LangChain to fetch and load documents from a specified Git repository."}),"\n",(0,r.jsx)(t.h3,{id:"inputs-1",children:"Inputs"}),"\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:"repo_path"}),(0,r.jsx)(t.td,{children:"Repository Path"}),(0,r.jsx)(t.td,{children:"The local path to the Git repository"})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"clone_url"}),(0,r.jsx)(t.td,{children:"Clone URL"}),(0,r.jsx)(t.td,{children:"The URL to clone the Git repository from (optional)"})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"branch"}),(0,r.jsx)(t.td,{children:"Branch"}),(0,r.jsx)(t.td,{children:"The branch to load files from (default: 'main')"})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"file_filter"}),(0,r.jsx)(t.td,{children:"File Filter"}),(0,r.jsx)(t.td,{children:"Patterns to filter files (e.g., '.py' to include only .py files, '!.py' to exclude .py files)"})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"content_filter"}),(0,r.jsx)(t.td,{children:"Content Filter"}),(0,r.jsx)(t.td,{children:"A regex pattern to filter files based on their content"})]})]})]}),"\n",(0,r.jsx)(t.h3,{id:"outputs-1",children:"Outputs"}),"\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.jsx)(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:"List of Data objects containing the loaded Git repository documents"})]})})]}),"\n",(0,r.jsx)(t.h2,{id:"unstructured",children:"Unstructured"}),"\n",(0,r.jsxs)(t.p,{children:["This component uses the ",(0,r.jsx)(t.a,{href:"https://unstructured.io/",children:"Unstructured.io"})," Serverless API to load and parse files into a list of structured ",(0,r.jsx)(t.a,{href:"/concepts-objects",children:"Data"})," objects."]}),"\n",(0,r.jsx)(t.h3,{id:"inputs-2",children:"Inputs"}),"\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:"file"}),(0,r.jsx)(t.td,{children:"File"}),(0,r.jsxs)(t.td,{children:["The path to the file to be parsed (supported types are listed ",(0,r.jsx)(t.a,{href:"https://docs.unstructured.io/api-reference/api-services/overview#supported-file-types",children:"here"}),")"]})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"api_key"}),(0,r.jsx)(t.td,{children:"API Key"}),(0,r.jsx)(t.td,{children:"Unstructured.io Serverless API Key"})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"api_url"}),(0,r.jsx)(t.td,{children:"Unstructured.io API URL"}),(0,r.jsx)(t.td,{children:"Optional URL for the Unstructured API"})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"chunking_strategy"}),(0,r.jsx)(t.td,{children:"Chunking Strategy"}),(0,r.jsx)(t.td,{children:'Strategy for chunking the document (options: "", "basic", "by_title", "by_page", "by_similarity")'})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"unstructured_args"}),(0,r.jsx)(t.td,{children:"Additional Arguments"}),(0,r.jsx)(t.td,{children:"Optional dictionary of additional arguments for the Unstructured.io API"})]})]})]}),"\n",(0,r.jsx)(t.h3,{id:"outputs-2",children:"Outputs"}),"\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.jsx)(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:"List of Data objects containing the parsed content from the input file"})]})})]})]})}function h(e={}){const{wrapper:t}={...(0,d.R)(),...e.components};return t?(0,r.jsx)(t,{...e,children:(0,r.jsx)(a,{...e})}):a(e)}}}]); \ No newline at end of file diff --git a/assets/js/ae68aa8b.4c824b91.js b/assets/js/ae68aa8b.4c824b91.js new file mode 100644 index 0000000000..4778bb8fcc --- /dev/null +++ b/assets/js/ae68aa8b.4c824b91.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunklangflow_docs=self.webpackChunklangflow_docs||[]).push([[8927],{19680:(e,t,n)=>{n.d(t,{A:()=>s});const s=n.p+"assets/images/starter-flow-simple-agent-71d0dec218a5da8e3110c51716f1c91e.png"},28453:(e,t,n)=>{n.d(t,{R:()=>i,x:()=>h});var s=n(96540);const r={},d=s.createContext(r);function i(e){const t=s.useContext(d);return s.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function h(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:i(e.components),s.createElement(d.Provider,{value:t},e.children)}},57819:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>l,contentTitle:()=>h,default:()=>a,frontMatter:()=>i,metadata:()=>s,toc:()=>c});const s=JSON.parse('{"id":"Components/components-agents","title":"Agents","description":"Agent components define the behavior and capabilities of AI agents in your flow.","source":"@site/docs/Components/components-agents.md","sourceDirName":"Components","slug":"/components-agents","permalink":"/components-agents","draft":false,"unlisted":false,"tags":[],"version":"current","frontMatter":{"title":"Agents","slug":"/components-agents"},"sidebar":"docs","previous":{"title":"Voice mode","permalink":"/concepts-voice-mode"},"next":{"title":"Bundles","permalink":"/components-bundle-components"}}');var r=n(74848),d=n(28453);const i={title:"Agents",slug:"/components-agents"},h="Agent components in Langflow",l={},c=[{value:"Use an agent in a flow",id:"use-an-agent-in-a-flow",level:2},{value:"Agent component",id:"agent-component",level:2},{value:"Legacy components",id:"legacy-components",level:2},{value:"JSON Agent",id:"json-agent",level:3},{value:"Vector Store Agent",id:"vector-store-agent",level:3},{value:"Vector Store Router Agent",id:"vector-store-router-agent",level:3},{value:"Moved components",id:"moved-components",level:2},{value:"CrewAI Agent",id:"crewai-agent",level:3},{value:"Hierarchical Crew",id:"hierarchical-crew",level:3},{value:"CSV Agent",id:"csv-agent",level:3},{value:"OpenAI Tools Agent",id:"openai-tools-agent",level:3},{value:"OpenAPI Agent",id:"openapi-agent",level:3},{value:"Sequential Crew",id:"sequential-crew",level:3},{value:"Sequential task agent",id:"sequential-task-agent",level:3},{value:"SQL Agent",id:"sql-agent",level:3},{value:"Tool Calling Agent",id:"tool-calling-agent",level:3},{value:"XML Agent",id:"xml-agent",level:3}];function o(e){const t={a:"a",code:"code",h1:"h1",h2:"h2",h3:"h3",header:"header",img:"img",p:"p",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",...(0,d.R)(),...e.components},{Details:s}=t;return s||function(e,t){throw new Error("Expected "+(t?"component":"object")+" `"+e+"` to be defined: you likely forgot to import, pass, or provide it.")}("Details",!0),(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(t.header,{children:(0,r.jsx)(t.h1,{id:"agent-components-in-langflow",children:"Agent components in Langflow"})}),"\n",(0,r.jsx)(t.p,{children:"Agent components define the behavior and capabilities of AI agents in your flow."}),"\n",(0,r.jsx)(t.p,{children:"Agents use LLMs as a reasoning engine to decide which of the connected tool components to use to solve a problem."}),"\n",(0,r.jsxs)(t.p,{children:["Tools in agentic functions are essentially functions that the agent can call to perform tasks or access external resources.\nA function is wrapped as a ",(0,r.jsx)(t.code,{children:"Tool"})," object with a common interface the agent understands.\nAgents become aware of tools through tool registration where the agent is provided a list of available tools typically at agent initialization. The ",(0,r.jsx)(t.code,{children:"Tool"})," object's description tells the agent what the tool can do."]}),"\n",(0,r.jsx)(t.p,{children:"The agent then uses a connected LLM to reason through the problem to decide which tool is best for the job."}),"\n",(0,r.jsx)(t.h2,{id:"use-an-agent-in-a-flow",children:"Use an agent in a flow"}),"\n",(0,r.jsxs)(t.p,{children:["The ",(0,r.jsx)(t.a,{href:"/starter-projects-simple-agent",children:"simple agent starter project"})," uses an ",(0,r.jsx)(t.a,{href:"#agent-component",children:"agent component"})," connected to URL and Calculator tools to answer a user's questions. The OpenAI LLM acts as a brain for the agent to decide which tool to use. Tools are connected to agent components at the ",(0,r.jsx)(t.strong,{children:"Tools"})," port."]}),"\n",(0,r.jsx)(t.p,{children:(0,r.jsx)(t.img,{alt:"Simple agent starter flow",src:n(19680).A+"",width:"1732",height:"1748"})}),"\n",(0,r.jsxs)(t.p,{children:["For a multi-agent example see, ",(0,r.jsx)(t.a,{href:"/agents-tool-calling-agent-component",children:"Create a problem-solving agent"}),"."]}),"\n",(0,r.jsx)(t.h2,{id:"agent-component",children:"Agent component"}),"\n",(0,r.jsx)(t.p,{children:"This component creates an agent that can use tools to answer questions and perform tasks based on given instructions."}),"\n",(0,r.jsxs)(t.p,{children:["The component includes an LLM model integration, a system message prompt, and a ",(0,r.jsx)(t.strong,{children:"Tools"})," port to connect tools to extend its capabilities."]}),"\n",(0,r.jsxs)(t.p,{children:["For more information on this component, see the ",(0,r.jsx)(t.a,{href:"/agents-tool-calling-agent-component",children:"tool calling agent documentation"}),"."]}),"\n",(0,r.jsxs)(s,{children:[(0,r.jsx)("summary",{children:"Parameters"}),(0,r.jsx)(t.p,{children:(0,r.jsx)(t.strong,{children:"Inputs"})}),(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:"agent_llm"}),(0,r.jsx)(t.td,{children:"Dropdown"}),(0,r.jsx)(t.td,{children:"The provider of the language model that the agent uses to generate responses. Options include OpenAI and other providers or Custom."})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"system_prompt"}),(0,r.jsx)(t.td,{children:"String"}),(0,r.jsx)(t.td,{children:"The system prompt provides initial instructions and context to guide the agent's behavior."})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"tools"}),(0,r.jsx)(t.td,{children:"List"}),(0,r.jsx)(t.td,{children:"The list of tools available for the agent to use."})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"input_value"}),(0,r.jsx)(t.td,{children:"String"}),(0,r.jsx)(t.td,{children:"The input task or question for the agent to process."})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"add_current_date_tool"}),(0,r.jsx)(t.td,{children:"Boolean"}),(0,r.jsx)(t.td,{children:"When true this adds a tool to the agent that returns the current date."})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"memory"}),(0,r.jsx)(t.td,{children:"Memory"}),(0,r.jsx)(t.td,{children:"An optional memory configuration for maintaining conversation history."})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"max_iterations"}),(0,r.jsx)(t.td,{children:"Integer"}),(0,r.jsx)(t.td,{children:"The maximum number of iterations the agent can perform."})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"handle_parsing_errors"}),(0,r.jsx)(t.td,{children:"Boolean"}),(0,r.jsx)(t.td,{children:"This determines whether to handle parsing errors during agent execution."})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"verbose"}),(0,r.jsx)(t.td,{children:"Boolean"}),(0,r.jsx)(t.td,{children:"This enables verbose output for detailed logging."})]})]})]}),(0,r.jsx)(t.p,{children:(0,r.jsx)(t.strong,{children:"Outputs"})}),(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.jsx)(t.tbody,{children:(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"response"}),(0,r.jsx)(t.td,{children:"Message"}),(0,r.jsx)(t.td,{children:"The agent's response to the given input task."})]})})]})]}),"\n",(0,r.jsx)(t.h2,{id:"legacy-components",children:"Legacy components"}),"\n",(0,r.jsxs)(t.p,{children:[(0,r.jsx)(t.strong,{children:"Legacy"})," components are available for use but are no longer supported."]}),"\n",(0,r.jsx)(t.h3,{id:"json-agent",children:"JSON Agent"}),"\n",(0,r.jsx)(t.p,{children:"This component creates a JSON agent from a JSON or YAML file and an LLM."}),"\n",(0,r.jsxs)(s,{children:[(0,r.jsx)("summary",{children:"Parameters"}),(0,r.jsx)(t.p,{children:(0,r.jsx)(t.strong,{children:"Inputs"})}),(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:"llm"}),(0,r.jsx)(t.td,{children:"LanguageModel"}),(0,r.jsx)(t.td,{children:"The language model to use for the agent."})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"path"}),(0,r.jsx)(t.td,{children:"File"}),(0,r.jsx)(t.td,{children:"The path to the JSON or YAML file."})]})]})]}),(0,r.jsx)(t.p,{children:(0,r.jsx)(t.strong,{children:"Outputs"})}),(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.jsx)(t.tbody,{children:(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"agent"}),(0,r.jsx)(t.td,{children:"AgentExecutor"}),(0,r.jsx)(t.td,{children:"The JSON agent instance."})]})})]})]}),"\n",(0,r.jsx)(t.h3,{id:"vector-store-agent",children:"Vector Store Agent"}),"\n",(0,r.jsx)(t.p,{children:"This component creates a Vector Store Agent using LangChain."}),"\n",(0,r.jsxs)(s,{children:[(0,r.jsx)("summary",{children:"Parameters"}),(0,r.jsx)(t.p,{children:(0,r.jsx)(t.strong,{children:"Inputs"})}),(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:"llm"}),(0,r.jsx)(t.td,{children:"LanguageModel"}),(0,r.jsx)(t.td,{children:"The language model to use for the agent."})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"vectorstore"}),(0,r.jsx)(t.td,{children:"VectorStoreInfo"}),(0,r.jsx)(t.td,{children:"The vector store information for the agent to use."})]})]})]}),(0,r.jsx)(t.p,{children:(0,r.jsx)(t.strong,{children:"Outputs"})}),(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.jsx)(t.tbody,{children:(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"agent"}),(0,r.jsx)(t.td,{children:"AgentExecutor"}),(0,r.jsx)(t.td,{children:"The Vector Store Agent instance."})]})})]})]}),"\n",(0,r.jsx)(t.h3,{id:"vector-store-router-agent",children:"Vector Store Router Agent"}),"\n",(0,r.jsx)(t.p,{children:"This component creates a Vector Store Router Agent using LangChain."}),"\n",(0,r.jsxs)(s,{children:[(0,r.jsx)("summary",{children:"Parameters"}),(0,r.jsx)(t.p,{children:(0,r.jsx)(t.strong,{children:"Inputs"})}),(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:"llm"}),(0,r.jsx)(t.td,{children:"LanguageModel"}),(0,r.jsx)(t.td,{children:"The language model to use for the agent."})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"vectorstores"}),(0,r.jsx)(t.td,{children:"List[VectorStoreInfo]"}),(0,r.jsx)(t.td,{children:"The list of vector store information for the agent to route between."})]})]})]}),(0,r.jsx)(t.p,{children:(0,r.jsx)(t.strong,{children:"Outputs"})}),(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.jsx)(t.tbody,{children:(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"agent"}),(0,r.jsx)(t.td,{children:"AgentExecutor"}),(0,r.jsx)(t.td,{children:"The Vector Store Router Agent instance."})]})})]})]}),"\n",(0,r.jsx)(t.h2,{id:"moved-components",children:"Moved components"}),"\n",(0,r.jsxs)(t.p,{children:["The following components are available under ",(0,r.jsx)(t.strong,{children:"Bundles"}),"."]}),"\n",(0,r.jsx)(t.h3,{id:"crewai-agent",children:"CrewAI Agent"}),"\n",(0,r.jsx)(t.p,{children:"This component represents an Agent of CrewAI allowing for the creation of specialized AI agents with defined roles goals and capabilities within a crew."}),"\n",(0,r.jsxs)(t.p,{children:["For more information, see the ",(0,r.jsx)(t.a,{href:"https://docs.crewai.com/core-concepts/Agents/",children:"CrewAI documentation"}),"."]}),"\n",(0,r.jsxs)(s,{children:[(0,r.jsx)("summary",{children:"Parameters"}),(0,r.jsx)(t.p,{children:(0,r.jsx)(t.strong,{children:"Inputs"})}),(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:"role"}),(0,r.jsx)(t.td,{children:"Role"}),(0,r.jsx)(t.td,{children:"The role of the agent."})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"goal"}),(0,r.jsx)(t.td,{children:"Goal"}),(0,r.jsx)(t.td,{children:"The objective of the agent."})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"backstory"}),(0,r.jsx)(t.td,{children:"Backstory"}),(0,r.jsx)(t.td,{children:"The backstory of the agent."})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"tools"}),(0,r.jsx)(t.td,{children:"Tools"}),(0,r.jsx)(t.td,{children:"The tools at the agent's disposal."})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"llm"}),(0,r.jsx)(t.td,{children:"Language Model"}),(0,r.jsx)(t.td,{children:"The language model that runs the agent."})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"memory"}),(0,r.jsx)(t.td,{children:"Memory"}),(0,r.jsx)(t.td,{children:"This determines whether the agent should have memory or not."})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"verbose"}),(0,r.jsx)(t.td,{children:"Verbose"}),(0,r.jsx)(t.td,{children:"This enables verbose output."})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"allow_delegation"}),(0,r.jsx)(t.td,{children:"Allow Delegation"}),(0,r.jsx)(t.td,{children:"This determines whether the agent is allowed to delegate tasks to other agents."})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"allow_code_execution"}),(0,r.jsx)(t.td,{children:"Allow Code Execution"}),(0,r.jsx)(t.td,{children:"This determines whether the agent is allowed to execute code."})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"kwargs"}),(0,r.jsx)(t.td,{children:"kwargs"}),(0,r.jsx)(t.td,{children:"Additional keyword arguments for the agent."})]})]})]}),(0,r.jsx)(t.p,{children:(0,r.jsx)(t.strong,{children:"Outputs"})}),(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.jsx)(t.tbody,{children:(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"output"}),(0,r.jsx)(t.td,{children:"Agent"}),(0,r.jsx)(t.td,{children:"The constructed CrewAI Agent object."})]})})]})]}),"\n",(0,r.jsx)(t.h3,{id:"hierarchical-crew",children:"Hierarchical Crew"}),"\n",(0,r.jsx)(t.p,{children:"This component represents a group of agents managing how they should collaborate and the tasks they should perform in a hierarchical structure. This component allows for the creation of a crew with a manager overseeing the task execution."}),"\n",(0,r.jsxs)(t.p,{children:["For more information, see the ",(0,r.jsx)(t.a,{href:"https://docs.crewai.com/how-to/Hierarchical/",children:"CrewAI documentation"}),"."]}),"\n",(0,r.jsxs)(s,{children:[(0,r.jsx)("summary",{children:"Parameters"}),(0,r.jsx)(t.p,{children:(0,r.jsx)(t.strong,{children:"Inputs"})}),(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:"agents"}),(0,r.jsx)(t.td,{children:"Agents"}),(0,r.jsx)(t.td,{children:"The list of Agent objects representing the crew members."})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"tasks"}),(0,r.jsx)(t.td,{children:"Tasks"}),(0,r.jsx)(t.td,{children:"The list of HierarchicalTask objects representing the tasks to be executed."})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"manager_llm"}),(0,r.jsx)(t.td,{children:"Manager LLM"}),(0,r.jsx)(t.td,{children:"The language model for the manager agent."})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"manager_agent"}),(0,r.jsx)(t.td,{children:"Manager Agent"}),(0,r.jsx)(t.td,{children:"The specific agent to act as the manager."})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"verbose"}),(0,r.jsx)(t.td,{children:"Verbose"}),(0,r.jsx)(t.td,{children:"This enables verbose output for detailed logging."})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"memory"}),(0,r.jsx)(t.td,{children:"Memory"}),(0,r.jsx)(t.td,{children:"The memory configuration for the crew."})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"use_cache"}),(0,r.jsx)(t.td,{children:"Use Cache"}),(0,r.jsx)(t.td,{children:"This enables caching of results."})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"max_rpm"}),(0,r.jsx)(t.td,{children:"Max RPM"}),(0,r.jsx)(t.td,{children:"This sets the maximum requests per minute."})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"share_crew"}),(0,r.jsx)(t.td,{children:"Share Crew"}),(0,r.jsx)(t.td,{children:"This determines if the crew information is shared among agents."})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"function_calling_llm"}),(0,r.jsx)(t.td,{children:"Function Calling LLM"}),(0,r.jsx)(t.td,{children:"The language model for function calling."})]})]})]}),(0,r.jsx)(t.p,{children:(0,r.jsx)(t.strong,{children:"Outputs"})}),(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.jsx)(t.tbody,{children:(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"crew"}),(0,r.jsx)(t.td,{children:"Crew"}),(0,r.jsx)(t.td,{children:"The constructed Crew object with hierarchical task execution."})]})})]})]}),"\n",(0,r.jsx)(t.h3,{id:"csv-agent",children:"CSV Agent"}),"\n",(0,r.jsx)(t.p,{children:"This component creates a CSV agent from a CSV file and LLM."}),"\n",(0,r.jsxs)(s,{children:[(0,r.jsx)("summary",{children:"Parameters"}),(0,r.jsx)(t.p,{children:(0,r.jsx)(t.strong,{children:"Inputs"})}),(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:"llm"}),(0,r.jsx)(t.td,{children:"LanguageModel"}),(0,r.jsx)(t.td,{children:"The language model to use for the agent."})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"path"}),(0,r.jsx)(t.td,{children:"File"}),(0,r.jsx)(t.td,{children:"The path to the CSV file."})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"agent_type"}),(0,r.jsx)(t.td,{children:"String"}),(0,r.jsx)(t.td,{children:"The type of agent to create."})]})]})]}),(0,r.jsx)(t.p,{children:(0,r.jsx)(t.strong,{children:"Outputs"})}),(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.jsx)(t.tbody,{children:(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"agent"}),(0,r.jsx)(t.td,{children:"AgentExecutor"}),(0,r.jsx)(t.td,{children:"The CSV agent instance."})]})})]})]}),"\n",(0,r.jsx)(t.h3,{id:"openai-tools-agent",children:"OpenAI Tools Agent"}),"\n",(0,r.jsx)(t.p,{children:"This component creates an OpenAI Tools Agent."}),"\n",(0,r.jsxs)(s,{children:[(0,r.jsx)("summary",{children:"Parameters"}),(0,r.jsx)(t.p,{children:(0,r.jsx)(t.strong,{children:"Inputs"})}),(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:"llm"}),(0,r.jsx)(t.td,{children:"LanguageModel"}),(0,r.jsx)(t.td,{children:"The language model to use."})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"tools"}),(0,r.jsx)(t.td,{children:"List of Tools"}),(0,r.jsx)(t.td,{children:"The tools to give the agent access to."})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"system_prompt"}),(0,r.jsx)(t.td,{children:"String"}),(0,r.jsx)(t.td,{children:"The system prompt to provide context to the agent."})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"input_value"}),(0,r.jsx)(t.td,{children:"String"}),(0,r.jsx)(t.td,{children:"The user's input to the agent."})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"memory"}),(0,r.jsx)(t.td,{children:"Memory"}),(0,r.jsx)(t.td,{children:"The memory for the agent to use for context persistence."})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"max_iterations"}),(0,r.jsx)(t.td,{children:"Integer"}),(0,r.jsx)(t.td,{children:"The maximum number of iterations to allow the agent to execute."})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"verbose"}),(0,r.jsx)(t.td,{children:"Boolean"}),(0,r.jsx)(t.td,{children:"This determines whether to print out the agent's intermediate steps."})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"handle_parsing_errors"}),(0,r.jsx)(t.td,{children:"Boolean"}),(0,r.jsx)(t.td,{children:"This determines whether to handle parsing errors in the agent."})]})]})]}),(0,r.jsx)(t.p,{children:(0,r.jsx)(t.strong,{children:"Outputs"})}),(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:"agent"}),(0,r.jsx)(t.td,{children:"AgentExecutor"}),(0,r.jsx)(t.td,{children:"The OpenAI Tools agent instance."})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"output"}),(0,r.jsx)(t.td,{children:"String"}),(0,r.jsx)(t.td,{children:"The output from executing the agent on the input."})]})]})]})]}),"\n",(0,r.jsx)(t.h3,{id:"openapi-agent",children:"OpenAPI Agent"}),"\n",(0,r.jsx)(t.p,{children:"This component creates an agent for interacting with OpenAPI services."}),"\n",(0,r.jsxs)(s,{children:[(0,r.jsx)("summary",{children:"Parameters"}),(0,r.jsx)(t.p,{children:(0,r.jsx)(t.strong,{children:"Inputs"})}),(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:"llm"}),(0,r.jsx)(t.td,{children:"LanguageModel"}),(0,r.jsx)(t.td,{children:"The language model to use."})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"openapi_spec"}),(0,r.jsx)(t.td,{children:"String"}),(0,r.jsx)(t.td,{children:"The OpenAPI specification for the service."})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"base_url"}),(0,r.jsx)(t.td,{children:"String"}),(0,r.jsx)(t.td,{children:"The base URL for the API."})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"headers"}),(0,r.jsx)(t.td,{children:"Dict"}),(0,r.jsx)(t.td,{children:"The optional headers for API requests."})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"agent_executor_kwargs"}),(0,r.jsx)(t.td,{children:"Dict"}),(0,r.jsx)(t.td,{children:"The optional parameters for the agent executor."})]})]})]}),(0,r.jsx)(t.p,{children:(0,r.jsx)(t.strong,{children:"Outputs"})}),(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.jsx)(t.tbody,{children:(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"agent"}),(0,r.jsx)(t.td,{children:"AgentExecutor"}),(0,r.jsx)(t.td,{children:"The OpenAPI agent instance."})]})})]})]}),"\n",(0,r.jsx)(t.h3,{id:"sequential-crew",children:"Sequential Crew"}),"\n",(0,r.jsx)(t.p,{children:"This component represents a group of agents with tasks that are executed sequentially. This component allows for the creation of a crew that performs tasks in a specific order."}),"\n",(0,r.jsxs)(t.p,{children:["For more information, see the ",(0,r.jsx)(t.a,{href:"https://docs.crewai.com/how-to/Sequential/",children:"CrewAI documentation"}),"."]}),"\n",(0,r.jsxs)(s,{children:[(0,r.jsx)("summary",{children:"Parameters"}),(0,r.jsx)(t.p,{children:(0,r.jsx)(t.strong,{children:"Inputs"})}),(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:"tasks"}),(0,r.jsx)(t.td,{children:"Tasks"}),(0,r.jsx)(t.td,{children:"The list of SequentialTask objects representing the tasks to be executed."})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"verbose"}),(0,r.jsx)(t.td,{children:"Verbose"}),(0,r.jsx)(t.td,{children:"This enables verbose output for detailed logging."})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"memory"}),(0,r.jsx)(t.td,{children:"Memory"}),(0,r.jsx)(t.td,{children:"The memory configuration for the crew."})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"use_cache"}),(0,r.jsx)(t.td,{children:"Use Cache"}),(0,r.jsx)(t.td,{children:"This enables caching of results."})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"max_rpm"}),(0,r.jsx)(t.td,{children:"Max RPM"}),(0,r.jsx)(t.td,{children:"This sets the maximum requests per minute."})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"share_crew"}),(0,r.jsx)(t.td,{children:"Share Crew"}),(0,r.jsx)(t.td,{children:"This determines if the crew information is shared among agents."})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"function_calling_llm"}),(0,r.jsx)(t.td,{children:"Function Calling LLM"}),(0,r.jsx)(t.td,{children:"The language model for function calling."})]})]})]}),(0,r.jsx)(t.p,{children:(0,r.jsx)(t.strong,{children:"Outputs"})}),(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.jsx)(t.tbody,{children:(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"crew"}),(0,r.jsx)(t.td,{children:"Crew"}),(0,r.jsx)(t.td,{children:"The constructed Crew object with sequential task execution."})]})})]})]}),"\n",(0,r.jsx)(t.h3,{id:"sequential-task-agent",children:"Sequential task agent"}),"\n",(0,r.jsx)(t.p,{children:"This component creates a CrewAI Task and its associated Agent allowing for the definition of sequential tasks with specific agent roles and capabilities."}),"\n",(0,r.jsxs)(t.p,{children:["For more information, see the ",(0,r.jsx)(t.a,{href:"https://docs.crewai.com/how-to/Sequential/",children:"CrewAI documentation"}),"."]}),"\n",(0,r.jsxs)(s,{children:[(0,r.jsx)("summary",{children:"Parameters"}),(0,r.jsx)(t.p,{children:(0,r.jsx)(t.strong,{children:"Inputs"})}),(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:"role"}),(0,r.jsx)(t.td,{children:"Role"}),(0,r.jsx)(t.td,{children:"The role of the agent."})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"goal"}),(0,r.jsx)(t.td,{children:"Goal"}),(0,r.jsx)(t.td,{children:"The objective of the agent."})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"backstory"}),(0,r.jsx)(t.td,{children:"Backstory"}),(0,r.jsx)(t.td,{children:"The backstory of the agent."})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"tools"}),(0,r.jsx)(t.td,{children:"Tools"}),(0,r.jsx)(t.td,{children:"The tools at the agent's disposal."})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"llm"}),(0,r.jsx)(t.td,{children:"Language Model"}),(0,r.jsx)(t.td,{children:"The language model that runs the agent."})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"memory"}),(0,r.jsx)(t.td,{children:"Memory"}),(0,r.jsx)(t.td,{children:"This determines whether the agent should have memory or not."})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"verbose"}),(0,r.jsx)(t.td,{children:"Verbose"}),(0,r.jsx)(t.td,{children:"This enables verbose output."})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"allow_delegation"}),(0,r.jsx)(t.td,{children:"Allow Delegation"}),(0,r.jsx)(t.td,{children:"This determines whether the agent is allowed to delegate tasks to other agents."})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"allow_code_execution"}),(0,r.jsx)(t.td,{children:"Allow Code Execution"}),(0,r.jsx)(t.td,{children:"This determines whether the agent is allowed to execute code."})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"agent_kwargs"}),(0,r.jsx)(t.td,{children:"Agent kwargs"}),(0,r.jsx)(t.td,{children:"The additional kwargs for the agent."})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"task_description"}),(0,r.jsx)(t.td,{children:"Task Description"}),(0,r.jsx)(t.td,{children:"The descriptive text detailing the task's purpose and execution."})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"expected_output"}),(0,r.jsx)(t.td,{children:"Expected Task Output"}),(0,r.jsx)(t.td,{children:"The clear definition of the expected task outcome."})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"async_execution"}),(0,r.jsx)(t.td,{children:"Async Execution"}),(0,r.jsx)(t.td,{children:"The boolean flag indicating asynchronous task execution."})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"previous_task"}),(0,r.jsx)(t.td,{children:"Previous Task"}),(0,r.jsx)(t.td,{children:"The previous task in the sequence for chaining."})]})]})]}),(0,r.jsx)(t.p,{children:(0,r.jsx)(t.strong,{children:"Outputs"})}),(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.jsx)(t.tbody,{children:(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"task_output"}),(0,r.jsx)(t.td,{children:"Sequential Task"}),(0,r.jsx)(t.td,{children:"The list of SequentialTask objects representing the created tasks."})]})})]})]}),"\n",(0,r.jsx)(t.h3,{id:"sql-agent",children:"SQL Agent"}),"\n",(0,r.jsx)(t.p,{children:"This component creates an agent for interacting with SQL databases."}),"\n",(0,r.jsxs)(s,{children:[(0,r.jsx)("summary",{children:"Parameters"}),(0,r.jsx)(t.p,{children:(0,r.jsx)(t.strong,{children:"Inputs"})}),(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:"llm"}),(0,r.jsx)(t.td,{children:"LanguageModel"}),(0,r.jsx)(t.td,{children:"The language model to use."})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"database"}),(0,r.jsx)(t.td,{children:"Database"}),(0,r.jsx)(t.td,{children:"The SQL database connection."})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"top_k"}),(0,r.jsx)(t.td,{children:"Integer"}),(0,r.jsx)(t.td,{children:"The number of results to return from a SELECT query."})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"use_tools"}),(0,r.jsx)(t.td,{children:"Boolean"}),(0,r.jsx)(t.td,{children:"This determines whether to use tools for query execution."})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"return_intermediate_steps"}),(0,r.jsx)(t.td,{children:"Boolean"}),(0,r.jsx)(t.td,{children:"This determines whether to return the agent's intermediate steps."})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"max_iterations"}),(0,r.jsx)(t.td,{children:"Integer"}),(0,r.jsx)(t.td,{children:"The maximum number of iterations to run the agent."})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"max_execution_time"}),(0,r.jsx)(t.td,{children:"Integer"}),(0,r.jsx)(t.td,{children:"The maximum execution time in seconds."})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"early_stopping_method"}),(0,r.jsx)(t.td,{children:"String"}),(0,r.jsx)(t.td,{children:"The method to use for early stopping."})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"verbose"}),(0,r.jsx)(t.td,{children:"Boolean"}),(0,r.jsx)(t.td,{children:"This determines whether to print the agent's thoughts."})]})]})]}),(0,r.jsx)(t.p,{children:(0,r.jsx)(t.strong,{children:"Outputs"})}),(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.jsx)(t.tbody,{children:(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"agent"}),(0,r.jsx)(t.td,{children:"AgentExecutor"}),(0,r.jsx)(t.td,{children:"The SQL agent instance."})]})})]})]}),"\n",(0,r.jsx)(t.h3,{id:"tool-calling-agent",children:"Tool Calling Agent"}),"\n",(0,r.jsx)(t.p,{children:"This component creates an agent for structured tool calling with various language models."}),"\n",(0,r.jsxs)(s,{children:[(0,r.jsx)("summary",{children:"Parameters"}),(0,r.jsx)(t.p,{children:(0,r.jsx)(t.strong,{children:"Inputs"})}),(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:"llm"}),(0,r.jsx)(t.td,{children:"LanguageModel"}),(0,r.jsx)(t.td,{children:"The language model to use."})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"tools"}),(0,r.jsx)(t.td,{children:"List[Tool]"}),(0,r.jsx)(t.td,{children:"The list of tools available to the agent."})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"system_message"}),(0,r.jsx)(t.td,{children:"String"}),(0,r.jsx)(t.td,{children:"The system message to use for the agent."})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"return_intermediate_steps"}),(0,r.jsx)(t.td,{children:"Boolean"}),(0,r.jsx)(t.td,{children:"This determines whether to return the agent's intermediate steps."})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"max_iterations"}),(0,r.jsx)(t.td,{children:"Integer"}),(0,r.jsx)(t.td,{children:"The maximum number of iterations to run the agent."})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"max_execution_time"}),(0,r.jsx)(t.td,{children:"Integer"}),(0,r.jsx)(t.td,{children:"The maximum execution time in seconds."})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"early_stopping_method"}),(0,r.jsx)(t.td,{children:"String"}),(0,r.jsx)(t.td,{children:"The method to use for early stopping."})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"verbose"}),(0,r.jsx)(t.td,{children:"Boolean"}),(0,r.jsx)(t.td,{children:"This determines whether to print the agent's thoughts."})]})]})]}),(0,r.jsx)(t.p,{children:(0,r.jsx)(t.strong,{children:"Outputs"})}),(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.jsx)(t.tbody,{children:(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"agent"}),(0,r.jsx)(t.td,{children:"AgentExecutor"}),(0,r.jsx)(t.td,{children:"The tool calling agent instance."})]})})]})]}),"\n",(0,r.jsx)(t.h3,{id:"xml-agent",children:"XML Agent"}),"\n",(0,r.jsx)(t.p,{children:"This component creates an XML Agent using LangChain."}),"\n",(0,r.jsx)(t.p,{children:"The agent uses XML formatting for tool instructions to the Language Model."}),"\n",(0,r.jsxs)(s,{children:[(0,r.jsx)("summary",{children:"Parameters"}),(0,r.jsx)(t.p,{children:(0,r.jsx)(t.strong,{children:"Inputs"})}),(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:"llm"}),(0,r.jsx)(t.td,{children:"LanguageModel"}),(0,r.jsx)(t.td,{children:"The language model to use for the agent."})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"user_prompt"}),(0,r.jsx)(t.td,{children:"String"}),(0,r.jsx)(t.td,{children:"The custom prompt template for the agent with XML formatting instructions."})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"tools"}),(0,r.jsx)(t.td,{children:"List[Tool]"}),(0,r.jsx)(t.td,{children:"The list of tools available to the agent."})]})]})]}),(0,r.jsx)(t.p,{children:(0,r.jsx)(t.strong,{children:"Outputs"})}),(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.jsx)(t.tbody,{children:(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"agent"}),(0,r.jsx)(t.td,{children:"AgentExecutor"}),(0,r.jsx)(t.td,{children:"The XML Agent instance."})]})})]})]})]})}function a(e={}){const{wrapper:t}={...(0,d.R)(),...e.components};return t?(0,r.jsx)(t,{...e,children:(0,r.jsx)(o,{...e})}):o(e)}}}]); \ No newline at end of file diff --git a/assets/js/ae68aa8b.9d9ff467.js b/assets/js/ae68aa8b.9d9ff467.js deleted file mode 100644 index c41aeca0d4..0000000000 --- a/assets/js/ae68aa8b.9d9ff467.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunklangflow_docs=self.webpackChunklangflow_docs||[]).push([[8927],{19680:(e,t,n)=>{n.d(t,{A:()=>s});const s=n.p+"assets/images/starter-flow-simple-agent-71d0dec218a5da8e3110c51716f1c91e.png"},28453:(e,t,n)=>{n.d(t,{R:()=>d,x:()=>l});var s=n(96540);const r={},i=s.createContext(r);function d(e){const t=s.useContext(i);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(r):e.components||r:d(e.components),s.createElement(i.Provider,{value:t},e.children)}},57819:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>h,contentTitle:()=>l,default:()=>a,frontMatter:()=>d,metadata:()=>s,toc:()=>c});const s=JSON.parse('{"id":"Components/components-agents","title":"Agents","description":"Agent components define the behavior and capabilities of AI agents in your flow.","source":"@site/docs/Components/components-agents.md","sourceDirName":"Components","slug":"/components-agents","permalink":"/components-agents","draft":false,"unlisted":false,"tags":[],"version":"current","frontMatter":{"title":"Agents","slug":"/components-agents"},"sidebar":"docs","previous":{"title":"Voice mode","permalink":"/concepts-voice-mode"},"next":{"title":"Bundles","permalink":"/components-bundle-components"}}');var r=n(74848),i=n(28453);const d={title:"Agents",slug:"/components-agents"},l="Agent components in Langflow",h={},c=[{value:"Use an agent in a flow",id:"use-an-agent-in-a-flow",level:2},{value:"Agent component",id:"agent-component",level:2},{value:"Inputs",id:"inputs",level:3},{value:"Outputs",id:"outputs",level:3},{value:"CSV Agent",id:"csv-agent",level:2},{value:"Inputs",id:"inputs-1",level:3},{value:"Outputs",id:"outputs-1",level:3},{value:"CrewAI Agent",id:"crewai-agent",level:2},{value:"Inputs",id:"inputs-2",level:3},{value:"Outputs",id:"outputs-2",level:3},{value:"Hierarchical Crew",id:"hierarchical-crew",level:2},{value:"Inputs",id:"inputs-3",level:3},{value:"Outputs",id:"outputs-3",level:3},{value:"JSON Agent",id:"json-agent",level:2},{value:"Inputs",id:"inputs-4",level:3},{value:"Outputs",id:"outputs-4",level:3},{value:"OpenAI Tools Agent",id:"openai-tools-agent",level:2},{value:"Inputs",id:"inputs-5",level:3},{value:"Outputs",id:"outputs-5",level:3},{value:"OpenAPI Agent",id:"openapi-agent",level:2},{value:"Inputs",id:"inputs-6",level:3},{value:"Outputs",id:"outputs-6",level:3},{value:"SQL Agent",id:"sql-agent",level:2},{value:"Inputs",id:"inputs-7",level:3},{value:"Outputs",id:"outputs-7",level:3},{value:"Sequential Crew",id:"sequential-crew",level:2},{value:"Inputs",id:"inputs-8",level:3},{value:"Outputs",id:"outputs-8",level:3},{value:"Sequential task agent",id:"sequential-task-agent",level:2},{value:"Inputs",id:"inputs-9",level:3},{value:"Outputs",id:"outputs-9",level:3},{value:"Tool Calling Agent",id:"tool-calling-agent",level:2},{value:"Inputs",id:"inputs-10",level:3},{value:"Outputs",id:"outputs-10",level:3},{value:"Vector Store Agent",id:"vector-store-agent",level:2},{value:"Inputs",id:"inputs-11",level:3},{value:"Outputs",id:"outputs-11",level:3},{value:"Vector Store Router Agent",id:"vector-store-router-agent",level:2},{value:"Inputs",id:"inputs-12",level:3},{value:"Outputs",id:"outputs-12",level:3},{value:"XML Agent",id:"xml-agent",level:2},{value:"Inputs",id:"inputs-13",level:3},{value:"Outputs",id:"outputs-13",level:3}];function o(e){const t={a:"a",code:"code",h1:"h1",h2:"h2",h3:"h3",header:"header",img:"img",p:"p",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",...(0,i.R)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(t.header,{children:(0,r.jsx)(t.h1,{id:"agent-components-in-langflow",children:"Agent components in Langflow"})}),"\n",(0,r.jsx)(t.p,{children:"Agent components define the behavior and capabilities of AI agents in your flow."}),"\n",(0,r.jsx)(t.p,{children:"Agents use LLMs as a reasoning engine to decide which of the connected tool components to use to solve a problem."}),"\n",(0,r.jsxs)(t.p,{children:["Tools in agentic functions are, essentially, functions that the agent can call to perform tasks or access external resources.\nA function is wrapped as a ",(0,r.jsx)(t.code,{children:"Tool"})," object, with a common interface the agent understands.\nAgents become aware of tools through tool registration, where the agent is provided a list of available tools, typically at agent initialization. The ",(0,r.jsx)(t.code,{children:"Tool"})," object's description tells the agent what the tool can do."]}),"\n",(0,r.jsx)(t.p,{children:"The agent then uses a connected LLM to reason through the problem to decide which tool is best for the job."}),"\n",(0,r.jsx)(t.h2,{id:"use-an-agent-in-a-flow",children:"Use an agent in a flow"}),"\n",(0,r.jsxs)(t.p,{children:["The ",(0,r.jsx)(t.a,{href:"/starter-projects-simple-agent",children:"simple agent starter project"})," uses an ",(0,r.jsx)(t.a,{href:"#agent-component",children:"agent component"})," connected to URL and Calculator tools to answer a user's questions. The OpenAI LLM acts as a brain for the agent to decide which tool to use. Tools are connected to agent components at the ",(0,r.jsx)(t.strong,{children:"Tools"})," port."]}),"\n",(0,r.jsx)(t.p,{children:(0,r.jsx)(t.img,{alt:"Simple agent starter flow",src:n(19680).A+"",width:"1732",height:"1748"})}),"\n",(0,r.jsxs)(t.p,{children:["For a multi-agent example, see ",(0,r.jsx)(t.a,{href:"/agents-tool-calling-agent-component",children:"Create a problem-solving agent"}),"."]}),"\n",(0,r.jsx)(t.h2,{id:"agent-component",children:"Agent component"}),"\n",(0,r.jsx)(t.p,{children:"This component creates an agent that can use tools to answer questions and perform tasks based on given instructions."}),"\n",(0,r.jsxs)(t.p,{children:["The component includes an LLM model integration, a system message prompt, and a ",(0,r.jsx)(t.strong,{children:"Tools"})," port to connect tools to extend its capabilities."]}),"\n",(0,r.jsxs)(t.p,{children:["For more information on this component, see the ",(0,r.jsx)(t.a,{href:"/agents-tool-calling-agent-component",children:"tool calling agent documentation"}),"."]}),"\n",(0,r.jsx)(t.h3,{id:"inputs",children:"Inputs"}),"\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:"agent_llm"}),(0,r.jsx)(t.td,{children:"Dropdown"}),(0,r.jsx)(t.td,{children:"The provider of the language model that the agent will use to generate responses. Options include OpenAI and other providers, or Custom."})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"system_prompt"}),(0,r.jsx)(t.td,{children:"String"}),(0,r.jsx)(t.td,{children:"System Prompt: Initial instructions and context provided to guide the agent's behavior."})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"tools"}),(0,r.jsx)(t.td,{children:"List"}),(0,r.jsx)(t.td,{children:"List of tools available for the agent to use."})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"input_value"}),(0,r.jsx)(t.td,{children:"String"}),(0,r.jsx)(t.td,{children:"The input task or question for the agent to process."})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"add_current_date_tool"}),(0,r.jsx)(t.td,{children:"Boolean"}),(0,r.jsx)(t.td,{children:"If true, adds a tool to the agent that returns the current date."})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"memory"}),(0,r.jsx)(t.td,{children:"Memory"}),(0,r.jsx)(t.td,{children:"Optional memory configuration for maintaining conversation history."})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"max_iterations"}),(0,r.jsx)(t.td,{children:"Integer"}),(0,r.jsx)(t.td,{children:"Maximum number of iterations the agent can perform."})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"handle_parsing_errors"}),(0,r.jsx)(t.td,{children:"Boolean"}),(0,r.jsx)(t.td,{children:"Whether to handle parsing errors during agent execution."})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"verbose"}),(0,r.jsx)(t.td,{children:"Boolean"}),(0,r.jsx)(t.td,{children:"Enables verbose output for detailed logging."})]})]})]}),"\n",(0,r.jsx)(t.h3,{id:"outputs",children:"Outputs"}),"\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.jsx)(t.tbody,{children:(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"response"}),(0,r.jsx)(t.td,{children:"Message"}),(0,r.jsx)(t.td,{children:"The agent's response to the given input task."})]})})]}),"\n",(0,r.jsx)(t.h2,{id:"csv-agent",children:"CSV Agent"}),"\n",(0,r.jsx)(t.p,{children:"This component creates a CSV agent from a CSV file and LLM."}),"\n",(0,r.jsx)(t.h3,{id:"inputs-1",children:"Inputs"}),"\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:"llm"}),(0,r.jsx)(t.td,{children:"LanguageModel"}),(0,r.jsx)(t.td,{children:"Language model to use for the agent"})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"path"}),(0,r.jsx)(t.td,{children:"File"}),(0,r.jsx)(t.td,{children:"Path to the CSV file"})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"agent_type"}),(0,r.jsx)(t.td,{children:"String"}),(0,r.jsx)(t.td,{children:"Type of agent to create (zero-shot-react-description, openai-functions, or openai-tools)"})]})]})]}),"\n",(0,r.jsx)(t.h3,{id:"outputs-1",children:"Outputs"}),"\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.jsx)(t.tbody,{children:(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"agent"}),(0,r.jsx)(t.td,{children:"AgentExecutor"}),(0,r.jsx)(t.td,{children:"CSV agent instance"})]})})]}),"\n",(0,r.jsx)(t.h2,{id:"crewai-agent",children:"CrewAI Agent"}),"\n",(0,r.jsx)(t.p,{children:"This component represents an Agent of CrewAI, allowing for the creation of specialized AI agents with defined roles, goals, and capabilities within a crew."}),"\n",(0,r.jsxs)(t.p,{children:["For more information, see the ",(0,r.jsx)(t.a,{href:"https://docs.crewai.com/core-concepts/Agents/",children:"CrewAI documentation"}),"."]}),"\n",(0,r.jsx)(t.h3,{id:"inputs-2",children:"Inputs"}),"\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:"role"}),(0,r.jsx)(t.td,{children:"Role"}),(0,r.jsx)(t.td,{children:"The role of the agent"})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"goal"}),(0,r.jsx)(t.td,{children:"Goal"}),(0,r.jsx)(t.td,{children:"The objective of the agent"})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"backstory"}),(0,r.jsx)(t.td,{children:"Backstory"}),(0,r.jsx)(t.td,{children:"The backstory of the agent"})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"tools"}),(0,r.jsx)(t.td,{children:"Tools"}),(0,r.jsx)(t.td,{children:"Tools at agent's disposal"})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"llm"}),(0,r.jsx)(t.td,{children:"Language Model"}),(0,r.jsx)(t.td,{children:"Language model that will run the agent"})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"memory"}),(0,r.jsx)(t.td,{children:"Memory"}),(0,r.jsx)(t.td,{children:"Whether the agent should have memory or not"})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"verbose"}),(0,r.jsx)(t.td,{children:"Verbose"}),(0,r.jsx)(t.td,{children:"Enables verbose output"})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"allow_delegation"}),(0,r.jsx)(t.td,{children:"Allow Delegation"}),(0,r.jsx)(t.td,{children:"Whether the agent is allowed to delegate tasks to other agents"})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"allow_code_execution"}),(0,r.jsx)(t.td,{children:"Allow Code Execution"}),(0,r.jsx)(t.td,{children:"Whether the agent is allowed to execute code"})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"kwargs"}),(0,r.jsx)(t.td,{children:"kwargs"}),(0,r.jsx)(t.td,{children:"Additional keyword arguments for the agent"})]})]})]}),"\n",(0,r.jsx)(t.h3,{id:"outputs-2",children:"Outputs"}),"\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.jsx)(t.tbody,{children:(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"output"}),(0,r.jsx)(t.td,{children:"Agent"}),(0,r.jsx)(t.td,{children:"The constructed CrewAI Agent object"})]})})]}),"\n",(0,r.jsx)(t.h2,{id:"hierarchical-crew",children:"Hierarchical Crew"}),"\n",(0,r.jsx)(t.p,{children:"This component represents a group of agents, managing how they should collaborate and the tasks they should perform in a hierarchical structure. This component allows for the creation of a crew with a manager overseeing the task execution."}),"\n",(0,r.jsxs)(t.p,{children:["For more information, see the ",(0,r.jsx)(t.a,{href:"https://docs.crewai.com/how-to/Hierarchical/",children:"CrewAI documentation"}),"."]}),"\n",(0,r.jsx)(t.h3,{id:"inputs-3",children:"Inputs"}),"\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:"agents"}),(0,r.jsx)(t.td,{children:"Agents"}),(0,r.jsx)(t.td,{children:"List of Agent objects representing the crew members"})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"tasks"}),(0,r.jsx)(t.td,{children:"Tasks"}),(0,r.jsx)(t.td,{children:"List of HierarchicalTask objects representing the tasks to be executed"})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"manager_llm"}),(0,r.jsx)(t.td,{children:"Manager LLM"}),(0,r.jsx)(t.td,{children:"Language model for the manager agent (optional)"})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"manager_agent"}),(0,r.jsx)(t.td,{children:"Manager Agent"}),(0,r.jsx)(t.td,{children:"Specific agent to act as the manager (optional)"})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"verbose"}),(0,r.jsx)(t.td,{children:"Verbose"}),(0,r.jsx)(t.td,{children:"Enables verbose output for detailed logging"})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"memory"}),(0,r.jsx)(t.td,{children:"Memory"}),(0,r.jsx)(t.td,{children:"Specifies the memory configuration for the crew"})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"use_cache"}),(0,r.jsx)(t.td,{children:"Use Cache"}),(0,r.jsx)(t.td,{children:"Enables caching of results"})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"max_rpm"}),(0,r.jsx)(t.td,{children:"Max RPM"}),(0,r.jsx)(t.td,{children:"Sets the maximum requests per minute"})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"share_crew"}),(0,r.jsx)(t.td,{children:"Share Crew"}),(0,r.jsx)(t.td,{children:"Determines if the crew information is shared among agents"})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"function_calling_llm"}),(0,r.jsx)(t.td,{children:"Function Calling LLM"}),(0,r.jsx)(t.td,{children:"Specifies the language model for function calling"})]})]})]}),"\n",(0,r.jsx)(t.h3,{id:"outputs-3",children:"Outputs"}),"\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.jsx)(t.tbody,{children:(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"crew"}),(0,r.jsx)(t.td,{children:"Crew"}),(0,r.jsx)(t.td,{children:"The constructed Crew object with hierarchical task execution"})]})})]}),"\n",(0,r.jsx)(t.h2,{id:"json-agent",children:"JSON Agent"}),"\n",(0,r.jsx)(t.p,{children:"This component creates a JSON agent from a JSON or YAML file and an LLM."}),"\n",(0,r.jsx)(t.h3,{id:"inputs-4",children:"Inputs"}),"\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:"llm"}),(0,r.jsx)(t.td,{children:"LanguageModel"}),(0,r.jsx)(t.td,{children:"Language model to use for the agent"})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"path"}),(0,r.jsx)(t.td,{children:"File"}),(0,r.jsx)(t.td,{children:"Path to the JSON or YAML file"})]})]})]}),"\n",(0,r.jsx)(t.h3,{id:"outputs-4",children:"Outputs"}),"\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.jsx)(t.tbody,{children:(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"agent"}),(0,r.jsx)(t.td,{children:"AgentExecutor"}),(0,r.jsx)(t.td,{children:"JSON agent instance"})]})})]}),"\n",(0,r.jsx)(t.h2,{id:"openai-tools-agent",children:"OpenAI Tools Agent"}),"\n",(0,r.jsx)(t.p,{children:"This component creates an OpenAI Tools Agent using LangChain."}),"\n",(0,r.jsxs)(t.p,{children:["For more information, see the ",(0,r.jsx)(t.a,{href:"https://python.langchain.com/v0.1/docs/modules/agents/agent_types/openai_tools/",children:"LangChain documentation"}),"."]}),"\n",(0,r.jsx)(t.h3,{id:"inputs-5",children:"Inputs"}),"\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:"llm"}),(0,r.jsx)(t.td,{children:"LanguageModel"}),(0,r.jsx)(t.td,{children:"Language model to use for the agent (must be tool-enabled)"})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"system_prompt"}),(0,r.jsx)(t.td,{children:"String"}),(0,r.jsx)(t.td,{children:"System prompt for the agent"})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"user_prompt"}),(0,r.jsx)(t.td,{children:"String"}),(0,r.jsx)(t.td,{children:"User prompt template (must contain 'input' key)"})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"chat_history"}),(0,r.jsx)(t.td,{children:"List[Data]"}),(0,r.jsx)(t.td,{children:"Optional chat history for the agent"})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"tools"}),(0,r.jsx)(t.td,{children:"List[Tool]"}),(0,r.jsx)(t.td,{children:"List of tools available to the agent"})]})]})]}),"\n",(0,r.jsx)(t.h3,{id:"outputs-5",children:"Outputs"}),"\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.jsx)(t.tbody,{children:(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"agent"}),(0,r.jsx)(t.td,{children:"AgentExecutor"}),(0,r.jsx)(t.td,{children:"OpenAI Tools Agent instance"})]})})]}),"\n",(0,r.jsx)(t.h2,{id:"openapi-agent",children:"OpenAPI Agent"}),"\n",(0,r.jsx)(t.p,{children:"This component creates an OpenAPI Agent to interact with APIs defined by OpenAPI specifications."}),"\n",(0,r.jsx)(t.p,{children:"For more information, see the LangChain documentation on OpenAPI Agents."}),"\n",(0,r.jsx)(t.h3,{id:"inputs-6",children:"Inputs"}),"\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:"llm"}),(0,r.jsx)(t.td,{children:"LanguageModel"}),(0,r.jsx)(t.td,{children:"Language model to use for the agent"})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"path"}),(0,r.jsx)(t.td,{children:"File"}),(0,r.jsx)(t.td,{children:"Path to the OpenAPI specification file (JSON or YAML)"})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"allow_dangerous_requests"}),(0,r.jsx)(t.td,{children:"Boolean"}),(0,r.jsx)(t.td,{children:"Whether to allow potentially dangerous API requests"})]})]})]}),"\n",(0,r.jsx)(t.h3,{id:"outputs-6",children:"Outputs"}),"\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.jsx)(t.tbody,{children:(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"agent"}),(0,r.jsx)(t.td,{children:"AgentExecutor"}),(0,r.jsx)(t.td,{children:"OpenAPI Agent instance"})]})})]}),"\n",(0,r.jsx)(t.h2,{id:"sql-agent",children:"SQL Agent"}),"\n",(0,r.jsx)(t.p,{children:"This component creates a SQL Agent to interact with SQL databases."}),"\n",(0,r.jsx)(t.h3,{id:"inputs-7",children:"Inputs"}),"\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:"llm"}),(0,r.jsx)(t.td,{children:"LanguageModel"}),(0,r.jsx)(t.td,{children:"Language model to use for the agent"})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"database_uri"}),(0,r.jsx)(t.td,{children:"String"}),(0,r.jsx)(t.td,{children:"URI of the SQL database to connect to"})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"extra_tools"}),(0,r.jsx)(t.td,{children:"List[Tool]"}),(0,r.jsx)(t.td,{children:"Additional tools to provide to the agent (optional)"})]})]})]}),"\n",(0,r.jsx)(t.h3,{id:"outputs-7",children:"Outputs"}),"\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.jsx)(t.tbody,{children:(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"agent"}),(0,r.jsx)(t.td,{children:"AgentExecutor"}),(0,r.jsx)(t.td,{children:"SQL Agent instance"})]})})]}),"\n",(0,r.jsx)(t.h2,{id:"sequential-crew",children:"Sequential Crew"}),"\n",(0,r.jsx)(t.p,{children:"This component represents a group of agents with tasks that are executed sequentially. This component allows for the creation of a crew that performs tasks in a specific order."}),"\n",(0,r.jsxs)(t.p,{children:["For more information, see the ",(0,r.jsx)(t.a,{href:"https://docs.crewai.com/how-to/Sequential/",children:"CrewAI documentation"}),"."]}),"\n",(0,r.jsx)(t.h3,{id:"inputs-8",children:"Inputs"}),"\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:"tasks"}),(0,r.jsx)(t.td,{children:"Tasks"}),(0,r.jsx)(t.td,{children:"List of SequentialTask objects representing the tasks to be executed"})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"verbose"}),(0,r.jsx)(t.td,{children:"Verbose"}),(0,r.jsx)(t.td,{children:"Enables verbose output for detailed logging"})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"memory"}),(0,r.jsx)(t.td,{children:"Memory"}),(0,r.jsx)(t.td,{children:"Specifies the memory configuration for the crew"})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"use_cache"}),(0,r.jsx)(t.td,{children:"Use Cache"}),(0,r.jsx)(t.td,{children:"Enables caching of results"})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"max_rpm"}),(0,r.jsx)(t.td,{children:"Max RPM"}),(0,r.jsx)(t.td,{children:"Sets the maximum requests per minute"})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"share_crew"}),(0,r.jsx)(t.td,{children:"Share Crew"}),(0,r.jsx)(t.td,{children:"Determines if the crew information is shared among agents"})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"function_calling_llm"}),(0,r.jsx)(t.td,{children:"Function Calling LLM"}),(0,r.jsx)(t.td,{children:"Specifies the language model for function calling"})]})]})]}),"\n",(0,r.jsx)(t.h3,{id:"outputs-8",children:"Outputs"}),"\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.jsx)(t.tbody,{children:(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"crew"}),(0,r.jsx)(t.td,{children:"Crew"}),(0,r.jsx)(t.td,{children:"The constructed Crew object with sequential task execution"})]})})]}),"\n",(0,r.jsx)(t.h2,{id:"sequential-task-agent",children:"Sequential task agent"}),"\n",(0,r.jsx)(t.p,{children:"This component creates a CrewAI Task and its associated Agent, allowing for the definition of sequential tasks with specific agent roles and capabilities."}),"\n",(0,r.jsxs)(t.p,{children:["For more information, see the ",(0,r.jsx)(t.a,{href:"https://docs.crewai.com/how-to/Sequential/",children:"CrewAI documentation"}),"."]}),"\n",(0,r.jsx)(t.h3,{id:"inputs-9",children:"Inputs"}),"\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:"role"}),(0,r.jsx)(t.td,{children:"Role"}),(0,r.jsx)(t.td,{children:"The role of the agent"})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"goal"}),(0,r.jsx)(t.td,{children:"Goal"}),(0,r.jsx)(t.td,{children:"The objective of the agent"})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"backstory"}),(0,r.jsx)(t.td,{children:"Backstory"}),(0,r.jsx)(t.td,{children:"The backstory of the agent"})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"tools"}),(0,r.jsx)(t.td,{children:"Tools"}),(0,r.jsx)(t.td,{children:"Tools at agent's disposal"})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"llm"}),(0,r.jsx)(t.td,{children:"Language Model"}),(0,r.jsx)(t.td,{children:"Language model that will run the agent"})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"memory"}),(0,r.jsx)(t.td,{children:"Memory"}),(0,r.jsx)(t.td,{children:"Whether the agent should have memory or not"})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"verbose"}),(0,r.jsx)(t.td,{children:"Verbose"}),(0,r.jsx)(t.td,{children:"Enables verbose output"})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"allow_delegation"}),(0,r.jsx)(t.td,{children:"Allow Delegation"}),(0,r.jsx)(t.td,{children:"Whether the agent is allowed to delegate tasks to other agents"})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"allow_code_execution"}),(0,r.jsx)(t.td,{children:"Allow Code Execution"}),(0,r.jsx)(t.td,{children:"Whether the agent is allowed to execute code"})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"agent_kwargs"}),(0,r.jsx)(t.td,{children:"Agent kwargs"}),(0,r.jsx)(t.td,{children:"Additional kwargs for the agent"})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"task_description"}),(0,r.jsx)(t.td,{children:"Task Description"}),(0,r.jsx)(t.td,{children:"Descriptive text detailing task's purpose and execution"})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"expected_output"}),(0,r.jsx)(t.td,{children:"Expected Task Output"}),(0,r.jsx)(t.td,{children:"Clear definition of expected task outcome"})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"async_execution"}),(0,r.jsx)(t.td,{children:"Async Execution"}),(0,r.jsx)(t.td,{children:"Boolean flag indicating asynchronous task execution"})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"previous_task"}),(0,r.jsx)(t.td,{children:"Previous Task"}),(0,r.jsx)(t.td,{children:"The previous task in the sequence (for chaining)"})]})]})]}),"\n",(0,r.jsx)(t.h3,{id:"outputs-9",children:"Outputs"}),"\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.jsx)(t.tbody,{children:(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"task_output"}),(0,r.jsx)(t.td,{children:"Sequential Task"}),(0,r.jsx)(t.td,{children:"List of SequentialTask objects representing the created tasks"})]})})]}),"\n",(0,r.jsx)(t.h2,{id:"tool-calling-agent",children:"Tool Calling Agent"}),"\n",(0,r.jsx)(t.p,{children:"This component creates a Tool Calling Agent using LangChain."}),"\n",(0,r.jsx)(t.h3,{id:"inputs-10",children:"Inputs"}),"\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:"llm"}),(0,r.jsx)(t.td,{children:"LanguageModel"}),(0,r.jsx)(t.td,{children:"Language model to use for the agent"})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"system_prompt"}),(0,r.jsx)(t.td,{children:"String"}),(0,r.jsx)(t.td,{children:"System prompt for the agent"})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"user_prompt"}),(0,r.jsx)(t.td,{children:"String"}),(0,r.jsx)(t.td,{children:"User prompt template (must contain 'input' key)"})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"chat_history"}),(0,r.jsx)(t.td,{children:"List[Data]"}),(0,r.jsx)(t.td,{children:"Optional chat history for the agent"})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"tools"}),(0,r.jsx)(t.td,{children:"List[Tool]"}),(0,r.jsx)(t.td,{children:"List of tools available to the agent"})]})]})]}),"\n",(0,r.jsx)(t.h3,{id:"outputs-10",children:"Outputs"}),"\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.jsx)(t.tbody,{children:(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"agent"}),(0,r.jsx)(t.td,{children:"AgentExecutor"}),(0,r.jsx)(t.td,{children:"Tool Calling Agent instance"})]})})]}),"\n",(0,r.jsx)(t.h2,{id:"vector-store-agent",children:"Vector Store Agent"}),"\n",(0,r.jsx)(t.p,{children:"This component creates a Vector Store Agent using LangChain."}),"\n",(0,r.jsx)(t.h3,{id:"inputs-11",children:"Inputs"}),"\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:"llm"}),(0,r.jsx)(t.td,{children:"LanguageModel"}),(0,r.jsx)(t.td,{children:"Language model to use for the agent"})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"vectorstore"}),(0,r.jsx)(t.td,{children:"VectorStoreInfo"}),(0,r.jsx)(t.td,{children:"Vector store information for the agent to use"})]})]})]}),"\n",(0,r.jsx)(t.h3,{id:"outputs-11",children:"Outputs"}),"\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.jsx)(t.tbody,{children:(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"agent"}),(0,r.jsx)(t.td,{children:"AgentExecutor"}),(0,r.jsx)(t.td,{children:"Vector Store Agent instance"})]})})]}),"\n",(0,r.jsx)(t.h2,{id:"vector-store-router-agent",children:"Vector Store Router Agent"}),"\n",(0,r.jsx)(t.p,{children:"This component creates a Vector Store Router Agent using LangChain."}),"\n",(0,r.jsx)(t.h3,{id:"inputs-12",children:"Inputs"}),"\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:"llm"}),(0,r.jsx)(t.td,{children:"LanguageModel"}),(0,r.jsx)(t.td,{children:"Language model to use for the agent"})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"vectorstores"}),(0,r.jsx)(t.td,{children:"List[VectorStoreInfo]"}),(0,r.jsx)(t.td,{children:"List of vector store information for the agent to route between"})]})]})]}),"\n",(0,r.jsx)(t.h3,{id:"outputs-12",children:"Outputs"}),"\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.jsx)(t.tbody,{children:(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"agent"}),(0,r.jsx)(t.td,{children:"AgentExecutor"}),(0,r.jsx)(t.td,{children:"Vector Store Router Agent instance"})]})})]}),"\n",(0,r.jsx)(t.h2,{id:"xml-agent",children:"XML Agent"}),"\n",(0,r.jsx)(t.p,{children:"This component creates an XML Agent using LangChain."}),"\n",(0,r.jsx)(t.p,{children:"The agent uses XML formatting for tool instructions to the Language Model."}),"\n",(0,r.jsx)(t.h3,{id:"inputs-13",children:"Inputs"}),"\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:"llm"}),(0,r.jsx)(t.td,{children:"LanguageModel"}),(0,r.jsx)(t.td,{children:"Language model to use for the agent"})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"user_prompt"}),(0,r.jsx)(t.td,{children:"String"}),(0,r.jsx)(t.td,{children:"Custom prompt template for the agent (includes XML formatting instructions)"})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"tools"}),(0,r.jsx)(t.td,{children:"List[Tool]"}),(0,r.jsx)(t.td,{children:"List of tools available to the agent"})]})]})]}),"\n",(0,r.jsx)(t.h3,{id:"outputs-13",children:"Outputs"}),"\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.jsx)(t.tbody,{children:(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"agent"}),(0,r.jsx)(t.td,{children:"AgentExecutor"}),(0,r.jsx)(t.td,{children:"XML Agent instance"})]})})]})]})}function a(e={}){const{wrapper:t}={...(0,i.R)(),...e.components};return t?(0,r.jsx)(t,{...e,children:(0,r.jsx)(o,{...e})}):o(e)}}}]); \ No newline at end of file diff --git a/assets/js/c39b795e.e7a7ebbf.js b/assets/js/c39b795e.e7a7ebbf.js new file mode 100644 index 0000000000..0d1856cd48 --- /dev/null +++ b/assets/js/c39b795e.e7a7ebbf.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunklangflow_docs=self.webpackChunklangflow_docs||[]).push([[7338],{31154:(e,t,n)=>{n.r(t),n.d(t,{CH:()=>a,assets:()=>l,chCodeConfig:()=>x,contentTitle:()=>h,default:()=>u,frontMatter:()=>c,metadata:()=>s,toc:()=>j});const s=JSON.parse('{"id":"Components/components-helpers","title":"Helpers","description":"Helper components provide utility functions to help manage data, tasks, and other components in your flow.","source":"@site/docs/Components/components-helpers.md","sourceDirName":"Components","slug":"/components-helpers","permalink":"/components-helpers","draft":false,"unlisted":false,"tags":[],"version":"current","frontMatter":{"title":"Helpers","slug":"/components-helpers"},"sidebar":"docs","previous":{"title":"Embeddings","permalink":"/components-embedding-models"},"next":{"title":"Inputs and outputs","permalink":"/components-io"}}');var r=n(74848),i=n(28453),d=n(24754),o=n(84443);const c={title:"Helpers",slug:"/components-helpers"},h="Helper components in Langflow",l={},a={annotations:d.hk,Code:d.Cy},x={staticMediaQuery:"not screen, (max-width: 768px)",lineNumbers:!0,showCopyButton:!0,themeName:"github-dark"},j=[{value:"Use a helper component in a flow",id:"use-a-helper-component-in-a-flow",level:2},{value:"Batch Run",id:"batch-run",level:2},{value:"Current date",id:"current-date",level:2},{value:"ID Generator",id:"id-generator",level:2},{value:"Message history",id:"message-history",level:2},{value:"Message store",id:"message-store",level:2},{value:"Structured output",id:"structured-output",level:2},{value:"Legacy components",id:"legacy-components",level:2},{value:"Create List",id:"create-list",level:3},{value:"Output Parser",id:"output-parser",level:3}];function p(e){const t={a:"a",admonition:"admonition",code:"code",h1:"h1",h2:"h2",h3:"h3",header:"header",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,i.R)(),...e.components},{Details:s}=t;return a||m("CH",!1),a.Code||m("CH.Code",!0),s||m("Details",!0),(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)("style",{dangerouslySetInnerHTML:{__html:'[data-ch-theme="github-dark"] { --ch-t-colorScheme: dark;--ch-t-foreground: #c9d1d9;--ch-t-background: #0d1117;--ch-t-lighter-inlineBackground: #0d1117e6;--ch-t-editor-background: #0d1117;--ch-t-editor-foreground: #c9d1d9;--ch-t-editor-lineHighlightBackground: #6e76811a;--ch-t-editor-rangeHighlightBackground: #ffffff0b;--ch-t-editor-infoForeground: #3794FF;--ch-t-editor-selectionBackground: #264F78;--ch-t-focusBorder: #1f6feb;--ch-t-tab-activeBackground: #0d1117;--ch-t-tab-activeForeground: #c9d1d9;--ch-t-tab-inactiveBackground: #010409;--ch-t-tab-inactiveForeground: #8b949e;--ch-t-tab-border: #30363d;--ch-t-tab-activeBorder: #0d1117;--ch-t-editorGroup-border: #30363d;--ch-t-editorGroupHeader-tabsBackground: #010409;--ch-t-editorLineNumber-foreground: #6e7681;--ch-t-input-background: #0d1117;--ch-t-input-foreground: #c9d1d9;--ch-t-input-border: #30363d;--ch-t-icon-foreground: #8b949e;--ch-t-sideBar-background: #010409;--ch-t-sideBar-foreground: #c9d1d9;--ch-t-sideBar-border: #30363d;--ch-t-list-activeSelectionBackground: #6e768166;--ch-t-list-activeSelectionForeground: #c9d1d9;--ch-t-list-hoverBackground: #6e76811a;--ch-t-list-hoverForeground: #c9d1d9; }'}}),"\n","\n",(0,r.jsx)(t.header,{children:(0,r.jsx)(t.h1,{id:"helper-components-in-langflow",children:"Helper components in Langflow"})}),"\n",(0,r.jsx)(t.p,{children:"Helper components provide utility functions to help manage data, tasks, and other components in your flow."}),"\n",(0,r.jsx)(t.h2,{id:"use-a-helper-component-in-a-flow",children:"Use a helper component in a flow"}),"\n",(0,r.jsxs)(t.p,{children:["Chat memory in Langflow is stored either in local Langflow tables with ",(0,r.jsx)(t.code,{children:"LCBufferMemory"}),", or connected to an external database."]}),"\n",(0,r.jsxs)(t.p,{children:["The ",(0,r.jsx)(t.strong,{children:"Store Message"})," helper component stores chat memories as ",(0,r.jsx)(t.a,{href:"/concepts-objects",children:"Data"})," objects, and the ",(0,r.jsx)(t.strong,{children:"Message History"})," helper component retrieves chat messages as data objects or strings."]}),"\n",(0,r.jsxs)(t.p,{children:["This example flow stores and retrieves chat history from an ",(0,r.jsx)(t.a,{href:"/components-memories#astradbchatmemory-component",children:"AstraDBChatMemory"})," component with ",(0,r.jsx)(t.strong,{children:"Store Message"})," and ",(0,r.jsx)(t.strong,{children:"Chat Memory"})," components."]}),"\n",(0,r.jsx)(t.p,{children:(0,r.jsx)(t.img,{alt:"Sample Flow storing Chat Memory in AstraDB",src:n(72654).A+"",width:"3178",height:"1228"})}),"\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.strong,{children:"each row"})," of a ",(0,r.jsx)(t.a,{href:"/concepts-objects#dataframe-object",children:"DataFrame"})," text column and returns a new DataFrame with the original text and an LLM response."]}),"\n",(0,r.jsx)(t.p,{children:"The response 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 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 processing order, with a ",(0,r.jsx)(t.code,{children:"0"}),"-based index."]}),"\n",(0,r.jsxs)(t.li,{children:[(0,r.jsx)(t.code,{children:"metadata"})," (optional): Additional information about the processing."]}),"\n"]}),"\n",(0,r.jsxs)(t.p,{children:["These columns, when connected to a ",(0,r.jsx)(t.strong,{children:"Parser"})," component, can be used as variables within curly braces."]}),"\n",(0,r.jsxs)(t.p,{children:["To use the Batch Run component with a ",(0,r.jsx)(t.strong,{children:"Parser"})," component, do the following:"]}),"\n",(0,r.jsxs)(t.ol,{children:["\n",(0,r.jsxs)(t.li,{children:["Connect a ",(0,r.jsx)(t.strong,{children:"Model"})," component to the ",(0,r.jsx)(t.strong,{children:"Batch Run"})," component's ",(0,r.jsx)(t.strong,{children:"Language model"})," port."]}),"\n",(0,r.jsxs)(t.li,{children:["Connect a component that outputs DataFrame, like ",(0,r.jsx)(t.strong,{children:"File"})," component, to the ",(0,r.jsx)(t.strong,{children:"Batch Run"})," component's ",(0,r.jsx)(t.strong,{children:"DataFrame"})," input."]}),"\n",(0,r.jsxs)(t.li,{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.\nThe flow looks like this:"]}),"\n"]}),"\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:"1776",height:"1370"})}),"\n",(0,r.jsxs)(t.ol,{start:"4",children:["\n",(0,r.jsxs)(t.li,{children:["In the ",(0,r.jsx)(t.strong,{children:"Column Name"})," field of the ",(0,r.jsx)(t.strong,{children:"Batch Run"})," component, enter a column name based on the data you're loading from the ",(0,r.jsx)(t.strong,{children:"File"})," loader. For example, to process a column of ",(0,r.jsx)(t.code,{children:"name"}),", enter ",(0,r.jsx)(t.code,{children:"name"}),"."]}),"\n",(0,r.jsxs)(t.li,{children:["Optionally, in the ",(0,r.jsx)(t.strong,{children:"System Message"})," field of the ",(0,r.jsx)(t.strong,{children:"Batch Run"})," component, enter a ",(0,r.jsx)(t.strong,{children:"System Message"})," to instruct the connected LLM on how to process your file. For example, ",(0,r.jsx)(t.code,{children:"Create a business card for each name."})]}),"\n",(0,r.jsxs)(t.li,{children:["In the ",(0,r.jsx)(t.strong,{children:"Template"})," field of the ",(0,r.jsx)(t.strong,{children:"Parser"})," component, enter a template for using the ",(0,r.jsx)(t.strong,{children:"Batch Run"})," component's new DataFrame columns.\nTo use all three columns from the ",(0,r.jsx)(t.strong,{children:"Batch Run"})," component, include them like this:"]}),"\n"]}),"\n",(0,r.jsx)(a.Code,{codeConfig:x,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",(0,r.jsxs)(t.ol,{start:"7",children:["\n",(0,r.jsxs)(t.li,{children:["To run the flow, in the ",(0,r.jsx)(t.strong,{children:"Parser"})," component, click ",(0,r.jsx)(o.A,{name:"Play","aria-label":"Play icon"}),"."]}),"\n",(0,r.jsxs)(t.li,{children:["To view your created DataFrame, in the ",(0,r.jsx)(t.strong,{children:"Parser"})," component, click ",(0,r.jsx)(o.A,{name:"TextSearch","aria-label":"Inspect icon"}),"."]}),"\n",(0,r.jsxs)(t.li,{children:["Optionally, connect a ",(0,r.jsx)(t.strong,{children:"Chat Output"})," component, and open the ",(0,r.jsx)(t.strong,{children:"Playground"})," to see the output."]}),"\n"]}),"\n",(0,r.jsxs)(s,{children:[(0,r.jsx)("summary",{children:"Parameters"}),(0,r.jsx)(t.p,{children:(0,r.jsx)(t.strong,{children:"Inputs"})}),(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:"Connect the 'Language Model' output from your LLM component here. 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:"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:"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:"The name of the DataFrame column to treat as text messages. Default='text'. Required."})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"enable_metadata"}),(0,r.jsx)(t.td,{children:"BoolInput"}),(0,r.jsx)(t.td,{children:"If True, add metadata to the output DataFrame."})]})]})]}),(0,r.jsx)(t.p,{children:(0,r.jsx)(t.strong,{children:"Outputs"})}),(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.jsx)(t.tbody,{children:(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:"A DataFrame with columns: 'text_input', 'model_response', 'batch_index', and optional 'metadata' containing processing information."})]})})]})]}),"\n",(0,r.jsx)(t.h2,{id:"current-date",children:"Current date"}),"\n",(0,r.jsx)(t.p,{children:"The Current Date component returns the current date and time in a selected timezone. This component provides a flexible way to obtain timezone-specific date and time information within a Langflow pipeline."}),"\n",(0,r.jsxs)(s,{children:[(0,r.jsx)("summary",{children:"Parameters"}),(0,r.jsx)(t.p,{children:(0,r.jsx)(t.strong,{children:"Inputs"})}),(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.jsx)(t.tbody,{children:(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"timezone"}),(0,r.jsx)(t.td,{children:"String"}),(0,r.jsx)(t.td,{children:"The timezone for the current date and time."})]})})]}),(0,r.jsx)(t.p,{children:(0,r.jsx)(t.strong,{children:"Outputs"})}),(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.jsx)(t.tbody,{children:(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"current_date"}),(0,r.jsx)(t.td,{children:"String"}),(0,r.jsx)(t.td,{children:"The resulting current date and time in the selected timezone."})]})})]})]}),"\n",(0,r.jsx)(t.h2,{id:"id-generator",children:"ID Generator"}),"\n",(0,r.jsx)(t.p,{children:"This component generates a unique ID."}),"\n",(0,r.jsxs)(s,{children:[(0,r.jsx)("summary",{children:"Parameters"}),(0,r.jsx)(t.p,{children:(0,r.jsx)(t.strong,{children:"Inputs"})}),(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.jsx)(t.tbody,{children:(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"unique_id"}),(0,r.jsx)(t.td,{children:"String"}),(0,r.jsx)(t.td,{children:"The generated unique ID."})]})})]}),(0,r.jsx)(t.p,{children:(0,r.jsx)(t.strong,{children:"Outputs"})}),(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.jsx)(t.tbody,{children:(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"id"}),(0,r.jsx)(t.td,{children:"String"}),(0,r.jsx)(t.td,{children:"The generated unique ID."})]})})]})]}),"\n",(0,r.jsx)(t.h2,{id:"message-history",children:"Message history"}),"\n",(0,r.jsx)(t.admonition,{type:"info",children:(0,r.jsx)(t.p,{children:"Prior to Langflow 1.1, this component was known as the Chat Memory component."})}),"\n",(0,r.jsx)(t.p,{children:"This component retrieves chat messages from Langflow tables or external memory."}),"\n",(0,r.jsxs)(t.p,{children:["In this example, the ",(0,r.jsx)(t.strong,{children:"Message Store"})," component stores the complete chat history in a local Langflow table, which the ",(0,r.jsx)(t.strong,{children:"Message History"})," component retrieves as context for the LLM to answer each question."]}),"\n",(0,r.jsx)(t.p,{children:(0,r.jsx)(t.img,{alt:"Message store and history components",src:n(77111).A+"",width:"2778",height:"1166"})}),"\n",(0,r.jsxs)(t.p,{children:["For more information on configuring memory in Langflow, see ",(0,r.jsx)(t.a,{href:"/memory",children:"Memory"}),"."]}),"\n",(0,r.jsxs)(s,{children:[(0,r.jsx)("summary",{children:"Parameters"}),(0,r.jsx)(t.p,{children:(0,r.jsx)(t.strong,{children:"Inputs"})}),(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:"memory"}),(0,r.jsx)(t.td,{children:"Memory"}),(0,r.jsx)(t.td,{children:"Retrieve messages from an external memory. If empty, the Langflow tables are used."})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"sender"}),(0,r.jsx)(t.td,{children:"String"}),(0,r.jsx)(t.td,{children:"Filter by sender type."})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"sender_name"}),(0,r.jsx)(t.td,{children:"String"}),(0,r.jsx)(t.td,{children:"Filter by sender name."})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"n_messages"}),(0,r.jsx)(t.td,{children:"Integer"}),(0,r.jsx)(t.td,{children:"The number of messages to retrieve."})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"session_id"}),(0,r.jsx)(t.td,{children:"String"}),(0,r.jsx)(t.td,{children:"The session ID of the chat. If empty, the current session ID parameter is used."})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"order"}),(0,r.jsx)(t.td,{children:"String"}),(0,r.jsx)(t.td,{children:"The order of the messages."})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"template"}),(0,r.jsx)(t.td,{children:"String"}),(0,r.jsxs)(t.td,{children:["The template to use for formatting the data. It can contain the keys ",(0,r.jsx)(t.code,{children:"{text}"}),", ",(0,r.jsx)(t.code,{children:"{sender}"})," or any other key in the message data."]})]})]})]}),(0,r.jsx)(t.p,{children:(0,r.jsx)(t.strong,{children:"Outputs"})}),(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:"messages"}),(0,r.jsx)(t.td,{children:"Data"}),(0,r.jsx)(t.td,{children:"The retrieved messages as Data objects."})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"messages_text"}),(0,r.jsx)(t.td,{children:"String"}),(0,r.jsx)(t.td,{children:"The retrieved messages formatted as text."})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"lc_memory"}),(0,r.jsx)(t.td,{children:"Memory"}),(0,r.jsxs)(t.td,{children:["A constructed Langchain ",(0,r.jsx)(t.a,{href:"https://api.python.langchain.com/en/latest/memory/langchain.memory.buffer.ConversationBufferMemory.html",children:"ConversationBufferMemory"})," object."]})]})]})]})]}),"\n",(0,r.jsx)(t.h2,{id:"message-store",children:"Message store"}),"\n",(0,r.jsx)(t.p,{children:"This component stores chat messages or text in Langflow tables or external memory."}),"\n",(0,r.jsxs)(t.p,{children:["In this example, the ",(0,r.jsx)(t.strong,{children:"Message Store"})," component stores the complete chat history in a local Langflow table, which the ",(0,r.jsx)(t.strong,{children:"Message History"})," component retrieves as context for the LLM to answer each question."]}),"\n",(0,r.jsx)(t.p,{children:(0,r.jsx)(t.img,{alt:"Message store and history components",src:n(77111).A+"",width:"2778",height:"1166"})}),"\n",(0,r.jsxs)(t.p,{children:["For more information on configuring memory in Langflow, see ",(0,r.jsx)(t.a,{href:"/memory",children:"Memory"}),"."]}),"\n",(0,r.jsxs)(s,{children:[(0,r.jsx)("summary",{children:"Parameters"}),(0,r.jsx)(t.p,{children:(0,r.jsx)(t.strong,{children:"Inputs"})}),(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:"message"}),(0,r.jsx)(t.td,{children:"String"}),(0,r.jsx)(t.td,{children:"The chat message to be stored. (Required)"})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"memory"}),(0,r.jsx)(t.td,{children:"Memory"}),(0,r.jsx)(t.td,{children:"The external memory to store the message. If empty, the Langflow tables are used."})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"sender"}),(0,r.jsx)(t.td,{children:"String"}),(0,r.jsx)(t.td,{children:"The sender of the message. Can be Machine or User. If empty, the current sender parameter is used."})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"sender_name"}),(0,r.jsx)(t.td,{children:"String"}),(0,r.jsx)(t.td,{children:"The name of the sender. Can be AI or User. If empty, the current sender parameter is used."})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"session_id"}),(0,r.jsx)(t.td,{children:"String"}),(0,r.jsx)(t.td,{children:"The session ID of the chat. If empty, the current session ID parameter is used."})]})]})]}),(0,r.jsx)(t.p,{children:(0,r.jsx)(t.strong,{children:"Outputs"})}),(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.jsx)(t.tbody,{children:(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"stored_messages"}),(0,r.jsx)(t.td,{children:"List[Data]"}),(0,r.jsx)(t.td,{children:"The list of stored messages after the current message has been added."})]})})]})]}),"\n",(0,r.jsx)(t.h2,{id:"structured-output",children:"Structured output"}),"\n",(0,r.jsx)(t.p,{children:"This component transforms LLM responses into structured data formats."}),"\n",(0,r.jsxs)(t.p,{children:["In this example from the ",(0,r.jsx)(t.strong,{children:"Financial Support Parser"})," template, the ",(0,r.jsx)(t.strong,{children:"Structured Output"})," component transforms unstructured financial reports into structured data."]}),"\n",(0,r.jsx)(t.p,{children:(0,r.jsx)(t.img,{alt:"Structured output example",src:n(82798).A+"",width:"2554",height:"1548"})}),"\n",(0,r.jsxs)(t.p,{children:["The connected LLM model is prompted by the ",(0,r.jsx)(t.strong,{children:"Structured Output"})," component's ",(0,r.jsx)(t.code,{children:"Format Instructions"})," parameter to extract structured output from the unstructured text. ",(0,r.jsx)(t.code,{children:"Format Instructions"})," is utilized as the system prompt for the ",(0,r.jsx)(t.strong,{children:"Structured Output"})," component."]}),"\n",(0,r.jsxs)(t.p,{children:["In the ",(0,r.jsx)(t.strong,{children:"Structured Output"})," component, click the ",(0,r.jsx)(t.strong,{children:"Open table"})," button to view the ",(0,r.jsx)(t.code,{children:"Output Schema"})," table.\nThe ",(0,r.jsx)(t.code,{children:"Output Schema"})," parameter defines the structure and data types for the model's output using a table with the following fields:"]}),"\n",(0,r.jsxs)(t.ul,{children:["\n",(0,r.jsxs)(t.li,{children:[(0,r.jsx)(t.strong,{children:"Name"}),": The name of the output field."]}),"\n",(0,r.jsxs)(t.li,{children:[(0,r.jsx)(t.strong,{children:"Description"}),": The purpose of the output field."]}),"\n",(0,r.jsxs)(t.li,{children:[(0,r.jsx)(t.strong,{children:"Type"}),": The data type of the output field. The available types are ",(0,r.jsx)(t.code,{children:"str"}),", ",(0,r.jsx)(t.code,{children:"int"}),", ",(0,r.jsx)(t.code,{children:"float"}),", ",(0,r.jsx)(t.code,{children:"bool"}),", ",(0,r.jsx)(t.code,{children:"list"}),", or ",(0,r.jsx)(t.code,{children:"dict"}),". The default is ",(0,r.jsx)(t.code,{children:"text"}),"."]}),"\n",(0,r.jsxs)(t.li,{children:[(0,r.jsx)(t.strong,{children:"Multiple"}),": This feature is deprecated. Currently, it is set to ",(0,r.jsx)(t.code,{children:"True"})," by default if you expect multiple values for a single field. For example, a ",(0,r.jsx)(t.code,{children:"list"})," of ",(0,r.jsx)(t.code,{children:"features"})," is set to ",(0,r.jsx)(t.code,{children:"True"})," to contain multiple values, such as ",(0,r.jsx)(t.code,{children:'["waterproof", "durable", "lightweight"]'}),". Default: ",(0,r.jsx)(t.code,{children:"True"}),"."]}),"\n"]}),"\n",(0,r.jsxs)(t.p,{children:["The ",(0,r.jsx)(t.strong,{children:"Parse DataFrame"})," component parses the structured output into a template for orderly presentation in chat output. The template receives the values from the ",(0,r.jsx)(t.code,{children:"output_schema"})," table with curly braces."]}),"\n",(0,r.jsxs)(t.p,{children:["For example, the template ",(0,r.jsx)(t.code,{children:"EBITDA: {EBITDA} , Net Income: {NET_INCOME} , GROSS_PROFIT: {GROSS_PROFIT}"})," presents the extracted values in the ",(0,r.jsx)(t.strong,{children:"Playground"})," as ",(0,r.jsx)(t.code,{children:"EBITDA: 900 million , Net Income: 500 million , GROSS_PROFIT: 1.2 billion"}),"."]}),"\n",(0,r.jsxs)(s,{children:[(0,r.jsx)("summary",{children:"Parameters"}),(0,r.jsx)(t.p,{children:(0,r.jsx)(t.strong,{children:"Inputs"})}),(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:"llm"}),(0,r.jsx)(t.td,{children:"LanguageModel"}),(0,r.jsx)(t.td,{children:"The language model to use to generate the structured output."})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"input_value"}),(0,r.jsx)(t.td,{children:"String"}),(0,r.jsx)(t.td,{children:"The input message to the language model."})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"system_prompt"}),(0,r.jsx)(t.td,{children:"String"}),(0,r.jsx)(t.td,{children:"The instructions to the language model for formatting the output."})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"schema_name"}),(0,r.jsx)(t.td,{children:"String"}),(0,r.jsx)(t.td,{children:"The name for the output data schema."})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"output_schema"}),(0,r.jsx)(t.td,{children:"Table"}),(0,r.jsx)(t.td,{children:"The structure and data types for the model's output."})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"multiple"}),(0,r.jsx)(t.td,{children:"Boolean"}),(0,r.jsxs)(t.td,{children:["[Deprecated] Always set to ",(0,r.jsx)(t.code,{children:"True"}),"."]})]})]})]}),(0,r.jsx)(t.p,{children:(0,r.jsx)(t.strong,{children:"Outputs"})}),(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.jsx)(t.tbody,{children:(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"structured_output"}),(0,r.jsx)(t.td,{children:"Data"}),(0,r.jsx)(t.td,{children:"The structured output is a Data object based on the defined schema."})]})})]})]}),"\n",(0,r.jsx)(t.h2,{id:"legacy-components",children:"Legacy components"}),"\n",(0,r.jsx)(t.p,{children:"Legacy components are available for use but are no longer supported."}),"\n",(0,r.jsx)(t.h3,{id:"create-list",children:"Create List"}),"\n",(0,r.jsx)(t.p,{children:"This component dynamically creates a record with a specified number of fields."}),"\n",(0,r.jsxs)(s,{children:[(0,r.jsx)("summary",{children:"Parameters"}),(0,r.jsx)(t.p,{children:(0,r.jsx)(t.strong,{children:"Inputs"})}),(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:"n_fields"}),(0,r.jsx)(t.td,{children:"Integer"}),(0,r.jsx)(t.td,{children:"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:"String"}),(0,r.jsx)(t.td,{children:"The key used as text."})]})]})]}),(0,r.jsx)(t.p,{children:(0,r.jsx)(t.strong,{children:"Outputs"})}),(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.jsx)(t.tbody,{children:(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"list"}),(0,r.jsx)(t.td,{children:"List"}),(0,r.jsx)(t.td,{children:"The dynamically created list with the specified number of fields."})]})})]})]}),"\n",(0,r.jsx)(t.h3,{id:"output-parser",children:"Output Parser"}),"\n",(0,r.jsxs)(t.p,{children:["This component transforms the output of a language model into a specified format. It supports CSV format parsing, which converts LLM responses into comma-separated lists using Langchain's ",(0,r.jsx)(t.code,{children:"CommaSeparatedListOutputParser"}),"."]}),"\n",(0,r.jsx)(t.admonition,{type:"note",children:(0,r.jsx)(t.p,{children:"This component only provides formatting instructions and parsing functionality. It does not include a prompt. You'll need to connect it to a separate Prompt component to create the actual prompt template for the LLM to use."})}),"\n",(0,r.jsxs)(t.p,{children:["Both the ",(0,r.jsx)(t.strong,{children:"Output Parser"})," and ",(0,r.jsx)(t.strong,{children:"Structured Output"})," components format LLM responses, but they have different use cases.\nThe ",(0,r.jsx)(t.strong,{children:"Output Parser"})," is simpler and focused on converting responses into comma-separated lists. Use this when you just need a list of items, for example ",(0,r.jsx)(t.code,{children:'["item1", "item2", "item3"]'}),".\nThe ",(0,r.jsx)(t.strong,{children:"Structured Output"})," is more complex and flexible, and allows you to define custom schemas with multiple fields of different types. Use this when you need to extract structured data with specific fields and types."]}),"\n",(0,r.jsx)(t.p,{children:"To use this component:"}),"\n",(0,r.jsxs)(t.ol,{children:["\n",(0,r.jsxs)(t.li,{children:["Create a Prompt component and connect the Output Parser's ",(0,r.jsx)(t.code,{children:"format_instructions"})," output to it. This ensures the LLM knows how to format its response."]}),"\n",(0,r.jsxs)(t.li,{children:["Write your actual prompt text in the Prompt component, including the ",(0,r.jsx)(t.code,{children:"{format_instructions}"})," variable.\nFor example, in your Prompt component, the template might look like:"]}),"\n"]}),"\n",(0,r.jsx)(a.Code,{codeConfig:x,northPanel:{tabs:[""],active:"",heightRatio:1},files:[{name:"",focus:"",code:{lines:[{tokens:[{content:"{format_instructions}",props:{}}]},{tokens:[{content:"Please list three fruits.",props:{}}]}],lang:"text"},annotations:[]}]}),"\n",(0,r.jsxs)(t.ol,{start:"3",children:["\n",(0,r.jsxs)(t.li,{children:["\n",(0,r.jsxs)(t.p,{children:["Connect the ",(0,r.jsx)(t.code,{children:"output_parser"})," output to your LLM model."]}),"\n"]}),"\n",(0,r.jsxs)(t.li,{children:["\n",(0,r.jsxs)(t.p,{children:["The output parser converts this into a Python list: ",(0,r.jsx)(t.code,{children:'["apple", "banana", "orange"]'}),"."]}),"\n"]}),"\n"]}),"\n",(0,r.jsxs)(s,{children:[(0,r.jsx)("summary",{children:"Parameters"}),(0,r.jsx)(t.p,{children:(0,r.jsx)(t.strong,{children:"Inputs"})}),(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.jsx)(t.tbody,{children:(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"parser_type"}),(0,r.jsx)(t.td,{children:"String"}),(0,r.jsx)(t.td,{children:'The parser type. Currently supports "CSV".'})]})})]}),(0,r.jsx)(t.p,{children:(0,r.jsx)(t.strong,{children:"Outputs"})}),(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:"format_instructions"}),(0,r.jsx)(t.td,{children:"String"}),(0,r.jsx)(t.td,{children:"Pass to a prompt template to include formatting instructions for LLM responses."})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"output_parser"}),(0,r.jsx)(t.td,{children:"Parser"}),(0,r.jsx)(t.td,{children:"The constructed output parser that can be used to parse LLM responses."})]})]})]})]})]})}function u(e={}){const{wrapper:t}={...(0,i.R)(),...e.components};return t?(0,r.jsx)(t,{...e,children:(0,r.jsx)(p,{...e})}):p(e)}function m(e,t){throw new Error("Expected "+(t?"component":"object")+" `"+e+"` to be defined: you likely forgot to import, pass, or provide it.")}},72654:(e,t,n)=>{n.d(t,{A:()=>s});const s=n.p+"assets/images/astra_db_chat_memory_rounded-9746ca2bb69d3b07ac0a071f4b9471b3.png"},77111:(e,t,n)=>{n.d(t,{A:()=>s});const s=n.p+"assets/images/component-message-history-message-store-be0396aefa69496e8bc21452d240e04d.png"},82798:(e,t,n)=>{n.d(t,{A:()=>s});const s=n.p+"assets/images/component-structured-output-7bb5a996464cb83d4c94a893419bb176.png"},84443:(e,t,n)=>{n.d(t,{A:()=>i});n(96540);var s=n(64058),r=n(74848);function i(e){let{name:t,...n}=e;const i=s[t];return i?(0,r.jsx)(i,{...n}):null}},88103:(e,t,n)=>{n.d(t,{A:()=>s});const s=n.p+"assets/images/component-batch-run-0ad3fa6f082eb01504dae7df3cc4daad.png"}}]); \ No newline at end of file diff --git a/assets/js/c39b795e.ead0f1d0.js b/assets/js/c39b795e.ead0f1d0.js deleted file mode 100644 index 5e5aed63ca..0000000000 --- a/assets/js/c39b795e.ead0f1d0.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunklangflow_docs=self.webpackChunklangflow_docs||[]).push([[7338],{31154:(e,t,n)=>{n.r(t),n.d(t,{CH:()=>a,assets:()=>h,chCodeConfig:()=>u,contentTitle:()=>c,default:()=>p,frontMatter:()=>l,metadata:()=>s,toc:()=>x});const s=JSON.parse('{"id":"Components/components-helpers","title":"Helpers","description":"Helper components provide utility functions to help manage data, tasks, and other components in your flow.","source":"@site/docs/Components/components-helpers.md","sourceDirName":"Components","slug":"/components-helpers","permalink":"/components-helpers","draft":false,"unlisted":false,"tags":[],"version":"current","frontMatter":{"title":"Helpers","slug":"/components-helpers"},"sidebar":"docs","previous":{"title":"Embeddings","permalink":"/components-embedding-models"},"next":{"title":"Inputs and outputs","permalink":"/components-io"}}');var r=n(74848),d=n(28453),i=n(24754),o=n(84443);const l={title:"Helpers",slug:"/components-helpers"},c="Helper components in Langflow",h={},a={annotations:i.hk,Code:i.Cy},u={staticMediaQuery:"not screen, (max-width: 768px)",lineNumbers:!0,showCopyButton:!0,themeName:"github-dark"},x=[{value:"Use a helper component in a flow",id:"use-a-helper-component-in-a-flow",level:2},{value:"Batch Run",id:"batch-run",level:2},{value:"Inputs",id:"inputs",level:3},{value:"Outputs",id:"outputs",level:3},{value:"Current date",id:"current-date",level:2},{value:"Inputs",id:"inputs-1",level:3},{value:"Outputs",id:"outputs-1",level:3},{value:"ID Generator",id:"id-generator",level:2},{value:"Inputs",id:"inputs-2",level:3},{value:"Outputs",id:"outputs-2",level:3},{value:"Message history",id:"message-history",level:2},{value:"Inputs",id:"inputs-3",level:3},{value:"Outputs",id:"outputs-3",level:3},{value:"Message store",id:"message-store",level:2},{value:"Inputs",id:"inputs-4",level:3},{value:"Outputs",id:"outputs-4",level:3},{value:"Structured output",id:"structured-output",level:2},{value:"Inputs",id:"inputs-5",level:3},{value:"Outputs",id:"outputs-5",level:3},{value:"Legacy components",id:"legacy-components",level:2},{value:"Create List",id:"create-list",level:3},{value:"Inputs",id:"inputs-6",level:4},{value:"Outputs",id:"outputs-6",level:4},{value:"Output Parser",id:"output-parser",level:3},{value:"Inputs",id:"inputs-7",level:4},{value:"Outputs",id:"outputs-7",level:4}];function j(e){const t={a:"a",admonition:"admonition",code:"code",h1:"h1",h2:"h2",h3:"h3",h4:"h4",header:"header",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,d.R)(),...e.components};return a||m("CH",!1),a.Code||m("CH.Code",!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.header,{children:(0,r.jsx)(t.h1,{id:"helper-components-in-langflow",children:"Helper components in Langflow"})}),"\n",(0,r.jsx)(t.p,{children:"Helper components provide utility functions to help manage data, tasks, and other components in your flow."}),"\n",(0,r.jsx)(t.h2,{id:"use-a-helper-component-in-a-flow",children:"Use a helper component in a flow"}),"\n",(0,r.jsxs)(t.p,{children:["Chat memory in Langflow is stored either in local Langflow tables with ",(0,r.jsx)(t.code,{children:"LCBufferMemory"}),", or connected to an external database."]}),"\n",(0,r.jsxs)(t.p,{children:["The ",(0,r.jsx)(t.strong,{children:"Store Message"})," helper component stores chat memories as ",(0,r.jsx)(t.a,{href:"/concepts-objects",children:"Data"})," objects, and the ",(0,r.jsx)(t.strong,{children:"Message History"})," helper component retrieves chat messages as data objects or strings."]}),"\n",(0,r.jsxs)(t.p,{children:["This example flow stores and retrieves chat history from an ",(0,r.jsx)(t.a,{href:"/components-memories#astradbchatmemory-component",children:"AstraDBChatMemory"})," component with ",(0,r.jsx)(t.strong,{children:"Store Message"})," and ",(0,r.jsx)(t.strong,{children:"Chat Memory"})," components."]}),"\n",(0,r.jsx)(t.p,{children:(0,r.jsx)(t.img,{alt:"Sample Flow storing Chat Memory in AstraDB",src:n(72654).A+"",width:"3178",height:"1228"})}),"\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.strong,{children:"each row"})," of a ",(0,r.jsx)(t.a,{href:"/concepts-objects#dataframe-object",children:"DataFrame"})," text column and returns a new DataFrame with the original text and an LLM response."]}),"\n",(0,r.jsx)(t.p,{children:"The response 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 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 processing order, with a ",(0,r.jsx)(t.code,{children:"0"}),"-based index."]}),"\n",(0,r.jsxs)(t.li,{children:[(0,r.jsx)(t.code,{children:"metadata"})," (optional): Additional information about the processing."]}),"\n"]}),"\n",(0,r.jsxs)(t.p,{children:["These columns, when connected to a ",(0,r.jsx)(t.strong,{children:"Parser"})," component, can be used as variables within curly braces."]}),"\n",(0,r.jsxs)(t.p,{children:["To use the Batch Run component with a ",(0,r.jsx)(t.strong,{children:"Parser"})," component, do the following:"]}),"\n",(0,r.jsxs)(t.ol,{children:["\n",(0,r.jsxs)(t.li,{children:["Connect a ",(0,r.jsx)(t.strong,{children:"Model"})," component to the ",(0,r.jsx)(t.strong,{children:"Batch Run"})," component's ",(0,r.jsx)(t.strong,{children:"Language model"})," port."]}),"\n",(0,r.jsxs)(t.li,{children:["Connect a component that outputs DataFrame, like ",(0,r.jsx)(t.strong,{children:"File"})," component, to the ",(0,r.jsx)(t.strong,{children:"Batch Run"})," component's ",(0,r.jsx)(t.strong,{children:"DataFrame"})," input."]}),"\n",(0,r.jsxs)(t.li,{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.\nThe flow looks like this:"]}),"\n"]}),"\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:"1776",height:"1370"})}),"\n",(0,r.jsxs)(t.ol,{start:"4",children:["\n",(0,r.jsxs)(t.li,{children:["In the ",(0,r.jsx)(t.strong,{children:"Column Name"})," field of the ",(0,r.jsx)(t.strong,{children:"Batch Run"})," component, enter a column name based on the data you're loading from the ",(0,r.jsx)(t.strong,{children:"File"})," loader. For example, to process a column of ",(0,r.jsx)(t.code,{children:"name"}),", enter ",(0,r.jsx)(t.code,{children:"name"}),"."]}),"\n",(0,r.jsxs)(t.li,{children:["Optionally, in the ",(0,r.jsx)(t.strong,{children:"System Message"})," field of the ",(0,r.jsx)(t.strong,{children:"Batch Run"})," component, enter a ",(0,r.jsx)(t.strong,{children:"System Message"})," to instruct the connected LLM on how to process your file. For example, ",(0,r.jsx)(t.code,{children:"Create a business card for each name."})]}),"\n",(0,r.jsxs)(t.li,{children:["In the ",(0,r.jsx)(t.strong,{children:"Template"})," field of the ",(0,r.jsx)(t.strong,{children:"Parser"})," component, enter a template for using the ",(0,r.jsx)(t.strong,{children:"Batch Run"})," component's new DataFrame columns.\nTo use all three columns from the ",(0,r.jsx)(t.strong,{children:"Batch Run"})," component, include them like this:"]}),"\n"]}),"\n",(0,r.jsx)(a.Code,{codeConfig:u,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",(0,r.jsxs)(t.ol,{start:"7",children:["\n",(0,r.jsxs)(t.li,{children:["To run the flow, in the ",(0,r.jsx)(t.strong,{children:"Parser"})," component, click ",(0,r.jsx)(o.A,{name:"Play","aria-label":"Play icon"}),"."]}),"\n",(0,r.jsxs)(t.li,{children:["To view your created DataFrame, in the ",(0,r.jsx)(t.strong,{children:"Parser"})," component, click ",(0,r.jsx)(o.A,{name:"TextSearch","aria-label":"Inspect icon"}),"."]}),"\n",(0,r.jsxs)(t.li,{children:["Optionally, connect a ",(0,r.jsx)(t.strong,{children:"Chat Output"})," component, and open the ",(0,r.jsx)(t.strong,{children:"Playground"})," to see the output."]}),"\n"]}),"\n",(0,r.jsx)(t.h3,{id:"inputs",children:"Inputs"}),"\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:"Type"}),(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:"model"}),(0,r.jsx)(t.td,{children:"Language Model"}),(0,r.jsx)(t.td,{children:"HandleInput"}),(0,r.jsx)(t.td,{children:"Connect the 'Language Model' output from your LLM component here. Required."})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"system_message"}),(0,r.jsx)(t.td,{children:"System Message"}),(0,r.jsx)(t.td,{children:"MultilineInput"}),(0,r.jsx)(t.td,{children:"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:"DataFrame"}),(0,r.jsx)(t.td,{children:"DataFrameInput"}),(0,r.jsx)(t.td,{children:"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:"Column Name"}),(0,r.jsx)(t.td,{children:"MessageTextInput"}),(0,r.jsx)(t.td,{children:"The name of the DataFrame column to treat as text messages. Default='text'. Required."})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"enable_metadata"}),(0,r.jsx)(t.td,{children:"Enable Metadata"}),(0,r.jsx)(t.td,{children:"BoolInput"}),(0,r.jsx)(t.td,{children:"If True, add metadata to the output DataFrame."})]})]})]}),"\n",(0,r.jsx)(t.h3,{id:"outputs",children:"Outputs"}),"\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:"Method"}),(0,r.jsx)(t.th,{children:"Info"})]})}),(0,r.jsx)(t.tbody,{children:(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"batch_results"}),(0,r.jsx)(t.td,{children:"Batch Results"}),(0,r.jsx)(t.td,{children:"run_batch"}),(0,r.jsx)(t.td,{children:"A DataFrame with columns: 'text_input', 'model_response', 'batch_index', and optional 'metadata' containing processing information."})]})})]}),"\n",(0,r.jsx)(t.h2,{id:"current-date",children:"Current date"}),"\n",(0,r.jsx)(t.p,{children:"The Current Date component returns the current date and time in a selected timezone. This component provides a flexible way to obtain timezone-specific date and time information within a Langflow pipeline."}),"\n",(0,r.jsx)(t.h3,{id:"inputs-1",children:"Inputs"}),"\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.jsx)(t.tbody,{children:(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"timezone"}),(0,r.jsx)(t.td,{children:"Timezone"}),(0,r.jsx)(t.td,{children:"Select the timezone for the current date and time."})]})})]}),"\n",(0,r.jsx)(t.h3,{id:"outputs-1",children:"Outputs"}),"\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.jsx)(t.tbody,{children:(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"current_date"}),(0,r.jsx)(t.td,{children:"Current Date"}),(0,r.jsx)(t.td,{children:"The resulting current date and time in the selected timezone."})]})})]}),"\n",(0,r.jsx)(t.h2,{id:"id-generator",children:"ID Generator"}),"\n",(0,r.jsx)(t.p,{children:"This component generates a unique ID."}),"\n",(0,r.jsx)(t.h3,{id:"inputs-2",children:"Inputs"}),"\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.jsx)(t.tbody,{children:(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"unique_id"}),(0,r.jsx)(t.td,{children:"Value"}),(0,r.jsx)(t.td,{children:"The generated unique ID."})]})})]}),"\n",(0,r.jsx)(t.h3,{id:"outputs-2",children:"Outputs"}),"\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.jsx)(t.tbody,{children:(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"id"}),(0,r.jsx)(t.td,{children:"ID"}),(0,r.jsx)(t.td,{children:"The generated unique ID."})]})})]}),"\n",(0,r.jsx)(t.h2,{id:"message-history",children:"Message history"}),"\n",(0,r.jsx)(t.admonition,{type:"info",children:(0,r.jsx)(t.p,{children:"Prior to Langflow 1.1, this component was known as the Chat Memory component."})}),"\n",(0,r.jsx)(t.p,{children:"This component retrieves chat messages from Langflow tables or external memory."}),"\n",(0,r.jsxs)(t.p,{children:["In this example, the ",(0,r.jsx)(t.strong,{children:"Message Store"})," component stores the complete chat history in a local Langflow table, which the ",(0,r.jsx)(t.strong,{children:"Message History"})," component retrieves as context for the LLM to answer each question."]}),"\n",(0,r.jsx)(t.p,{children:(0,r.jsx)(t.img,{alt:"Message store and history components",src:n(77111).A+"",width:"2778",height:"1166"})}),"\n",(0,r.jsxs)(t.p,{children:["For more information on configuring memory in Langflow, see ",(0,r.jsx)(t.a,{href:"/memory",children:"Memory"}),"."]}),"\n",(0,r.jsx)(t.h3,{id:"inputs-3",children:"Inputs"}),"\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:"memory"}),(0,r.jsx)(t.td,{children:"External Memory"}),(0,r.jsx)(t.td,{children:"Retrieve messages from an external memory. If empty, it will use the Langflow tables."})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"sender"}),(0,r.jsx)(t.td,{children:"Sender Type"}),(0,r.jsx)(t.td,{children:"Filter by sender type."})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"sender_name"}),(0,r.jsx)(t.td,{children:"Sender Name"}),(0,r.jsx)(t.td,{children:"Filter by sender name."})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"n_messages"}),(0,r.jsx)(t.td,{children:"Number of Messages"}),(0,r.jsx)(t.td,{children:"Number of messages to retrieve."})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"session_id"}),(0,r.jsx)(t.td,{children:"Session ID"}),(0,r.jsx)(t.td,{children:"The session ID of the chat. If empty, the current session ID parameter will be used."})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"order"}),(0,r.jsx)(t.td,{children:"Order"}),(0,r.jsx)(t.td,{children:"Order of the messages."})]}),(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:["The template to use for formatting the data. It can contain the keys ",(0,r.jsx)(t.code,{children:"{text}"}),", ",(0,r.jsx)(t.code,{children:"{sender}"})," or any other key in the message data."]})]})]})]}),"\n",(0,r.jsx)(t.h3,{id:"outputs-3",children:"Outputs"}),"\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:"messages"}),(0,r.jsx)(t.td,{children:"Messages (Data)"}),(0,r.jsx)(t.td,{children:"Retrieved messages as Data objects."})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"messages_text"}),(0,r.jsx)(t.td,{children:"Messages (Text)"}),(0,r.jsx)(t.td,{children:"Retrieved messages formatted as text."})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"lc_memory"}),(0,r.jsx)(t.td,{children:"Memory"}),(0,r.jsxs)(t.td,{children:["A constructed Langchain ",(0,r.jsx)(t.a,{href:"https://api.python.langchain.com/en/latest/memory/langchain.memory.buffer.ConversationBufferMemory.html",children:"ConversationBufferMemory"})," object"]})]})]})]}),"\n",(0,r.jsx)(t.h2,{id:"message-store",children:"Message store"}),"\n",(0,r.jsx)(t.p,{children:"This component stores chat messages or text in Langflow tables or external memory."}),"\n",(0,r.jsxs)(t.p,{children:["In this example, the ",(0,r.jsx)(t.strong,{children:"Message Store"})," component stores the complete chat history in a local Langflow table, which the ",(0,r.jsx)(t.strong,{children:"Message History"})," component retrieves as context for the LLM to answer each question."]}),"\n",(0,r.jsx)(t.p,{children:(0,r.jsx)(t.img,{alt:"Message store and history components",src:n(77111).A+"",width:"2778",height:"1166"})}),"\n",(0,r.jsxs)(t.p,{children:["For more information on configuring memory in Langflow, see ",(0,r.jsx)(t.a,{href:"/memory",children:"Memory"}),"."]}),"\n",(0,r.jsx)(t.h3,{id:"inputs-4",children:"Inputs"}),"\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:"message"}),(0,r.jsx)(t.td,{children:"Message"}),(0,r.jsx)(t.td,{children:"The chat message to be stored. (Required)"})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"memory"}),(0,r.jsx)(t.td,{children:"External Memory"}),(0,r.jsx)(t.td,{children:"The external memory to store the message. If empty, it will use the Langflow tables."})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"sender"}),(0,r.jsx)(t.td,{children:"Sender"}),(0,r.jsx)(t.td,{children:"The sender of the message. Can be Machine or User. If empty, the current sender parameter will be used."})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"sender_name"}),(0,r.jsx)(t.td,{children:"Sender Name"}),(0,r.jsx)(t.td,{children:"The name of the sender. Can be AI or User. If empty, the current sender parameter will be used."})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"session_id"}),(0,r.jsx)(t.td,{children:"Session ID"}),(0,r.jsx)(t.td,{children:"The session ID of the chat. If empty, the current session ID parameter will be used."})]})]})]}),"\n",(0,r.jsx)(t.h3,{id:"outputs-4",children:"Outputs"}),"\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.jsx)(t.tbody,{children:(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"stored_messages"}),(0,r.jsx)(t.td,{children:"Stored Messages"}),(0,r.jsx)(t.td,{children:"The list of stored messages after the current message has been added."})]})})]}),"\n",(0,r.jsx)(t.h2,{id:"structured-output",children:"Structured output"}),"\n",(0,r.jsx)(t.p,{children:"This component transforms LLM responses into structured data formats."}),"\n",(0,r.jsxs)(t.p,{children:["In this example from the ",(0,r.jsx)(t.strong,{children:"Financial Support Parser"})," template, the ",(0,r.jsx)(t.strong,{children:"Structured Output"})," component transforms unstructured financial reports into structured data."]}),"\n",(0,r.jsx)(t.p,{children:(0,r.jsx)(t.img,{alt:"Structured output example",src:n(82798).A+"",width:"2554",height:"1548"})}),"\n",(0,r.jsxs)(t.p,{children:["The connected LLM model is prompted by the ",(0,r.jsx)(t.strong,{children:"Structured Output"})," component's ",(0,r.jsx)(t.code,{children:"Format Instructions"})," parameter to extract structured output from the unstructured text. ",(0,r.jsx)(t.code,{children:"Format Instructions"})," is utilized as the system prompt for the ",(0,r.jsx)(t.strong,{children:"Structured Output"})," component."]}),"\n",(0,r.jsxs)(t.p,{children:["In the ",(0,r.jsx)(t.strong,{children:"Structured Output"})," component, click the ",(0,r.jsx)(t.strong,{children:"Open table"})," button to view the ",(0,r.jsx)(t.code,{children:"Output Schema"})," table.\nThe ",(0,r.jsx)(t.code,{children:"Output Schema"})," parameter defines the structure and data types for the model's output using a table with the following fields:"]}),"\n",(0,r.jsxs)(t.ul,{children:["\n",(0,r.jsxs)(t.li,{children:[(0,r.jsx)(t.strong,{children:"Name"}),": The name of the output field."]}),"\n",(0,r.jsxs)(t.li,{children:[(0,r.jsx)(t.strong,{children:"Description"}),": The purpose of the output field."]}),"\n",(0,r.jsxs)(t.li,{children:[(0,r.jsx)(t.strong,{children:"Type"}),": The data type of the output field. The available types are ",(0,r.jsx)(t.code,{children:"str"}),", ",(0,r.jsx)(t.code,{children:"int"}),", ",(0,r.jsx)(t.code,{children:"float"}),", ",(0,r.jsx)(t.code,{children:"bool"}),", ",(0,r.jsx)(t.code,{children:"list"}),", or ",(0,r.jsx)(t.code,{children:"dict"}),". The default is ",(0,r.jsx)(t.code,{children:"text"}),"."]}),"\n",(0,r.jsxs)(t.li,{children:[(0,r.jsx)(t.strong,{children:"Multiple"}),": This feature is deprecated. Currently, it is set to ",(0,r.jsx)(t.code,{children:"True"})," by default if you expect multiple values for a single field. For example, a ",(0,r.jsx)(t.code,{children:"list"})," of ",(0,r.jsx)(t.code,{children:"features"})," is set to ",(0,r.jsx)(t.code,{children:"True"})," to contain multiple values, such as ",(0,r.jsx)(t.code,{children:'["waterproof", "durable", "lightweight"]'}),". Default: ",(0,r.jsx)(t.code,{children:"True"}),"."]}),"\n"]}),"\n",(0,r.jsxs)(t.p,{children:["The ",(0,r.jsx)(t.strong,{children:"Parse DataFrame"})," component parses the structured output into a template for orderly presentation in chat output. The template receives the values from the ",(0,r.jsx)(t.code,{children:"output_schema"})," table with curly braces."]}),"\n",(0,r.jsxs)(t.p,{children:["For example, the template ",(0,r.jsx)(t.code,{children:"EBITDA: {EBITDA} , Net Income: {NET_INCOME} , GROSS_PROFIT: {GROSS_PROFIT}"})," presents the extracted values in the ",(0,r.jsx)(t.strong,{children:"Playground"})," as ",(0,r.jsx)(t.code,{children:"EBITDA: 900 million , Net Income: 500 million , GROSS_PROFIT: 1.2 billion"}),"."]}),"\n",(0,r.jsx)(t.h3,{id:"inputs-5",children:"Inputs"}),"\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:"llm"}),(0,r.jsx)(t.td,{children:"Language Model"}),(0,r.jsx)(t.td,{children:"The language model to use to generate the structured output."})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"input_value"}),(0,r.jsx)(t.td,{children:"Input Message"}),(0,r.jsx)(t.td,{children:"The input message to the language model."})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"system_prompt"}),(0,r.jsx)(t.td,{children:"Format Instructions"}),(0,r.jsx)(t.td,{children:"Instructions to the language model for formatting the output."})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"schema_name"}),(0,r.jsx)(t.td,{children:"Schema Name"}),(0,r.jsx)(t.td,{children:"The name for the output data schema."})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"output_schema"}),(0,r.jsx)(t.td,{children:"Output Schema"}),(0,r.jsx)(t.td,{children:"Defines the structure and data types for the model's output."})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"multiple"}),(0,r.jsx)(t.td,{children:"Generate Multiple"}),(0,r.jsxs)(t.td,{children:["[Deprecated] Always set to ",(0,r.jsx)(t.code,{children:"True"}),"."]})]})]})]}),"\n",(0,r.jsx)(t.h3,{id:"outputs-5",children:"Outputs"}),"\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:"structured_output"}),(0,r.jsx)(t.td,{children:"Structured Output"}),(0,r.jsx)(t.td,{children:"The structured output is a Data object based on the defined schema."})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"structured_output_dataframe"}),(0,r.jsx)(t.td,{children:"DataFrame"}),(0,r.jsxs)(t.td,{children:["The structured output converted to a ",(0,r.jsx)(t.a,{href:"/concepts-objects#dataframe-object",children:"DataFrame"})," format."]})]})]})]}),"\n",(0,r.jsx)(t.h2,{id:"legacy-components",children:"Legacy components"}),"\n",(0,r.jsx)(t.p,{children:"Legacy components are available for use but are no longer supported."}),"\n",(0,r.jsx)(t.h3,{id:"create-list",children:"Create List"}),"\n",(0,r.jsx)(t.p,{children:"This component dynamically creates a record with a specified number of fields."}),"\n",(0,r.jsx)(t.h4,{id:"inputs-6",children:"Inputs"}),"\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:"n_fields"}),(0,r.jsx)(t.td,{children:"Number of Fields"}),(0,r.jsx)(t.td,{children:"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:"Key used as text."})]})]})]}),"\n",(0,r.jsx)(t.h4,{id:"outputs-6",children:"Outputs"}),"\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.jsx)(t.tbody,{children:(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"list"}),(0,r.jsx)(t.td,{children:"List"}),(0,r.jsx)(t.td,{children:"The dynamically created list with the specified number of fields."})]})})]}),"\n",(0,r.jsx)(t.h3,{id:"output-parser",children:"Output Parser"}),"\n",(0,r.jsxs)(t.p,{children:["This component transforms the output of a language model into a specified format. It supports CSV format parsing, which converts LLM responses into comma-separated lists using Langchain's ",(0,r.jsx)(t.code,{children:"CommaSeparatedListOutputParser"}),"."]}),"\n",(0,r.jsx)(t.admonition,{type:"note",children:(0,r.jsx)(t.p,{children:"This component only provides formatting instructions and parsing functionality. It does not include a prompt. You'll need to connect it to a separate Prompt component to create the actual prompt template for the LLM to use."})}),"\n",(0,r.jsxs)(t.p,{children:["Both the ",(0,r.jsx)(t.strong,{children:"Output Parser"})," and ",(0,r.jsx)(t.strong,{children:"Structured Output"})," components format LLM responses, but they have different use cases.\nThe ",(0,r.jsx)(t.strong,{children:"Output Parser"})," is simpler and focused on converting responses into comma-separated lists. Use this when you just need a list of items, for example ",(0,r.jsx)(t.code,{children:'["item1", "item2", "item3"]'}),".\nThe ",(0,r.jsx)(t.strong,{children:"Structured Output"})," is more complex and flexible, and allows you to define custom schemas with multiple fields of different types. Use this when you need to extract structured data with specific fields and types."]}),"\n",(0,r.jsx)(t.p,{children:"To use this component:"}),"\n",(0,r.jsxs)(t.ol,{children:["\n",(0,r.jsxs)(t.li,{children:["Create a Prompt component and connect the Output Parser's ",(0,r.jsx)(t.code,{children:"format_instructions"})," output to it. This ensures the LLM knows how to format its response."]}),"\n",(0,r.jsxs)(t.li,{children:["Write your actual prompt text in the Prompt component, including the ",(0,r.jsx)(t.code,{children:"{format_instructions}"})," variable.\nFor example, in your Prompt component, the template might look like:"]}),"\n"]}),"\n",(0,r.jsx)(a.Code,{codeConfig:u,northPanel:{tabs:[""],active:"",heightRatio:1},files:[{name:"",focus:"",code:{lines:[{tokens:[{content:"{format_instructions}",props:{}}]},{tokens:[{content:"Please list three fruits.",props:{}}]}],lang:"text"},annotations:[]}]}),"\n",(0,r.jsxs)(t.ol,{start:"3",children:["\n",(0,r.jsxs)(t.li,{children:["\n",(0,r.jsxs)(t.p,{children:["Connect the ",(0,r.jsx)(t.code,{children:"output_parser"})," output to your LLM model."]}),"\n"]}),"\n",(0,r.jsxs)(t.li,{children:["\n",(0,r.jsxs)(t.p,{children:["The output parser converts this into a Python list: ",(0,r.jsx)(t.code,{children:'["apple", "banana", "orange"]'}),"."]}),"\n"]}),"\n"]}),"\n",(0,r.jsx)(t.h4,{id:"inputs-7",children:"Inputs"}),"\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.jsx)(t.tbody,{children:(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"parser_type"}),(0,r.jsx)(t.td,{children:"Parser"}),(0,r.jsx)(t.td,{children:'Select the parser type. Currently supports "CSV".'})]})})]}),"\n",(0,r.jsx)(t.h4,{id:"outputs-7",children:"Outputs"}),"\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:"format_instructions"}),(0,r.jsx)(t.td,{children:"Format Instructions"}),(0,r.jsx)(t.td,{children:"Pass to a prompt template to include formatting instructions for LLM responses."})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"output_parser"}),(0,r.jsx)(t.td,{children:"Output Parser"}),(0,r.jsx)(t.td,{children:"The constructed output parser that can be used to parse LLM responses."})]})]})]})]})}function p(e={}){const{wrapper:t}={...(0,d.R)(),...e.components};return t?(0,r.jsx)(t,{...e,children:(0,r.jsx)(j,{...e})}):j(e)}function m(e,t){throw new Error("Expected "+(t?"component":"object")+" `"+e+"` to be defined: you likely forgot to import, pass, or provide it.")}},72654:(e,t,n)=>{n.d(t,{A:()=>s});const s=n.p+"assets/images/astra_db_chat_memory_rounded-9746ca2bb69d3b07ac0a071f4b9471b3.png"},77111:(e,t,n)=>{n.d(t,{A:()=>s});const s=n.p+"assets/images/component-message-history-message-store-be0396aefa69496e8bc21452d240e04d.png"},82798:(e,t,n)=>{n.d(t,{A:()=>s});const s=n.p+"assets/images/component-structured-output-7bb5a996464cb83d4c94a893419bb176.png"},84443:(e,t,n)=>{n.d(t,{A:()=>d});n(96540);var s=n(64058),r=n(74848);function d(e){let{name:t,...n}=e;const d=s[t];return d?(0,r.jsx)(d,{...n}):null}},88103:(e,t,n)=>{n.d(t,{A:()=>s});const s=n.p+"assets/images/component-batch-run-0ad3fa6f082eb01504dae7df3cc4daad.png"}}]); \ No newline at end of file diff --git a/assets/js/e6c6a4d2.3b926452.js b/assets/js/e6c6a4d2.4a7e2d69.js similarity index 55% rename from assets/js/e6c6a4d2.3b926452.js rename to assets/js/e6c6a4d2.4a7e2d69.js index 9ce16e4ff0..1ad333f0bc 100644 --- a/assets/js/e6c6a4d2.3b926452.js +++ b/assets/js/e6c6a4d2.4a7e2d69.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.4.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_9\\": \\"\\",\\n \\"ut___\\": \\"\\",\\n \\"pariatur9c\\": \\"\\",\\n \\"esse_\\": \\"\\"\\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.4.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 \\"eiusmod_4d5\\": \\"\\",\\n \\"ullamco_6\\": \\"\\",\\n \\"nisi_7f\\": \\"\\"\\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/f66238ae.20b884ca.js b/assets/js/f66238ae.20b884ca.js deleted file mode 100644 index 4e2b17f38f..0000000000 --- a/assets/js/f66238ae.20b884ca.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunklangflow_docs=self.webpackChunklangflow_docs||[]).push([[3391],{42638:(e,t,r)=>{r.d(t,{A:()=>s});const s=r.p+"assets/images/component-hcd-example-flow-b82057600ce5e9e4a0f7ea0a61dcbf7f.png"},45175:(e,t,r)=>{r.r(t),r.d(t,{CH:()=>o,assets:()=>a,chCodeConfig:()=>x,contentTitle:()=>l,default:()=>p,frontMatter:()=>h,metadata:()=>s,toc:()=>j});const s=JSON.parse('{"id":"Components/components-vector-stores","title":"Vector stores","description":"Vector databases store vector data, which backs AI workloads like chatbots and Retrieval Augmented Generation.","source":"@site/docs/Components/components-vector-stores.md","sourceDirName":"Components","slug":"/components-vector-stores","permalink":"/components-vector-stores","draft":false,"unlisted":false,"tags":[],"version":"current","frontMatter":{"title":"Vector stores","slug":"/components-vector-stores"},"sidebar":"docs","previous":{"title":"Tools","permalink":"/components-tools"},"next":{"title":"Agents overview","permalink":"/agents-overview"}}');var n=r(74848),d=r(28453),i=r(24754),c=r(84443);const h={title:"Vector stores",slug:"/components-vector-stores"},l="Vector store components in Langflow",a={},o={annotations:i.hk,Code:i.Cy},x={staticMediaQuery:"not screen, (max-width: 768px)",lineNumbers:!0,showCopyButton:!0,themeName:"github-dark"},j=[{value:"Use a vector store component in a flow",id:"use-a-vector-store-component-in-a-flow",level:2},{value:"Astra DB Vector Store",id:"astra-db-vector-store",level:2},{value:"Inputs",id:"inputs",level:3},{value:"Outputs",id:"outputs",level:3},{value:"Generate embeddings",id:"generate-embeddings",level:3},{value:"Hybrid search",id:"hybrid-search",level:3},{value:"AstraDB Graph vector store",id:"astradb-graph-vector-store",level:2},{value:"Inputs",id:"inputs-1",level:3},{value:"Outputs",id:"outputs-1",level:3},{value:"Cassandra",id:"cassandra",level:2},{value:"Inputs",id:"inputs-2",level:3},{value:"Outputs",id:"outputs-2",level:3},{value:"Cassandra Graph Vector Store",id:"cassandra-graph-vector-store",level:2},{value:"Inputs",id:"inputs-3",level:3},{value:"Outputs",id:"outputs-3",level:3},{value:"Chroma DB",id:"chroma-db",level:2},{value:"Inputs",id:"inputs-4",level:3},{value:"Outputs",id:"outputs-4",level:3},{value:"Clickhouse",id:"clickhouse",level:2},{value:"Inputs",id:"inputs-5",level:3},{value:"Outputs",id:"outputs-5",level:3},{value:"Couchbase",id:"couchbase",level:2},{value:"Inputs",id:"inputs-6",level:3},{value:"Outputs",id:"outputs-6",level:3},{value:"Local DB",id:"local-db",level:2},{value:"Inputs",id:"inputs-7",level:3},{value:"Outputs",id:"outputs-7",level:3},{value:"Elasticsearch",id:"elasticsearch",level:2},{value:"Inputs",id:"inputs-8",level:3},{value:"Outputs",id:"outputs-8",level:3},{value:"FAISS",id:"faiss",level:2},{value:"Inputs",id:"inputs-9",level:3},{value:"Outputs",id:"outputs-9",level:3},{value:"Graph RAG",id:"graph-rag",level:2},{value:"Inputs",id:"inputs-10",level:3},{value:"Outputs",id:"outputs-10",level:3},{value:"Hyper-Converged Database (HCD) Vector Store",id:"hyper-converged-database-hcd-vector-store",level:2},{value:"Inputs",id:"inputs-11",level:3},{value:"Outputs",id:"outputs-11",level:3},{value:"Milvus",id:"milvus",level:2},{value:"Inputs",id:"inputs-12",level:3},{value:"Outputs",id:"outputs-12",level:3},{value:"MongoDB Atlas",id:"mongodb-atlas",level:2},{value:"Inputs",id:"inputs-13",level:3},{value:"Outputs",id:"outputs-13",level:3},{value:"Opensearch",id:"opensearch",level:2},{value:"Inputs",id:"inputs-14",level:3},{value:"Outputs",id:"outputs-14",level:3},{value:"PGVector",id:"pgvector",level:2},{value:"Inputs",id:"inputs-15",level:3},{value:"Outputs",id:"outputs-15",level:3},{value:"Pinecone",id:"pinecone",level:2},{value:"Inputs",id:"inputs-16",level:3},{value:"Outputs",id:"outputs-16",level:3},{value:"Qdrant",id:"qdrant",level:2},{value:"Inputs",id:"inputs-17",level:3},{value:"Outputs",id:"outputs-17",level:3},{value:"Redis",id:"redis",level:2},{value:"Inputs",id:"inputs-18",level:3},{value:"Outputs",id:"outputs-18",level:3},{value:"Supabase",id:"supabase",level:2},{value:"Inputs",id:"inputs-19",level:3},{value:"Outputs",id:"outputs-19",level:3},{value:"Upstash",id:"upstash",level:2},{value:"Inputs",id:"inputs-20",level:3},{value:"Outputs",id:"outputs-20",level:3},{value:"Vectara",id:"vectara",level:2},{value:"Inputs",id:"inputs-21",level:3},{value:"Outputs",id:"outputs-21",level:3},{value:"Vectara Search",id:"vectara-search",level:2},{value:"Inputs",id:"inputs-22",level:3},{value:"Outputs",id:"outputs-22",level:3},{value:"Weaviate",id:"weaviate",level:2},{value:"Inputs",id:"inputs-23",level:3},{value:"Outputs",id:"outputs-23",level:3},{value:"Weaviate Search",id:"weaviate-search",level:2},{value:"Inputs",id:"inputs-24",level:3},{value:"Outputs",id:"outputs-24",level:3}];function u(e){const t={a:"a",admonition:"admonition",code:"code",h1:"h1",h2:"h2",h3:"h3",header:"header",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,d.R)(),...e.components};return o||m("CH",!1),o.Code||m("CH.Code",!0),(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)("style",{dangerouslySetInnerHTML:{__html:'[data-ch-theme="github-dark"] { --ch-t-colorScheme: dark;--ch-t-foreground: #c9d1d9;--ch-t-background: #0d1117;--ch-t-lighter-inlineBackground: #0d1117e6;--ch-t-editor-background: #0d1117;--ch-t-editor-foreground: #c9d1d9;--ch-t-editor-lineHighlightBackground: #6e76811a;--ch-t-editor-rangeHighlightBackground: #ffffff0b;--ch-t-editor-infoForeground: #3794FF;--ch-t-editor-selectionBackground: #264F78;--ch-t-focusBorder: #1f6feb;--ch-t-tab-activeBackground: #0d1117;--ch-t-tab-activeForeground: #c9d1d9;--ch-t-tab-inactiveBackground: #010409;--ch-t-tab-inactiveForeground: #8b949e;--ch-t-tab-border: #30363d;--ch-t-tab-activeBorder: #0d1117;--ch-t-editorGroup-border: #30363d;--ch-t-editorGroupHeader-tabsBackground: #010409;--ch-t-editorLineNumber-foreground: #6e7681;--ch-t-input-background: #0d1117;--ch-t-input-foreground: #c9d1d9;--ch-t-input-border: #30363d;--ch-t-icon-foreground: #8b949e;--ch-t-sideBar-background: #010409;--ch-t-sideBar-foreground: #c9d1d9;--ch-t-sideBar-border: #30363d;--ch-t-list-activeSelectionBackground: #6e768166;--ch-t-list-activeSelectionForeground: #c9d1d9;--ch-t-list-hoverBackground: #6e76811a;--ch-t-list-hoverForeground: #c9d1d9; }'}}),"\n","\n",(0,n.jsx)(t.header,{children:(0,n.jsx)(t.h1,{id:"vector-store-components-in-langflow",children:"Vector store components in Langflow"})}),"\n",(0,n.jsx)(t.p,{children:"Vector databases store vector data, which backs AI workloads like chatbots and Retrieval Augmented Generation."}),"\n",(0,n.jsx)(t.p,{children:"Vector database components establish connections to existing vector databases or create in-memory vector stores for storing and retrieving vector data."}),"\n",(0,n.jsxs)(t.p,{children:["Vector database components are distinct from ",(0,n.jsx)(t.a,{href:"/components-memories",children:"memory components"}),", which are built specifically for storing and retrieving chat messages from external databases."]}),"\n",(0,n.jsx)(t.h2,{id:"use-a-vector-store-component-in-a-flow",children:"Use a vector store component in a flow"}),"\n",(0,n.jsxs)(t.p,{children:["This example uses the ",(0,n.jsx)(t.strong,{children:"Astra DB vector store"})," component. Your vector store component's parameters and authentication may be different, but the document ingestion workflow is the same. A document is loaded from a local machine and chunked. The Astra DB vector store generates embeddings with the connected ",(0,n.jsx)(t.a,{href:"/components-models",children:"model"})," component, and stores them in the connected Astra DB database."]}),"\n",(0,n.jsx)(t.p,{children:"This vector data can then be retrieved for workloads like Retrieval Augmented Generation."}),"\n",(0,n.jsx)(t.p,{children:(0,n.jsx)(t.img,{src:r(67719).A+"",width:"2734",height:"1402"})}),"\n",(0,n.jsxs)(t.p,{children:["The user's chat input is embedded and compared to the vectors embedded during document ingestion for a similarity search.\nThe results are output from the vector database component as a ",(0,n.jsx)(t.a,{href:"/concepts-objects",children:"Data"})," object and parsed into text.\nThis text fills the ",(0,n.jsx)(t.code,{children:"{context}"})," variable in the ",(0,n.jsx)(t.strong,{children:"Prompt"})," component, which informs the ",(0,n.jsx)(t.strong,{children:"Open AI model"})," component's responses."]}),"\n",(0,n.jsxs)(t.p,{children:["Alternatively, connect the vector database component's ",(0,n.jsx)(t.strong,{children:"Retriever"})," port to a ",(0,n.jsx)(t.a,{href:"components-tools#retriever-tool",children:"retriever tool"}),", and then to an ",(0,n.jsx)(t.a,{href:"/components-agents",children:"agent"})," component. This enables the agent to use your vector database as a tool and make decisions based on the available data."]}),"\n",(0,n.jsx)(t.p,{children:(0,n.jsx)(t.img,{src:r(59072).A+"",width:"2414",height:"1602"})}),"\n",(0,n.jsx)(t.h2,{id:"astra-db-vector-store",children:"Astra DB Vector Store"}),"\n",(0,n.jsx)(t.p,{children:"This component implements a Vector Store using Astra DB with search capabilities."}),"\n",(0,n.jsxs)(t.p,{children:["For more information, see the ",(0,n.jsx)(t.a,{href:"https://docs.datastax.com/en/astra-db-serverless/databases/create-database.html",children:"DataStax documentation"}),"."]}),"\n",(0,n.jsx)(t.h3,{id:"inputs",children:"Inputs"}),"\n",(0,n.jsxs)(t.table,{children:[(0,n.jsx)(t.thead,{children:(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.th,{children:"Name"}),(0,n.jsx)(t.th,{children:"Display Name"}),(0,n.jsx)(t.th,{children:"Info"})]})}),(0,n.jsxs)(t.tbody,{children:[(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"token"}),(0,n.jsx)(t.td,{children:"Astra DB Application Token"}),(0,n.jsx)(t.td,{children:"The authentication token for accessing Astra DB."})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"environment"}),(0,n.jsx)(t.td,{children:"Environment"}),(0,n.jsxs)(t.td,{children:["The environment for the Astra DB API Endpoint. For example, ",(0,n.jsx)(t.code,{children:"dev"})," or ",(0,n.jsx)(t.code,{children:"prod"}),"."]})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"database_name"}),(0,n.jsx)(t.td,{children:"Database"}),(0,n.jsx)(t.td,{children:"The database name for the Astra DB instance."})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"api_endpoint"}),(0,n.jsx)(t.td,{children:"Astra DB API Endpoint"}),(0,n.jsx)(t.td,{children:"The API endpoint for the Astra DB instance. This supersedes the database selection."})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"collection_name"}),(0,n.jsx)(t.td,{children:"Collection"}),(0,n.jsx)(t.td,{children:"The name of the collection within Astra DB where the vectors are stored."})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"keyspace"}),(0,n.jsx)(t.td,{children:"Keyspace"}),(0,n.jsx)(t.td,{children:"An optional keyspace within Astra DB to use for the collection."})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"embedding_choice"}),(0,n.jsx)(t.td,{children:"Embedding Model or Astra Vectorize"}),(0,n.jsx)(t.td,{children:"Choose an embedding model or use Astra vectorize."})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"embedding_model"}),(0,n.jsx)(t.td,{children:"Embedding Model"}),(0,n.jsx)(t.td,{children:"Specify the embedding model. Not required for Astra vectorize collections."})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"number_of_results"}),(0,n.jsx)(t.td,{children:"Number of Search Results"}),(0,n.jsxs)(t.td,{children:["The number of search results to return (default: ",(0,n.jsx)(t.code,{children:"4"}),")."]})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"search_type"}),(0,n.jsx)(t.td,{children:"Search Type"}),(0,n.jsxs)(t.td,{children:["The search type to use. The options are ",(0,n.jsx)(t.code,{children:"Similarity"}),", ",(0,n.jsx)(t.code,{children:"Similarity with score threshold"}),", and ",(0,n.jsx)(t.code,{children:"MMR (Max Marginal Relevance)"}),"."]})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"search_score_threshold"}),(0,n.jsx)(t.td,{children:"Search Score Threshold"}),(0,n.jsxs)(t.td,{children:["The minimum similarity score threshold for search results when using the ",(0,n.jsx)(t.code,{children:"Similarity with score threshold"})," option."]})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"advanced_search_filter"}),(0,n.jsx)(t.td,{children:"Search Metadata Filter"}),(0,n.jsx)(t.td,{children:"An optional dictionary of filters to apply to the search query."})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"autodetect_collection"}),(0,n.jsx)(t.td,{children:"Autodetect Collection"}),(0,n.jsx)(t.td,{children:"A boolean flag to determine whether to autodetect the collection."})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"content_field"}),(0,n.jsx)(t.td,{children:"Content Field"}),(0,n.jsx)(t.td,{children:"A field to use as the text content field for the vector store."})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"deletion_field"}),(0,n.jsx)(t.td,{children:"Deletion Based On Field"}),(0,n.jsx)(t.td,{children:"When provided, documents in the target collection with metadata field values matching the input metadata field value are deleted before new data is loaded."})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"ignore_invalid_documents"}),(0,n.jsx)(t.td,{children:"Ignore Invalid Documents"}),(0,n.jsx)(t.td,{children:"A boolean flag to determine whether to ignore invalid documents at runtime."})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"astradb_vectorstore_kwargs"}),(0,n.jsx)(t.td,{children:"AstraDBVectorStore Parameters"}),(0,n.jsx)(t.td,{children:"An optional dictionary of additional parameters for the AstraDBVectorStore."})]})]})]}),"\n",(0,n.jsx)(t.h3,{id:"outputs",children:"Outputs"}),"\n",(0,n.jsxs)(t.table,{children:[(0,n.jsx)(t.thead,{children:(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.th,{children:"Name"}),(0,n.jsx)(t.th,{children:"Display Name"}),(0,n.jsx)(t.th,{children:"Info"})]})}),(0,n.jsxs)(t.tbody,{children:[(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"vector_store"}),(0,n.jsx)(t.td,{children:"Vector Store"}),(0,n.jsx)(t.td,{children:"Astra DB vector store instance configured with the specified parameters."})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"search_results"}),(0,n.jsx)(t.td,{children:"Search Results"}),(0,n.jsxs)(t.td,{children:["The results of the similarity search as a list of ",(0,n.jsx)(t.a,{href:"/concepts-objects#data-object",children:"Data"})," objects."]})]})]})]}),"\n",(0,n.jsx)(t.h3,{id:"generate-embeddings",children:"Generate embeddings"}),"\n",(0,n.jsxs)(t.p,{children:["The ",(0,n.jsx)(t.strong,{children:"Astra DB Vector Store"})," component offers two methods for generating embeddings."]}),"\n",(0,n.jsxs)(t.ol,{children:["\n",(0,n.jsxs)(t.li,{children:["\n",(0,n.jsxs)(t.p,{children:[(0,n.jsx)(t.strong,{children:"Embedding Model"}),": Use your own embedding model by connecting an ",(0,n.jsx)(t.a,{href:"/components-embedding-models",children:"Embeddings"})," component in Langflow."]}),"\n"]}),"\n",(0,n.jsxs)(t.li,{children:["\n",(0,n.jsxs)(t.p,{children:[(0,n.jsx)(t.strong,{children:"Astra Vectorize"}),": Use Astra DB's built-in embedding generation service. When creating a new collection, choose the embeddings provider and models, including NVIDIA's ",(0,n.jsx)(t.code,{children:"NV-Embed-QA"})," model hosted by Datastax."]}),"\n"]}),"\n"]}),"\n",(0,n.jsx)(t.admonition,{type:"important",children:(0,n.jsx)(t.p,{children:"The embedding model selection is made when creating a new collection and cannot be changed later."})}),"\n",(0,n.jsxs)(t.p,{children:["For an example of using the ",(0,n.jsx)(t.strong,{children:"Astra DB Vector Store"})," component with an embedding model, see the ",(0,n.jsx)(t.a,{href:"/starter-projects-vector-store-rag",children:"Vector Store RAG starter project"}),"."]}),"\n",(0,n.jsxs)(t.p,{children:["For more information, see the ",(0,n.jsx)(t.a,{href:"https://docs.datastax.com/en/astra-db-serverless/databases/embedding-generation.html",children:"Astra DB Serverless documentation"}),"."]}),"\n",(0,n.jsx)(t.h3,{id:"hybrid-search",children:"Hybrid search"}),"\n",(0,n.jsxs)(t.p,{children:["The ",(0,n.jsx)(t.strong,{children:"Astra DB"})," component includes ",(0,n.jsx)(t.strong,{children:"hybrid search"}),", which is enabled by default."]}),"\n",(0,n.jsxs)(t.p,{children:["The component fields related to hybrid search are ",(0,n.jsx)(t.strong,{children:"Search Query"}),", ",(0,n.jsx)(t.strong,{children:"Lexical Terms"}),", and ",(0,n.jsx)(t.strong,{children:"Reranker"}),"."]}),"\n",(0,n.jsxs)(t.ul,{children:["\n",(0,n.jsxs)(t.li,{children:[(0,n.jsx)(t.strong,{children:"Search Query"})," finds results by vector similarity."]}),"\n",(0,n.jsxs)(t.li,{children:[(0,n.jsx)(t.strong,{children:"Lexical Terms"})," is a comma-separated string of keywords, like ",(0,n.jsx)(t.code,{children:"features, data, attributes, characteristics"}),"."]}),"\n",(0,n.jsxs)(t.li,{children:[(0,n.jsx)(t.strong,{children:"Reranker"})," is the re-ranker model used in the hybrid search.\nThe re-ranker model is ",(0,n.jsx)(t.code,{children:"nvidia/llama-3.2-nv.reranker"}),"."]}),"\n"]}),"\n",(0,n.jsxs)(t.p,{children:[(0,n.jsx)(t.a,{href:"https://docs.datastax.com/en/astra-db-serverless/databases/hybrid-search.html",children:"Hybrid search"})," performs a vector similarity search and a lexical search, compares the results of both searches, and then returns the most relevant results overall."]}),"\n",(0,n.jsx)(t.admonition,{type:"important",children:(0,n.jsxs)(t.p,{children:["To use hybrid search, your collection must be created with vector, lexical, and rerank capabilities enabled. These capabilities are enabled by default when you create a collection in a database in the AWS us-east-2 region.\nFor more information, see the ",(0,n.jsx)(t.a,{href:"https://docs.datastax.com/en/astra-db-serverless/api-reference/collection-methods/create-collection.html#example-hybrid",children:"DataStax documentation"}),"."]})}),"\n",(0,n.jsxs)(t.p,{children:["To use ",(0,n.jsx)(t.strong,{children:"Hybrid search"})," in the ",(0,n.jsx)(t.strong,{children:"Astra DB"})," component, do the following:"]}),"\n",(0,n.jsxs)(t.ol,{children:["\n",(0,n.jsxs)(t.li,{children:["Click ",(0,n.jsx)(t.strong,{children:"New Flow"})," > ",(0,n.jsx)(t.strong,{children:"RAG"})," > ",(0,n.jsx)(t.strong,{children:"Hybrid Search RAG"}),"."]}),"\n",(0,n.jsxs)(t.li,{children:["In the ",(0,n.jsx)(t.strong,{children:"OpenAI"})," model component, add your ",(0,n.jsx)(t.strong,{children:"OpenAI API key"}),"."]}),"\n",(0,n.jsxs)(t.li,{children:["In the ",(0,n.jsx)(t.strong,{children:"Astra DB"})," vector store component, add your ",(0,n.jsx)(t.strong,{children:"Astra DB Application Token"}),"."]}),"\n",(0,n.jsxs)(t.li,{children:["In the ",(0,n.jsx)(t.strong,{children:"Database"})," field, select your database."]}),"\n",(0,n.jsxs)(t.li,{children:["In the ",(0,n.jsx)(t.strong,{children:"Collection"})," field, select or create a collection with hybrid search capabilities enabled."]}),"\n",(0,n.jsxs)(t.li,{children:["In the ",(0,n.jsx)(t.strong,{children:"Playground"}),", enter a question about your data, such as ",(0,n.jsx)(t.code,{children:"What are the features of my data?"}),"\nYour query is sent to two components: an ",(0,n.jsx)(t.strong,{children:"OpenAI"})," model component and the ",(0,n.jsx)(t.strong,{children:"Astra DB"})," vector database component.\nThe ",(0,n.jsx)(t.strong,{children:"OpenAI"})," component contains a prompt for creating the lexical query from your input:"]}),"\n"]}),"\n",(0,n.jsx)(o.Code,{codeConfig:x,northPanel:{tabs:[""],active:"",heightRatio:1},files:[{name:"",focus:"",code:{lines:[{tokens:[{content:"You are a database query planner that takes a user's requests, and then converts to a search against the subject matter in question.",props:{}}]},{tokens:[{content:"You should convert the query into:",props:{}}]},{tokens:[{content:"1. A list of keywords to use against a Lucene text analyzer index, no more than 4. Strictly unigrams.",props:{}}]},{tokens:[{content:"2. A question to use as the basis for a QA embedding engine.",props:{}}]},{tokens:[{content:"Avoid common keywords associated with the user's subject matter.",props:{}}]}],lang:"text"},annotations:[]}]}),"\n",(0,n.jsxs)(t.ol,{start:"7",children:["\n",(0,n.jsxs)(t.li,{children:["To view the keywords and questions the ",(0,n.jsx)(t.strong,{children:"OpenAI"})," component generates from your collection, in the ",(0,n.jsx)(t.strong,{children:"OpenAI"})," component, click ",(0,n.jsx)(c.A,{name:"TextSearch","aria-label":"Inspect icon"}),"."]}),"\n"]}),"\n",(0,n.jsx)(o.Code,{codeConfig:x,northPanel:{tabs:[""],active:"",heightRatio:1},files:[{name:"",focus:"",code:{lines:[{tokens:[{content:"1. Keywords: features, data, attributes, characteristics",props:{}}]},{tokens:[{content:"2. Question: What characteristics can be identified in my data?",props:{}}]}],lang:"text"},annotations:[]}]}),"\n",(0,n.jsxs)(t.ol,{start:"8",children:["\n",(0,n.jsxs)(t.li,{children:["\n",(0,n.jsxs)(t.p,{children:["To view the ",(0,n.jsx)(t.a,{href:"/concepts-objects#dataframe-object",children:"DataFrame"})," generated from the ",(0,n.jsx)(t.strong,{children:"OpenAI"})," component's response, in the ",(0,n.jsx)(t.strong,{children:"Structured Output"})," component, click ",(0,n.jsx)(c.A,{name:"TextSearch","aria-label":"Inspect icon"}),".\nThe DataFrame is passed to a ",(0,n.jsx)(t.strong,{children:"Parser"})," component, which parses the contents of the ",(0,n.jsx)(t.strong,{children:"Keywords"})," column into a string."]}),"\n",(0,n.jsxs)(t.p,{children:["This string of comma-separated words is passed to the ",(0,n.jsx)(t.strong,{children:"Lexical Terms"})," port of the ",(0,n.jsx)(t.strong,{children:"Astra DB"})," component.\nNote that the ",(0,n.jsx)(t.strong,{children:"Search Query"})," port of the Astra DB port is connected to the ",(0,n.jsx)(t.strong,{children:"Chat Input"})," component from step 6.\nThis ",(0,n.jsx)(t.strong,{children:"Search Query"})," is vectorized, and both the ",(0,n.jsx)(t.strong,{children:"Search Query"})," and ",(0,n.jsx)(t.strong,{children:"Lexical Terms"})," content are sent to the reranker at the ",(0,n.jsx)(t.code,{children:"find_and_rerank"})," endpoint."]}),"\n",(0,n.jsxs)(t.p,{children:["The reranker compares the vector search results against the string of terms from the lexical search.\nThe highest-ranked results of your hybrid search are returned to the ",(0,n.jsx)(t.strong,{children:"Playground"}),"."]}),"\n"]}),"\n"]}),"\n",(0,n.jsxs)(t.p,{children:["For more information, see the ",(0,n.jsx)(t.a,{href:"https://docs.datastax.com/en/astra-db-serverless/databases/hybrid-search.html",children:"DataStax documentation"}),"."]}),"\n",(0,n.jsx)(t.h2,{id:"astradb-graph-vector-store",children:"AstraDB Graph vector store"}),"\n",(0,n.jsxs)(t.p,{children:["This component implements a Vector Store using AstraDB with graph capabilities.\nFor more information, see the ",(0,n.jsx)(t.a,{href:"https://docs.datastax.com/en/astra-db-serverless/tutorials/graph-rag.html",children:"Astra DB Serverless documentation"}),"."]}),"\n",(0,n.jsx)(t.h3,{id:"inputs-1",children:"Inputs"}),"\n",(0,n.jsxs)(t.table,{children:[(0,n.jsx)(t.thead,{children:(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.th,{children:"Name"}),(0,n.jsx)(t.th,{children:"Display Name"}),(0,n.jsx)(t.th,{children:"Info"})]})}),(0,n.jsxs)(t.tbody,{children:[(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"collection_name"}),(0,n.jsx)(t.td,{children:"Collection Name"}),(0,n.jsx)(t.td,{children:"The name of the collection within AstraDB where the vectors will be stored (required)"})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"token"}),(0,n.jsx)(t.td,{children:"Astra DB Application Token"}),(0,n.jsx)(t.td,{children:"Authentication token for accessing AstraDB (required)"})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"api_endpoint"}),(0,n.jsx)(t.td,{children:"API Endpoint"}),(0,n.jsx)(t.td,{children:"API endpoint URL for the AstraDB service (required)"})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"search_input"}),(0,n.jsx)(t.td,{children:"Search Input"}),(0,n.jsx)(t.td,{children:"Query string for similarity search"})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"ingest_data"}),(0,n.jsx)(t.td,{children:"Ingest Data"}),(0,n.jsx)(t.td,{children:"Data to be ingested into the vector store"})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"namespace"}),(0,n.jsx)(t.td,{children:"Namespace"}),(0,n.jsx)(t.td,{children:"Optional namespace within AstraDB to use for the collection"})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"embedding"}),(0,n.jsx)(t.td,{children:"Embedding Model"}),(0,n.jsx)(t.td,{children:"Embedding model to use"})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"metric"}),(0,n.jsx)(t.td,{children:"Metric"}),(0,n.jsx)(t.td,{children:'Distance metric for vector comparisons (options: "cosine", "euclidean", "dot_product")'})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"setup_mode"}),(0,n.jsx)(t.td,{children:"Setup Mode"}),(0,n.jsx)(t.td,{children:'Configuration mode for setting up the vector store (options: "Sync", "Async", "Off")'})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"pre_delete_collection"}),(0,n.jsx)(t.td,{children:"Pre Delete Collection"}),(0,n.jsx)(t.td,{children:"Boolean flag to determine whether to delete the collection before creating a new one"})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"number_of_results"}),(0,n.jsx)(t.td,{children:"Number of Results"}),(0,n.jsx)(t.td,{children:"Number of results to return in similarity search (default: 4)"})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"search_type"}),(0,n.jsx)(t.td,{children:"Search Type"}),(0,n.jsx)(t.td,{children:'Search type to use (options: "Similarity", "Graph Traversal", "Hybrid")'})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"traversal_depth"}),(0,n.jsx)(t.td,{children:"Traversal Depth"}),(0,n.jsx)(t.td,{children:"Maximum depth for graph traversal searches (default: 1)"})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"search_score_threshold"}),(0,n.jsx)(t.td,{children:"Search Score Threshold"}),(0,n.jsx)(t.td,{children:"Minimum similarity score threshold for search results"})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"search_filter"}),(0,n.jsx)(t.td,{children:"Search Metadata Filter"}),(0,n.jsx)(t.td,{children:"Optional dictionary of filters to apply to the search query"})]})]})]}),"\n",(0,n.jsx)(t.h3,{id:"outputs-1",children:"Outputs"}),"\n",(0,n.jsxs)(t.table,{children:[(0,n.jsx)(t.thead,{children:(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.th,{children:"Name"}),(0,n.jsx)(t.th,{children:"Display Name"}),(0,n.jsx)(t.th,{children:"Info"})]})}),(0,n.jsxs)(t.tbody,{children:[(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"vector_store"}),(0,n.jsx)(t.td,{children:"Vector Store"}),(0,n.jsx)(t.td,{children:"Astra DB graph vector store instance configured with the specified parameters."})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"search_results"}),(0,n.jsx)(t.td,{children:"Search Results"}),(0,n.jsxs)(t.td,{children:["The results of the similarity search as a list of ",(0,n.jsx)(t.code,{children:"Data"})," objects."]})]})]})]}),"\n",(0,n.jsx)(t.h2,{id:"cassandra",children:"Cassandra"}),"\n",(0,n.jsxs)(t.p,{children:["This component creates a Cassandra Vector Store with search capabilities.\nFor more information, see the ",(0,n.jsx)(t.a,{href:"https://cassandra.apache.org/doc/latest/cassandra/vector-search/overview.html",children:"Cassandra documentation"}),"."]}),"\n",(0,n.jsx)(t.h3,{id:"inputs-2",children:"Inputs"}),"\n",(0,n.jsxs)(t.table,{children:[(0,n.jsx)(t.thead,{children:(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.th,{children:"Name"}),(0,n.jsx)(t.th,{children:"Type"}),(0,n.jsx)(t.th,{children:"Description"})]})}),(0,n.jsxs)(t.tbody,{children:[(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"database_ref"}),(0,n.jsx)(t.td,{children:"String"}),(0,n.jsx)(t.td,{children:"Contact points for the database or AstraDB database ID"})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"username"}),(0,n.jsx)(t.td,{children:"String"}),(0,n.jsx)(t.td,{children:"Username for the database (leave empty for AstraDB)"})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"token"}),(0,n.jsx)(t.td,{children:"SecretString"}),(0,n.jsx)(t.td,{children:"User password for the database or AstraDB token"})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"keyspace"}),(0,n.jsx)(t.td,{children:"String"}),(0,n.jsx)(t.td,{children:"Table Keyspace or AstraDB namespace"})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"table_name"}),(0,n.jsx)(t.td,{children:"String"}),(0,n.jsx)(t.td,{children:"Name of the table or AstraDB collection"})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"ttl_seconds"}),(0,n.jsx)(t.td,{children:"Integer"}),(0,n.jsx)(t.td,{children:"Time-to-live for added texts"})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"batch_size"}),(0,n.jsx)(t.td,{children:"Integer"}),(0,n.jsx)(t.td,{children:"Number of data to process in a single batch"})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"setup_mode"}),(0,n.jsx)(t.td,{children:"String"}),(0,n.jsx)(t.td,{children:"Configuration mode for setting up the Cassandra table"})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"cluster_kwargs"}),(0,n.jsx)(t.td,{children:"Dict"}),(0,n.jsx)(t.td,{children:"Additional keyword arguments for the Cassandra cluster"})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"search_query"}),(0,n.jsx)(t.td,{children:"String"}),(0,n.jsx)(t.td,{children:"Query for similarity search"})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"ingest_data"}),(0,n.jsx)(t.td,{children:"Data"}),(0,n.jsx)(t.td,{children:"Data to be ingested into the vector store"})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"embedding"}),(0,n.jsx)(t.td,{children:"Embeddings"}),(0,n.jsx)(t.td,{children:"Embedding function to use"})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"number_of_results"}),(0,n.jsx)(t.td,{children:"Integer"}),(0,n.jsx)(t.td,{children:"Number of results to return in search"})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"search_type"}),(0,n.jsx)(t.td,{children:"String"}),(0,n.jsx)(t.td,{children:"Type of search to perform"})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"search_score_threshold"}),(0,n.jsx)(t.td,{children:"Float"}),(0,n.jsx)(t.td,{children:"Minimum similarity score for search results"})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"search_filter"}),(0,n.jsx)(t.td,{children:"Dict"}),(0,n.jsx)(t.td,{children:"Metadata filters for search query"})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"body_search"}),(0,n.jsx)(t.td,{children:"String"}),(0,n.jsx)(t.td,{children:"Document textual search terms"})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"enable_body_search"}),(0,n.jsx)(t.td,{children:"Boolean"}),(0,n.jsx)(t.td,{children:"Flag to enable body search"})]})]})]}),"\n",(0,n.jsx)(t.h3,{id:"outputs-2",children:"Outputs"}),"\n",(0,n.jsxs)(t.table,{children:[(0,n.jsx)(t.thead,{children:(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.th,{children:"Name"}),(0,n.jsx)(t.th,{children:"Type"}),(0,n.jsx)(t.th,{children:"Description"})]})}),(0,n.jsxs)(t.tbody,{children:[(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"vector_store"}),(0,n.jsx)(t.td,{children:"Cassandra"}),(0,n.jsx)(t.td,{children:"A Cassandra vector store instance configured with the specified parameters."})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"search_results"}),(0,n.jsx)(t.td,{children:"List[Data]"}),(0,n.jsxs)(t.td,{children:["The results of the similarity search as a list of ",(0,n.jsx)(t.code,{children:"Data"})," objects."]})]})]})]}),"\n",(0,n.jsx)(t.h2,{id:"cassandra-graph-vector-store",children:"Cassandra Graph Vector Store"}),"\n",(0,n.jsx)(t.p,{children:"This component implements a Cassandra Graph Vector Store with search capabilities."}),"\n",(0,n.jsx)(t.h3,{id:"inputs-3",children:"Inputs"}),"\n",(0,n.jsxs)(t.table,{children:[(0,n.jsx)(t.thead,{children:(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.th,{children:"Name"}),(0,n.jsx)(t.th,{children:"Display Name"}),(0,n.jsx)(t.th,{children:"Info"})]})}),(0,n.jsxs)(t.tbody,{children:[(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"database_ref"}),(0,n.jsx)(t.td,{children:"Contact Points / Astra Database ID"}),(0,n.jsx)(t.td,{children:"Contact points for the database or AstraDB database ID (required)"})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"username"}),(0,n.jsx)(t.td,{children:"Username"}),(0,n.jsx)(t.td,{children:"Username for the database (leave empty for AstraDB)"})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"token"}),(0,n.jsx)(t.td,{children:"Password / AstraDB Token"}),(0,n.jsx)(t.td,{children:"User password for the database or AstraDB token (required)"})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"keyspace"}),(0,n.jsx)(t.td,{children:"Keyspace"}),(0,n.jsx)(t.td,{children:"Table Keyspace or AstraDB namespace (required)"})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"table_name"}),(0,n.jsx)(t.td,{children:"Table Name"}),(0,n.jsx)(t.td,{children:"The name of the table or AstraDB collection where vectors will be stored (required)"})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"setup_mode"}),(0,n.jsx)(t.td,{children:"Setup Mode"}),(0,n.jsx)(t.td,{children:'Configuration mode for setting up the Cassandra table (options: "Sync", "Off", default: "Sync")'})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"cluster_kwargs"}),(0,n.jsx)(t.td,{children:"Cluster arguments"}),(0,n.jsx)(t.td,{children:"Optional dictionary of additional keyword arguments for the Cassandra cluster"})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"search_query"}),(0,n.jsx)(t.td,{children:"Search Query"}),(0,n.jsx)(t.td,{children:"Query string for similarity search"})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"ingest_data"}),(0,n.jsx)(t.td,{children:"Ingest Data"}),(0,n.jsx)(t.td,{children:"Data to be ingested into the vector store (list of Data objects)"})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"embedding"}),(0,n.jsx)(t.td,{children:"Embedding"}),(0,n.jsx)(t.td,{children:"Embedding model to use"})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"number_of_results"}),(0,n.jsx)(t.td,{children:"Number of Results"}),(0,n.jsx)(t.td,{children:"Number of results to return in similarity search (default: 4)"})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"search_type"}),(0,n.jsx)(t.td,{children:"Search Type"}),(0,n.jsx)(t.td,{children:'Search type to use (options: "Traversal", "MMR traversal", "Similarity", "Similarity with score threshold", "MMR (Max Marginal Relevance)", default: "Traversal")'})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"depth"}),(0,n.jsx)(t.td,{children:"Depth of traversal"}),(0,n.jsx)(t.td,{children:'The maximum depth of edges to traverse (for "Traversal" or "MMR traversal" search types, default: 1)'})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"search_score_threshold"}),(0,n.jsx)(t.td,{children:"Search Score Threshold"}),(0,n.jsx)(t.td,{children:'Minimum similarity score threshold for search results (for "Similarity with score threshold" search type)'})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"search_filter"}),(0,n.jsx)(t.td,{children:"Search Metadata Filter"}),(0,n.jsx)(t.td,{children:"Optional dictionary of filters to apply to the search query"})]})]})]}),"\n",(0,n.jsx)(t.h3,{id:"outputs-3",children:"Outputs"}),"\n",(0,n.jsxs)(t.table,{children:[(0,n.jsx)(t.thead,{children:(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.th,{children:"Name"}),(0,n.jsx)(t.th,{children:"Display Name"}),(0,n.jsx)(t.th,{children:"Info"})]})}),(0,n.jsxs)(t.tbody,{children:[(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"vector_store"}),(0,n.jsx)(t.td,{children:"Vector Store"}),(0,n.jsx)(t.td,{children:"A Cassandra Graph vector store instance configured with the specified parameters."})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"search_results"}),(0,n.jsx)(t.td,{children:"Search Results"}),(0,n.jsxs)(t.td,{children:["The results of the similarity search as a list of ",(0,n.jsx)(t.code,{children:"Data"})," objects."]})]})]})]}),"\n",(0,n.jsx)(t.h2,{id:"chroma-db",children:"Chroma DB"}),"\n",(0,n.jsx)(t.p,{children:"This component creates a Chroma Vector Store with search capabilities."}),"\n",(0,n.jsx)(t.p,{children:"The Chroma DB component creates an ephemeral vector database for experimentation and vector storage."}),"\n",(0,n.jsxs)(t.ol,{children:["\n",(0,n.jsxs)(t.li,{children:["To use this component in a flow, connect it to a component that outputs ",(0,n.jsx)(t.strong,{children:"Data"})," or ",(0,n.jsx)(t.strong,{children:"DataFrame"}),".\nThis example splits text from a ",(0,n.jsx)(t.a,{href:"/components-data#url",children:"URL"})," component, and computes embeddings with the connected ",(0,n.jsx)(t.strong,{children:"OpenAI Embeddings"})," component. Chroma DB computes embeddings by default, but you can connect your own embeddings model, as seen in this example."]}),"\n"]}),"\n",(0,n.jsx)(t.p,{children:(0,n.jsx)(t.img,{alt:"ChromaDB receiving split text",src:r(88690).A+"",width:"1127",height:"811"})}),"\n",(0,n.jsxs)(t.ol,{start:"2",children:["\n",(0,n.jsxs)(t.li,{children:["In the ",(0,n.jsx)(t.strong,{children:"Chroma DB"})," component, in the ",(0,n.jsx)(t.strong,{children:"Collection"})," field, enter a name for your embeddings collection."]}),"\n",(0,n.jsxs)(t.li,{children:["Optionally, to persist the Chroma database, in the ",(0,n.jsx)(t.strong,{children:"Persist"})," field, enter a directory to store the ",(0,n.jsx)(t.code,{children:"chroma.sqlite3"})," file.\nThis example uses ",(0,n.jsx)(t.code,{children:"./chroma-db"})," to create a directory relative to where Langflow is running."]}),"\n",(0,n.jsxs)(t.li,{children:["To load data and embeddings into your Chroma database, in the ",(0,n.jsx)(t.strong,{children:"Chroma DB"})," component, click ",(0,n.jsx)(c.A,{name:"Play","aria-label":"Play icon"}),"."]}),"\n"]}),"\n",(0,n.jsx)(t.admonition,{type:"tip",children:(0,n.jsxs)(t.p,{children:["When loading duplicate documents, enable the ",(0,n.jsx)(t.strong,{children:"Allow Duplicates"})," option in Chroma DB if you want to store multiple copies of the same content, or disable it to automatically deduplicate your data."]})}),"\n",(0,n.jsxs)(t.ol,{start:"5",children:["\n",(0,n.jsxs)(t.li,{children:["To view the split data, in the ",(0,n.jsx)(t.strong,{children:"Split Text"})," component, click ",(0,n.jsx)(c.A,{name:"TextSearch","aria-label":"Inspect icon"}),"."]}),"\n",(0,n.jsxs)(t.li,{children:["To query your loaded data, open the ",(0,n.jsx)(t.strong,{children:"Playground"})," and query your database.\nYour input is converted to vector data and compared to the stored vectors in a vector similarity search."]}),"\n"]}),"\n",(0,n.jsxs)(t.p,{children:["For more information, see the ",(0,n.jsx)(t.a,{href:"https://docs.trychroma.com/",children:"Chroma documentation"}),"."]}),"\n",(0,n.jsx)(t.h3,{id:"inputs-4",children:"Inputs"}),"\n",(0,n.jsxs)(t.table,{children:[(0,n.jsx)(t.thead,{children:(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.th,{children:"Name"}),(0,n.jsx)(t.th,{children:"Type"}),(0,n.jsx)(t.th,{children:"Description"})]})}),(0,n.jsxs)(t.tbody,{children:[(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"collection_name"}),(0,n.jsx)(t.td,{children:"String"}),(0,n.jsx)(t.td,{children:'The name of the Chroma collection. Default: "langflow".'})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"persist_directory"}),(0,n.jsx)(t.td,{children:"String"}),(0,n.jsx)(t.td,{children:"The directory to persist the Chroma database."})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"search_query"}),(0,n.jsx)(t.td,{children:"String"}),(0,n.jsx)(t.td,{children:"The query to search for in the vector store."})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"ingest_data"}),(0,n.jsx)(t.td,{children:"Data"}),(0,n.jsx)(t.td,{children:"The data to ingest into the vector store (list of Data objects)."})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"embedding"}),(0,n.jsx)(t.td,{children:"Embeddings"}),(0,n.jsx)(t.td,{children:"The embedding function to use for the vector store."})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"chroma_server_cors_allow_origins"}),(0,n.jsx)(t.td,{children:"String"}),(0,n.jsx)(t.td,{children:"CORS allow origins for the Chroma server."})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"chroma_server_host"}),(0,n.jsx)(t.td,{children:"String"}),(0,n.jsx)(t.td,{children:"Host for the Chroma server."})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"chroma_server_http_port"}),(0,n.jsx)(t.td,{children:"Integer"}),(0,n.jsx)(t.td,{children:"HTTP port for the Chroma server."})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"chroma_server_grpc_port"}),(0,n.jsx)(t.td,{children:"Integer"}),(0,n.jsx)(t.td,{children:"gRPC port for the Chroma server."})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"chroma_server_ssl_enabled"}),(0,n.jsx)(t.td,{children:"Boolean"}),(0,n.jsx)(t.td,{children:"Enable SSL for the Chroma server."})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"allow_duplicates"}),(0,n.jsx)(t.td,{children:"Boolean"}),(0,n.jsx)(t.td,{children:"Allow duplicate documents in the vector store."})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"search_type"}),(0,n.jsx)(t.td,{children:"String"}),(0,n.jsx)(t.td,{children:'Type of search to perform: "Similarity" or "MMR".'})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"number_of_results"}),(0,n.jsx)(t.td,{children:"Integer"}),(0,n.jsx)(t.td,{children:"Number of results to return from the search. Default: 10."})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"limit"}),(0,n.jsx)(t.td,{children:"Integer"}),(0,n.jsx)(t.td,{children:"Limit the number of records to compare when Allow Duplicates is False."})]})]})]}),"\n",(0,n.jsx)(t.h3,{id:"outputs-4",children:"Outputs"}),"\n",(0,n.jsxs)(t.table,{children:[(0,n.jsx)(t.thead,{children:(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.th,{children:"Name"}),(0,n.jsx)(t.th,{children:"Type"}),(0,n.jsx)(t.th,{children:"Description"})]})}),(0,n.jsxs)(t.tbody,{children:[(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"vector_store"}),(0,n.jsx)(t.td,{children:"Chroma"}),(0,n.jsx)(t.td,{children:"Chroma vector store instance"})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"search_results"}),(0,n.jsx)(t.td,{children:"List[Data]"}),(0,n.jsx)(t.td,{children:"Results of similarity search"})]})]})]}),"\n",(0,n.jsx)(t.h2,{id:"clickhouse",children:"Clickhouse"}),"\n",(0,n.jsxs)(t.p,{children:["This component implements a Clickhouse Vector Store with search capabilities.\nFor more information, see the ",(0,n.jsx)(t.a,{href:"https://clickhouse.com/docs/en/intro",children:"CLickhouse Documentation"}),"."]}),"\n",(0,n.jsx)(t.h3,{id:"inputs-5",children:"Inputs"}),"\n",(0,n.jsxs)(t.table,{children:[(0,n.jsx)(t.thead,{children:(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.th,{children:"Name"}),(0,n.jsx)(t.th,{children:"Display Name"}),(0,n.jsx)(t.th,{children:"Info"})]})}),(0,n.jsxs)(t.tbody,{children:[(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"host"}),(0,n.jsx)(t.td,{children:"hostname"}),(0,n.jsx)(t.td,{children:'Clickhouse server hostname (required, default: "localhost")'})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"port"}),(0,n.jsx)(t.td,{children:"port"}),(0,n.jsx)(t.td,{children:"Clickhouse server port (required, default: 8123)"})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"database"}),(0,n.jsx)(t.td,{children:"database"}),(0,n.jsx)(t.td,{children:"Clickhouse database name (required)"})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"table"}),(0,n.jsx)(t.td,{children:"Table name"}),(0,n.jsx)(t.td,{children:"Clickhouse table name (required)"})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"username"}),(0,n.jsx)(t.td,{children:"The ClickHouse user name."}),(0,n.jsx)(t.td,{children:"Username for authentication (required)"})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"password"}),(0,n.jsx)(t.td,{children:"The password for username."}),(0,n.jsx)(t.td,{children:"Password for authentication (required)"})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"index_type"}),(0,n.jsx)(t.td,{children:"index_type"}),(0,n.jsx)(t.td,{children:'Type of the index (options: "annoy", "vector_similarity", default: "annoy")'})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"metric"}),(0,n.jsx)(t.td,{children:"metric"}),(0,n.jsx)(t.td,{children:'Metric to compute distance (options: "angular", "euclidean", "manhattan", "hamming", "dot", default: "angular")'})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"secure"}),(0,n.jsx)(t.td,{children:"Use https/TLS"}),(0,n.jsx)(t.td,{children:"Overrides inferred values from the interface or port arguments (default: false)"})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"index_param"}),(0,n.jsx)(t.td,{children:"Param of the index"}),(0,n.jsx)(t.td,{children:"Index parameters (default: \"'L2Distance',100\")"})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"index_query_params"}),(0,n.jsx)(t.td,{children:"index query params"}),(0,n.jsx)(t.td,{children:"Additional index query parameters"})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"search_query"}),(0,n.jsx)(t.td,{children:"Search Query"}),(0,n.jsx)(t.td,{children:"Query string for similarity search"})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"ingest_data"}),(0,n.jsx)(t.td,{children:"Ingest Data"}),(0,n.jsx)(t.td,{children:"Data to be ingested into the vector store"})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"embedding"}),(0,n.jsx)(t.td,{children:"Embedding"}),(0,n.jsx)(t.td,{children:"Embedding model to use"})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"number_of_results"}),(0,n.jsx)(t.td,{children:"Number of Results"}),(0,n.jsx)(t.td,{children:"Number of results to return in similarity search (default: 4)"})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"score_threshold"}),(0,n.jsx)(t.td,{children:"Score threshold"}),(0,n.jsx)(t.td,{children:"Threshold for similarity scores"})]})]})]}),"\n",(0,n.jsx)(t.h3,{id:"outputs-5",children:"Outputs"}),"\n",(0,n.jsxs)(t.table,{children:[(0,n.jsx)(t.thead,{children:(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.th,{children:"Name"}),(0,n.jsx)(t.th,{children:"Display Name"}),(0,n.jsx)(t.th,{children:"Info"})]})}),(0,n.jsxs)(t.tbody,{children:[(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"vector_store"}),(0,n.jsx)(t.td,{children:"Vector Store"}),(0,n.jsx)(t.td,{children:"Built Clickhouse vector store"})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"search_results"}),(0,n.jsx)(t.td,{children:"Search Results"}),(0,n.jsx)(t.td,{children:"Results of the similarity search as a list of Data objects"})]})]})]}),"\n",(0,n.jsx)(t.h2,{id:"couchbase",children:"Couchbase"}),"\n",(0,n.jsxs)(t.p,{children:["This component creates a Couchbase Vector Store with search capabilities.\nFor more information, see the ",(0,n.jsx)(t.a,{href:"https://docs.couchbase.com/home/index.html",children:"Couchbase documentation"}),"."]}),"\n",(0,n.jsx)(t.h3,{id:"inputs-6",children:"Inputs"}),"\n",(0,n.jsxs)(t.table,{children:[(0,n.jsx)(t.thead,{children:(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.th,{children:"Name"}),(0,n.jsx)(t.th,{children:"Type"}),(0,n.jsx)(t.th,{children:"Description"})]})}),(0,n.jsxs)(t.tbody,{children:[(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"couchbase_connection_string"}),(0,n.jsx)(t.td,{children:"SecretString"}),(0,n.jsx)(t.td,{children:"Couchbase Cluster connection string (required)."})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"couchbase_username"}),(0,n.jsx)(t.td,{children:"String"}),(0,n.jsx)(t.td,{children:"Couchbase username (required)."})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"couchbase_password"}),(0,n.jsx)(t.td,{children:"SecretString"}),(0,n.jsx)(t.td,{children:"Couchbase password (required)."})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"bucket_name"}),(0,n.jsx)(t.td,{children:"String"}),(0,n.jsx)(t.td,{children:"Name of the Couchbase bucket (required)."})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"scope_name"}),(0,n.jsx)(t.td,{children:"String"}),(0,n.jsx)(t.td,{children:"Name of the Couchbase scope (required)."})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"collection_name"}),(0,n.jsx)(t.td,{children:"String"}),(0,n.jsx)(t.td,{children:"Name of the Couchbase collection (required)."})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"index_name"}),(0,n.jsx)(t.td,{children:"String"}),(0,n.jsx)(t.td,{children:"Name of the Couchbase index (required)."})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"search_query"}),(0,n.jsx)(t.td,{children:"String"}),(0,n.jsx)(t.td,{children:"The query to search for in the vector store."})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"ingest_data"}),(0,n.jsx)(t.td,{children:"Data"}),(0,n.jsx)(t.td,{children:"The data to ingest into the vector store (list of Data objects)."})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"embedding"}),(0,n.jsx)(t.td,{children:"Embeddings"}),(0,n.jsx)(t.td,{children:"The embedding function to use for the vector store."})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"number_of_results"}),(0,n.jsx)(t.td,{children:"Integer"}),(0,n.jsx)(t.td,{children:"Number of results to return from the search. Default: 4 (advanced)."})]})]})]}),"\n",(0,n.jsx)(t.h3,{id:"outputs-6",children:"Outputs"}),"\n",(0,n.jsxs)(t.table,{children:[(0,n.jsx)(t.thead,{children:(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.th,{children:"Name"}),(0,n.jsx)(t.th,{children:"Type"}),(0,n.jsx)(t.th,{children:"Description"})]})}),(0,n.jsx)(t.tbody,{children:(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"vector_store"}),(0,n.jsx)(t.td,{children:"CouchbaseVectorStore"}),(0,n.jsx)(t.td,{children:"A Couchbase vector store instance configured with the specified parameters."})]})})]}),"\n",(0,n.jsx)(t.h2,{id:"local-db",children:"Local DB"}),"\n",(0,n.jsxs)(t.p,{children:["The ",(0,n.jsx)(t.strong,{children:"Local DB"})," component is Langflow's enhanced version of Chroma DB."]}),"\n",(0,n.jsx)(t.p,{children:"The component adds a user-friendly interface with two modes (Ingest and Retrieve), automatic collection management, and built-in persistence in Langflow's cache directory."}),"\n",(0,n.jsxs)(t.p,{children:["Local DB includes ",(0,n.jsx)(t.strong,{children:"Ingest"})," and ",(0,n.jsx)(t.strong,{children:"Retrieve"})," modes."]}),"\n",(0,n.jsxs)(t.p,{children:["The ",(0,n.jsx)(t.strong,{children:"Ingest"})," mode works similarly to ",(0,n.jsx)(t.a,{href:"#chroma-db",children:"ChromaDB"}),", and persists your database to the Langflow cache directory. The Langflow cache directory location is specified in ",(0,n.jsx)(t.code,{children:"LANGFLOW_CONFIG_DIR"}),". For more information, see ",(0,n.jsx)(t.a,{href:"/environment-variables",children:"Environment variables"}),"."]}),"\n",(0,n.jsxs)(t.p,{children:["The ",(0,n.jsx)(t.strong,{children:"Retrieve"})," mode can query your ",(0,n.jsx)(t.strong,{children:"Chroma DB"})," collections."]}),"\n",(0,n.jsx)(t.p,{children:(0,n.jsx)(t.img,{alt:"Local DB retrieving vectors",src:r(60159).A+"",width:"1716",height:"960"})}),"\n",(0,n.jsxs)(t.p,{children:["For more information, see the ",(0,n.jsx)(t.a,{href:"https://docs.trychroma.com/",children:"Chroma documentation"}),"."]}),"\n",(0,n.jsx)(t.h3,{id:"inputs-7",children:"Inputs"}),"\n",(0,n.jsxs)(t.table,{children:[(0,n.jsx)(t.thead,{children:(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.th,{children:"Name"}),(0,n.jsx)(t.th,{children:"Type"}),(0,n.jsx)(t.th,{children:"Description"})]})}),(0,n.jsxs)(t.tbody,{children:[(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"collection_name"}),(0,n.jsx)(t.td,{children:"String"}),(0,n.jsx)(t.td,{children:'The name of the Chroma collection. Default: "langflow".'})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"persist_directory"}),(0,n.jsx)(t.td,{children:"String"}),(0,n.jsxs)(t.td,{children:["Custom base directory to save the vector store. Collections will be stored under ",(0,n.jsx)(t.code,{children:"{directory}/vector_stores/{collection_name}"}),". If not specified, it will use your system's cache folder."]})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"existing_collections"}),(0,n.jsx)(t.td,{children:"String"}),(0,n.jsx)(t.td,{children:"Select a previously created collection to search through its stored data."})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"embedding"}),(0,n.jsx)(t.td,{children:"Embeddings"}),(0,n.jsx)(t.td,{children:"The embedding function to use for the vector store."})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"allow_duplicates"}),(0,n.jsx)(t.td,{children:"Boolean"}),(0,n.jsx)(t.td,{children:"If false, will not add documents that are already in the Vector Store."})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"search_type"}),(0,n.jsx)(t.td,{children:"String"}),(0,n.jsx)(t.td,{children:'Type of search to perform: "Similarity" or "MMR".'})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"ingest_data"}),(0,n.jsx)(t.td,{children:"Data/DataFrame"}),(0,n.jsx)(t.td,{children:"Data to store. It will be embedded and indexed for semantic search."})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"search_query"}),(0,n.jsx)(t.td,{children:"String"}),(0,n.jsx)(t.td,{children:"Enter text to search for similar content in the selected collection."})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"number_of_results"}),(0,n.jsx)(t.td,{children:"Integer"}),(0,n.jsx)(t.td,{children:"Number of results to return. Default: 10."})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"limit"}),(0,n.jsx)(t.td,{children:"Integer"}),(0,n.jsx)(t.td,{children:"Limit the number of records to compare when Allow Duplicates is False."})]})]})]}),"\n",(0,n.jsx)(t.h3,{id:"outputs-7",children:"Outputs"}),"\n",(0,n.jsxs)(t.table,{children:[(0,n.jsx)(t.thead,{children:(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.th,{children:"Name"}),(0,n.jsx)(t.th,{children:"Type"}),(0,n.jsx)(t.th,{children:"Description"})]})}),(0,n.jsxs)(t.tbody,{children:[(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"vector_store"}),(0,n.jsx)(t.td,{children:"Chroma"}),(0,n.jsx)(t.td,{children:"A local Chroma vector store instance configured with the specified parameters."})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"search_results"}),(0,n.jsxs)(t.td,{children:["List",(0,n.jsx)(t.a,{href:"/concepts-objects#data-object",children:"Data"})]}),(0,n.jsx)(t.td,{children:"Results of similarity search."})]})]})]}),"\n",(0,n.jsx)(t.h2,{id:"elasticsearch",children:"Elasticsearch"}),"\n",(0,n.jsxs)(t.p,{children:["This component creates an Elasticsearch Vector Store with search capabilities.\nFor more information, see the ",(0,n.jsx)(t.a,{href:"https://www.elastic.co/guide/en/elasticsearch/reference/current/dense-vector.html",children:"Elasticsearch documentation"}),"."]}),"\n",(0,n.jsx)(t.h3,{id:"inputs-8",children:"Inputs"}),"\n",(0,n.jsxs)(t.table,{children:[(0,n.jsx)(t.thead,{children:(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.th,{children:"Name"}),(0,n.jsx)(t.th,{children:"Type"}),(0,n.jsx)(t.th,{children:"Description"})]})}),(0,n.jsxs)(t.tbody,{children:[(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"es_url"}),(0,n.jsx)(t.td,{children:"String"}),(0,n.jsx)(t.td,{children:"Elasticsearch server URL"})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"es_user"}),(0,n.jsx)(t.td,{children:"String"}),(0,n.jsx)(t.td,{children:"Username for Elasticsearch authentication"})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"es_password"}),(0,n.jsx)(t.td,{children:"SecretString"}),(0,n.jsx)(t.td,{children:"Password for Elasticsearch authentication"})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"index_name"}),(0,n.jsx)(t.td,{children:"String"}),(0,n.jsx)(t.td,{children:"Name of the Elasticsearch index"})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"strategy"}),(0,n.jsx)(t.td,{children:"String"}),(0,n.jsx)(t.td,{children:'Strategy for vector search ("approximate_k_nearest_neighbors" or "script_scoring")'})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"distance_strategy"}),(0,n.jsx)(t.td,{children:"String"}),(0,n.jsx)(t.td,{children:'Strategy for distance calculation ("COSINE", "EUCLIDEAN_DISTANCE", "DOT_PRODUCT")'})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"search_query"}),(0,n.jsx)(t.td,{children:"String"}),(0,n.jsx)(t.td,{children:"Query for similarity search"})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"ingest_data"}),(0,n.jsx)(t.td,{children:"Data"}),(0,n.jsx)(t.td,{children:"Data to be ingested into the vector store"})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"embedding"}),(0,n.jsx)(t.td,{children:"Embeddings"}),(0,n.jsx)(t.td,{children:"Embedding function to use"})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"number_of_results"}),(0,n.jsx)(t.td,{children:"Integer"}),(0,n.jsx)(t.td,{children:"Number of results to return in search (default: 4)"})]})]})]}),"\n",(0,n.jsx)(t.h3,{id:"outputs-8",children:"Outputs"}),"\n",(0,n.jsxs)(t.table,{children:[(0,n.jsx)(t.thead,{children:(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.th,{children:"Name"}),(0,n.jsx)(t.th,{children:"Type"}),(0,n.jsx)(t.th,{children:"Description"})]})}),(0,n.jsxs)(t.tbody,{children:[(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"vector_store"}),(0,n.jsx)(t.td,{children:"ElasticsearchStore"}),(0,n.jsx)(t.td,{children:"Elasticsearch vector store instance"})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"search_results"}),(0,n.jsx)(t.td,{children:"List[Data]"}),(0,n.jsx)(t.td,{children:"Results of similarity search"})]})]})]}),"\n",(0,n.jsx)(t.h2,{id:"faiss",children:"FAISS"}),"\n",(0,n.jsxs)(t.p,{children:["This component creates a FAISS Vector Store with search capabilities.\nFor more information, see the ",(0,n.jsx)(t.a,{href:"https://faiss.ai/index.html",children:"FAISS documentation"}),"."]}),"\n",(0,n.jsx)(t.h3,{id:"inputs-9",children:"Inputs"}),"\n",(0,n.jsxs)(t.table,{children:[(0,n.jsx)(t.thead,{children:(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.th,{children:"Name"}),(0,n.jsx)(t.th,{children:"Type"}),(0,n.jsx)(t.th,{children:"Description"})]})}),(0,n.jsxs)(t.tbody,{children:[(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"index_name"}),(0,n.jsx)(t.td,{children:"String"}),(0,n.jsx)(t.td,{children:'The name of the FAISS index. Default: "langflow_index".'})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"persist_directory"}),(0,n.jsx)(t.td,{children:"String"}),(0,n.jsx)(t.td,{children:"Path to save the FAISS index. It will be relative to where Langflow is running."})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"search_query"}),(0,n.jsx)(t.td,{children:"String"}),(0,n.jsx)(t.td,{children:"The query to search for in the vector store."})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"ingest_data"}),(0,n.jsx)(t.td,{children:"Data"}),(0,n.jsx)(t.td,{children:"The data to ingest into the vector store (list of Data objects or documents)."})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"allow_dangerous_deserialization"}),(0,n.jsx)(t.td,{children:"Boolean"}),(0,n.jsx)(t.td,{children:"Set to True to allow loading pickle files from untrusted sources. Default: True (advanced)."})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"embedding"}),(0,n.jsx)(t.td,{children:"Embeddings"}),(0,n.jsx)(t.td,{children:"The embedding function to use for the vector store."})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"number_of_results"}),(0,n.jsx)(t.td,{children:"Integer"}),(0,n.jsx)(t.td,{children:"Number of results to return from the search. Default: 4 (advanced)."})]})]})]}),"\n",(0,n.jsx)(t.h3,{id:"outputs-9",children:"Outputs"}),"\n",(0,n.jsxs)(t.table,{children:[(0,n.jsx)(t.thead,{children:(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.th,{children:"Name"}),(0,n.jsx)(t.th,{children:"Type"}),(0,n.jsx)(t.th,{children:"Description"})]})}),(0,n.jsx)(t.tbody,{children:(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"vector_store"}),(0,n.jsx)(t.td,{children:"FAISS"}),(0,n.jsx)(t.td,{children:"A FAISS vector store instance configured with the specified parameters."})]})})]}),"\n",(0,n.jsx)(t.h2,{id:"graph-rag",children:"Graph RAG"}),"\n",(0,n.jsxs)(t.p,{children:["This component performs Graph RAG (Retrieval Augmented Generation) traversal in a vector store, enabling graph-based document retrieval.\nFor more information, see the ",(0,n.jsx)(t.a,{href:"https://datastax.github.io/graph-rag/",children:"Graph RAG documentation"}),"."]}),"\n",(0,n.jsxs)(t.p,{children:["For an example flow, see the ",(0,n.jsx)(t.strong,{children:"Graph RAG"})," template."]}),"\n",(0,n.jsx)(t.h3,{id:"inputs-10",children:"Inputs"}),"\n",(0,n.jsxs)(t.table,{children:[(0,n.jsx)(t.thead,{children:(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.th,{children:"Name"}),(0,n.jsx)(t.th,{children:"Display Name"}),(0,n.jsx)(t.th,{children:"Info"})]})}),(0,n.jsxs)(t.tbody,{children:[(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"embedding_model"}),(0,n.jsx)(t.td,{children:"Embedding Model"}),(0,n.jsxs)(t.td,{children:["Specify the embedding model. This is not required for collections embedded with ",(0,n.jsx)(t.a,{href:"https://docs.datastax.com/en/astra-db-serverless/databases/embedding-generation.html",children:"Astra vectorize"}),"."]})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"vector_store"}),(0,n.jsx)(t.td,{children:"Vector Store Connection"}),(0,n.jsx)(t.td,{children:"Connection to the vector store."})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"edge_definition"}),(0,n.jsx)(t.td,{children:"Edge Definition"}),(0,n.jsxs)(t.td,{children:["Edge definition for the graph traversal. For more information, see the ",(0,n.jsx)(t.a,{href:"https://datastax.github.io/graph-rag/reference/graph_retriever/edges/",children:"GraphRAG documentation"}),"."]})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"strategy"}),(0,n.jsx)(t.td,{children:"Traversal Strategies"}),(0,n.jsx)(t.td,{children:"The strategy to use for graph traversal. Strategy options are dynamically loaded from available strategies."})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"search_query"}),(0,n.jsx)(t.td,{children:"Search Query"}),(0,n.jsx)(t.td,{children:"The query to search for in the vector store."})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"graphrag_strategy_kwargs"}),(0,n.jsx)(t.td,{children:"Strategy Parameters"}),(0,n.jsxs)(t.td,{children:["Optional dictionary of additional parameters for the retrieval strategy. For more information, see the ",(0,n.jsx)(t.a,{href:"https://datastax.github.io/graph-rag/reference/graph_retriever/strategies/",children:"strategy documentation"}),"."]})]})]})]}),"\n",(0,n.jsx)(t.h3,{id:"outputs-10",children:"Outputs"}),"\n",(0,n.jsxs)(t.table,{children:[(0,n.jsx)(t.thead,{children:(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.th,{children:"Name"}),(0,n.jsx)(t.th,{children:"Type"}),(0,n.jsx)(t.th,{children:"Description"})]})}),(0,n.jsx)(t.tbody,{children:(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"search_results"}),(0,n.jsx)(t.td,{children:"List[Data]"}),(0,n.jsxs)(t.td,{children:["Results of the graph-based document retrieval as a list of ",(0,n.jsx)(t.a,{href:"/concepts-objects#data-object",children:"Data"})," objects."]})]})})]}),"\n",(0,n.jsx)(t.h2,{id:"hyper-converged-database-hcd-vector-store",children:"Hyper-Converged Database (HCD) Vector Store"}),"\n",(0,n.jsx)(t.p,{children:"This component implements a Vector Store using HCD."}),"\n",(0,n.jsxs)(t.p,{children:["To use the HCD vector store, add your deployment's collection name, username, password, and HCD Data API endpoint.\nThe endpoint must be formatted like ",(0,n.jsx)(t.code,{children:"http[s]://**DOMAIN_NAME** or **IP_ADDRESS**[:port]"}),", for example, ",(0,n.jsx)(t.code,{children:"http://192.0.2.250:8181"}),"."]}),"\n",(0,n.jsxs)(t.p,{children:["Replace ",(0,n.jsx)(t.strong,{children:"DOMAIN_NAME"})," or ",(0,n.jsx)(t.strong,{children:"IP_ADDRESS"})," with the domain name or IP address of your HCD Data API connection."]}),"\n",(0,n.jsx)(t.p,{children:"To use the HCD vector store for embeddings ingestion, connect it to an embeddings model and a file loader:"}),"\n",(0,n.jsx)(t.p,{children:(0,n.jsx)(t.img,{alt:"HCD vector store embeddings ingestion",src:r(42638).A+"",width:"2294",height:"1684"})}),"\n",(0,n.jsx)(t.h3,{id:"inputs-11",children:"Inputs"}),"\n",(0,n.jsxs)(t.table,{children:[(0,n.jsx)(t.thead,{children:(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.th,{children:"Name"}),(0,n.jsx)(t.th,{children:"Display Name"}),(0,n.jsx)(t.th,{children:"Info"})]})}),(0,n.jsxs)(t.tbody,{children:[(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"collection_name"}),(0,n.jsx)(t.td,{children:"Collection Name"}),(0,n.jsx)(t.td,{children:"The name of the collection within HCD where the vectors will be stored (required)"})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"username"}),(0,n.jsx)(t.td,{children:"HCD Username"}),(0,n.jsx)(t.td,{children:'Authentication username for accessing HCD (default: "hcd-superuser", required)'})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"password"}),(0,n.jsx)(t.td,{children:"HCD Password"}),(0,n.jsx)(t.td,{children:"Authentication password for accessing HCD (required)"})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"api_endpoint"}),(0,n.jsx)(t.td,{children:"HCD API Endpoint"}),(0,n.jsx)(t.td,{children:"API endpoint URL for the HCD service (required)"})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"search_input"}),(0,n.jsx)(t.td,{children:"Search Input"}),(0,n.jsx)(t.td,{children:"Query string for similarity search"})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"ingest_data"}),(0,n.jsx)(t.td,{children:"Ingest Data"}),(0,n.jsx)(t.td,{children:"Data to be ingested into the vector store"})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"namespace"}),(0,n.jsx)(t.td,{children:"Namespace"}),(0,n.jsx)(t.td,{children:'Optional namespace within HCD to use for the collection (default: "default_namespace")'})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"ca_certificate"}),(0,n.jsx)(t.td,{children:"CA Certificate"}),(0,n.jsx)(t.td,{children:"Optional CA certificate for TLS connections to HCD"})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"metric"}),(0,n.jsx)(t.td,{children:"Metric"}),(0,n.jsx)(t.td,{children:'Optional distance metric for vector comparisons (options: "cosine", "dot_product", "euclidean")'})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"batch_size"}),(0,n.jsx)(t.td,{children:"Batch Size"}),(0,n.jsx)(t.td,{children:"Optional number of data to process in a single batch"})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"bulk_insert_batch_concurrency"}),(0,n.jsx)(t.td,{children:"Bulk Insert Batch Concurrency"}),(0,n.jsx)(t.td,{children:"Optional concurrency level for bulk insert operations"})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"bulk_insert_overwrite_concurrency"}),(0,n.jsx)(t.td,{children:"Bulk Insert Overwrite Concurrency"}),(0,n.jsx)(t.td,{children:"Optional concurrency level for bulk insert operations that overwrite existing data"})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"bulk_delete_concurrency"}),(0,n.jsx)(t.td,{children:"Bulk Delete Concurrency"}),(0,n.jsx)(t.td,{children:"Optional concurrency level for bulk delete operations"})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"setup_mode"}),(0,n.jsx)(t.td,{children:"Setup Mode"}),(0,n.jsx)(t.td,{children:'Configuration mode for setting up the vector store (options: "Sync", "Async", "Off", default: "Sync")'})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"pre_delete_collection"}),(0,n.jsx)(t.td,{children:"Pre Delete Collection"}),(0,n.jsx)(t.td,{children:"Boolean flag to determine whether to delete the collection before creating a new one"})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"metadata_indexing_include"}),(0,n.jsx)(t.td,{children:"Metadata Indexing Include"}),(0,n.jsx)(t.td,{children:"Optional list of metadata fields to include in the indexing"})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"embedding"}),(0,n.jsx)(t.td,{children:"Embedding or Astra Vectorize"}),(0,n.jsx)(t.td,{children:"Allows either an embedding model or an Astra Vectorize configuration"})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"metadata_indexing_exclude"}),(0,n.jsx)(t.td,{children:"Metadata Indexing Exclude"}),(0,n.jsx)(t.td,{children:"Optional list of metadata fields to exclude from the indexing"})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"collection_indexing_policy"}),(0,n.jsx)(t.td,{children:"Collection Indexing Policy"}),(0,n.jsx)(t.td,{children:"Optional dictionary defining the indexing policy for the collection"})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"number_of_results"}),(0,n.jsx)(t.td,{children:"Number of Results"}),(0,n.jsx)(t.td,{children:"Number of results to return in similarity search (default: 4)"})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"search_type"}),(0,n.jsx)(t.td,{children:"Search Type"}),(0,n.jsx)(t.td,{children:'Search type to use (options: "Similarity", "Similarity with score threshold", "MMR (Max Marginal Relevance)", default: "Similarity")'})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"search_score_threshold"}),(0,n.jsx)(t.td,{children:"Search Score Threshold"}),(0,n.jsx)(t.td,{children:"Minimum similarity score threshold for search results (default: 0)"})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"search_filter"}),(0,n.jsx)(t.td,{children:"Search Metadata Filter"}),(0,n.jsx)(t.td,{children:"Optional dictionary of filters to apply to the search query"})]})]})]}),"\n",(0,n.jsx)(t.h3,{id:"outputs-11",children:"Outputs"}),"\n",(0,n.jsxs)(t.table,{children:[(0,n.jsx)(t.thead,{children:(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.th,{children:"Name"}),(0,n.jsx)(t.th,{children:"Display Name"}),(0,n.jsx)(t.th,{children:"Info"})]})}),(0,n.jsxs)(t.tbody,{children:[(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"vector_store"}),(0,n.jsx)(t.td,{children:"Vector Store"}),(0,n.jsxs)(t.td,{children:["An HCD vector store instance The results of the similarity search as a list of ",(0,n.jsx)(t.code,{children:"Data"})," objects."]})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"search_results"}),(0,n.jsx)(t.td,{children:"Search Results"}),(0,n.jsxs)(t.td,{children:["The results of the similarity search as a list of ",(0,n.jsx)(t.code,{children:"Data"})," objects."]})]})]})]}),"\n",(0,n.jsx)(t.h2,{id:"milvus",children:"Milvus"}),"\n",(0,n.jsxs)(t.p,{children:["This component creates a Milvus Vector Store with search capabilities.\nFor more information, see the ",(0,n.jsx)(t.a,{href:"https://milvus.io/docs",children:"Milvus documentation"}),"."]}),"\n",(0,n.jsx)(t.h3,{id:"inputs-12",children:"Inputs"}),"\n",(0,n.jsxs)(t.table,{children:[(0,n.jsx)(t.thead,{children:(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.th,{children:"Name"}),(0,n.jsx)(t.th,{children:"Type"}),(0,n.jsx)(t.th,{children:"Description"})]})}),(0,n.jsxs)(t.tbody,{children:[(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"collection_name"}),(0,n.jsx)(t.td,{children:"String"}),(0,n.jsx)(t.td,{children:"Name of the Milvus collection"})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"collection_description"}),(0,n.jsx)(t.td,{children:"String"}),(0,n.jsx)(t.td,{children:"Description of the Milvus collection"})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"uri"}),(0,n.jsx)(t.td,{children:"String"}),(0,n.jsx)(t.td,{children:"Connection URI for Milvus"})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"password"}),(0,n.jsx)(t.td,{children:"SecretString"}),(0,n.jsx)(t.td,{children:"Password for Milvus"})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"username"}),(0,n.jsx)(t.td,{children:"SecretString"}),(0,n.jsx)(t.td,{children:"Username for Milvus"})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"batch_size"}),(0,n.jsx)(t.td,{children:"Integer"}),(0,n.jsx)(t.td,{children:"Number of data to process in a single batch"})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"search_query"}),(0,n.jsx)(t.td,{children:"String"}),(0,n.jsx)(t.td,{children:"Query for similarity search"})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"ingest_data"}),(0,n.jsx)(t.td,{children:"Data"}),(0,n.jsx)(t.td,{children:"Data to be ingested into the vector store"})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"embedding"}),(0,n.jsx)(t.td,{children:"Embeddings"}),(0,n.jsx)(t.td,{children:"Embedding function to use"})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"number_of_results"}),(0,n.jsx)(t.td,{children:"Integer"}),(0,n.jsx)(t.td,{children:"Number of results to return in search"})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"search_type"}),(0,n.jsx)(t.td,{children:"String"}),(0,n.jsx)(t.td,{children:"Type of search to perform"})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"search_score_threshold"}),(0,n.jsx)(t.td,{children:"Float"}),(0,n.jsx)(t.td,{children:"Minimum similarity score for search results"})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"search_filter"}),(0,n.jsx)(t.td,{children:"Dict"}),(0,n.jsx)(t.td,{children:"Metadata filters for search query"})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"setup_mode"}),(0,n.jsx)(t.td,{children:"String"}),(0,n.jsx)(t.td,{children:"Configuration mode for setting up the vector store"})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"vector_dimensions"}),(0,n.jsx)(t.td,{children:"Integer"}),(0,n.jsx)(t.td,{children:"Number of dimensions of the vectors"})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"pre_delete_collection"}),(0,n.jsx)(t.td,{children:"Boolean"}),(0,n.jsx)(t.td,{children:"Whether to delete the collection before creating a new one"})]})]})]}),"\n",(0,n.jsx)(t.h3,{id:"outputs-12",children:"Outputs"}),"\n",(0,n.jsxs)(t.table,{children:[(0,n.jsx)(t.thead,{children:(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.th,{children:"Name"}),(0,n.jsx)(t.th,{children:"Type"}),(0,n.jsx)(t.th,{children:"Description"})]})}),(0,n.jsx)(t.tbody,{children:(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"vector_store"}),(0,n.jsx)(t.td,{children:"Milvus"}),(0,n.jsx)(t.td,{children:"A Milvus vector store instance configured with the specified parameters."})]})})]}),"\n",(0,n.jsx)(t.h2,{id:"mongodb-atlas",children:"MongoDB Atlas"}),"\n",(0,n.jsxs)(t.p,{children:["This component creates a MongoDB Atlas Vector Store with search capabilities.\nFor more information, see the ",(0,n.jsx)(t.a,{href:"https://www.mongodb.com/docs/atlas/atlas-vector-search/tutorials/vector-search-quick-start/",children:"MongoDB Atlas documentation"}),"."]}),"\n",(0,n.jsx)(t.h3,{id:"inputs-13",children:"Inputs"}),"\n",(0,n.jsxs)(t.table,{children:[(0,n.jsx)(t.thead,{children:(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.th,{children:"Name"}),(0,n.jsx)(t.th,{children:"Type"}),(0,n.jsx)(t.th,{children:"Description"})]})}),(0,n.jsxs)(t.tbody,{children:[(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"mongodb_atlas_cluster_uri"}),(0,n.jsx)(t.td,{children:"SecretString"}),(0,n.jsx)(t.td,{children:"The connection URI for your MongoDB Atlas cluster (required)"})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"enable_mtls"}),(0,n.jsx)(t.td,{children:"Boolean"}),(0,n.jsx)(t.td,{children:"Enable mutual TLS authentication (default: false)"})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"mongodb_atlas_client_cert"}),(0,n.jsx)(t.td,{children:"SecretString"}),(0,n.jsx)(t.td,{children:"Client certificate combined with private key for mTLS authentication (required if mTLS is enabled)"})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"db_name"}),(0,n.jsx)(t.td,{children:"String"}),(0,n.jsx)(t.td,{children:"The name of the database to use (required)"})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"collection_name"}),(0,n.jsx)(t.td,{children:"String"}),(0,n.jsx)(t.td,{children:"The name of the collection to use (required)"})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"index_name"}),(0,n.jsx)(t.td,{children:"String"}),(0,n.jsx)(t.td,{children:"The name of the Atlas Search index, it should be a Vector Search (required)"})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"insert_mode"}),(0,n.jsx)(t.td,{children:"String"}),(0,n.jsx)(t.td,{children:'How to insert new documents into the collection (options: "append", "overwrite", default: "append")'})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"embedding"}),(0,n.jsx)(t.td,{children:"Embeddings"}),(0,n.jsx)(t.td,{children:"The embedding model to use"})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"number_of_results"}),(0,n.jsx)(t.td,{children:"Integer"}),(0,n.jsx)(t.td,{children:"Number of results to return in similarity search (default: 4)"})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"index_field"}),(0,n.jsx)(t.td,{children:"String"}),(0,n.jsx)(t.td,{children:'The field to index (default: "embedding")'})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"filter_field"}),(0,n.jsx)(t.td,{children:"String"}),(0,n.jsx)(t.td,{children:"The field to filter the index"})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"number_dimensions"}),(0,n.jsx)(t.td,{children:"Integer"}),(0,n.jsx)(t.td,{children:"Embedding context length (default: 1536)"})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"similarity"}),(0,n.jsx)(t.td,{children:"String"}),(0,n.jsx)(t.td,{children:'The method used to measure similarity between vectors (options: "cosine", "euclidean", "dotProduct", default: "cosine")'})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"quantization"}),(0,n.jsx)(t.td,{children:"String"}),(0,n.jsx)(t.td,{children:'Quantization reduces memory costs by converting 32-bit floats to smaller data types (options: "scalar", "binary")'})]})]})]}),"\n",(0,n.jsx)(t.h3,{id:"outputs-13",children:"Outputs"}),"\n",(0,n.jsxs)(t.table,{children:[(0,n.jsx)(t.thead,{children:(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.th,{children:"Name"}),(0,n.jsx)(t.th,{children:"Type"}),(0,n.jsx)(t.th,{children:"Description"})]})}),(0,n.jsxs)(t.tbody,{children:[(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"vector_store"}),(0,n.jsx)(t.td,{children:"MongoDBAtlasVectorSearch"}),(0,n.jsx)(t.td,{children:"MongoDB Atlas vector store instance"})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"search_results"}),(0,n.jsx)(t.td,{children:"List[Data]"}),(0,n.jsx)(t.td,{children:"Results of similarity search"})]})]})]}),"\n",(0,n.jsx)(t.h2,{id:"opensearch",children:"Opensearch"}),"\n",(0,n.jsxs)(t.p,{children:["This component creates an Opensearch vector store with search capabilities\nFor more information, see ",(0,n.jsx)(t.a,{href:"https://opensearch.org/platform/search/vector-database.html",children:"Opensearch documentation"}),"."]}),"\n",(0,n.jsx)(t.h3,{id:"inputs-14",children:"Inputs"}),"\n",(0,n.jsxs)(t.table,{children:[(0,n.jsx)(t.thead,{children:(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.th,{children:"Name"}),(0,n.jsx)(t.th,{children:"Type"}),(0,n.jsx)(t.th,{children:"Description"})]})}),(0,n.jsxs)(t.tbody,{children:[(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"opensearch_url"}),(0,n.jsx)(t.td,{children:"String"}),(0,n.jsxs)(t.td,{children:["URL for OpenSearch cluster (e.g. ",(0,n.jsx)(t.a,{href:"https://192.168.1.1:9200",children:"https://192.168.1.1:9200"}),")"]})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"index_name"}),(0,n.jsx)(t.td,{children:"String"}),(0,n.jsx)(t.td,{children:"The index name where the vectors will be stored in OpenSearch cluster"})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"search_input"}),(0,n.jsx)(t.td,{children:"String"}),(0,n.jsx)(t.td,{children:"Enter a search query. Leave empty to retrieve all documents or if hybrid search is being used"})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"ingest_data"}),(0,n.jsx)(t.td,{children:"Data"}),(0,n.jsx)(t.td,{children:"Data to be ingested into the vector store"})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"embedding"}),(0,n.jsx)(t.td,{children:"Embeddings"}),(0,n.jsx)(t.td,{children:"Embedding function to use"})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"search_type"}),(0,n.jsx)(t.td,{children:"String"}),(0,n.jsx)(t.td,{children:'Valid values are "similarity", "similarity_score_threshold", "mmr"'})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"number_of_results"}),(0,n.jsx)(t.td,{children:"Integer"}),(0,n.jsx)(t.td,{children:"Number of results to return in search"})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"search_score_threshold"}),(0,n.jsx)(t.td,{children:"Float"}),(0,n.jsx)(t.td,{children:"Minimum similarity score threshold for search results"})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"username"}),(0,n.jsx)(t.td,{children:"String"}),(0,n.jsx)(t.td,{children:"username for the opensource cluster"})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"password"}),(0,n.jsx)(t.td,{children:"SecretString"}),(0,n.jsx)(t.td,{children:"password for the opensource cluster"})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"use_ssl"}),(0,n.jsx)(t.td,{children:"Boolean"}),(0,n.jsx)(t.td,{children:"Use SSL"})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"verify_certs"}),(0,n.jsx)(t.td,{children:"Boolean"}),(0,n.jsx)(t.td,{children:"Verify certificates"})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"hybrid_search_query"}),(0,n.jsx)(t.td,{children:"String"}),(0,n.jsx)(t.td,{children:"Provide a custom hybrid search query in JSON format. This allows you to combine vector similarity and keyword matching"})]})]})]}),"\n",(0,n.jsx)(t.h3,{id:"outputs-14",children:"Outputs"}),"\n",(0,n.jsxs)(t.table,{children:[(0,n.jsx)(t.thead,{children:(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.th,{children:"Name"}),(0,n.jsx)(t.th,{children:"Type"}),(0,n.jsx)(t.th,{children:"Description"})]})}),(0,n.jsxs)(t.tbody,{children:[(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"vector_store"}),(0,n.jsx)(t.td,{children:"OpenSearchVectorSearch"}),(0,n.jsx)(t.td,{children:"OpenSearch vector store instance"})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"search_results"}),(0,n.jsx)(t.td,{children:"List[Data]"}),(0,n.jsx)(t.td,{children:"Results of similarity search"})]})]})]}),"\n",(0,n.jsx)(t.h2,{id:"pgvector",children:"PGVector"}),"\n",(0,n.jsxs)(t.p,{children:["This component creates a PGVector Vector Store with search capabilities.\nFor more information, see the ",(0,n.jsx)(t.a,{href:"https://github.com/pgvector/pgvector",children:"PGVector documentation"}),"."]}),"\n",(0,n.jsx)(t.h3,{id:"inputs-15",children:"Inputs"}),"\n",(0,n.jsxs)(t.table,{children:[(0,n.jsx)(t.thead,{children:(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.th,{children:"Name"}),(0,n.jsx)(t.th,{children:"Type"}),(0,n.jsx)(t.th,{children:"Description"})]})}),(0,n.jsxs)(t.tbody,{children:[(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"pg_server_url"}),(0,n.jsx)(t.td,{children:"SecretString"}),(0,n.jsx)(t.td,{children:"PostgreSQL server connection string"})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"collection_name"}),(0,n.jsx)(t.td,{children:"String"}),(0,n.jsx)(t.td,{children:"Table name for the vector store"})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"search_query"}),(0,n.jsx)(t.td,{children:"String"}),(0,n.jsx)(t.td,{children:"Query for similarity search"})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"ingest_data"}),(0,n.jsx)(t.td,{children:"Data"}),(0,n.jsx)(t.td,{children:"Data to be ingested into the vector store"})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"embedding"}),(0,n.jsx)(t.td,{children:"Embeddings"}),(0,n.jsx)(t.td,{children:"Embedding function to use"})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"number_of_results"}),(0,n.jsx)(t.td,{children:"Integer"}),(0,n.jsx)(t.td,{children:"Number of results to return in search"})]})]})]}),"\n",(0,n.jsx)(t.h3,{id:"outputs-15",children:"Outputs"}),"\n",(0,n.jsxs)(t.table,{children:[(0,n.jsx)(t.thead,{children:(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.th,{children:"Name"}),(0,n.jsx)(t.th,{children:"Type"}),(0,n.jsx)(t.th,{children:"Description"})]})}),(0,n.jsxs)(t.tbody,{children:[(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"vector_store"}),(0,n.jsx)(t.td,{children:"PGVector"}),(0,n.jsx)(t.td,{children:"PGVector vector store instance"})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"search_results"}),(0,n.jsx)(t.td,{children:"List[Data]"}),(0,n.jsx)(t.td,{children:"Results of similarity search"})]})]})]}),"\n",(0,n.jsx)(t.h2,{id:"pinecone",children:"Pinecone"}),"\n",(0,n.jsxs)(t.p,{children:["This component creates a Pinecone Vector Store with search capabilities.\nFor more information, see the ",(0,n.jsx)(t.a,{href:"https://docs.pinecone.io/home",children:"Pinecone documentation"}),"."]}),"\n",(0,n.jsx)(t.h3,{id:"inputs-16",children:"Inputs"}),"\n",(0,n.jsxs)(t.table,{children:[(0,n.jsx)(t.thead,{children:(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.th,{children:"Name"}),(0,n.jsx)(t.th,{children:"Type"}),(0,n.jsx)(t.th,{children:"Description"})]})}),(0,n.jsxs)(t.tbody,{children:[(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"index_name"}),(0,n.jsx)(t.td,{children:"String"}),(0,n.jsx)(t.td,{children:"Name of the Pinecone index"})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"namespace"}),(0,n.jsx)(t.td,{children:"String"}),(0,n.jsx)(t.td,{children:"Namespace for the index"})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"distance_strategy"}),(0,n.jsx)(t.td,{children:"String"}),(0,n.jsx)(t.td,{children:"Strategy for calculating distance between vectors"})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"pinecone_api_key"}),(0,n.jsx)(t.td,{children:"SecretString"}),(0,n.jsx)(t.td,{children:"API key for Pinecone"})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"text_key"}),(0,n.jsx)(t.td,{children:"String"}),(0,n.jsx)(t.td,{children:"Key in the record to use as text"})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"search_query"}),(0,n.jsx)(t.td,{children:"String"}),(0,n.jsx)(t.td,{children:"Query for similarity search"})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"ingest_data"}),(0,n.jsx)(t.td,{children:"Data"}),(0,n.jsx)(t.td,{children:"Data to be ingested into the vector store"})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"embedding"}),(0,n.jsx)(t.td,{children:"Embeddings"}),(0,n.jsx)(t.td,{children:"Embedding function to use"})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"number_of_results"}),(0,n.jsx)(t.td,{children:"Integer"}),(0,n.jsx)(t.td,{children:"Number of results to return in search"})]})]})]}),"\n",(0,n.jsx)(t.h3,{id:"outputs-16",children:"Outputs"}),"\n",(0,n.jsxs)(t.table,{children:[(0,n.jsx)(t.thead,{children:(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.th,{children:"Name"}),(0,n.jsx)(t.th,{children:"Type"}),(0,n.jsx)(t.th,{children:"Description"})]})}),(0,n.jsxs)(t.tbody,{children:[(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"vector_store"}),(0,n.jsx)(t.td,{children:"Pinecone"}),(0,n.jsx)(t.td,{children:"Pinecone vector store instance"})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"search_results"}),(0,n.jsx)(t.td,{children:"List[Data]"}),(0,n.jsx)(t.td,{children:"Results of similarity search"})]})]})]}),"\n",(0,n.jsx)(t.h2,{id:"qdrant",children:"Qdrant"}),"\n",(0,n.jsxs)(t.p,{children:["This component creates a Qdrant Vector Store with search capabilities.\nFor more information, see the ",(0,n.jsx)(t.a,{href:"https://qdrant.tech/documentation/",children:"Qdrant documentation"}),"."]}),"\n",(0,n.jsx)(t.h3,{id:"inputs-17",children:"Inputs"}),"\n",(0,n.jsxs)(t.table,{children:[(0,n.jsx)(t.thead,{children:(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.th,{children:"Name"}),(0,n.jsx)(t.th,{children:"Type"}),(0,n.jsx)(t.th,{children:"Description"})]})}),(0,n.jsxs)(t.tbody,{children:[(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"collection_name"}),(0,n.jsx)(t.td,{children:"String"}),(0,n.jsx)(t.td,{children:"Name of the Qdrant collection"})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"host"}),(0,n.jsx)(t.td,{children:"String"}),(0,n.jsx)(t.td,{children:"Qdrant server host"})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"port"}),(0,n.jsx)(t.td,{children:"Integer"}),(0,n.jsx)(t.td,{children:"Qdrant server port"})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"grpc_port"}),(0,n.jsx)(t.td,{children:"Integer"}),(0,n.jsx)(t.td,{children:"Qdrant gRPC port"})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"api_key"}),(0,n.jsx)(t.td,{children:"SecretString"}),(0,n.jsx)(t.td,{children:"API key for Qdrant"})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"prefix"}),(0,n.jsx)(t.td,{children:"String"}),(0,n.jsx)(t.td,{children:"Prefix for Qdrant"})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"timeout"}),(0,n.jsx)(t.td,{children:"Integer"}),(0,n.jsx)(t.td,{children:"Timeout for Qdrant operations"})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"path"}),(0,n.jsx)(t.td,{children:"String"}),(0,n.jsx)(t.td,{children:"Path for Qdrant"})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"url"}),(0,n.jsx)(t.td,{children:"String"}),(0,n.jsx)(t.td,{children:"URL for Qdrant"})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"distance_func"}),(0,n.jsx)(t.td,{children:"String"}),(0,n.jsx)(t.td,{children:"Distance function for vector similarity"})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"content_payload_key"}),(0,n.jsx)(t.td,{children:"String"}),(0,n.jsx)(t.td,{children:"Key for content payload"})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"metadata_payload_key"}),(0,n.jsx)(t.td,{children:"String"}),(0,n.jsx)(t.td,{children:"Key for metadata payload"})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"search_query"}),(0,n.jsx)(t.td,{children:"String"}),(0,n.jsx)(t.td,{children:"Query for similarity search"})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"ingest_data"}),(0,n.jsx)(t.td,{children:"Data"}),(0,n.jsx)(t.td,{children:"Data to be ingested into the vector store"})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"embedding"}),(0,n.jsx)(t.td,{children:"Embeddings"}),(0,n.jsx)(t.td,{children:"Embedding function to use"})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"number_of_results"}),(0,n.jsx)(t.td,{children:"Integer"}),(0,n.jsx)(t.td,{children:"Number of results to return in search"})]})]})]}),"\n",(0,n.jsx)(t.h3,{id:"outputs-17",children:"Outputs"}),"\n",(0,n.jsxs)(t.table,{children:[(0,n.jsx)(t.thead,{children:(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.th,{children:"Name"}),(0,n.jsx)(t.th,{children:"Type"}),(0,n.jsx)(t.th,{children:"Description"})]})}),(0,n.jsxs)(t.tbody,{children:[(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"vector_store"}),(0,n.jsx)(t.td,{children:"Qdrant"}),(0,n.jsx)(t.td,{children:"Qdrant vector store instance"})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"search_results"}),(0,n.jsx)(t.td,{children:"List[Data]"}),(0,n.jsx)(t.td,{children:"Results of similarity search"})]})]})]}),"\n",(0,n.jsx)(t.h2,{id:"redis",children:"Redis"}),"\n",(0,n.jsxs)(t.p,{children:["This component creates a Redis Vector Store with search capabilities.\nFor more information, see the ",(0,n.jsx)(t.a,{href:"https://redis.io/docs/latest/develop/interact/search-and-query/advanced-concepts/vectors/",children:"Redis documentation"}),"."]}),"\n",(0,n.jsx)(t.h3,{id:"inputs-18",children:"Inputs"}),"\n",(0,n.jsxs)(t.table,{children:[(0,n.jsx)(t.thead,{children:(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.th,{children:"Name"}),(0,n.jsx)(t.th,{children:"Type"}),(0,n.jsx)(t.th,{children:"Description"})]})}),(0,n.jsxs)(t.tbody,{children:[(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"redis_server_url"}),(0,n.jsx)(t.td,{children:"SecretString"}),(0,n.jsx)(t.td,{children:"Redis server connection string"})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"redis_index_name"}),(0,n.jsx)(t.td,{children:"String"}),(0,n.jsx)(t.td,{children:"Name of the Redis index"})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"code"}),(0,n.jsx)(t.td,{children:"String"}),(0,n.jsx)(t.td,{children:"Custom code for Redis (advanced)"})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"schema"}),(0,n.jsx)(t.td,{children:"String"}),(0,n.jsx)(t.td,{children:"Schema for Redis index"})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"search_query"}),(0,n.jsx)(t.td,{children:"String"}),(0,n.jsx)(t.td,{children:"Query for similarity search"})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"ingest_data"}),(0,n.jsx)(t.td,{children:"Data"}),(0,n.jsx)(t.td,{children:"Data to be ingested into the vector store"})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"number_of_results"}),(0,n.jsx)(t.td,{children:"Integer"}),(0,n.jsx)(t.td,{children:"Number of results to return in search"})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"embedding"}),(0,n.jsx)(t.td,{children:"Embeddings"}),(0,n.jsx)(t.td,{children:"Embedding function to use"})]})]})]}),"\n",(0,n.jsx)(t.h3,{id:"outputs-18",children:"Outputs"}),"\n",(0,n.jsxs)(t.table,{children:[(0,n.jsx)(t.thead,{children:(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.th,{children:"Name"}),(0,n.jsx)(t.th,{children:"Type"}),(0,n.jsx)(t.th,{children:"Description"})]})}),(0,n.jsxs)(t.tbody,{children:[(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"vector_store"}),(0,n.jsx)(t.td,{children:"Redis"}),(0,n.jsx)(t.td,{children:"Redis vector store instance"})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"search_results"}),(0,n.jsx)(t.td,{children:"List[Data]"}),(0,n.jsx)(t.td,{children:"Results of similarity search"})]})]})]}),"\n",(0,n.jsx)(t.h2,{id:"supabase",children:"Supabase"}),"\n",(0,n.jsxs)(t.p,{children:["This component creates a connection to a Supabase Vector Store with search capabilities.\nFor more information, see the ",(0,n.jsx)(t.a,{href:"https://supabase.com/docs/guides/ai",children:"Supabase documentation"}),"."]}),"\n",(0,n.jsx)(t.h3,{id:"inputs-19",children:"Inputs"}),"\n",(0,n.jsxs)(t.table,{children:[(0,n.jsx)(t.thead,{children:(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.th,{children:"Name"}),(0,n.jsx)(t.th,{children:"Type"}),(0,n.jsx)(t.th,{children:"Description"})]})}),(0,n.jsxs)(t.tbody,{children:[(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"supabase_url"}),(0,n.jsx)(t.td,{children:"String"}),(0,n.jsx)(t.td,{children:"URL of the Supabase instance"})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"supabase_service_key"}),(0,n.jsx)(t.td,{children:"SecretString"}),(0,n.jsx)(t.td,{children:"Service key for Supabase authentication"})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"table_name"}),(0,n.jsx)(t.td,{children:"String"}),(0,n.jsx)(t.td,{children:"Name of the table in Supabase"})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"query_name"}),(0,n.jsx)(t.td,{children:"String"}),(0,n.jsx)(t.td,{children:"Name of the query to use"})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"search_query"}),(0,n.jsx)(t.td,{children:"String"}),(0,n.jsx)(t.td,{children:"Query for similarity search"})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"ingest_data"}),(0,n.jsx)(t.td,{children:"Data"}),(0,n.jsx)(t.td,{children:"Data to be ingested into the vector store"})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"embedding"}),(0,n.jsx)(t.td,{children:"Embeddings"}),(0,n.jsx)(t.td,{children:"Embedding function to use"})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"number_of_results"}),(0,n.jsx)(t.td,{children:"Integer"}),(0,n.jsx)(t.td,{children:"Number of results to return in search"})]})]})]}),"\n",(0,n.jsx)(t.h3,{id:"outputs-19",children:"Outputs"}),"\n",(0,n.jsxs)(t.table,{children:[(0,n.jsx)(t.thead,{children:(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.th,{children:"Name"}),(0,n.jsx)(t.th,{children:"Type"}),(0,n.jsx)(t.th,{children:"Description"})]})}),(0,n.jsxs)(t.tbody,{children:[(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"vector_store"}),(0,n.jsx)(t.td,{children:"SupabaseVectorStore"}),(0,n.jsx)(t.td,{children:"Supabase vector store instance"})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"search_results"}),(0,n.jsx)(t.td,{children:"List[Data]"}),(0,n.jsx)(t.td,{children:"Results of similarity search"})]})]})]}),"\n",(0,n.jsx)(t.h2,{id:"upstash",children:"Upstash"}),"\n",(0,n.jsxs)(t.p,{children:["This component creates an Upstash Vector Store with search capabilities.\nFor more information, see the ",(0,n.jsx)(t.a,{href:"https://upstash.com/docs/introduction",children:"Upstash documentation"}),"."]}),"\n",(0,n.jsx)(t.h3,{id:"inputs-20",children:"Inputs"}),"\n",(0,n.jsxs)(t.table,{children:[(0,n.jsx)(t.thead,{children:(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.th,{children:"Name"}),(0,n.jsx)(t.th,{children:"Type"}),(0,n.jsx)(t.th,{children:"Description"})]})}),(0,n.jsxs)(t.tbody,{children:[(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"index_url"}),(0,n.jsx)(t.td,{children:"String"}),(0,n.jsx)(t.td,{children:"The URL of the Upstash index"})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"index_token"}),(0,n.jsx)(t.td,{children:"SecretString"}),(0,n.jsx)(t.td,{children:"The token for the Upstash index"})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"text_key"}),(0,n.jsx)(t.td,{children:"String"}),(0,n.jsx)(t.td,{children:"The key in the record to use as text"})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"namespace"}),(0,n.jsx)(t.td,{children:"String"}),(0,n.jsx)(t.td,{children:"Namespace for the index"})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"search_query"}),(0,n.jsx)(t.td,{children:"String"}),(0,n.jsx)(t.td,{children:"Query for similarity search"})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"metadata_filter"}),(0,n.jsx)(t.td,{children:"String"}),(0,n.jsx)(t.td,{children:"Filters documents by metadata"})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"ingest_data"}),(0,n.jsx)(t.td,{children:"Data"}),(0,n.jsx)(t.td,{children:"Data to be ingested into the vector store"})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"embedding"}),(0,n.jsx)(t.td,{children:"Embeddings"}),(0,n.jsx)(t.td,{children:"Embedding function to use (optional)"})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"number_of_results"}),(0,n.jsx)(t.td,{children:"Integer"}),(0,n.jsx)(t.td,{children:"Number of results to return in search"})]})]})]}),"\n",(0,n.jsx)(t.h3,{id:"outputs-20",children:"Outputs"}),"\n",(0,n.jsxs)(t.table,{children:[(0,n.jsx)(t.thead,{children:(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.th,{children:"Name"}),(0,n.jsx)(t.th,{children:"Type"}),(0,n.jsx)(t.th,{children:"Description"})]})}),(0,n.jsxs)(t.tbody,{children:[(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"vector_store"}),(0,n.jsx)(t.td,{children:"UpstashVectorStore"}),(0,n.jsx)(t.td,{children:"Upstash vector store instance"})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"search_results"}),(0,n.jsx)(t.td,{children:"List[Data]"}),(0,n.jsx)(t.td,{children:"Results of similarity search"})]})]})]}),"\n",(0,n.jsx)(t.h2,{id:"vectara",children:"Vectara"}),"\n",(0,n.jsxs)(t.p,{children:["This component creates a Vectara Vector Store with search capabilities.\nFor more information, see the ",(0,n.jsx)(t.a,{href:"https://docs.vectara.com/docs/",children:"Vectara documentation"}),"."]}),"\n",(0,n.jsx)(t.h3,{id:"inputs-21",children:"Inputs"}),"\n",(0,n.jsxs)(t.table,{children:[(0,n.jsx)(t.thead,{children:(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.th,{children:"Name"}),(0,n.jsx)(t.th,{children:"Type"}),(0,n.jsx)(t.th,{children:"Description"})]})}),(0,n.jsxs)(t.tbody,{children:[(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"vectara_customer_id"}),(0,n.jsx)(t.td,{children:"String"}),(0,n.jsx)(t.td,{children:"Vectara customer ID"})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"vectara_corpus_id"}),(0,n.jsx)(t.td,{children:"String"}),(0,n.jsx)(t.td,{children:"Vectara corpus ID"})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"vectara_api_key"}),(0,n.jsx)(t.td,{children:"SecretString"}),(0,n.jsx)(t.td,{children:"Vectara API key"})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"embedding"}),(0,n.jsx)(t.td,{children:"Embeddings"}),(0,n.jsx)(t.td,{children:"Embedding function to use (optional)"})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"ingest_data"}),(0,n.jsx)(t.td,{children:"List[Document/Data]"}),(0,n.jsx)(t.td,{children:"Data to be ingested into the vector store"})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"search_query"}),(0,n.jsx)(t.td,{children:"String"}),(0,n.jsx)(t.td,{children:"Query for similarity search"})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"number_of_results"}),(0,n.jsx)(t.td,{children:"Integer"}),(0,n.jsx)(t.td,{children:"Number of results to return in search"})]})]})]}),"\n",(0,n.jsx)(t.h3,{id:"outputs-21",children:"Outputs"}),"\n",(0,n.jsxs)(t.table,{children:[(0,n.jsx)(t.thead,{children:(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.th,{children:"Name"}),(0,n.jsx)(t.th,{children:"Type"}),(0,n.jsx)(t.th,{children:"Description"})]})}),(0,n.jsxs)(t.tbody,{children:[(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"vector_store"}),(0,n.jsx)(t.td,{children:"VectaraVectorStore"}),(0,n.jsx)(t.td,{children:"Vectara vector store instance"})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"search_results"}),(0,n.jsx)(t.td,{children:"List[Data]"}),(0,n.jsx)(t.td,{children:"Results of similarity search"})]})]})]}),"\n",(0,n.jsx)(t.h2,{id:"vectara-search",children:"Vectara Search"}),"\n",(0,n.jsxs)(t.p,{children:["This component searches a Vectara Vector Store for documents based on the provided input.\nFor more information, see the ",(0,n.jsx)(t.a,{href:"https://docs.vectara.com/docs/",children:"Vectara documentation"}),"."]}),"\n",(0,n.jsx)(t.h3,{id:"inputs-22",children:"Inputs"}),"\n",(0,n.jsxs)(t.table,{children:[(0,n.jsx)(t.thead,{children:(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.th,{children:"Name"}),(0,n.jsx)(t.th,{children:"Type"}),(0,n.jsx)(t.th,{children:"Description"})]})}),(0,n.jsxs)(t.tbody,{children:[(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"search_type"}),(0,n.jsx)(t.td,{children:"String"}),(0,n.jsx)(t.td,{children:'Type of search, such as "Similarity" or "MMR"'})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"input_value"}),(0,n.jsx)(t.td,{children:"String"}),(0,n.jsx)(t.td,{children:"Search query"})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"vectara_customer_id"}),(0,n.jsx)(t.td,{children:"String"}),(0,n.jsx)(t.td,{children:"Vectara customer ID"})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"vectara_corpus_id"}),(0,n.jsx)(t.td,{children:"String"}),(0,n.jsx)(t.td,{children:"Vectara corpus ID"})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"vectara_api_key"}),(0,n.jsx)(t.td,{children:"SecretString"}),(0,n.jsx)(t.td,{children:"Vectara API key"})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"files_url"}),(0,n.jsx)(t.td,{children:"List[String]"}),(0,n.jsx)(t.td,{children:"Optional URLs for file initialization"})]})]})]}),"\n",(0,n.jsx)(t.h3,{id:"outputs-22",children:"Outputs"}),"\n",(0,n.jsxs)(t.table,{children:[(0,n.jsx)(t.thead,{children:(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.th,{children:"Name"}),(0,n.jsx)(t.th,{children:"Type"}),(0,n.jsx)(t.th,{children:"Description"})]})}),(0,n.jsx)(t.tbody,{children:(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"search_results"}),(0,n.jsx)(t.td,{children:"List[Data]"}),(0,n.jsx)(t.td,{children:"Results of similarity search"})]})})]}),"\n",(0,n.jsx)(t.h2,{id:"weaviate",children:"Weaviate"}),"\n",(0,n.jsxs)(t.p,{children:["This component facilitates a Weaviate Vector Store setup, optimizing text and document indexing and retrieval.\nFor more information, see the ",(0,n.jsx)(t.a,{href:"https://weaviate.io/developers/weaviate",children:"Weaviate Documentation"}),"."]}),"\n",(0,n.jsx)(t.h3,{id:"inputs-23",children:"Inputs"}),"\n",(0,n.jsxs)(t.table,{children:[(0,n.jsx)(t.thead,{children:(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.th,{children:"Name"}),(0,n.jsx)(t.th,{children:"Type"}),(0,n.jsx)(t.th,{children:"Description"})]})}),(0,n.jsxs)(t.tbody,{children:[(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"weaviate_url"}),(0,n.jsx)(t.td,{children:"String"}),(0,n.jsx)(t.td,{children:"Default instance URL"})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"search_by_text"}),(0,n.jsx)(t.td,{children:"Boolean"}),(0,n.jsx)(t.td,{children:"Indicates whether to search by text"})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"api_key"}),(0,n.jsx)(t.td,{children:"SecretString"}),(0,n.jsx)(t.td,{children:"Optional API key for authentication"})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"index_name"}),(0,n.jsx)(t.td,{children:"String"}),(0,n.jsx)(t.td,{children:"Optional index name"})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"text_key"}),(0,n.jsx)(t.td,{children:"String"}),(0,n.jsx)(t.td,{children:"Default text extraction key"})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"input"}),(0,n.jsx)(t.td,{children:"Document"}),(0,n.jsx)(t.td,{children:"Document or record"})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"embedding"}),(0,n.jsx)(t.td,{children:"Embeddings"}),(0,n.jsx)(t.td,{children:"Model used"})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"attributes"}),(0,n.jsx)(t.td,{children:"List[String]"}),(0,n.jsx)(t.td,{children:"Optional additional attributes"})]})]})]}),"\n",(0,n.jsx)(t.h3,{id:"outputs-23",children:"Outputs"}),"\n",(0,n.jsxs)(t.table,{children:[(0,n.jsx)(t.thead,{children:(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.th,{children:"Name"}),(0,n.jsx)(t.th,{children:"Type"}),(0,n.jsx)(t.th,{children:"Description"})]})}),(0,n.jsx)(t.tbody,{children:(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"vector_store"}),(0,n.jsx)(t.td,{children:"WeaviateVectorStore"}),(0,n.jsx)(t.td,{children:"Weaviate vector store instance"})]})})]}),"\n",(0,n.jsx)(t.h2,{id:"weaviate-search",children:"Weaviate Search"}),"\n",(0,n.jsxs)(t.p,{children:["This component searches a Weaviate Vector Store for documents similar to the input.\nFor more information, see the ",(0,n.jsx)(t.a,{href:"https://weaviate.io/developers/weaviate",children:"Weaviate Documentation"}),"."]}),"\n",(0,n.jsx)(t.h3,{id:"inputs-24",children:"Inputs"}),"\n",(0,n.jsxs)(t.table,{children:[(0,n.jsx)(t.thead,{children:(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.th,{children:"Name"}),(0,n.jsx)(t.th,{children:"Type"}),(0,n.jsx)(t.th,{children:"Description"})]})}),(0,n.jsxs)(t.tbody,{children:[(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"search_type"}),(0,n.jsx)(t.td,{children:"String"}),(0,n.jsx)(t.td,{children:'Type of search, such as "Similarity" or "MMR"'})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"input_value"}),(0,n.jsx)(t.td,{children:"String"}),(0,n.jsx)(t.td,{children:"Search query"})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"weaviate_url"}),(0,n.jsx)(t.td,{children:"String"}),(0,n.jsx)(t.td,{children:"Default instance URL"})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"search_by_text"}),(0,n.jsx)(t.td,{children:"Boolean"}),(0,n.jsx)(t.td,{children:"Indicates whether to search by text"})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"api_key"}),(0,n.jsx)(t.td,{children:"SecretString"}),(0,n.jsx)(t.td,{children:"Optional API key for authentication"})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"index_name"}),(0,n.jsx)(t.td,{children:"String"}),(0,n.jsx)(t.td,{children:"Optional index name"})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"text_key"}),(0,n.jsx)(t.td,{children:"String"}),(0,n.jsx)(t.td,{children:"Default text extraction key"})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"embedding"}),(0,n.jsx)(t.td,{children:"Embeddings"}),(0,n.jsx)(t.td,{children:"Model used"})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"attributes"}),(0,n.jsx)(t.td,{children:"List[String]"}),(0,n.jsx)(t.td,{children:"Optional additional attributes"})]})]})]}),"\n",(0,n.jsx)(t.h3,{id:"outputs-24",children:"Outputs"}),"\n",(0,n.jsxs)(t.table,{children:[(0,n.jsx)(t.thead,{children:(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.th,{children:"Name"}),(0,n.jsx)(t.th,{children:"Type"}),(0,n.jsx)(t.th,{children:"Description"})]})}),(0,n.jsx)(t.tbody,{children:(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"search_results"}),(0,n.jsx)(t.td,{children:"List[Data]"}),(0,n.jsx)(t.td,{children:"Results of similarity search"})]})})]})]})}function p(e={}){const{wrapper:t}={...(0,d.R)(),...e.components};return t?(0,n.jsx)(t,{...e,children:(0,n.jsx)(u,{...e})}):u(e)}function m(e,t){throw new Error("Expected "+(t?"component":"object")+" `"+e+"` to be defined: you likely forgot to import, pass, or provide it.")}},59072:(e,t,r)=>{r.d(t,{A:()=>s});const s=r.p+"assets/images/vector-store-agent-retrieval-tool-79066d11008a74c40390f55f7c73bd71.png"},60159:(e,t,r)=>{r.d(t,{A:()=>s});const s=r.p+"assets/images/component-local-db-465d080ccffb1c4db4e137eff9047ff5.png"},67719:(e,t,r)=>{r.d(t,{A:()=>s});const s=r.p+"assets/images/vector-store-retrieval-3201f1ea2f13a5f8a87652c81a5386c6.png"},84443:(e,t,r)=>{r.d(t,{A:()=>d});r(96540);var s=r(64058),n=r(74848);function d(e){let{name:t,...r}=e;const d=s[t];return d?(0,n.jsx)(d,{...r}):null}},88690:(e,t,r)=>{r.d(t,{A:()=>s});const s=r.p+"assets/images/component-chroma-db-4cd884c7b7fd4b4be27cda1aec03790b.png"}}]); \ No newline at end of file diff --git a/assets/js/f66238ae.bba50808.js b/assets/js/f66238ae.bba50808.js new file mode 100644 index 0000000000..7eda5822fc --- /dev/null +++ b/assets/js/f66238ae.bba50808.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunklangflow_docs=self.webpackChunklangflow_docs||[]).push([[3391],{42638:(e,r,t)=>{t.d(r,{A:()=>s});const s=t.p+"assets/images/component-hcd-example-flow-b82057600ce5e9e4a0f7ea0a61dcbf7f.png"},45175:(e,r,t)=>{t.r(r),t.d(r,{CH:()=>o,assets:()=>a,chCodeConfig:()=>x,contentTitle:()=>l,default:()=>u,frontMatter:()=>h,metadata:()=>s,toc:()=>j});const s=JSON.parse('{"id":"Components/components-vector-stores","title":"Vector stores","description":"Vector databases store vector data, which backs AI workloads like chatbots and Retrieval Augmented Generation.","source":"@site/docs/Components/components-vector-stores.md","sourceDirName":"Components","slug":"/components-vector-stores","permalink":"/components-vector-stores","draft":false,"unlisted":false,"tags":[],"version":"current","frontMatter":{"title":"Vector stores","slug":"/components-vector-stores"},"sidebar":"docs","previous":{"title":"Tools","permalink":"/components-tools"},"next":{"title":"Agents overview","permalink":"/agents-overview"}}');var n=t(74848),d=t(28453),i=t(24754),c=t(84443);const h={title:"Vector stores",slug:"/components-vector-stores"},l="Vector store components in Langflow",a={},o={annotations:i.hk,Code:i.Cy},x={staticMediaQuery:"not screen, (max-width: 768px)",lineNumbers:!0,showCopyButton:!0,themeName:"github-dark"},j=[{value:"Use a vector store component in a flow",id:"use-a-vector-store-component-in-a-flow",level:2},{value:"Astra DB Vector Store",id:"astra-db-vector-store",level:2},{value:"Generate embeddings",id:"generate-embeddings",level:3},{value:"Hybrid search",id:"hybrid-search",level:3},{value:"AstraDB Graph vector store",id:"astradb-graph-vector-store",level:2},{value:"Cassandra",id:"cassandra",level:2},{value:"Cassandra Graph Vector Store",id:"cassandra-graph-vector-store",level:2},{value:"Chroma DB",id:"chroma-db",level:2},{value:"Clickhouse",id:"clickhouse",level:2},{value:"Couchbase",id:"couchbase",level:2},{value:"Local DB",id:"local-db",level:2},{value:"Elasticsearch",id:"elasticsearch",level:2},{value:"FAISS",id:"faiss",level:2},{value:"Graph RAG",id:"graph-rag",level:2},{value:"Hyper-Converged Database (HCD)",id:"hyper-converged-database-hcd",level:2},{value:"Milvus",id:"milvus",level:2},{value:"MongoDB Atlas",id:"mongodb-atlas",level:2},{value:"Opensearch",id:"opensearch",level:2},{value:"PGVector",id:"pgvector",level:2},{value:"Pinecone",id:"pinecone",level:2},{value:"Qdrant",id:"qdrant",level:2},{value:"Redis",id:"redis",level:2},{value:"Supabase",id:"supabase",level:2},{value:"Upstash",id:"upstash",level:2},{value:"Vectara",id:"vectara",level:2},{value:"Vectara Search",id:"vectara-search",level:2},{value:"Weaviate",id:"weaviate",level:2},{value:"Weaviate Search",id:"weaviate-search",level:2}];function m(e){const r={a:"a",admonition:"admonition",code:"code",h1:"h1",h2:"h2",h3:"h3",header:"header",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,d.R)(),...e.components},{Details:s}=r;return o||p("CH",!1),o.Code||p("CH.Code",!0),s||p("Details",!0),(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)("style",{dangerouslySetInnerHTML:{__html:'[data-ch-theme="github-dark"] { --ch-t-colorScheme: dark;--ch-t-foreground: #c9d1d9;--ch-t-background: #0d1117;--ch-t-lighter-inlineBackground: #0d1117e6;--ch-t-editor-background: #0d1117;--ch-t-editor-foreground: #c9d1d9;--ch-t-editor-lineHighlightBackground: #6e76811a;--ch-t-editor-rangeHighlightBackground: #ffffff0b;--ch-t-editor-infoForeground: #3794FF;--ch-t-editor-selectionBackground: #264F78;--ch-t-focusBorder: #1f6feb;--ch-t-tab-activeBackground: #0d1117;--ch-t-tab-activeForeground: #c9d1d9;--ch-t-tab-inactiveBackground: #010409;--ch-t-tab-inactiveForeground: #8b949e;--ch-t-tab-border: #30363d;--ch-t-tab-activeBorder: #0d1117;--ch-t-editorGroup-border: #30363d;--ch-t-editorGroupHeader-tabsBackground: #010409;--ch-t-editorLineNumber-foreground: #6e7681;--ch-t-input-background: #0d1117;--ch-t-input-foreground: #c9d1d9;--ch-t-input-border: #30363d;--ch-t-icon-foreground: #8b949e;--ch-t-sideBar-background: #010409;--ch-t-sideBar-foreground: #c9d1d9;--ch-t-sideBar-border: #30363d;--ch-t-list-activeSelectionBackground: #6e768166;--ch-t-list-activeSelectionForeground: #c9d1d9;--ch-t-list-hoverBackground: #6e76811a;--ch-t-list-hoverForeground: #c9d1d9; }'}}),"\n","\n",(0,n.jsx)(r.header,{children:(0,n.jsx)(r.h1,{id:"vector-store-components-in-langflow",children:"Vector store components in Langflow"})}),"\n",(0,n.jsx)(r.p,{children:"Vector databases store vector data, which backs AI workloads like chatbots and Retrieval Augmented Generation."}),"\n",(0,n.jsx)(r.p,{children:"Vector database components establish connections to existing vector databases or create in-memory vector stores for storing and retrieving vector data."}),"\n",(0,n.jsxs)(r.p,{children:["Vector database components are distinct from ",(0,n.jsx)(r.a,{href:"/components-memories",children:"memory components"}),", which are built specifically for storing and retrieving chat messages from external databases."]}),"\n",(0,n.jsx)(r.h2,{id:"use-a-vector-store-component-in-a-flow",children:"Use a vector store component in a flow"}),"\n",(0,n.jsxs)(r.p,{children:["This example uses the ",(0,n.jsx)(r.strong,{children:"Astra DB vector store"})," component. Your vector store component's parameters and authentication may be different, but the document ingestion workflow is the same. A document is loaded from a local machine and chunked. The Astra DB vector store generates embeddings with the connected ",(0,n.jsx)(r.a,{href:"/components-models",children:"model"})," component, and stores them in the connected Astra DB database."]}),"\n",(0,n.jsx)(r.p,{children:"This vector data can then be retrieved for workloads like Retrieval Augmented Generation."}),"\n",(0,n.jsx)(r.p,{children:(0,n.jsx)(r.img,{src:t(67719).A+"",width:"2734",height:"1402"})}),"\n",(0,n.jsxs)(r.p,{children:["The user's chat input is embedded and compared to the vectors embedded during document ingestion for a similarity search.\nThe results are output from the vector database component as a ",(0,n.jsx)(r.a,{href:"/concepts-objects",children:"Data"})," object and parsed into text.\nThis text fills the ",(0,n.jsx)(r.code,{children:"{context}"})," variable in the ",(0,n.jsx)(r.strong,{children:"Prompt"})," component, which informs the ",(0,n.jsx)(r.strong,{children:"Open AI model"})," component's responses."]}),"\n",(0,n.jsxs)(r.p,{children:["Alternatively, connect the vector database component's ",(0,n.jsx)(r.strong,{children:"Retriever"})," port to a ",(0,n.jsx)(r.a,{href:"components-tools#retriever-tool",children:"retriever tool"}),", and then to an ",(0,n.jsx)(r.a,{href:"/components-agents",children:"agent"})," component. This enables the agent to use your vector database as a tool and make decisions based on the available data."]}),"\n",(0,n.jsx)(r.p,{children:(0,n.jsx)(r.img,{src:t(59072).A+"",width:"2414",height:"1602"})}),"\n",(0,n.jsx)(r.h2,{id:"astra-db-vector-store",children:"Astra DB Vector Store"}),"\n",(0,n.jsx)(r.p,{children:"This component implements a Vector Store using Astra DB with search capabilities."}),"\n",(0,n.jsxs)(r.p,{children:["For more information, see the ",(0,n.jsx)(r.a,{href:"https://docs.datastax.com/en/astra-db-serverless/databases/create-database.html",children:"DataStax documentation"}),"."]}),"\n",(0,n.jsxs)(s,{children:[(0,n.jsx)("summary",{children:"Parameters"}),(0,n.jsx)(r.p,{children:(0,n.jsx)(r.strong,{children:"Inputs"})}),(0,n.jsxs)(r.table,{children:[(0,n.jsx)(r.thead,{children:(0,n.jsxs)(r.tr,{children:[(0,n.jsx)(r.th,{children:"Name"}),(0,n.jsx)(r.th,{children:"Display Name"}),(0,n.jsx)(r.th,{children:"Info"})]})}),(0,n.jsxs)(r.tbody,{children:[(0,n.jsxs)(r.tr,{children:[(0,n.jsx)(r.td,{children:"token"}),(0,n.jsx)(r.td,{children:"Astra DB Application Token"}),(0,n.jsx)(r.td,{children:"The authentication token for accessing Astra DB."})]}),(0,n.jsxs)(r.tr,{children:[(0,n.jsx)(r.td,{children:"environment"}),(0,n.jsx)(r.td,{children:"Environment"}),(0,n.jsxs)(r.td,{children:["The environment for the Astra DB API Endpoint. For example, ",(0,n.jsx)(r.code,{children:"dev"})," or ",(0,n.jsx)(r.code,{children:"prod"}),"."]})]}),(0,n.jsxs)(r.tr,{children:[(0,n.jsx)(r.td,{children:"database_name"}),(0,n.jsx)(r.td,{children:"Database"}),(0,n.jsx)(r.td,{children:"The database name for the Astra DB instance."})]}),(0,n.jsxs)(r.tr,{children:[(0,n.jsx)(r.td,{children:"api_endpoint"}),(0,n.jsx)(r.td,{children:"Astra DB API Endpoint"}),(0,n.jsx)(r.td,{children:"The API endpoint for the Astra DB instance. This supersedes the database selection."})]}),(0,n.jsxs)(r.tr,{children:[(0,n.jsx)(r.td,{children:"collection_name"}),(0,n.jsx)(r.td,{children:"Collection"}),(0,n.jsx)(r.td,{children:"The name of the collection within Astra DB where the vectors are stored."})]}),(0,n.jsxs)(r.tr,{children:[(0,n.jsx)(r.td,{children:"keyspace"}),(0,n.jsx)(r.td,{children:"Keyspace"}),(0,n.jsx)(r.td,{children:"An optional keyspace within Astra DB to use for the collection."})]}),(0,n.jsxs)(r.tr,{children:[(0,n.jsx)(r.td,{children:"embedding_choice"}),(0,n.jsx)(r.td,{children:"Embedding Model or Astra Vectorize"}),(0,n.jsx)(r.td,{children:"Choose an embedding model or use Astra vectorize."})]}),(0,n.jsxs)(r.tr,{children:[(0,n.jsx)(r.td,{children:"embedding_model"}),(0,n.jsx)(r.td,{children:"Embedding Model"}),(0,n.jsx)(r.td,{children:"Specify the embedding model. Not required for Astra vectorize collections."})]}),(0,n.jsxs)(r.tr,{children:[(0,n.jsx)(r.td,{children:"number_of_results"}),(0,n.jsx)(r.td,{children:"Number of Search Results"}),(0,n.jsxs)(r.td,{children:["The number of search results to return. Default:",(0,n.jsx)(r.code,{children:"4"}),"."]})]}),(0,n.jsxs)(r.tr,{children:[(0,n.jsx)(r.td,{children:"search_type"}),(0,n.jsx)(r.td,{children:"Search Type"}),(0,n.jsxs)(r.td,{children:["The search type to use. The options are ",(0,n.jsx)(r.code,{children:"Similarity"}),", ",(0,n.jsx)(r.code,{children:"Similarity with score threshold"}),", and ",(0,n.jsx)(r.code,{children:"MMR (Max Marginal Relevance)"}),"."]})]}),(0,n.jsxs)(r.tr,{children:[(0,n.jsx)(r.td,{children:"search_score_threshold"}),(0,n.jsx)(r.td,{children:"Search Score Threshold"}),(0,n.jsxs)(r.td,{children:["The minimum similarity score threshold for search results when using the ",(0,n.jsx)(r.code,{children:"Similarity with score threshold"})," option."]})]}),(0,n.jsxs)(r.tr,{children:[(0,n.jsx)(r.td,{children:"advanced_search_filter"}),(0,n.jsx)(r.td,{children:"Search Metadata Filter"}),(0,n.jsx)(r.td,{children:"An optional dictionary of filters to apply to the search query."})]}),(0,n.jsxs)(r.tr,{children:[(0,n.jsx)(r.td,{children:"autodetect_collection"}),(0,n.jsx)(r.td,{children:"Autodetect Collection"}),(0,n.jsx)(r.td,{children:"A boolean flag to determine whether to autodetect the collection."})]}),(0,n.jsxs)(r.tr,{children:[(0,n.jsx)(r.td,{children:"content_field"}),(0,n.jsx)(r.td,{children:"Content Field"}),(0,n.jsx)(r.td,{children:"A field to use as the text content field for the vector store."})]}),(0,n.jsxs)(r.tr,{children:[(0,n.jsx)(r.td,{children:"deletion_field"}),(0,n.jsx)(r.td,{children:"Deletion Based On Field"}),(0,n.jsx)(r.td,{children:"When provided, documents in the target collection with metadata field values matching the input metadata field value are deleted before new data is loaded."})]}),(0,n.jsxs)(r.tr,{children:[(0,n.jsx)(r.td,{children:"ignore_invalid_documents"}),(0,n.jsx)(r.td,{children:"Ignore Invalid Documents"}),(0,n.jsx)(r.td,{children:"A boolean flag to determine whether to ignore invalid documents at runtime."})]}),(0,n.jsxs)(r.tr,{children:[(0,n.jsx)(r.td,{children:"astradb_vectorstore_kwargs"}),(0,n.jsx)(r.td,{children:"AstraDBVectorStore Parameters"}),(0,n.jsx)(r.td,{children:"An optional dictionary of additional parameters for the AstraDBVectorStore."})]})]})]}),(0,n.jsx)(r.p,{children:(0,n.jsx)(r.strong,{children:"Outputs"})}),(0,n.jsxs)(r.table,{children:[(0,n.jsx)(r.thead,{children:(0,n.jsxs)(r.tr,{children:[(0,n.jsx)(r.th,{children:"Name"}),(0,n.jsx)(r.th,{children:"Display Name"}),(0,n.jsx)(r.th,{children:"Info"})]})}),(0,n.jsxs)(r.tbody,{children:[(0,n.jsxs)(r.tr,{children:[(0,n.jsx)(r.td,{children:"vector_store"}),(0,n.jsx)(r.td,{children:"Vector Store"}),(0,n.jsx)(r.td,{children:"The Astra DB vector store instance configured with the specified parameters."})]}),(0,n.jsxs)(r.tr,{children:[(0,n.jsx)(r.td,{children:"search_results"}),(0,n.jsx)(r.td,{children:"Search Results"}),(0,n.jsxs)(r.td,{children:["The results of the similarity search as a list of ",(0,n.jsx)(r.a,{href:"/concepts-objects#data-object",children:"Data"})," objects."]})]})]})]})]}),"\n",(0,n.jsx)(r.h3,{id:"generate-embeddings",children:"Generate embeddings"}),"\n",(0,n.jsxs)(r.p,{children:["The ",(0,n.jsx)(r.strong,{children:"Astra DB Vector Store"})," component offers two methods for generating embeddings."]}),"\n",(0,n.jsxs)(r.ol,{children:["\n",(0,n.jsxs)(r.li,{children:["\n",(0,n.jsxs)(r.p,{children:[(0,n.jsx)(r.strong,{children:"Embedding Model"}),": Use your own embedding model by connecting an ",(0,n.jsx)(r.a,{href:"/components-embedding-models",children:"Embeddings"})," component in Langflow."]}),"\n"]}),"\n",(0,n.jsxs)(r.li,{children:["\n",(0,n.jsxs)(r.p,{children:[(0,n.jsx)(r.strong,{children:"Astra Vectorize"}),": Use Astra DB's built-in embedding generation service. When creating a new collection, choose the embeddings provider and models, including NVIDIA's ",(0,n.jsx)(r.code,{children:"NV-Embed-QA"})," model hosted by Datastax."]}),"\n"]}),"\n"]}),"\n",(0,n.jsx)(r.admonition,{type:"important",children:(0,n.jsx)(r.p,{children:"The embedding model selection is made when creating a new collection and cannot be changed later."})}),"\n",(0,n.jsxs)(r.p,{children:["For an example of using the ",(0,n.jsx)(r.strong,{children:"Astra DB Vector Store"})," component with an embedding model, see the ",(0,n.jsx)(r.a,{href:"/starter-projects-vector-store-rag",children:"Vector Store RAG starter project"}),"."]}),"\n",(0,n.jsxs)(r.p,{children:["For more information, see the ",(0,n.jsx)(r.a,{href:"https://docs.datastax.com/en/astra-db-serverless/databases/embedding-generation.html",children:"Astra DB Serverless documentation"}),"."]}),"\n",(0,n.jsx)(r.h3,{id:"hybrid-search",children:"Hybrid search"}),"\n",(0,n.jsxs)(r.p,{children:["The ",(0,n.jsx)(r.strong,{children:"Astra DB"})," component includes ",(0,n.jsx)(r.strong,{children:"hybrid search"}),", which is enabled by default."]}),"\n",(0,n.jsxs)(r.p,{children:["The component fields related to hybrid search are ",(0,n.jsx)(r.strong,{children:"Search Query"}),", ",(0,n.jsx)(r.strong,{children:"Lexical Terms"}),", and ",(0,n.jsx)(r.strong,{children:"Reranker"}),"."]}),"\n",(0,n.jsxs)(r.ul,{children:["\n",(0,n.jsxs)(r.li,{children:[(0,n.jsx)(r.strong,{children:"Search Query"})," finds results by vector similarity."]}),"\n",(0,n.jsxs)(r.li,{children:[(0,n.jsx)(r.strong,{children:"Lexical Terms"})," is a comma-separated string of keywords, like ",(0,n.jsx)(r.code,{children:"features, data, attributes, characteristics"}),"."]}),"\n",(0,n.jsxs)(r.li,{children:[(0,n.jsx)(r.strong,{children:"Reranker"})," is the re-ranker model used in the hybrid search.\nThe re-ranker model is ",(0,n.jsx)(r.code,{children:"nvidia/llama-3.2-nv.reranker"}),"."]}),"\n"]}),"\n",(0,n.jsxs)(r.p,{children:[(0,n.jsx)(r.a,{href:"https://docs.datastax.com/en/astra-db-serverless/databases/hybrid-search.html",children:"Hybrid search"})," performs a vector similarity search and a lexical search, compares the results of both searches, and then returns the most relevant results overall."]}),"\n",(0,n.jsx)(r.admonition,{type:"important",children:(0,n.jsxs)(r.p,{children:["To use hybrid search, your collection must be created with vector, lexical, and rerank capabilities enabled. These capabilities are enabled by default when you create a collection in a database in the AWS us-east-2 region.\nFor more information, see the ",(0,n.jsx)(r.a,{href:"https://docs.datastax.com/en/astra-db-serverless/api-reference/collection-methods/create-collection.html#example-hybrid",children:"DataStax documentation"}),"."]})}),"\n",(0,n.jsxs)(r.p,{children:["To use ",(0,n.jsx)(r.strong,{children:"Hybrid search"})," in the ",(0,n.jsx)(r.strong,{children:"Astra DB"})," component, do the following:"]}),"\n",(0,n.jsxs)(r.ol,{children:["\n",(0,n.jsxs)(r.li,{children:["Click ",(0,n.jsx)(r.strong,{children:"New Flow"})," > ",(0,n.jsx)(r.strong,{children:"RAG"})," > ",(0,n.jsx)(r.strong,{children:"Hybrid Search RAG"}),"."]}),"\n",(0,n.jsxs)(r.li,{children:["In the ",(0,n.jsx)(r.strong,{children:"OpenAI"})," model component, add your ",(0,n.jsx)(r.strong,{children:"OpenAI API key"}),"."]}),"\n",(0,n.jsxs)(r.li,{children:["In the ",(0,n.jsx)(r.strong,{children:"Astra DB"})," vector store component, add your ",(0,n.jsx)(r.strong,{children:"Astra DB Application Token"}),"."]}),"\n",(0,n.jsxs)(r.li,{children:["In the ",(0,n.jsx)(r.strong,{children:"Database"})," field, select your database."]}),"\n",(0,n.jsxs)(r.li,{children:["In the ",(0,n.jsx)(r.strong,{children:"Collection"})," field, select or create a collection with hybrid search capabilities enabled."]}),"\n",(0,n.jsxs)(r.li,{children:["In the ",(0,n.jsx)(r.strong,{children:"Playground"}),", enter a question about your data, such as ",(0,n.jsx)(r.code,{children:"What are the features of my data?"}),"\nYour query is sent to two components: an ",(0,n.jsx)(r.strong,{children:"OpenAI"})," model component and the ",(0,n.jsx)(r.strong,{children:"Astra DB"})," vector database component.\nThe ",(0,n.jsx)(r.strong,{children:"OpenAI"})," component contains a prompt for creating the lexical query from your input:"]}),"\n"]}),"\n",(0,n.jsx)(o.Code,{codeConfig:x,northPanel:{tabs:[""],active:"",heightRatio:1},files:[{name:"",focus:"",code:{lines:[{tokens:[{content:"You are a database query planner that takes a user's requests, and then converts to a search against the subject matter in question.",props:{}}]},{tokens:[{content:"You should convert the query into:",props:{}}]},{tokens:[{content:"1. A list of keywords to use against a Lucene text analyzer index, no more than 4. Strictly unigrams.",props:{}}]},{tokens:[{content:"2. A question to use as the basis for a QA embedding engine.",props:{}}]},{tokens:[{content:"Avoid common keywords associated with the user's subject matter.",props:{}}]}],lang:"text"},annotations:[]}]}),"\n",(0,n.jsxs)(r.ol,{start:"7",children:["\n",(0,n.jsxs)(r.li,{children:["To view the keywords and questions the ",(0,n.jsx)(r.strong,{children:"OpenAI"})," component generates from your collection, in the ",(0,n.jsx)(r.strong,{children:"OpenAI"})," component, click ",(0,n.jsx)(c.A,{name:"TextSearch","aria-label":"Inspect icon"}),"."]}),"\n"]}),"\n",(0,n.jsx)(o.Code,{codeConfig:x,northPanel:{tabs:[""],active:"",heightRatio:1},files:[{name:"",focus:"",code:{lines:[{tokens:[{content:"1. Keywords: features, data, attributes, characteristics",props:{}}]},{tokens:[{content:"2. Question: What characteristics can be identified in my data?",props:{}}]}],lang:"text"},annotations:[]}]}),"\n",(0,n.jsxs)(r.ol,{start:"8",children:["\n",(0,n.jsxs)(r.li,{children:["\n",(0,n.jsxs)(r.p,{children:["To view the ",(0,n.jsx)(r.a,{href:"/concepts-objects#dataframe-object",children:"DataFrame"})," generated from the ",(0,n.jsx)(r.strong,{children:"OpenAI"})," component's response, in the ",(0,n.jsx)(r.strong,{children:"Structured Output"})," component, click ",(0,n.jsx)(c.A,{name:"TextSearch","aria-label":"Inspect icon"}),".\nThe DataFrame is passed to a ",(0,n.jsx)(r.strong,{children:"Parser"})," component, which parses the contents of the ",(0,n.jsx)(r.strong,{children:"Keywords"})," column into a string."]}),"\n",(0,n.jsxs)(r.p,{children:["This string of comma-separated words is passed to the ",(0,n.jsx)(r.strong,{children:"Lexical Terms"})," port of the ",(0,n.jsx)(r.strong,{children:"Astra DB"})," component.\nNote that the ",(0,n.jsx)(r.strong,{children:"Search Query"})," port of the Astra DB port is connected to the ",(0,n.jsx)(r.strong,{children:"Chat Input"})," component from step 6.\nThis ",(0,n.jsx)(r.strong,{children:"Search Query"})," is vectorized, and both the ",(0,n.jsx)(r.strong,{children:"Search Query"})," and ",(0,n.jsx)(r.strong,{children:"Lexical Terms"})," content are sent to the reranker at the ",(0,n.jsx)(r.code,{children:"find_and_rerank"})," endpoint."]}),"\n",(0,n.jsxs)(r.p,{children:["The reranker compares the vector search results against the string of terms from the lexical search.\nThe highest-ranked results of your hybrid search are returned to the ",(0,n.jsx)(r.strong,{children:"Playground"}),"."]}),"\n"]}),"\n"]}),"\n",(0,n.jsxs)(r.p,{children:["For more information, see the ",(0,n.jsx)(r.a,{href:"https://docs.datastax.com/en/astra-db-serverless/databases/hybrid-search.html",children:"DataStax documentation"}),"."]}),"\n",(0,n.jsx)(r.h2,{id:"astradb-graph-vector-store",children:"AstraDB Graph vector store"}),"\n",(0,n.jsxs)(r.p,{children:["This component implements a Vector Store using AstraDB with graph capabilities.\nFor more information, see the ",(0,n.jsx)(r.a,{href:"https://docs.datastax.com/en/astra-db-serverless/tutorials/graph-rag.html",children:"Astra DB Serverless documentation"}),"."]}),"\n",(0,n.jsxs)(s,{children:[(0,n.jsx)("summary",{children:"Parameters"}),(0,n.jsx)(r.p,{children:(0,n.jsx)(r.strong,{children:"Inputs"})}),(0,n.jsxs)(r.table,{children:[(0,n.jsx)(r.thead,{children:(0,n.jsxs)(r.tr,{children:[(0,n.jsx)(r.th,{children:"Name"}),(0,n.jsx)(r.th,{children:"Display Name"}),(0,n.jsx)(r.th,{children:"Info"})]})}),(0,n.jsxs)(r.tbody,{children:[(0,n.jsxs)(r.tr,{children:[(0,n.jsx)(r.td,{children:"collection_name"}),(0,n.jsx)(r.td,{children:"Collection Name"}),(0,n.jsx)(r.td,{children:"The name of the collection within AstraDB where the vectors are stored. Required."})]}),(0,n.jsxs)(r.tr,{children:[(0,n.jsx)(r.td,{children:"token"}),(0,n.jsx)(r.td,{children:"Astra DB Application Token"}),(0,n.jsx)(r.td,{children:"Authentication token for accessing AstraDB. Required."})]}),(0,n.jsxs)(r.tr,{children:[(0,n.jsx)(r.td,{children:"api_endpoint"}),(0,n.jsx)(r.td,{children:"API Endpoint"}),(0,n.jsx)(r.td,{children:"API endpoint URL for the AstraDB service. Required."})]}),(0,n.jsxs)(r.tr,{children:[(0,n.jsx)(r.td,{children:"search_input"}),(0,n.jsx)(r.td,{children:"Search Input"}),(0,n.jsx)(r.td,{children:"Query string for similarity search."})]}),(0,n.jsxs)(r.tr,{children:[(0,n.jsx)(r.td,{children:"ingest_data"}),(0,n.jsx)(r.td,{children:"Ingest Data"}),(0,n.jsx)(r.td,{children:"Data to be ingested into the vector store."})]}),(0,n.jsxs)(r.tr,{children:[(0,n.jsx)(r.td,{children:"namespace"}),(0,n.jsx)(r.td,{children:"Namespace"}),(0,n.jsx)(r.td,{children:"Optional namespace within AstraDB to use for the collection."})]}),(0,n.jsxs)(r.tr,{children:[(0,n.jsx)(r.td,{children:"embedding"}),(0,n.jsx)(r.td,{children:"Embedding Model"}),(0,n.jsx)(r.td,{children:"Embedding model to use."})]}),(0,n.jsxs)(r.tr,{children:[(0,n.jsx)(r.td,{children:"metric"}),(0,n.jsx)(r.td,{children:"Metric"}),(0,n.jsx)(r.td,{children:'Distance metric for vector comparisons. The options are "cosine", "euclidean", "dot_product".'})]}),(0,n.jsxs)(r.tr,{children:[(0,n.jsx)(r.td,{children:"setup_mode"}),(0,n.jsx)(r.td,{children:"Setup Mode"}),(0,n.jsx)(r.td,{children:'Configuration mode for setting up the vector store. The options are "Sync", "Async", "Off".'})]}),(0,n.jsxs)(r.tr,{children:[(0,n.jsx)(r.td,{children:"pre_delete_collection"}),(0,n.jsx)(r.td,{children:"Pre Delete Collection"}),(0,n.jsx)(r.td,{children:"Boolean flag to determine whether to delete the collection before creating a new one."})]}),(0,n.jsxs)(r.tr,{children:[(0,n.jsx)(r.td,{children:"number_of_results"}),(0,n.jsx)(r.td,{children:"Number of Results"}),(0,n.jsx)(r.td,{children:"Number of results to return in similarity search. Default: 4."})]}),(0,n.jsxs)(r.tr,{children:[(0,n.jsx)(r.td,{children:"search_type"}),(0,n.jsx)(r.td,{children:"Search Type"}),(0,n.jsx)(r.td,{children:'Search type to use. The options are "Similarity", "Graph Traversal", "Hybrid".'})]}),(0,n.jsxs)(r.tr,{children:[(0,n.jsx)(r.td,{children:"traversal_depth"}),(0,n.jsx)(r.td,{children:"Traversal Depth"}),(0,n.jsx)(r.td,{children:"Maximum depth for graph traversal searches. Default: 1."})]}),(0,n.jsxs)(r.tr,{children:[(0,n.jsx)(r.td,{children:"search_score_threshold"}),(0,n.jsx)(r.td,{children:"Search Score Threshold"}),(0,n.jsx)(r.td,{children:"Minimum similarity score threshold for search results."})]}),(0,n.jsxs)(r.tr,{children:[(0,n.jsx)(r.td,{children:"search_filter"}),(0,n.jsx)(r.td,{children:"Search Metadata Filter"}),(0,n.jsx)(r.td,{children:"Optional dictionary of filters to apply to the search query."})]})]})]}),(0,n.jsx)(r.p,{children:(0,n.jsx)(r.strong,{children:"Outputs"})}),(0,n.jsxs)(r.table,{children:[(0,n.jsx)(r.thead,{children:(0,n.jsxs)(r.tr,{children:[(0,n.jsx)(r.th,{children:"Name"}),(0,n.jsx)(r.th,{children:"Display Name"}),(0,n.jsx)(r.th,{children:"Info"})]})}),(0,n.jsxs)(r.tbody,{children:[(0,n.jsxs)(r.tr,{children:[(0,n.jsx)(r.td,{children:"vector_store"}),(0,n.jsx)(r.td,{children:"Vector Store"}),(0,n.jsx)(r.td,{children:"The Graph RAG vector store instance configured with the specified parameters."})]}),(0,n.jsxs)(r.tr,{children:[(0,n.jsx)(r.td,{children:"search_results"}),(0,n.jsx)(r.td,{children:"Search Results"}),(0,n.jsxs)(r.td,{children:["The results of the similarity search as a list of ",(0,n.jsx)(r.a,{href:"/concepts-objects#data-object",children:"Data"})," objects."]})]})]})]})]}),"\n",(0,n.jsx)(r.h2,{id:"cassandra",children:"Cassandra"}),"\n",(0,n.jsxs)(r.p,{children:["This component creates a Cassandra Vector Store with search capabilities.\nFor more information, see the ",(0,n.jsx)(r.a,{href:"https://cassandra.apache.org/doc/latest/cassandra/vector-search/overview.html",children:"Cassandra documentation"}),"."]}),"\n",(0,n.jsxs)(s,{children:[(0,n.jsx)("summary",{children:"Parameters"}),(0,n.jsx)(r.p,{children:(0,n.jsx)(r.strong,{children:"Inputs"})}),(0,n.jsxs)(r.table,{children:[(0,n.jsx)(r.thead,{children:(0,n.jsxs)(r.tr,{children:[(0,n.jsx)(r.th,{children:"Name"}),(0,n.jsx)(r.th,{children:"Type"}),(0,n.jsx)(r.th,{children:"Description"})]})}),(0,n.jsxs)(r.tbody,{children:[(0,n.jsxs)(r.tr,{children:[(0,n.jsx)(r.td,{children:"database_ref"}),(0,n.jsx)(r.td,{children:"String"}),(0,n.jsx)(r.td,{children:"Contact points for the database or AstraDB database ID."})]}),(0,n.jsxs)(r.tr,{children:[(0,n.jsx)(r.td,{children:"username"}),(0,n.jsx)(r.td,{children:"String"}),(0,n.jsx)(r.td,{children:"Username for the database (leave empty for AstraDB)."})]}),(0,n.jsxs)(r.tr,{children:[(0,n.jsx)(r.td,{children:"token"}),(0,n.jsx)(r.td,{children:"SecretString"}),(0,n.jsx)(r.td,{children:"User password for the database or AstraDB token."})]}),(0,n.jsxs)(r.tr,{children:[(0,n.jsx)(r.td,{children:"keyspace"}),(0,n.jsx)(r.td,{children:"String"}),(0,n.jsx)(r.td,{children:"Table Keyspace or AstraDB namespace."})]}),(0,n.jsxs)(r.tr,{children:[(0,n.jsx)(r.td,{children:"table_name"}),(0,n.jsx)(r.td,{children:"String"}),(0,n.jsx)(r.td,{children:"Name of the table or AstraDB collection."})]}),(0,n.jsxs)(r.tr,{children:[(0,n.jsx)(r.td,{children:"ttl_seconds"}),(0,n.jsx)(r.td,{children:"Integer"}),(0,n.jsx)(r.td,{children:"Time-to-live for added texts."})]}),(0,n.jsxs)(r.tr,{children:[(0,n.jsx)(r.td,{children:"batch_size"}),(0,n.jsx)(r.td,{children:"Integer"}),(0,n.jsx)(r.td,{children:"Number of data to process in a single batch."})]}),(0,n.jsxs)(r.tr,{children:[(0,n.jsx)(r.td,{children:"setup_mode"}),(0,n.jsx)(r.td,{children:"String"}),(0,n.jsx)(r.td,{children:"Configuration mode for setting up the Cassandra table."})]}),(0,n.jsxs)(r.tr,{children:[(0,n.jsx)(r.td,{children:"cluster_kwargs"}),(0,n.jsx)(r.td,{children:"Dict"}),(0,n.jsx)(r.td,{children:"Additional keyword arguments for the Cassandra cluster."})]}),(0,n.jsxs)(r.tr,{children:[(0,n.jsx)(r.td,{children:"search_query"}),(0,n.jsx)(r.td,{children:"String"}),(0,n.jsx)(r.td,{children:"Query for similarity search."})]}),(0,n.jsxs)(r.tr,{children:[(0,n.jsx)(r.td,{children:"ingest_data"}),(0,n.jsx)(r.td,{children:"Data"}),(0,n.jsx)(r.td,{children:"Data to be ingested into the vector store."})]}),(0,n.jsxs)(r.tr,{children:[(0,n.jsx)(r.td,{children:"embedding"}),(0,n.jsx)(r.td,{children:"Embeddings"}),(0,n.jsx)(r.td,{children:"Embedding function to use."})]}),(0,n.jsxs)(r.tr,{children:[(0,n.jsx)(r.td,{children:"number_of_results"}),(0,n.jsx)(r.td,{children:"Integer"}),(0,n.jsx)(r.td,{children:"Number of results to return in search."})]}),(0,n.jsxs)(r.tr,{children:[(0,n.jsx)(r.td,{children:"search_type"}),(0,n.jsx)(r.td,{children:"String"}),(0,n.jsx)(r.td,{children:"Type of search to perform."})]}),(0,n.jsxs)(r.tr,{children:[(0,n.jsx)(r.td,{children:"search_score_threshold"}),(0,n.jsx)(r.td,{children:"Float"}),(0,n.jsx)(r.td,{children:"Minimum similarity score for search results."})]}),(0,n.jsxs)(r.tr,{children:[(0,n.jsx)(r.td,{children:"search_filter"}),(0,n.jsx)(r.td,{children:"Dict"}),(0,n.jsx)(r.td,{children:"Metadata filters for search query."})]}),(0,n.jsxs)(r.tr,{children:[(0,n.jsx)(r.td,{children:"body_search"}),(0,n.jsx)(r.td,{children:"String"}),(0,n.jsx)(r.td,{children:"Document textual search terms."})]}),(0,n.jsxs)(r.tr,{children:[(0,n.jsx)(r.td,{children:"enable_body_search"}),(0,n.jsx)(r.td,{children:"Boolean"}),(0,n.jsx)(r.td,{children:"Flag to enable body search."})]})]})]}),(0,n.jsx)(r.p,{children:(0,n.jsx)(r.strong,{children:"Outputs"})}),(0,n.jsxs)(r.table,{children:[(0,n.jsx)(r.thead,{children:(0,n.jsxs)(r.tr,{children:[(0,n.jsx)(r.th,{children:"Name"}),(0,n.jsx)(r.th,{children:"Type"}),(0,n.jsx)(r.th,{children:"Description"})]})}),(0,n.jsxs)(r.tbody,{children:[(0,n.jsxs)(r.tr,{children:[(0,n.jsx)(r.td,{children:"vector_store"}),(0,n.jsx)(r.td,{children:"Cassandra"}),(0,n.jsx)(r.td,{children:"The Cassandra vector store instance configured with the specified parameters."})]}),(0,n.jsxs)(r.tr,{children:[(0,n.jsx)(r.td,{children:"search_results"}),(0,n.jsx)(r.td,{children:"List[Data]"}),(0,n.jsxs)(r.td,{children:["The results of the similarity search as a list of ",(0,n.jsx)(r.code,{children:"Data"})," objects."]})]})]})]})]}),"\n",(0,n.jsx)(r.h2,{id:"cassandra-graph-vector-store",children:"Cassandra Graph Vector Store"}),"\n",(0,n.jsx)(r.p,{children:"This component implements a Cassandra Graph Vector Store with search capabilities."}),"\n",(0,n.jsxs)(s,{children:[(0,n.jsx)("summary",{children:"Parameters"}),(0,n.jsx)(r.p,{children:(0,n.jsx)(r.strong,{children:"Inputs"})}),(0,n.jsxs)(r.table,{children:[(0,n.jsx)(r.thead,{children:(0,n.jsxs)(r.tr,{children:[(0,n.jsx)(r.th,{children:"Name"}),(0,n.jsx)(r.th,{children:"Display Name"}),(0,n.jsx)(r.th,{children:"Info"})]})}),(0,n.jsxs)(r.tbody,{children:[(0,n.jsxs)(r.tr,{children:[(0,n.jsx)(r.td,{children:"database_ref"}),(0,n.jsx)(r.td,{children:"Contact Points / Astra Database ID"}),(0,n.jsx)(r.td,{children:"The contact points for the database or AstraDB database ID. Required."})]}),(0,n.jsxs)(r.tr,{children:[(0,n.jsx)(r.td,{children:"username"}),(0,n.jsx)(r.td,{children:"Username"}),(0,n.jsx)(r.td,{children:"The username for the database. Leave this field empty for AstraDB."})]}),(0,n.jsxs)(r.tr,{children:[(0,n.jsx)(r.td,{children:"token"}),(0,n.jsx)(r.td,{children:"Password / AstraDB Token"}),(0,n.jsx)(r.td,{children:"The user password for the database or AstraDB token. Required."})]}),(0,n.jsxs)(r.tr,{children:[(0,n.jsx)(r.td,{children:"keyspace"}),(0,n.jsx)(r.td,{children:"Keyspace"}),(0,n.jsx)(r.td,{children:"The table Keyspace or AstraDB namespace. Required."})]}),(0,n.jsxs)(r.tr,{children:[(0,n.jsx)(r.td,{children:"table_name"}),(0,n.jsx)(r.td,{children:"Table Name"}),(0,n.jsx)(r.td,{children:"The name of the table or AstraDB collection where vectors are stored. Required."})]}),(0,n.jsxs)(r.tr,{children:[(0,n.jsx)(r.td,{children:"setup_mode"}),(0,n.jsx)(r.td,{children:"Setup Mode"}),(0,n.jsx)(r.td,{children:'The configuration mode for setting up the Cassandra table. The options are "Sync" or "Off". Default: "Sync".'})]}),(0,n.jsxs)(r.tr,{children:[(0,n.jsx)(r.td,{children:"cluster_kwargs"}),(0,n.jsx)(r.td,{children:"Cluster arguments"}),(0,n.jsx)(r.td,{children:"An optional dictionary of additional keyword arguments for the Cassandra cluster."})]}),(0,n.jsxs)(r.tr,{children:[(0,n.jsx)(r.td,{children:"search_query"}),(0,n.jsx)(r.td,{children:"Search Query"}),(0,n.jsx)(r.td,{children:"The query string for similarity search."})]}),(0,n.jsxs)(r.tr,{children:[(0,n.jsx)(r.td,{children:"ingest_data"}),(0,n.jsx)(r.td,{children:"Ingest Data"}),(0,n.jsx)(r.td,{children:"The list of data to be ingested into the vector store."})]}),(0,n.jsxs)(r.tr,{children:[(0,n.jsx)(r.td,{children:"embedding"}),(0,n.jsx)(r.td,{children:"Embedding"}),(0,n.jsx)(r.td,{children:"The embedding model to use."})]}),(0,n.jsxs)(r.tr,{children:[(0,n.jsx)(r.td,{children:"number_of_results"}),(0,n.jsx)(r.td,{children:"Number of Results"}),(0,n.jsx)(r.td,{children:"The number of results to return in similarity search. Default: 4."})]}),(0,n.jsxs)(r.tr,{children:[(0,n.jsx)(r.td,{children:"search_type"}),(0,n.jsx)(r.td,{children:"Search Type"}),(0,n.jsx)(r.td,{children:'The search type to use. The options are "Traversal", "MMR traversal", "Similarity", "Similarity with score threshold", or "MMR (Max Marginal Relevance)". Default: "Traversal".'})]}),(0,n.jsxs)(r.tr,{children:[(0,n.jsx)(r.td,{children:"depth"}),(0,n.jsx)(r.td,{children:"Depth of traversal"}),(0,n.jsx)(r.td,{children:'The maximum depth of edges to traverse. Used for "Traversal" or "MMR traversal" search types. Default: 1.'})]}),(0,n.jsxs)(r.tr,{children:[(0,n.jsx)(r.td,{children:"search_score_threshold"}),(0,n.jsx)(r.td,{children:"Search Score Threshold"}),(0,n.jsx)(r.td,{children:'The minimum similarity score threshold for search results. Used for "Similarity with score threshold" search types.'})]}),(0,n.jsxs)(r.tr,{children:[(0,n.jsx)(r.td,{children:"search_filter"}),(0,n.jsx)(r.td,{children:"Search Metadata Filter"}),(0,n.jsx)(r.td,{children:"An optional dictionary of filters to apply to the search query."})]})]})]}),(0,n.jsx)(r.p,{children:(0,n.jsx)(r.strong,{children:"Outputs"})}),(0,n.jsxs)(r.table,{children:[(0,n.jsx)(r.thead,{children:(0,n.jsxs)(r.tr,{children:[(0,n.jsx)(r.th,{children:"Name"}),(0,n.jsx)(r.th,{children:"Display Name"}),(0,n.jsx)(r.th,{children:"Info"})]})}),(0,n.jsxs)(r.tbody,{children:[(0,n.jsxs)(r.tr,{children:[(0,n.jsx)(r.td,{children:"vector_store"}),(0,n.jsx)(r.td,{children:"Vector Store"}),(0,n.jsx)(r.td,{children:"The Cassandra Graph vector store instance configured with the specified parameters."})]}),(0,n.jsxs)(r.tr,{children:[(0,n.jsx)(r.td,{children:"search_results"}),(0,n.jsx)(r.td,{children:"Search Results"}),(0,n.jsxs)(r.td,{children:["The results of the similarity search as a list of ",(0,n.jsx)(r.a,{href:"/concepts-objects#data-object",children:"Data"})," objects."]})]})]})]})]}),"\n",(0,n.jsx)(r.h2,{id:"chroma-db",children:"Chroma DB"}),"\n",(0,n.jsx)(r.p,{children:"This component creates a Chroma Vector Store with search capabilities."}),"\n",(0,n.jsx)(r.p,{children:"The Chroma DB component creates an ephemeral vector database for experimentation and vector storage."}),"\n",(0,n.jsxs)(r.ol,{children:["\n",(0,n.jsxs)(r.li,{children:["To use this component in a flow, connect it to a component that outputs ",(0,n.jsx)(r.strong,{children:"Data"})," or ",(0,n.jsx)(r.strong,{children:"DataFrame"}),".\nThis example splits text from a ",(0,n.jsx)(r.a,{href:"/components-data#url",children:"URL"})," component, and computes embeddings with the connected ",(0,n.jsx)(r.strong,{children:"OpenAI Embeddings"})," component. Chroma DB computes embeddings by default, but you can connect your own embeddings model, as seen in this example."]}),"\n"]}),"\n",(0,n.jsx)(r.p,{children:(0,n.jsx)(r.img,{alt:"ChromaDB receiving split text",src:t(88690).A+"",width:"1127",height:"811"})}),"\n",(0,n.jsxs)(r.ol,{start:"2",children:["\n",(0,n.jsxs)(r.li,{children:["In the ",(0,n.jsx)(r.strong,{children:"Chroma DB"})," component, in the ",(0,n.jsx)(r.strong,{children:"Collection"})," field, enter a name for your embeddings collection."]}),"\n",(0,n.jsxs)(r.li,{children:["Optionally, to persist the Chroma database, in the ",(0,n.jsx)(r.strong,{children:"Persist"})," field, enter a directory to store the ",(0,n.jsx)(r.code,{children:"chroma.sqlite3"})," file.\nThis example uses ",(0,n.jsx)(r.code,{children:"./chroma-db"})," to create a directory relative to where Langflow is running."]}),"\n",(0,n.jsxs)(r.li,{children:["To load data and embeddings into your Chroma database, in the ",(0,n.jsx)(r.strong,{children:"Chroma DB"})," component, click ",(0,n.jsx)(c.A,{name:"Play","aria-label":"Play icon"}),"."]}),"\n"]}),"\n",(0,n.jsx)(r.admonition,{type:"tip",children:(0,n.jsxs)(r.p,{children:["When loading duplicate documents, enable the ",(0,n.jsx)(r.strong,{children:"Allow Duplicates"})," option in Chroma DB if you want to store multiple copies of the same content, or disable it to automatically deduplicate your data."]})}),"\n",(0,n.jsxs)(r.ol,{start:"5",children:["\n",(0,n.jsxs)(r.li,{children:["To view the split data, in the ",(0,n.jsx)(r.strong,{children:"Split Text"})," component, click ",(0,n.jsx)(c.A,{name:"TextSearch","aria-label":"Inspect icon"}),"."]}),"\n",(0,n.jsxs)(r.li,{children:["To query your loaded data, open the ",(0,n.jsx)(r.strong,{children:"Playground"})," and query your database.\nYour input is converted to vector data and compared to the stored vectors in a vector similarity search."]}),"\n"]}),"\n",(0,n.jsxs)(r.p,{children:["For more information, see the ",(0,n.jsx)(r.a,{href:"https://docs.trychroma.com/",children:"Chroma documentation"}),"."]}),"\n",(0,n.jsxs)(s,{children:[(0,n.jsx)("summary",{children:"Parameters"}),(0,n.jsx)(r.p,{children:(0,n.jsx)(r.strong,{children:"Inputs"})}),(0,n.jsxs)(r.table,{children:[(0,n.jsx)(r.thead,{children:(0,n.jsxs)(r.tr,{children:[(0,n.jsx)(r.th,{children:"Name"}),(0,n.jsx)(r.th,{children:"Type"}),(0,n.jsx)(r.th,{children:"Description"})]})}),(0,n.jsxs)(r.tbody,{children:[(0,n.jsxs)(r.tr,{children:[(0,n.jsx)(r.td,{children:"collection_name"}),(0,n.jsx)(r.td,{children:"String"}),(0,n.jsx)(r.td,{children:'The name of the Chroma collection. Default: "langflow".'})]}),(0,n.jsxs)(r.tr,{children:[(0,n.jsx)(r.td,{children:"persist_directory"}),(0,n.jsx)(r.td,{children:"String"}),(0,n.jsx)(r.td,{children:"The directory to persist the Chroma database."})]}),(0,n.jsxs)(r.tr,{children:[(0,n.jsx)(r.td,{children:"search_query"}),(0,n.jsx)(r.td,{children:"String"}),(0,n.jsx)(r.td,{children:"The query to search for in the vector store."})]}),(0,n.jsxs)(r.tr,{children:[(0,n.jsx)(r.td,{children:"ingest_data"}),(0,n.jsx)(r.td,{children:"Data"}),(0,n.jsxs)(r.td,{children:["The data to ingest into the vector store (list of ",(0,n.jsx)(r.code,{children:"Data"})," objects)."]})]}),(0,n.jsxs)(r.tr,{children:[(0,n.jsx)(r.td,{children:"embedding"}),(0,n.jsx)(r.td,{children:"Embeddings"}),(0,n.jsx)(r.td,{children:"The embedding function to use for the vector store."})]}),(0,n.jsxs)(r.tr,{children:[(0,n.jsx)(r.td,{children:"chroma_server_cors_allow_origins"}),(0,n.jsx)(r.td,{children:"String"}),(0,n.jsx)(r.td,{children:"The CORS allow origins for the Chroma server."})]}),(0,n.jsxs)(r.tr,{children:[(0,n.jsx)(r.td,{children:"chroma_server_host"}),(0,n.jsx)(r.td,{children:"String"}),(0,n.jsx)(r.td,{children:"The host for the Chroma server."})]}),(0,n.jsxs)(r.tr,{children:[(0,n.jsx)(r.td,{children:"chroma_server_http_port"}),(0,n.jsx)(r.td,{children:"Integer"}),(0,n.jsx)(r.td,{children:"The HTTP port for the Chroma server."})]}),(0,n.jsxs)(r.tr,{children:[(0,n.jsx)(r.td,{children:"chroma_server_grpc_port"}),(0,n.jsx)(r.td,{children:"Integer"}),(0,n.jsx)(r.td,{children:"The gRPC port for the Chroma server."})]}),(0,n.jsxs)(r.tr,{children:[(0,n.jsx)(r.td,{children:"chroma_server_ssl_enabled"}),(0,n.jsx)(r.td,{children:"Boolean"}),(0,n.jsx)(r.td,{children:"Enable SSL for the Chroma server."})]}),(0,n.jsxs)(r.tr,{children:[(0,n.jsx)(r.td,{children:"allow_duplicates"}),(0,n.jsx)(r.td,{children:"Boolean"}),(0,n.jsx)(r.td,{children:"Allow duplicate documents in the vector store."})]}),(0,n.jsxs)(r.tr,{children:[(0,n.jsx)(r.td,{children:"search_type"}),(0,n.jsx)(r.td,{children:"String"}),(0,n.jsx)(r.td,{children:'The type of search to perform: "Similarity" or "MMR".'})]}),(0,n.jsxs)(r.tr,{children:[(0,n.jsx)(r.td,{children:"number_of_results"}),(0,n.jsx)(r.td,{children:"Integer"}),(0,n.jsxs)(r.td,{children:["The number of results to return from the search. Default: ",(0,n.jsx)(r.code,{children:"10"}),"."]})]}),(0,n.jsxs)(r.tr,{children:[(0,n.jsx)(r.td,{children:"limit"}),(0,n.jsx)(r.td,{children:"Integer"}),(0,n.jsxs)(r.td,{children:["The limit of the number of records to compare when ",(0,n.jsx)(r.code,{children:"Allow Duplicates"})," is ",(0,n.jsx)(r.code,{children:"False"}),"."]})]})]})]}),(0,n.jsx)(r.p,{children:(0,n.jsx)(r.strong,{children:"Outputs"})}),(0,n.jsxs)(r.table,{children:[(0,n.jsx)(r.thead,{children:(0,n.jsxs)(r.tr,{children:[(0,n.jsx)(r.th,{children:"Name"}),(0,n.jsx)(r.th,{children:"Type"}),(0,n.jsx)(r.th,{children:"Description"})]})}),(0,n.jsxs)(r.tbody,{children:[(0,n.jsxs)(r.tr,{children:[(0,n.jsx)(r.td,{children:"vector_store"}),(0,n.jsx)(r.td,{children:"Chroma"}),(0,n.jsx)(r.td,{children:"The Chroma vector store instance."})]}),(0,n.jsxs)(r.tr,{children:[(0,n.jsx)(r.td,{children:"search_results"}),(0,n.jsx)(r.td,{children:"List[Data]"}),(0,n.jsxs)(r.td,{children:["The results of the similarity search as a list of ",(0,n.jsx)(r.a,{href:"/concepts-objects#data-object",children:"Data"})," objects."]})]})]})]})]}),"\n",(0,n.jsx)(r.h2,{id:"clickhouse",children:"Clickhouse"}),"\n",(0,n.jsxs)(r.p,{children:["This component implements a Clickhouse Vector Store with search capabilities.\nFor more information, see the ",(0,n.jsx)(r.a,{href:"https://clickhouse.com/docs/en/intro",children:"Clickhouse Documentation"}),"."]}),"\n",(0,n.jsxs)(s,{children:[(0,n.jsx)("summary",{children:"Parameters"}),(0,n.jsx)(r.p,{children:(0,n.jsx)(r.strong,{children:"Inputs"})}),(0,n.jsxs)(r.table,{children:[(0,n.jsx)(r.thead,{children:(0,n.jsxs)(r.tr,{children:[(0,n.jsx)(r.th,{children:"Name"}),(0,n.jsx)(r.th,{children:"Display Name"}),(0,n.jsx)(r.th,{children:"Info"})]})}),(0,n.jsxs)(r.tbody,{children:[(0,n.jsxs)(r.tr,{children:[(0,n.jsx)(r.td,{children:"host"}),(0,n.jsx)(r.td,{children:"hostname"}),(0,n.jsx)(r.td,{children:'The Clickhouse server hostname. Required. Default: "localhost".'})]}),(0,n.jsxs)(r.tr,{children:[(0,n.jsx)(r.td,{children:"port"}),(0,n.jsx)(r.td,{children:"port"}),(0,n.jsx)(r.td,{children:"The Clickhouse server port. Required. Default: 8123."})]}),(0,n.jsxs)(r.tr,{children:[(0,n.jsx)(r.td,{children:"database"}),(0,n.jsx)(r.td,{children:"database"}),(0,n.jsx)(r.td,{children:"The Clickhouse database name. Required."})]}),(0,n.jsxs)(r.tr,{children:[(0,n.jsx)(r.td,{children:"table"}),(0,n.jsx)(r.td,{children:"Table name"}),(0,n.jsx)(r.td,{children:"The Clickhouse table name. Required."})]}),(0,n.jsxs)(r.tr,{children:[(0,n.jsx)(r.td,{children:"username"}),(0,n.jsx)(r.td,{children:"The ClickHouse user name."}),(0,n.jsx)(r.td,{children:"Username for authentication. Required."})]}),(0,n.jsxs)(r.tr,{children:[(0,n.jsx)(r.td,{children:"password"}),(0,n.jsx)(r.td,{children:"The password for username."}),(0,n.jsx)(r.td,{children:"Password for authentication. Required."})]}),(0,n.jsxs)(r.tr,{children:[(0,n.jsx)(r.td,{children:"index_type"}),(0,n.jsx)(r.td,{children:"index_type"}),(0,n.jsx)(r.td,{children:'Type of the index. The options are "annoy" and "vector_similarity". Default: "annoy".'})]}),(0,n.jsxs)(r.tr,{children:[(0,n.jsx)(r.td,{children:"metric"}),(0,n.jsx)(r.td,{children:"metric"}),(0,n.jsx)(r.td,{children:'Metric to compute distance. The options are "angular", "euclidean", "manhattan", "hamming", "dot". Default: "angular".'})]}),(0,n.jsxs)(r.tr,{children:[(0,n.jsx)(r.td,{children:"secure"}),(0,n.jsx)(r.td,{children:"Use https/TLS"}),(0,n.jsx)(r.td,{children:"Overrides inferred values from the interface or port arguments. Default: false."})]}),(0,n.jsxs)(r.tr,{children:[(0,n.jsx)(r.td,{children:"index_param"}),(0,n.jsx)(r.td,{children:"Param of the index"}),(0,n.jsx)(r.td,{children:"Index parameters. Default: \"'L2Distance',100\"."})]}),(0,n.jsxs)(r.tr,{children:[(0,n.jsx)(r.td,{children:"index_query_params"}),(0,n.jsx)(r.td,{children:"index query params"}),(0,n.jsx)(r.td,{children:"Additional index query parameters."})]}),(0,n.jsxs)(r.tr,{children:[(0,n.jsx)(r.td,{children:"search_query"}),(0,n.jsx)(r.td,{children:"Search Query"}),(0,n.jsx)(r.td,{children:"The query string for similarity search."})]}),(0,n.jsxs)(r.tr,{children:[(0,n.jsx)(r.td,{children:"ingest_data"}),(0,n.jsx)(r.td,{children:"Ingest Data"}),(0,n.jsx)(r.td,{children:"The data to be ingested into the vector store."})]}),(0,n.jsxs)(r.tr,{children:[(0,n.jsx)(r.td,{children:"embedding"}),(0,n.jsx)(r.td,{children:"Embedding"}),(0,n.jsx)(r.td,{children:"The embedding model to use."})]}),(0,n.jsxs)(r.tr,{children:[(0,n.jsx)(r.td,{children:"number_of_results"}),(0,n.jsx)(r.td,{children:"Number of Results"}),(0,n.jsx)(r.td,{children:"The number of results to return in similarity search. Default: 4."})]}),(0,n.jsxs)(r.tr,{children:[(0,n.jsx)(r.td,{children:"score_threshold"}),(0,n.jsx)(r.td,{children:"Score threshold"}),(0,n.jsx)(r.td,{children:"The threshold for similarity scores."})]})]})]}),(0,n.jsx)(r.p,{children:(0,n.jsx)(r.strong,{children:"Outputs"})}),(0,n.jsxs)(r.table,{children:[(0,n.jsx)(r.thead,{children:(0,n.jsxs)(r.tr,{children:[(0,n.jsx)(r.th,{children:"Name"}),(0,n.jsx)(r.th,{children:"Display Name"}),(0,n.jsx)(r.th,{children:"Info"})]})}),(0,n.jsxs)(r.tbody,{children:[(0,n.jsxs)(r.tr,{children:[(0,n.jsx)(r.td,{children:"vector_store"}),(0,n.jsx)(r.td,{children:"Vector Store"}),(0,n.jsx)(r.td,{children:"The Clickhouse vector store."})]}),(0,n.jsxs)(r.tr,{children:[(0,n.jsx)(r.td,{children:"search_results"}),(0,n.jsx)(r.td,{children:"Search Results"}),(0,n.jsx)(r.td,{children:"The results of the similarity search as a list of Data objects."})]})]})]})]}),"\n",(0,n.jsx)(r.h2,{id:"couchbase",children:"Couchbase"}),"\n",(0,n.jsxs)(r.p,{children:["This component creates a Couchbase Vector Store with search capabilities.\nFor more information, see the ",(0,n.jsx)(r.a,{href:"https://docs.couchbase.com/home/index.html",children:"Couchbase documentation"}),"."]}),"\n",(0,n.jsxs)(s,{children:[(0,n.jsx)("summary",{children:"Parameters"}),(0,n.jsx)(r.p,{children:(0,n.jsx)(r.strong,{children:"Inputs"})}),(0,n.jsxs)(r.table,{children:[(0,n.jsx)(r.thead,{children:(0,n.jsxs)(r.tr,{children:[(0,n.jsx)(r.th,{children:"Name"}),(0,n.jsx)(r.th,{children:"Type"}),(0,n.jsx)(r.th,{children:"Description"})]})}),(0,n.jsxs)(r.tbody,{children:[(0,n.jsxs)(r.tr,{children:[(0,n.jsx)(r.td,{children:"couchbase_connection_string"}),(0,n.jsx)(r.td,{children:"SecretString"}),(0,n.jsx)(r.td,{children:"Couchbase Cluster connection string. Required."})]}),(0,n.jsxs)(r.tr,{children:[(0,n.jsx)(r.td,{children:"couchbase_username"}),(0,n.jsx)(r.td,{children:"String"}),(0,n.jsx)(r.td,{children:"Couchbase username. Required."})]}),(0,n.jsxs)(r.tr,{children:[(0,n.jsx)(r.td,{children:"couchbase_password"}),(0,n.jsx)(r.td,{children:"SecretString"}),(0,n.jsx)(r.td,{children:"Couchbase password. Required."})]}),(0,n.jsxs)(r.tr,{children:[(0,n.jsx)(r.td,{children:"bucket_name"}),(0,n.jsx)(r.td,{children:"String"}),(0,n.jsx)(r.td,{children:"Name of the Couchbase bucket. Required."})]}),(0,n.jsxs)(r.tr,{children:[(0,n.jsx)(r.td,{children:"scope_name"}),(0,n.jsx)(r.td,{children:"String"}),(0,n.jsx)(r.td,{children:"Name of the Couchbase scope. Required."})]}),(0,n.jsxs)(r.tr,{children:[(0,n.jsx)(r.td,{children:"collection_name"}),(0,n.jsx)(r.td,{children:"String"}),(0,n.jsx)(r.td,{children:"Name of the Couchbase collection. Required."})]}),(0,n.jsxs)(r.tr,{children:[(0,n.jsx)(r.td,{children:"index_name"}),(0,n.jsx)(r.td,{children:"String"}),(0,n.jsx)(r.td,{children:"Name of the Couchbase index. Required."})]}),(0,n.jsxs)(r.tr,{children:[(0,n.jsx)(r.td,{children:"search_query"}),(0,n.jsx)(r.td,{children:"String"}),(0,n.jsx)(r.td,{children:"The query to search for in the vector store."})]}),(0,n.jsxs)(r.tr,{children:[(0,n.jsx)(r.td,{children:"ingest_data"}),(0,n.jsx)(r.td,{children:"Data"}),(0,n.jsx)(r.td,{children:"The list of data to ingest into the vector store."})]}),(0,n.jsxs)(r.tr,{children:[(0,n.jsx)(r.td,{children:"embedding"}),(0,n.jsx)(r.td,{children:"Embeddings"}),(0,n.jsx)(r.td,{children:"The embedding function to use for the vector store."})]}),(0,n.jsxs)(r.tr,{children:[(0,n.jsx)(r.td,{children:"number_of_results"}),(0,n.jsx)(r.td,{children:"Integer"}),(0,n.jsx)(r.td,{children:"Number of results to return from the search. Default: 4."})]})]})]}),(0,n.jsx)(r.p,{children:(0,n.jsx)(r.strong,{children:"Outputs"})}),(0,n.jsxs)(r.table,{children:[(0,n.jsx)(r.thead,{children:(0,n.jsxs)(r.tr,{children:[(0,n.jsx)(r.th,{children:"Name"}),(0,n.jsx)(r.th,{children:"Type"}),(0,n.jsx)(r.th,{children:"Description"})]})}),(0,n.jsx)(r.tbody,{children:(0,n.jsxs)(r.tr,{children:[(0,n.jsx)(r.td,{children:"vector_store"}),(0,n.jsx)(r.td,{children:"CouchbaseVectorStore"}),(0,n.jsx)(r.td,{children:"A Couchbase vector store instance configured with the specified parameters."})]})})]})]}),"\n",(0,n.jsx)(r.h2,{id:"local-db",children:"Local DB"}),"\n",(0,n.jsxs)(r.p,{children:["The ",(0,n.jsx)(r.strong,{children:"Local DB"})," component is Langflow's enhanced version of Chroma DB."]}),"\n",(0,n.jsx)(r.p,{children:"The component adds a user-friendly interface with two modes (Ingest and Retrieve), automatic collection management, and built-in persistence in Langflow's cache directory."}),"\n",(0,n.jsxs)(r.p,{children:["Local DB includes ",(0,n.jsx)(r.strong,{children:"Ingest"})," and ",(0,n.jsx)(r.strong,{children:"Retrieve"})," modes."]}),"\n",(0,n.jsxs)(r.p,{children:["The ",(0,n.jsx)(r.strong,{children:"Ingest"})," mode works similarly to ",(0,n.jsx)(r.a,{href:"#chroma-db",children:"ChromaDB"}),", and persists your database to the Langflow cache directory. The Langflow cache directory location is specified in ",(0,n.jsx)(r.code,{children:"LANGFLOW_CONFIG_DIR"}),". For more information, see ",(0,n.jsx)(r.a,{href:"/environment-variables",children:"Environment variables"}),"."]}),"\n",(0,n.jsxs)(r.p,{children:["The ",(0,n.jsx)(r.strong,{children:"Retrieve"})," mode can query your ",(0,n.jsx)(r.strong,{children:"Chroma DB"})," collections."]}),"\n",(0,n.jsx)(r.p,{children:(0,n.jsx)(r.img,{alt:"Local DB retrieving vectors",src:t(60159).A+"",width:"1716",height:"960"})}),"\n",(0,n.jsxs)(r.p,{children:["For more information, see the ",(0,n.jsx)(r.a,{href:"https://docs.trychroma.com/",children:"Chroma documentation"}),"."]}),"\n",(0,n.jsxs)(s,{children:[(0,n.jsx)("summary",{children:"Parameters"}),(0,n.jsx)(r.p,{children:(0,n.jsx)(r.strong,{children:"Inputs"})}),(0,n.jsxs)(r.table,{children:[(0,n.jsx)(r.thead,{children:(0,n.jsxs)(r.tr,{children:[(0,n.jsx)(r.th,{children:"Name"}),(0,n.jsx)(r.th,{children:"Type"}),(0,n.jsx)(r.th,{children:"Description"})]})}),(0,n.jsxs)(r.tbody,{children:[(0,n.jsxs)(r.tr,{children:[(0,n.jsx)(r.td,{children:"collection_name"}),(0,n.jsx)(r.td,{children:"String"}),(0,n.jsx)(r.td,{children:'The name of the Chroma collection. Default: "langflow".'})]}),(0,n.jsxs)(r.tr,{children:[(0,n.jsx)(r.td,{children:"persist_directory"}),(0,n.jsx)(r.td,{children:"String"}),(0,n.jsxs)(r.td,{children:["Custom base directory to save the vector store. Collections are stored under ",(0,n.jsx)(r.code,{children:"{directory}/vector_stores/{collection_name}"}),". If not specified, it will use your system's cache folder."]})]}),(0,n.jsxs)(r.tr,{children:[(0,n.jsx)(r.td,{children:"existing_collections"}),(0,n.jsx)(r.td,{children:"String"}),(0,n.jsx)(r.td,{children:"Select a previously created collection to search through its stored data."})]}),(0,n.jsxs)(r.tr,{children:[(0,n.jsx)(r.td,{children:"embedding"}),(0,n.jsx)(r.td,{children:"Embeddings"}),(0,n.jsx)(r.td,{children:"The embedding function to use for the vector store."})]}),(0,n.jsxs)(r.tr,{children:[(0,n.jsx)(r.td,{children:"allow_duplicates"}),(0,n.jsx)(r.td,{children:"Boolean"}),(0,n.jsx)(r.td,{children:"If false, will not add documents that are already in the Vector Store."})]}),(0,n.jsxs)(r.tr,{children:[(0,n.jsx)(r.td,{children:"search_type"}),(0,n.jsx)(r.td,{children:"String"}),(0,n.jsx)(r.td,{children:'Type of search to perform: "Similarity" or "MMR".'})]}),(0,n.jsxs)(r.tr,{children:[(0,n.jsx)(r.td,{children:"ingest_data"}),(0,n.jsx)(r.td,{children:"Data/DataFrame"}),(0,n.jsx)(r.td,{children:"Data to store. It is embedded and indexed for semantic search."})]}),(0,n.jsxs)(r.tr,{children:[(0,n.jsx)(r.td,{children:"search_query"}),(0,n.jsx)(r.td,{children:"String"}),(0,n.jsx)(r.td,{children:"Enter text to search for similar content in the selected collection."})]}),(0,n.jsxs)(r.tr,{children:[(0,n.jsx)(r.td,{children:"number_of_results"}),(0,n.jsx)(r.td,{children:"Integer"}),(0,n.jsx)(r.td,{children:"Number of results to return. Default: 10."})]}),(0,n.jsxs)(r.tr,{children:[(0,n.jsx)(r.td,{children:"limit"}),(0,n.jsx)(r.td,{children:"Integer"}),(0,n.jsx)(r.td,{children:"Limit the number of records to compare when Allow Duplicates is False."})]})]})]}),(0,n.jsx)(r.p,{children:(0,n.jsx)(r.strong,{children:"Outputs"})}),(0,n.jsxs)(r.table,{children:[(0,n.jsx)(r.thead,{children:(0,n.jsxs)(r.tr,{children:[(0,n.jsx)(r.th,{children:"Name"}),(0,n.jsx)(r.th,{children:"Type"}),(0,n.jsx)(r.th,{children:"Description"})]})}),(0,n.jsxs)(r.tbody,{children:[(0,n.jsxs)(r.tr,{children:[(0,n.jsx)(r.td,{children:"vector_store"}),(0,n.jsx)(r.td,{children:"Chroma"}),(0,n.jsx)(r.td,{children:"A local Chroma vector store instance configured with the specified parameters."})]}),(0,n.jsxs)(r.tr,{children:[(0,n.jsx)(r.td,{children:"search_results"}),(0,n.jsxs)(r.td,{children:["List",(0,n.jsx)(r.a,{href:"/concepts-objects#data-object",children:"Data"})]}),(0,n.jsxs)(r.td,{children:["The results of the similarity search as a list of ",(0,n.jsx)(r.a,{href:"/concepts-objects#data-object",children:"Data"})," objects."]})]})]})]})]}),"\n",(0,n.jsx)(r.h2,{id:"elasticsearch",children:"Elasticsearch"}),"\n",(0,n.jsxs)(r.p,{children:["This component creates an Elasticsearch Vector Store with search capabilities.\nFor more information, see the ",(0,n.jsx)(r.a,{href:"https://www.elastic.co/guide/en/elasticsearch/reference/current/dense-vector.html",children:"Elasticsearch documentation"}),"."]}),"\n",(0,n.jsxs)(s,{children:[(0,n.jsx)("summary",{children:"Parameters"}),(0,n.jsx)(r.p,{children:(0,n.jsx)(r.strong,{children:"Inputs"})}),(0,n.jsxs)(r.table,{children:[(0,n.jsx)(r.thead,{children:(0,n.jsxs)(r.tr,{children:[(0,n.jsx)(r.th,{children:"Name"}),(0,n.jsx)(r.th,{children:"Type"}),(0,n.jsx)(r.th,{children:"Description"})]})}),(0,n.jsxs)(r.tbody,{children:[(0,n.jsxs)(r.tr,{children:[(0,n.jsx)(r.td,{children:"es_url"}),(0,n.jsx)(r.td,{children:"String"}),(0,n.jsx)(r.td,{children:"Elasticsearch server URL."})]}),(0,n.jsxs)(r.tr,{children:[(0,n.jsx)(r.td,{children:"es_user"}),(0,n.jsx)(r.td,{children:"String"}),(0,n.jsx)(r.td,{children:"Username for Elasticsearch authentication."})]}),(0,n.jsxs)(r.tr,{children:[(0,n.jsx)(r.td,{children:"es_password"}),(0,n.jsx)(r.td,{children:"SecretString"}),(0,n.jsx)(r.td,{children:"Password for Elasticsearch authentication."})]}),(0,n.jsxs)(r.tr,{children:[(0,n.jsx)(r.td,{children:"index_name"}),(0,n.jsx)(r.td,{children:"String"}),(0,n.jsx)(r.td,{children:"Name of the Elasticsearch index."})]}),(0,n.jsxs)(r.tr,{children:[(0,n.jsx)(r.td,{children:"strategy"}),(0,n.jsx)(r.td,{children:"String"}),(0,n.jsx)(r.td,{children:'Strategy for vector search. The options are "approximate_k_nearest_neighbors" or "script_scoring".'})]}),(0,n.jsxs)(r.tr,{children:[(0,n.jsx)(r.td,{children:"distance_strategy"}),(0,n.jsx)(r.td,{children:"String"}),(0,n.jsx)(r.td,{children:'Strategy for distance calculation. The options are "COSINE", "EUCLIDEAN_DISTANCE", or "DOT_PRODUCT".'})]}),(0,n.jsxs)(r.tr,{children:[(0,n.jsx)(r.td,{children:"search_query"}),(0,n.jsx)(r.td,{children:"String"}),(0,n.jsx)(r.td,{children:"Query for similarity search."})]}),(0,n.jsxs)(r.tr,{children:[(0,n.jsx)(r.td,{children:"ingest_data"}),(0,n.jsx)(r.td,{children:"Data"}),(0,n.jsx)(r.td,{children:"Data to be ingested into the vector store."})]}),(0,n.jsxs)(r.tr,{children:[(0,n.jsx)(r.td,{children:"embedding"}),(0,n.jsx)(r.td,{children:"Embeddings"}),(0,n.jsx)(r.td,{children:"Embedding function to use."})]}),(0,n.jsxs)(r.tr,{children:[(0,n.jsx)(r.td,{children:"number_of_results"}),(0,n.jsx)(r.td,{children:"Integer"}),(0,n.jsxs)(r.td,{children:["Number of results to return in search. Default: ",(0,n.jsx)(r.code,{children:"4"}),"."]})]})]})]}),(0,n.jsx)(r.p,{children:(0,n.jsx)(r.strong,{children:"Outputs"})}),(0,n.jsxs)(r.table,{children:[(0,n.jsx)(r.thead,{children:(0,n.jsxs)(r.tr,{children:[(0,n.jsx)(r.th,{children:"Name"}),(0,n.jsx)(r.th,{children:"Type"}),(0,n.jsx)(r.th,{children:"Description"})]})}),(0,n.jsxs)(r.tbody,{children:[(0,n.jsxs)(r.tr,{children:[(0,n.jsx)(r.td,{children:"vector_store"}),(0,n.jsx)(r.td,{children:"ElasticsearchStore"}),(0,n.jsx)(r.td,{children:"The Elasticsearch vector store instance."})]}),(0,n.jsxs)(r.tr,{children:[(0,n.jsx)(r.td,{children:"search_results"}),(0,n.jsx)(r.td,{children:"List[Data]"}),(0,n.jsxs)(r.td,{children:["The results of the similarity search as a list of ",(0,n.jsx)(r.a,{href:"/concepts-objects#data-object",children:"Data"})," objects."]})]})]})]})]}),"\n",(0,n.jsx)(r.h2,{id:"faiss",children:"FAISS"}),"\n",(0,n.jsxs)(r.p,{children:["This component creates a FAISS Vector Store with search capabilities.\nFor more information, see the ",(0,n.jsx)(r.a,{href:"https://faiss.ai/index.html",children:"FAISS documentation"}),"."]}),"\n",(0,n.jsxs)(s,{children:[(0,n.jsx)("summary",{children:"Parameters"}),(0,n.jsx)(r.p,{children:(0,n.jsx)(r.strong,{children:"Inputs"})}),(0,n.jsxs)(r.table,{children:[(0,n.jsx)(r.thead,{children:(0,n.jsxs)(r.tr,{children:[(0,n.jsx)(r.th,{children:"Name"}),(0,n.jsx)(r.th,{children:"Type"}),(0,n.jsx)(r.th,{children:"Description"})]})}),(0,n.jsxs)(r.tbody,{children:[(0,n.jsxs)(r.tr,{children:[(0,n.jsx)(r.td,{children:"index_name"}),(0,n.jsx)(r.td,{children:"String"}),(0,n.jsx)(r.td,{children:'The name of the FAISS index. Default: "langflow_index".'})]}),(0,n.jsxs)(r.tr,{children:[(0,n.jsx)(r.td,{children:"persist_directory"}),(0,n.jsx)(r.td,{children:"String"}),(0,n.jsx)(r.td,{children:"Path to save the FAISS index. It is relative to where Langflow is running."})]}),(0,n.jsxs)(r.tr,{children:[(0,n.jsx)(r.td,{children:"search_query"}),(0,n.jsx)(r.td,{children:"String"}),(0,n.jsx)(r.td,{children:"The query to search for in the vector store."})]}),(0,n.jsxs)(r.tr,{children:[(0,n.jsx)(r.td,{children:"ingest_data"}),(0,n.jsx)(r.td,{children:"Data"}),(0,n.jsx)(r.td,{children:"The list of data to ingest into the vector store."})]}),(0,n.jsxs)(r.tr,{children:[(0,n.jsx)(r.td,{children:"allow_dangerous_deserialization"}),(0,n.jsx)(r.td,{children:"Boolean"}),(0,n.jsx)(r.td,{children:"Set to True to allow loading pickle files from untrusted sources. Default: True."})]}),(0,n.jsxs)(r.tr,{children:[(0,n.jsx)(r.td,{children:"embedding"}),(0,n.jsx)(r.td,{children:"Embeddings"}),(0,n.jsx)(r.td,{children:"The embedding function to use for the vector store."})]}),(0,n.jsxs)(r.tr,{children:[(0,n.jsx)(r.td,{children:"number_of_results"}),(0,n.jsx)(r.td,{children:"Integer"}),(0,n.jsx)(r.td,{children:"Number of results to return from the search. Default: 4."})]})]})]}),(0,n.jsx)(r.p,{children:(0,n.jsx)(r.strong,{children:"Outputs"})}),(0,n.jsxs)(r.table,{children:[(0,n.jsx)(r.thead,{children:(0,n.jsxs)(r.tr,{children:[(0,n.jsx)(r.th,{children:"Name"}),(0,n.jsx)(r.th,{children:"Display Name"}),(0,n.jsx)(r.th,{children:"Info"})]})}),(0,n.jsxs)(r.tbody,{children:[(0,n.jsxs)(r.tr,{children:[(0,n.jsx)(r.td,{children:"vector_store"}),(0,n.jsx)(r.td,{children:"Vector Store"}),(0,n.jsx)(r.td,{children:"The FAISS vector store instance configured with the specified parameters."})]}),(0,n.jsxs)(r.tr,{children:[(0,n.jsx)(r.td,{children:"search_results"}),(0,n.jsx)(r.td,{children:"Search Results"}),(0,n.jsxs)(r.td,{children:["The results of the similarity search as a list of ",(0,n.jsx)(r.a,{href:"/concepts-objects#data-object",children:"Data"})," objects."]})]})]})]})]}),"\n",(0,n.jsx)(r.h2,{id:"graph-rag",children:"Graph RAG"}),"\n",(0,n.jsxs)(r.p,{children:["This component performs Graph RAG (Retrieval Augmented Generation) traversal in a vector store, enabling graph-based document retrieval.\nFor more information, see the ",(0,n.jsx)(r.a,{href:"https://datastax.github.io/graph-rag/",children:"Graph RAG documentation"}),"."]}),"\n",(0,n.jsxs)(r.p,{children:["For an example flow, see the ",(0,n.jsx)(r.strong,{children:"Graph RAG"})," template."]}),"\n",(0,n.jsxs)(s,{children:[(0,n.jsx)("summary",{children:"Parameters"}),(0,n.jsx)(r.p,{children:(0,n.jsx)(r.strong,{children:"Inputs"})}),(0,n.jsxs)(r.table,{children:[(0,n.jsx)(r.thead,{children:(0,n.jsxs)(r.tr,{children:[(0,n.jsx)(r.th,{children:"Name"}),(0,n.jsx)(r.th,{children:"Display Name"}),(0,n.jsx)(r.th,{children:"Info"})]})}),(0,n.jsxs)(r.tbody,{children:[(0,n.jsxs)(r.tr,{children:[(0,n.jsx)(r.td,{children:"embedding_model"}),(0,n.jsx)(r.td,{children:"Embedding Model"}),(0,n.jsxs)(r.td,{children:["Specify the embedding model. This is not required for collections embedded with ",(0,n.jsx)(r.a,{href:"https://docs.datastax.com/en/astra-db-serverless/databases/embedding-generation.html",children:"Astra vectorize"}),"."]})]}),(0,n.jsxs)(r.tr,{children:[(0,n.jsx)(r.td,{children:"vector_store"}),(0,n.jsx)(r.td,{children:"Vector Store Connection"}),(0,n.jsx)(r.td,{children:"Connection to the vector store."})]}),(0,n.jsxs)(r.tr,{children:[(0,n.jsx)(r.td,{children:"edge_definition"}),(0,n.jsx)(r.td,{children:"Edge Definition"}),(0,n.jsxs)(r.td,{children:["Edge definition for the graph traversal. For more information, see the ",(0,n.jsx)(r.a,{href:"https://datastax.github.io/graph-rag/reference/graph_retriever/edges/",children:"GraphRAG documentation"}),"."]})]}),(0,n.jsxs)(r.tr,{children:[(0,n.jsx)(r.td,{children:"strategy"}),(0,n.jsx)(r.td,{children:"Traversal Strategies"}),(0,n.jsx)(r.td,{children:"The strategy to use for graph traversal. Strategy options are dynamically loaded from available strategies."})]}),(0,n.jsxs)(r.tr,{children:[(0,n.jsx)(r.td,{children:"search_query"}),(0,n.jsx)(r.td,{children:"Search Query"}),(0,n.jsx)(r.td,{children:"The query to search for in the vector store."})]}),(0,n.jsxs)(r.tr,{children:[(0,n.jsx)(r.td,{children:"graphrag_strategy_kwargs"}),(0,n.jsx)(r.td,{children:"Strategy Parameters"}),(0,n.jsxs)(r.td,{children:["Optional dictionary of additional parameters for the retrieval strategy. For more information, see the ",(0,n.jsx)(r.a,{href:"https://datastax.github.io/graph-rag/reference/graph_retriever/strategies/",children:"strategy documentation"}),"."]})]})]})]}),(0,n.jsx)(r.p,{children:(0,n.jsx)(r.strong,{children:"Outputs"})}),(0,n.jsxs)(r.table,{children:[(0,n.jsx)(r.thead,{children:(0,n.jsxs)(r.tr,{children:[(0,n.jsx)(r.th,{children:"Name"}),(0,n.jsx)(r.th,{children:"Type"}),(0,n.jsx)(r.th,{children:"Description"})]})}),(0,n.jsx)(r.tbody,{children:(0,n.jsxs)(r.tr,{children:[(0,n.jsx)(r.td,{children:"search_results"}),(0,n.jsx)(r.td,{children:"List[Data]"}),(0,n.jsxs)(r.td,{children:["Results of the graph-based document retrieval as a list of ",(0,n.jsx)(r.a,{href:"/concepts-objects#data-object",children:"Data"})," objects."]})]})})]})]}),"\n",(0,n.jsx)(r.h2,{id:"hyper-converged-database-hcd",children:"Hyper-Converged Database (HCD)"}),"\n",(0,n.jsx)(r.p,{children:"This component implements a Vector Store using HCD."}),"\n",(0,n.jsxs)(r.p,{children:["To use the HCD vector store, add your deployment's collection name, username, password, and HCD Data API endpoint.\nThe endpoint must be formatted like ",(0,n.jsx)(r.code,{children:"http[s]://**DOMAIN_NAME** or **IP_ADDRESS**[:port]"}),", for example, ",(0,n.jsx)(r.code,{children:"http://192.0.2.250:8181"}),"."]}),"\n",(0,n.jsxs)(r.p,{children:["Replace ",(0,n.jsx)(r.strong,{children:"DOMAIN_NAME"})," or ",(0,n.jsx)(r.strong,{children:"IP_ADDRESS"})," with the domain name or IP address of your HCD Data API connection."]}),"\n",(0,n.jsx)(r.p,{children:"To use the HCD vector store for embeddings ingestion, connect it to an embeddings model and a file loader:"}),"\n",(0,n.jsx)(r.p,{children:(0,n.jsx)(r.img,{alt:"HCD vector store embeddings ingestion",src:t(42638).A+"",width:"2294",height:"1684"})}),"\n",(0,n.jsxs)(s,{children:[(0,n.jsx)("summary",{children:"Parameters"}),(0,n.jsx)(r.p,{children:(0,n.jsx)(r.strong,{children:"Inputs"})}),(0,n.jsxs)(r.table,{children:[(0,n.jsx)(r.thead,{children:(0,n.jsxs)(r.tr,{children:[(0,n.jsx)(r.th,{children:"Name"}),(0,n.jsx)(r.th,{children:"Display Name"}),(0,n.jsx)(r.th,{children:"Info"})]})}),(0,n.jsxs)(r.tbody,{children:[(0,n.jsxs)(r.tr,{children:[(0,n.jsx)(r.td,{children:"collection_name"}),(0,n.jsx)(r.td,{children:"Collection Name"}),(0,n.jsx)(r.td,{children:"The name of the collection within HCD where the vectors will be stored. Required."})]}),(0,n.jsxs)(r.tr,{children:[(0,n.jsx)(r.td,{children:"username"}),(0,n.jsx)(r.td,{children:"HCD Username"}),(0,n.jsx)(r.td,{children:'Authentication username for accessing HCD. Default is "hcd-superuser". Required.'})]}),(0,n.jsxs)(r.tr,{children:[(0,n.jsx)(r.td,{children:"password"}),(0,n.jsx)(r.td,{children:"HCD Password"}),(0,n.jsx)(r.td,{children:"Authentication password for accessing HCD. Required."})]}),(0,n.jsxs)(r.tr,{children:[(0,n.jsx)(r.td,{children:"api_endpoint"}),(0,n.jsx)(r.td,{children:"HCD API Endpoint"}),(0,n.jsx)(r.td,{children:"API endpoint URL for the HCD service. Required."})]}),(0,n.jsxs)(r.tr,{children:[(0,n.jsx)(r.td,{children:"search_input"}),(0,n.jsx)(r.td,{children:"Search Input"}),(0,n.jsx)(r.td,{children:"Query string for similarity search."})]}),(0,n.jsxs)(r.tr,{children:[(0,n.jsx)(r.td,{children:"ingest_data"}),(0,n.jsx)(r.td,{children:"Ingest Data"}),(0,n.jsx)(r.td,{children:"Data to be ingested into the vector store."})]}),(0,n.jsxs)(r.tr,{children:[(0,n.jsx)(r.td,{children:"namespace"}),(0,n.jsx)(r.td,{children:"Namespace"}),(0,n.jsx)(r.td,{children:'Optional namespace within HCD to use for the collection. Default is "default_namespace".'})]}),(0,n.jsxs)(r.tr,{children:[(0,n.jsx)(r.td,{children:"ca_certificate"}),(0,n.jsx)(r.td,{children:"CA Certificate"}),(0,n.jsx)(r.td,{children:"Optional CA certificate for TLS connections to HCD."})]}),(0,n.jsxs)(r.tr,{children:[(0,n.jsx)(r.td,{children:"metric"}),(0,n.jsx)(r.td,{children:"Metric"}),(0,n.jsx)(r.td,{children:'Optional distance metric for vector comparisons. Options are "cosine", "dot_product", "euclidean".'})]}),(0,n.jsxs)(r.tr,{children:[(0,n.jsx)(r.td,{children:"batch_size"}),(0,n.jsx)(r.td,{children:"Batch Size"}),(0,n.jsx)(r.td,{children:"Optional number of data to process in a single batch."})]}),(0,n.jsxs)(r.tr,{children:[(0,n.jsx)(r.td,{children:"bulk_insert_batch_concurrency"}),(0,n.jsx)(r.td,{children:"Bulk Insert Batch Concurrency"}),(0,n.jsx)(r.td,{children:"Optional concurrency level for bulk insert operations."})]}),(0,n.jsxs)(r.tr,{children:[(0,n.jsx)(r.td,{children:"bulk_insert_overwrite_concurrency"}),(0,n.jsx)(r.td,{children:"Bulk Insert Overwrite Concurrency"}),(0,n.jsx)(r.td,{children:"Optional concurrency level for bulk insert operations that overwrite existing data."})]}),(0,n.jsxs)(r.tr,{children:[(0,n.jsx)(r.td,{children:"bulk_delete_concurrency"}),(0,n.jsx)(r.td,{children:"Bulk Delete Concurrency"}),(0,n.jsx)(r.td,{children:"Optional concurrency level for bulk delete operations."})]}),(0,n.jsxs)(r.tr,{children:[(0,n.jsx)(r.td,{children:"setup_mode"}),(0,n.jsx)(r.td,{children:"Setup Mode"}),(0,n.jsx)(r.td,{children:'Configuration mode for setting up the vector store. Options are "Sync", "Async", "Off". Default is "Sync".'})]}),(0,n.jsxs)(r.tr,{children:[(0,n.jsx)(r.td,{children:"pre_delete_collection"}),(0,n.jsx)(r.td,{children:"Pre Delete Collection"}),(0,n.jsx)(r.td,{children:"Boolean flag to determine whether to delete the collection before creating a new one."})]}),(0,n.jsxs)(r.tr,{children:[(0,n.jsx)(r.td,{children:"metadata_indexing_include"}),(0,n.jsx)(r.td,{children:"Metadata Indexing Include"}),(0,n.jsx)(r.td,{children:"Optional list of metadata fields to include in the indexing."})]}),(0,n.jsxs)(r.tr,{children:[(0,n.jsx)(r.td,{children:"embedding"}),(0,n.jsx)(r.td,{children:"Embedding or Astra Vectorize"}),(0,n.jsx)(r.td,{children:"Allows either an embedding model or an Astra Vectorize configuration."})]}),(0,n.jsxs)(r.tr,{children:[(0,n.jsx)(r.td,{children:"metadata_indexing_exclude"}),(0,n.jsx)(r.td,{children:"Metadata Indexing Exclude"}),(0,n.jsx)(r.td,{children:"Optional list of metadata fields to exclude from the indexing."})]}),(0,n.jsxs)(r.tr,{children:[(0,n.jsx)(r.td,{children:"collection_indexing_policy"}),(0,n.jsx)(r.td,{children:"Collection Indexing Policy"}),(0,n.jsx)(r.td,{children:"Optional dictionary defining the indexing policy for the collection."})]}),(0,n.jsxs)(r.tr,{children:[(0,n.jsx)(r.td,{children:"number_of_results"}),(0,n.jsx)(r.td,{children:"Number of Results"}),(0,n.jsx)(r.td,{children:"Number of results to return in similarity search. Default is 4."})]}),(0,n.jsxs)(r.tr,{children:[(0,n.jsx)(r.td,{children:"search_type"}),(0,n.jsx)(r.td,{children:"Search Type"}),(0,n.jsx)(r.td,{children:'Search type to use. Options are "Similarity", "Similarity with score threshold", "MMR (Max Marginal Relevance)". Default is "Similarity".'})]}),(0,n.jsxs)(r.tr,{children:[(0,n.jsx)(r.td,{children:"search_score_threshold"}),(0,n.jsx)(r.td,{children:"Search Score Threshold"}),(0,n.jsx)(r.td,{children:"Minimum similarity score threshold for search results. Default is 0."})]}),(0,n.jsxs)(r.tr,{children:[(0,n.jsx)(r.td,{children:"search_filter"}),(0,n.jsx)(r.td,{children:"Search Metadata Filter"}),(0,n.jsx)(r.td,{children:"Optional dictionary of filters to apply to the search query."})]})]})]}),(0,n.jsx)(r.p,{children:(0,n.jsx)(r.strong,{children:"Outputs"})}),(0,n.jsxs)(r.table,{children:[(0,n.jsx)(r.thead,{children:(0,n.jsxs)(r.tr,{children:[(0,n.jsx)(r.th,{children:"Name"}),(0,n.jsx)(r.th,{children:"Type"}),(0,n.jsx)(r.th,{children:"Description"})]})}),(0,n.jsxs)(r.tbody,{children:[(0,n.jsxs)(r.tr,{children:[(0,n.jsx)(r.td,{children:"vector_store"}),(0,n.jsx)(r.td,{children:"HyperConvergedDatabaseVectorStore"}),(0,n.jsx)(r.td,{children:"The HCD vector store instance."})]}),(0,n.jsxs)(r.tr,{children:[(0,n.jsx)(r.td,{children:"search_results"}),(0,n.jsx)(r.td,{children:"List[Data]"}),(0,n.jsxs)(r.td,{children:["The results of the similarity search as a list of ",(0,n.jsx)(r.a,{href:"/concepts-objects#data-object",children:"Data"})," objects."]})]})]})]})]}),"\n",(0,n.jsx)(r.h2,{id:"milvus",children:"Milvus"}),"\n",(0,n.jsxs)(r.p,{children:["This component creates a Milvus Vector Store with search capabilities.\nFor more information, see the ",(0,n.jsx)(r.a,{href:"https://milvus.io/docs",children:"Milvus documentation"}),"."]}),"\n",(0,n.jsxs)(s,{children:[(0,n.jsx)("summary",{children:"Parameters"}),(0,n.jsx)(r.p,{children:(0,n.jsx)(r.strong,{children:"Inputs"})}),(0,n.jsxs)(r.table,{children:[(0,n.jsx)(r.thead,{children:(0,n.jsxs)(r.tr,{children:[(0,n.jsx)(r.th,{children:"Name"}),(0,n.jsx)(r.th,{children:"Type"}),(0,n.jsx)(r.th,{children:"Description"})]})}),(0,n.jsxs)(r.tbody,{children:[(0,n.jsxs)(r.tr,{children:[(0,n.jsx)(r.td,{children:"collection_name"}),(0,n.jsx)(r.td,{children:"String"}),(0,n.jsx)(r.td,{children:"Name of the Milvus collection."})]}),(0,n.jsxs)(r.tr,{children:[(0,n.jsx)(r.td,{children:"collection_description"}),(0,n.jsx)(r.td,{children:"String"}),(0,n.jsx)(r.td,{children:"Description of the Milvus collection."})]}),(0,n.jsxs)(r.tr,{children:[(0,n.jsx)(r.td,{children:"uri"}),(0,n.jsx)(r.td,{children:"String"}),(0,n.jsx)(r.td,{children:"Connection URI for Milvus."})]}),(0,n.jsxs)(r.tr,{children:[(0,n.jsx)(r.td,{children:"password"}),(0,n.jsx)(r.td,{children:"SecretString"}),(0,n.jsx)(r.td,{children:"Password for Milvus."})]}),(0,n.jsxs)(r.tr,{children:[(0,n.jsx)(r.td,{children:"username"}),(0,n.jsx)(r.td,{children:"SecretString"}),(0,n.jsx)(r.td,{children:"Username for Milvus."})]}),(0,n.jsxs)(r.tr,{children:[(0,n.jsx)(r.td,{children:"batch_size"}),(0,n.jsx)(r.td,{children:"Integer"}),(0,n.jsx)(r.td,{children:"Number of data to process in a single batch."})]}),(0,n.jsxs)(r.tr,{children:[(0,n.jsx)(r.td,{children:"search_query"}),(0,n.jsx)(r.td,{children:"String"}),(0,n.jsx)(r.td,{children:"Query for similarity search."})]}),(0,n.jsxs)(r.tr,{children:[(0,n.jsx)(r.td,{children:"ingest_data"}),(0,n.jsx)(r.td,{children:"Data"}),(0,n.jsx)(r.td,{children:"Data to be ingested into the vector store."})]}),(0,n.jsxs)(r.tr,{children:[(0,n.jsx)(r.td,{children:"embedding"}),(0,n.jsx)(r.td,{children:"Embeddings"}),(0,n.jsx)(r.td,{children:"Embedding function to use."})]}),(0,n.jsxs)(r.tr,{children:[(0,n.jsx)(r.td,{children:"number_of_results"}),(0,n.jsx)(r.td,{children:"Integer"}),(0,n.jsx)(r.td,{children:"Number of results to return in search."})]}),(0,n.jsxs)(r.tr,{children:[(0,n.jsx)(r.td,{children:"search_type"}),(0,n.jsx)(r.td,{children:"String"}),(0,n.jsx)(r.td,{children:"Type of search to perform."})]}),(0,n.jsxs)(r.tr,{children:[(0,n.jsx)(r.td,{children:"search_score_threshold"}),(0,n.jsx)(r.td,{children:"Float"}),(0,n.jsx)(r.td,{children:"Minimum similarity score for search results."})]}),(0,n.jsxs)(r.tr,{children:[(0,n.jsx)(r.td,{children:"search_filter"}),(0,n.jsx)(r.td,{children:"Dict"}),(0,n.jsx)(r.td,{children:"Metadata filters for search query."})]}),(0,n.jsxs)(r.tr,{children:[(0,n.jsx)(r.td,{children:"setup_mode"}),(0,n.jsx)(r.td,{children:"String"}),(0,n.jsx)(r.td,{children:"Configuration mode for setting up the vector store."})]}),(0,n.jsxs)(r.tr,{children:[(0,n.jsx)(r.td,{children:"vector_dimensions"}),(0,n.jsx)(r.td,{children:"Integer"}),(0,n.jsx)(r.td,{children:"Number of dimensions of the vectors."})]}),(0,n.jsxs)(r.tr,{children:[(0,n.jsx)(r.td,{children:"pre_delete_collection"}),(0,n.jsx)(r.td,{children:"Boolean"}),(0,n.jsx)(r.td,{children:"Whether to delete the collection before creating a new one."})]})]})]}),(0,n.jsx)(r.p,{children:(0,n.jsx)(r.strong,{children:"Outputs"})}),(0,n.jsxs)(r.table,{children:[(0,n.jsx)(r.thead,{children:(0,n.jsxs)(r.tr,{children:[(0,n.jsx)(r.th,{children:"Name"}),(0,n.jsx)(r.th,{children:"Type"}),(0,n.jsx)(r.th,{children:"Description"})]})}),(0,n.jsx)(r.tbody,{children:(0,n.jsxs)(r.tr,{children:[(0,n.jsx)(r.td,{children:"vector_store"}),(0,n.jsx)(r.td,{children:"Milvus"}),(0,n.jsx)(r.td,{children:"A Milvus vector store instance configured with the specified parameters."})]})})]})]}),"\n",(0,n.jsx)(r.h2,{id:"mongodb-atlas",children:"MongoDB Atlas"}),"\n",(0,n.jsxs)(r.p,{children:["This component creates a MongoDB Atlas Vector Store with search capabilities.\nFor more information, see the ",(0,n.jsx)(r.a,{href:"https://www.mongodb.com/docs/atlas/atlas-vector-search/tutorials/vector-search-quick-start/",children:"MongoDB Atlas documentation"}),"."]}),"\n",(0,n.jsxs)(s,{children:[(0,n.jsx)("summary",{children:"Parameters"}),(0,n.jsx)(r.p,{children:(0,n.jsx)(r.strong,{children:"Inputs"})}),(0,n.jsxs)(r.table,{children:[(0,n.jsx)(r.thead,{children:(0,n.jsxs)(r.tr,{children:[(0,n.jsx)(r.th,{children:"Name"}),(0,n.jsx)(r.th,{children:"Type"}),(0,n.jsx)(r.th,{children:"Description"})]})}),(0,n.jsxs)(r.tbody,{children:[(0,n.jsxs)(r.tr,{children:[(0,n.jsx)(r.td,{children:"mongodb_atlas_cluster_uri"}),(0,n.jsx)(r.td,{children:"SecretString"}),(0,n.jsx)(r.td,{children:"The connection URI for your MongoDB Atlas cluster. Required."})]}),(0,n.jsxs)(r.tr,{children:[(0,n.jsx)(r.td,{children:"enable_mtls"}),(0,n.jsx)(r.td,{children:"Boolean"}),(0,n.jsx)(r.td,{children:"Enable mutual TLS authentication. Default: false."})]}),(0,n.jsxs)(r.tr,{children:[(0,n.jsx)(r.td,{children:"mongodb_atlas_client_cert"}),(0,n.jsx)(r.td,{children:"SecretString"}),(0,n.jsx)(r.td,{children:"Client certificate combined with private key for mTLS authentication. Required if mTLS is enabled."})]}),(0,n.jsxs)(r.tr,{children:[(0,n.jsx)(r.td,{children:"db_name"}),(0,n.jsx)(r.td,{children:"String"}),(0,n.jsx)(r.td,{children:"The name of the database to use. Required."})]}),(0,n.jsxs)(r.tr,{children:[(0,n.jsx)(r.td,{children:"collection_name"}),(0,n.jsx)(r.td,{children:"String"}),(0,n.jsx)(r.td,{children:"The name of the collection to use. Required."})]}),(0,n.jsxs)(r.tr,{children:[(0,n.jsx)(r.td,{children:"index_name"}),(0,n.jsx)(r.td,{children:"String"}),(0,n.jsx)(r.td,{children:"The name of the Atlas Search index, it should be a Vector Search. Required."})]}),(0,n.jsxs)(r.tr,{children:[(0,n.jsx)(r.td,{children:"insert_mode"}),(0,n.jsx)(r.td,{children:"String"}),(0,n.jsx)(r.td,{children:'How to insert new documents into the collection. The options are "append" or "overwrite". Default: "append".'})]}),(0,n.jsxs)(r.tr,{children:[(0,n.jsx)(r.td,{children:"embedding"}),(0,n.jsx)(r.td,{children:"Embeddings"}),(0,n.jsx)(r.td,{children:"The embedding model to use."})]}),(0,n.jsxs)(r.tr,{children:[(0,n.jsx)(r.td,{children:"number_of_results"}),(0,n.jsx)(r.td,{children:"Integer"}),(0,n.jsx)(r.td,{children:"Number of results to return in similarity search. Default: 4."})]}),(0,n.jsxs)(r.tr,{children:[(0,n.jsx)(r.td,{children:"index_field"}),(0,n.jsx)(r.td,{children:"String"}),(0,n.jsx)(r.td,{children:'The field to index. Default: "embedding".'})]}),(0,n.jsxs)(r.tr,{children:[(0,n.jsx)(r.td,{children:"filter_field"}),(0,n.jsx)(r.td,{children:"String"}),(0,n.jsx)(r.td,{children:"The field to filter the index."})]}),(0,n.jsxs)(r.tr,{children:[(0,n.jsx)(r.td,{children:"number_dimensions"}),(0,n.jsx)(r.td,{children:"Integer"}),(0,n.jsx)(r.td,{children:"Embedding context length. Default: 1536."})]}),(0,n.jsxs)(r.tr,{children:[(0,n.jsx)(r.td,{children:"similarity"}),(0,n.jsx)(r.td,{children:"String"}),(0,n.jsx)(r.td,{children:'The method used to measure similarity between vectors. The options are "cosine", "euclidean", or "dotProduct". Default: "cosine".'})]}),(0,n.jsxs)(r.tr,{children:[(0,n.jsx)(r.td,{children:"quantization"}),(0,n.jsx)(r.td,{children:"String"}),(0,n.jsx)(r.td,{children:'Quantization reduces memory costs by converting 32-bit floats to smaller data types. The options are "scalar" or "binary".'})]})]})]}),(0,n.jsx)(r.p,{children:(0,n.jsx)(r.strong,{children:"Outputs"})}),(0,n.jsxs)(r.table,{children:[(0,n.jsx)(r.thead,{children:(0,n.jsxs)(r.tr,{children:[(0,n.jsx)(r.th,{children:"Name"}),(0,n.jsx)(r.th,{children:"Type"}),(0,n.jsx)(r.th,{children:"Description"})]})}),(0,n.jsxs)(r.tbody,{children:[(0,n.jsxs)(r.tr,{children:[(0,n.jsx)(r.td,{children:"vector_store"}),(0,n.jsx)(r.td,{children:"MongoDBAtlasVectorSearch"}),(0,n.jsx)(r.td,{children:"The MongoDB Atlas vector store instance."})]}),(0,n.jsxs)(r.tr,{children:[(0,n.jsx)(r.td,{children:"search_results"}),(0,n.jsx)(r.td,{children:"List[Data]"}),(0,n.jsxs)(r.td,{children:["The results of the similarity search as a list of ",(0,n.jsx)(r.a,{href:"/concepts-objects#data-object",children:"Data"})," objects."]})]})]})]})]}),"\n",(0,n.jsx)(r.h2,{id:"opensearch",children:"Opensearch"}),"\n",(0,n.jsxs)(r.p,{children:["This component creates an Opensearch vector store with search capabilities\nFor more information, see ",(0,n.jsx)(r.a,{href:"https://opensearch.org/platform/search/vector-database.html",children:"Opensearch documentation"}),"."]}),"\n",(0,n.jsxs)(s,{children:[(0,n.jsx)("summary",{children:"Parameters"}),(0,n.jsx)(r.p,{children:(0,n.jsx)(r.strong,{children:"Inputs"})}),(0,n.jsxs)(r.table,{children:[(0,n.jsx)(r.thead,{children:(0,n.jsxs)(r.tr,{children:[(0,n.jsx)(r.th,{children:"Name"}),(0,n.jsx)(r.th,{children:"Type"}),(0,n.jsx)(r.th,{children:"Description"})]})}),(0,n.jsxs)(r.tbody,{children:[(0,n.jsxs)(r.tr,{children:[(0,n.jsx)(r.td,{children:"opensearch_url"}),(0,n.jsx)(r.td,{children:"String"}),(0,n.jsxs)(r.td,{children:["URL for OpenSearch cluster, such as ",(0,n.jsx)(r.code,{children:"https://192.168.1.1:9200"}),"."]})]}),(0,n.jsxs)(r.tr,{children:[(0,n.jsx)(r.td,{children:"index_name"}),(0,n.jsx)(r.td,{children:"String"}),(0,n.jsx)(r.td,{children:"The index name where the vectors are stored in OpenSearch cluster."})]}),(0,n.jsxs)(r.tr,{children:[(0,n.jsx)(r.td,{children:"search_input"}),(0,n.jsx)(r.td,{children:"String"}),(0,n.jsx)(r.td,{children:"Enter a search query. Leave empty to retrieve all documents or if hybrid search is being used."})]}),(0,n.jsxs)(r.tr,{children:[(0,n.jsx)(r.td,{children:"ingest_data"}),(0,n.jsx)(r.td,{children:"Data"}),(0,n.jsx)(r.td,{children:"The data to be ingested into the vector store."})]}),(0,n.jsxs)(r.tr,{children:[(0,n.jsx)(r.td,{children:"embedding"}),(0,n.jsx)(r.td,{children:"Embeddings"}),(0,n.jsx)(r.td,{children:"The embedding function to use."})]}),(0,n.jsxs)(r.tr,{children:[(0,n.jsx)(r.td,{children:"search_type"}),(0,n.jsx)(r.td,{children:"String"}),(0,n.jsx)(r.td,{children:'The options are "similarity", "similarity_score_threshold", "mmr".'})]}),(0,n.jsxs)(r.tr,{children:[(0,n.jsx)(r.td,{children:"number_of_results"}),(0,n.jsx)(r.td,{children:"Integer"}),(0,n.jsx)(r.td,{children:"The number of results to return in search."})]}),(0,n.jsxs)(r.tr,{children:[(0,n.jsx)(r.td,{children:"search_score_threshold"}),(0,n.jsx)(r.td,{children:"Float"}),(0,n.jsx)(r.td,{children:"The minimum similarity score threshold for search results."})]}),(0,n.jsxs)(r.tr,{children:[(0,n.jsx)(r.td,{children:"username"}),(0,n.jsx)(r.td,{children:"String"}),(0,n.jsx)(r.td,{children:"The username for the opensource cluster."})]}),(0,n.jsxs)(r.tr,{children:[(0,n.jsx)(r.td,{children:"password"}),(0,n.jsx)(r.td,{children:"SecretString"}),(0,n.jsx)(r.td,{children:"The password for the opensource cluster."})]}),(0,n.jsxs)(r.tr,{children:[(0,n.jsx)(r.td,{children:"use_ssl"}),(0,n.jsx)(r.td,{children:"Boolean"}),(0,n.jsx)(r.td,{children:"Use SSL."})]}),(0,n.jsxs)(r.tr,{children:[(0,n.jsx)(r.td,{children:"verify_certs"}),(0,n.jsx)(r.td,{children:"Boolean"}),(0,n.jsx)(r.td,{children:"Verify certificates."})]}),(0,n.jsxs)(r.tr,{children:[(0,n.jsx)(r.td,{children:"hybrid_search_query"}),(0,n.jsx)(r.td,{children:"String"}),(0,n.jsx)(r.td,{children:"Provide a custom hybrid search query in JSON format. This allows you to combine vector similarity and keyword matching."})]})]})]}),(0,n.jsx)(r.p,{children:(0,n.jsx)(r.strong,{children:"Outputs"})}),(0,n.jsxs)(r.table,{children:[(0,n.jsx)(r.thead,{children:(0,n.jsxs)(r.tr,{children:[(0,n.jsx)(r.th,{children:"Name"}),(0,n.jsx)(r.th,{children:"Type"}),(0,n.jsx)(r.th,{children:"Description"})]})}),(0,n.jsxs)(r.tbody,{children:[(0,n.jsxs)(r.tr,{children:[(0,n.jsx)(r.td,{children:"vector_store"}),(0,n.jsx)(r.td,{children:"OpenSearchVectorSearch"}),(0,n.jsx)(r.td,{children:"OpenSearch vector store instance"})]}),(0,n.jsxs)(r.tr,{children:[(0,n.jsx)(r.td,{children:"search_results"}),(0,n.jsx)(r.td,{children:"List[Data]"}),(0,n.jsxs)(r.td,{children:["The results of the similarity search as a list of ",(0,n.jsx)(r.a,{href:"/concepts-objects#data-object",children:"Data"})," objects."]})]})]})]})]}),"\n",(0,n.jsx)(r.h2,{id:"pgvector",children:"PGVector"}),"\n",(0,n.jsxs)(r.p,{children:["This component creates a PGVector Vector Store with search capabilities.\nFor more information, see the ",(0,n.jsx)(r.a,{href:"https://github.com/pgvector/pgvector",children:"PGVector documentation"}),"."]}),"\n",(0,n.jsxs)(s,{children:[(0,n.jsx)("summary",{children:"Parameters"}),(0,n.jsx)(r.p,{children:(0,n.jsx)(r.strong,{children:"Inputs"})}),(0,n.jsxs)(r.table,{children:[(0,n.jsx)(r.thead,{children:(0,n.jsxs)(r.tr,{children:[(0,n.jsx)(r.th,{children:"Name"}),(0,n.jsx)(r.th,{children:"Type"}),(0,n.jsx)(r.th,{children:"Description"})]})}),(0,n.jsxs)(r.tbody,{children:[(0,n.jsxs)(r.tr,{children:[(0,n.jsx)(r.td,{children:"pg_server_url"}),(0,n.jsx)(r.td,{children:"SecretString"}),(0,n.jsx)(r.td,{children:"The PostgreSQL server connection string."})]}),(0,n.jsxs)(r.tr,{children:[(0,n.jsx)(r.td,{children:"collection_name"}),(0,n.jsx)(r.td,{children:"String"}),(0,n.jsx)(r.td,{children:"The table name for the vector store."})]}),(0,n.jsxs)(r.tr,{children:[(0,n.jsx)(r.td,{children:"search_query"}),(0,n.jsx)(r.td,{children:"String"}),(0,n.jsx)(r.td,{children:"The query for similarity search."})]}),(0,n.jsxs)(r.tr,{children:[(0,n.jsx)(r.td,{children:"ingest_data"}),(0,n.jsx)(r.td,{children:"Data"}),(0,n.jsx)(r.td,{children:"The data to be ingested into the vector store."})]}),(0,n.jsxs)(r.tr,{children:[(0,n.jsx)(r.td,{children:"embedding"}),(0,n.jsx)(r.td,{children:"Embeddings"}),(0,n.jsx)(r.td,{children:"The embedding function to use."})]}),(0,n.jsxs)(r.tr,{children:[(0,n.jsx)(r.td,{children:"number_of_results"}),(0,n.jsx)(r.td,{children:"Integer"}),(0,n.jsx)(r.td,{children:"The number of results to return in search."})]})]})]}),(0,n.jsx)(r.p,{children:(0,n.jsx)(r.strong,{children:"Outputs"})}),(0,n.jsxs)(r.table,{children:[(0,n.jsx)(r.thead,{children:(0,n.jsxs)(r.tr,{children:[(0,n.jsx)(r.th,{children:"Name"}),(0,n.jsx)(r.th,{children:"Display Name"}),(0,n.jsx)(r.th,{children:"Info"})]})}),(0,n.jsxs)(r.tbody,{children:[(0,n.jsxs)(r.tr,{children:[(0,n.jsx)(r.td,{children:"vector_store"}),(0,n.jsx)(r.td,{children:"Vector Store"}),(0,n.jsx)(r.td,{children:"The PGVector vector store instance configured with the specified parameters."})]}),(0,n.jsxs)(r.tr,{children:[(0,n.jsx)(r.td,{children:"search_results"}),(0,n.jsx)(r.td,{children:"Search Results"}),(0,n.jsxs)(r.td,{children:["The results of the similarity search as a list of ",(0,n.jsx)(r.a,{href:"/concepts-objects#data-object",children:"Data"})," objects."]})]})]})]})]}),"\n",(0,n.jsx)(r.h2,{id:"pinecone",children:"Pinecone"}),"\n",(0,n.jsxs)(r.p,{children:["This component creates a Pinecone Vector Store with search capabilities.\nFor more information, see the ",(0,n.jsx)(r.a,{href:"https://docs.pinecone.io/home",children:"Pinecone documentation"}),"."]}),"\n",(0,n.jsxs)(s,{children:[(0,n.jsx)("summary",{children:"Parameters"}),(0,n.jsx)(r.p,{children:(0,n.jsx)(r.strong,{children:"Inputs"})}),(0,n.jsxs)(r.table,{children:[(0,n.jsx)(r.thead,{children:(0,n.jsxs)(r.tr,{children:[(0,n.jsx)(r.th,{children:"Name"}),(0,n.jsx)(r.th,{children:"Type"}),(0,n.jsx)(r.th,{children:"Description"})]})}),(0,n.jsxs)(r.tbody,{children:[(0,n.jsxs)(r.tr,{children:[(0,n.jsx)(r.td,{children:"index_name"}),(0,n.jsx)(r.td,{children:"String"}),(0,n.jsx)(r.td,{children:"The name of the Pinecone index."})]}),(0,n.jsxs)(r.tr,{children:[(0,n.jsx)(r.td,{children:"namespace"}),(0,n.jsx)(r.td,{children:"String"}),(0,n.jsx)(r.td,{children:"The namespace for the index."})]}),(0,n.jsxs)(r.tr,{children:[(0,n.jsx)(r.td,{children:"distance_strategy"}),(0,n.jsx)(r.td,{children:"String"}),(0,n.jsx)(r.td,{children:"The strategy for calculating distance between vectors."})]}),(0,n.jsxs)(r.tr,{children:[(0,n.jsx)(r.td,{children:"pinecone_api_key"}),(0,n.jsx)(r.td,{children:"SecretString"}),(0,n.jsx)(r.td,{children:"The API key for Pinecone."})]}),(0,n.jsxs)(r.tr,{children:[(0,n.jsx)(r.td,{children:"text_key"}),(0,n.jsx)(r.td,{children:"String"}),(0,n.jsx)(r.td,{children:"The key in the record to use as text."})]}),(0,n.jsxs)(r.tr,{children:[(0,n.jsx)(r.td,{children:"search_query"}),(0,n.jsx)(r.td,{children:"String"}),(0,n.jsx)(r.td,{children:"The query for similarity search."})]}),(0,n.jsxs)(r.tr,{children:[(0,n.jsx)(r.td,{children:"ingest_data"}),(0,n.jsx)(r.td,{children:"Data"}),(0,n.jsx)(r.td,{children:"The data to be ingested into the vector store."})]}),(0,n.jsxs)(r.tr,{children:[(0,n.jsx)(r.td,{children:"embedding"}),(0,n.jsx)(r.td,{children:"Embeddings"}),(0,n.jsx)(r.td,{children:"The embedding function to use."})]}),(0,n.jsxs)(r.tr,{children:[(0,n.jsx)(r.td,{children:"number_of_results"}),(0,n.jsx)(r.td,{children:"Integer"}),(0,n.jsx)(r.td,{children:"The number of results to return in search."})]})]})]}),(0,n.jsx)(r.p,{children:(0,n.jsx)(r.strong,{children:"Outputs"})}),(0,n.jsxs)(r.table,{children:[(0,n.jsx)(r.thead,{children:(0,n.jsxs)(r.tr,{children:[(0,n.jsx)(r.th,{children:"Name"}),(0,n.jsx)(r.th,{children:"Display Name"}),(0,n.jsx)(r.th,{children:"Info"})]})}),(0,n.jsxs)(r.tbody,{children:[(0,n.jsxs)(r.tr,{children:[(0,n.jsx)(r.td,{children:"vector_store"}),(0,n.jsx)(r.td,{children:"Vector Store"}),(0,n.jsx)(r.td,{children:"The Pinecone vector store instance configured with the specified parameters."})]}),(0,n.jsxs)(r.tr,{children:[(0,n.jsx)(r.td,{children:"search_results"}),(0,n.jsx)(r.td,{children:"Search Results"}),(0,n.jsxs)(r.td,{children:["The results of the similarity search as a list of ",(0,n.jsx)(r.a,{href:"/concepts-objects#data-object",children:"Data"})," objects."]})]})]})]})]}),"\n",(0,n.jsx)(r.h2,{id:"qdrant",children:"Qdrant"}),"\n",(0,n.jsxs)(r.p,{children:["This component creates a Qdrant Vector Store with search capabilities.\nFor more information, see the ",(0,n.jsx)(r.a,{href:"https://qdrant.tech/documentation/",children:"Qdrant documentation"}),"."]}),"\n",(0,n.jsxs)(s,{children:[(0,n.jsx)("summary",{children:"Parameters"}),(0,n.jsx)(r.p,{children:(0,n.jsx)(r.strong,{children:"Inputs"})}),(0,n.jsxs)(r.table,{children:[(0,n.jsx)(r.thead,{children:(0,n.jsxs)(r.tr,{children:[(0,n.jsx)(r.th,{children:"Name"}),(0,n.jsx)(r.th,{children:"Type"}),(0,n.jsx)(r.th,{children:"Description"})]})}),(0,n.jsxs)(r.tbody,{children:[(0,n.jsxs)(r.tr,{children:[(0,n.jsx)(r.td,{children:"collection_name"}),(0,n.jsx)(r.td,{children:"String"}),(0,n.jsx)(r.td,{children:"The name of the Qdrant collection."})]}),(0,n.jsxs)(r.tr,{children:[(0,n.jsx)(r.td,{children:"host"}),(0,n.jsx)(r.td,{children:"String"}),(0,n.jsx)(r.td,{children:"The Qdrant server host."})]}),(0,n.jsxs)(r.tr,{children:[(0,n.jsx)(r.td,{children:"port"}),(0,n.jsx)(r.td,{children:"Integer"}),(0,n.jsx)(r.td,{children:"The Qdrant server port."})]}),(0,n.jsxs)(r.tr,{children:[(0,n.jsx)(r.td,{children:"grpc_port"}),(0,n.jsx)(r.td,{children:"Integer"}),(0,n.jsx)(r.td,{children:"The Qdrant gRPC port."})]}),(0,n.jsxs)(r.tr,{children:[(0,n.jsx)(r.td,{children:"api_key"}),(0,n.jsx)(r.td,{children:"SecretString"}),(0,n.jsx)(r.td,{children:"The API key for Qdrant."})]}),(0,n.jsxs)(r.tr,{children:[(0,n.jsx)(r.td,{children:"prefix"}),(0,n.jsx)(r.td,{children:"String"}),(0,n.jsx)(r.td,{children:"The prefix for Qdrant."})]}),(0,n.jsxs)(r.tr,{children:[(0,n.jsx)(r.td,{children:"timeout"}),(0,n.jsx)(r.td,{children:"Integer"}),(0,n.jsx)(r.td,{children:"The timeout for Qdrant operations."})]}),(0,n.jsxs)(r.tr,{children:[(0,n.jsx)(r.td,{children:"path"}),(0,n.jsx)(r.td,{children:"String"}),(0,n.jsx)(r.td,{children:"The path for Qdrant."})]}),(0,n.jsxs)(r.tr,{children:[(0,n.jsx)(r.td,{children:"url"}),(0,n.jsx)(r.td,{children:"String"}),(0,n.jsx)(r.td,{children:"The URL for Qdrant."})]}),(0,n.jsxs)(r.tr,{children:[(0,n.jsx)(r.td,{children:"distance_func"}),(0,n.jsx)(r.td,{children:"String"}),(0,n.jsx)(r.td,{children:"The distance function for vector similarity."})]}),(0,n.jsxs)(r.tr,{children:[(0,n.jsx)(r.td,{children:"content_payload_key"}),(0,n.jsx)(r.td,{children:"String"}),(0,n.jsx)(r.td,{children:"The content payload key."})]}),(0,n.jsxs)(r.tr,{children:[(0,n.jsx)(r.td,{children:"metadata_payload_key"}),(0,n.jsx)(r.td,{children:"String"}),(0,n.jsx)(r.td,{children:"The metadata payload key."})]}),(0,n.jsxs)(r.tr,{children:[(0,n.jsx)(r.td,{children:"search_query"}),(0,n.jsx)(r.td,{children:"String"}),(0,n.jsx)(r.td,{children:"The query for similarity search."})]}),(0,n.jsxs)(r.tr,{children:[(0,n.jsx)(r.td,{children:"ingest_data"}),(0,n.jsx)(r.td,{children:"Data"}),(0,n.jsx)(r.td,{children:"The data to be ingested into the vector store."})]}),(0,n.jsxs)(r.tr,{children:[(0,n.jsx)(r.td,{children:"embedding"}),(0,n.jsx)(r.td,{children:"Embeddings"}),(0,n.jsx)(r.td,{children:"The embedding function to use."})]}),(0,n.jsxs)(r.tr,{children:[(0,n.jsx)(r.td,{children:"number_of_results"}),(0,n.jsx)(r.td,{children:"Integer"}),(0,n.jsx)(r.td,{children:"The number of results to return in search."})]})]})]}),(0,n.jsx)(r.p,{children:(0,n.jsx)(r.strong,{children:"Outputs"})}),(0,n.jsxs)(r.table,{children:[(0,n.jsx)(r.thead,{children:(0,n.jsxs)(r.tr,{children:[(0,n.jsx)(r.th,{children:"Name"}),(0,n.jsx)(r.th,{children:"Type"}),(0,n.jsx)(r.th,{children:"Description"})]})}),(0,n.jsxs)(r.tbody,{children:[(0,n.jsxs)(r.tr,{children:[(0,n.jsx)(r.td,{children:"vector_store"}),(0,n.jsx)(r.td,{children:"Qdrant"}),(0,n.jsx)(r.td,{children:"A Qdrant vector store instance."})]}),(0,n.jsxs)(r.tr,{children:[(0,n.jsx)(r.td,{children:"search_results"}),(0,n.jsx)(r.td,{children:"List[Data]"}),(0,n.jsxs)(r.td,{children:["The results of the similarity search as a list of ",(0,n.jsx)(r.a,{href:"/concepts-objects#data-object",children:"Data"})," objects."]})]})]})]})]}),"\n",(0,n.jsx)(r.h2,{id:"redis",children:"Redis"}),"\n",(0,n.jsxs)(r.p,{children:["This component creates a Redis Vector Store with search capabilities.\nFor more information, see the ",(0,n.jsx)(r.a,{href:"https://redis.io/docs/latest/develop/interact/search-and-query/advanced-concepts/vectors/",children:"Redis documentation"}),"."]}),"\n",(0,n.jsxs)(s,{children:[(0,n.jsx)("summary",{children:"Parameters"}),(0,n.jsx)(r.p,{children:(0,n.jsx)(r.strong,{children:"Inputs"})}),(0,n.jsxs)(r.table,{children:[(0,n.jsx)(r.thead,{children:(0,n.jsxs)(r.tr,{children:[(0,n.jsx)(r.th,{children:"Name"}),(0,n.jsx)(r.th,{children:"Type"}),(0,n.jsx)(r.th,{children:"Description"})]})}),(0,n.jsxs)(r.tbody,{children:[(0,n.jsxs)(r.tr,{children:[(0,n.jsx)(r.td,{children:"redis_server_url"}),(0,n.jsx)(r.td,{children:"SecretString"}),(0,n.jsx)(r.td,{children:"The Redis server connection string."})]}),(0,n.jsxs)(r.tr,{children:[(0,n.jsx)(r.td,{children:"redis_index_name"}),(0,n.jsx)(r.td,{children:"String"}),(0,n.jsx)(r.td,{children:"The name of the Redis index."})]}),(0,n.jsxs)(r.tr,{children:[(0,n.jsx)(r.td,{children:"code"}),(0,n.jsx)(r.td,{children:"String"}),(0,n.jsx)(r.td,{children:"The custom code for Redis (advanced)."})]}),(0,n.jsxs)(r.tr,{children:[(0,n.jsx)(r.td,{children:"schema"}),(0,n.jsx)(r.td,{children:"String"}),(0,n.jsx)(r.td,{children:"The schema for Redis index."})]}),(0,n.jsxs)(r.tr,{children:[(0,n.jsx)(r.td,{children:"search_query"}),(0,n.jsx)(r.td,{children:"String"}),(0,n.jsx)(r.td,{children:"The query for similarity search."})]}),(0,n.jsxs)(r.tr,{children:[(0,n.jsx)(r.td,{children:"ingest_data"}),(0,n.jsx)(r.td,{children:"Data"}),(0,n.jsx)(r.td,{children:"The data to be ingested into the vector store."})]}),(0,n.jsxs)(r.tr,{children:[(0,n.jsx)(r.td,{children:"number_of_results"}),(0,n.jsx)(r.td,{children:"Integer"}),(0,n.jsx)(r.td,{children:"The number of results to return in search."})]}),(0,n.jsxs)(r.tr,{children:[(0,n.jsx)(r.td,{children:"embedding"}),(0,n.jsx)(r.td,{children:"Embeddings"}),(0,n.jsx)(r.td,{children:"The embedding function to use."})]})]})]}),(0,n.jsx)(r.p,{children:(0,n.jsx)(r.strong,{children:"Outputs"})}),(0,n.jsxs)(r.table,{children:[(0,n.jsx)(r.thead,{children:(0,n.jsxs)(r.tr,{children:[(0,n.jsx)(r.th,{children:"Name"}),(0,n.jsx)(r.th,{children:"Type"}),(0,n.jsx)(r.th,{children:"Description"})]})}),(0,n.jsxs)(r.tbody,{children:[(0,n.jsxs)(r.tr,{children:[(0,n.jsx)(r.td,{children:"vector_store"}),(0,n.jsx)(r.td,{children:"Redis"}),(0,n.jsx)(r.td,{children:"Redis vector store instance"})]}),(0,n.jsxs)(r.tr,{children:[(0,n.jsx)(r.td,{children:"search_results"}),(0,n.jsx)(r.td,{children:"List[Data]"}),(0,n.jsxs)(r.td,{children:["The results of the similarity search as a list of ",(0,n.jsx)(r.a,{href:"/concepts-objects#data-object",children:"Data"})," objects."]})]})]})]})]}),"\n",(0,n.jsx)(r.h2,{id:"supabase",children:"Supabase"}),"\n",(0,n.jsxs)(r.p,{children:["This component creates a connection to a Supabase Vector Store with search capabilities.\nFor more information, see the ",(0,n.jsx)(r.a,{href:"https://supabase.com/docs/guides/ai",children:"Supabase documentation"}),"."]}),"\n",(0,n.jsxs)(s,{children:[(0,n.jsx)("summary",{children:"Parameters"}),(0,n.jsx)(r.p,{children:(0,n.jsx)(r.strong,{children:"Inputs"})}),(0,n.jsxs)(r.table,{children:[(0,n.jsx)(r.thead,{children:(0,n.jsxs)(r.tr,{children:[(0,n.jsx)(r.th,{children:"Name"}),(0,n.jsx)(r.th,{children:"Type"}),(0,n.jsx)(r.th,{children:"Description"})]})}),(0,n.jsxs)(r.tbody,{children:[(0,n.jsxs)(r.tr,{children:[(0,n.jsx)(r.td,{children:"supabase_url"}),(0,n.jsx)(r.td,{children:"String"}),(0,n.jsx)(r.td,{children:"The URL of the Supabase instance."})]}),(0,n.jsxs)(r.tr,{children:[(0,n.jsx)(r.td,{children:"supabase_service_key"}),(0,n.jsx)(r.td,{children:"SecretString"}),(0,n.jsx)(r.td,{children:"The service key for Supabase authentication."})]}),(0,n.jsxs)(r.tr,{children:[(0,n.jsx)(r.td,{children:"table_name"}),(0,n.jsx)(r.td,{children:"String"}),(0,n.jsx)(r.td,{children:"The name of the table in Supabase."})]}),(0,n.jsxs)(r.tr,{children:[(0,n.jsx)(r.td,{children:"query_name"}),(0,n.jsx)(r.td,{children:"String"}),(0,n.jsx)(r.td,{children:"The name of the query to use."})]}),(0,n.jsxs)(r.tr,{children:[(0,n.jsx)(r.td,{children:"search_query"}),(0,n.jsx)(r.td,{children:"String"}),(0,n.jsx)(r.td,{children:"The query for similarity search."})]}),(0,n.jsxs)(r.tr,{children:[(0,n.jsx)(r.td,{children:"ingest_data"}),(0,n.jsx)(r.td,{children:"Data"}),(0,n.jsx)(r.td,{children:"The data to be ingested into the vector store."})]}),(0,n.jsxs)(r.tr,{children:[(0,n.jsx)(r.td,{children:"embedding"}),(0,n.jsx)(r.td,{children:"Embeddings"}),(0,n.jsx)(r.td,{children:"The embedding function to use."})]}),(0,n.jsxs)(r.tr,{children:[(0,n.jsx)(r.td,{children:"number_of_results"}),(0,n.jsx)(r.td,{children:"Integer"}),(0,n.jsx)(r.td,{children:"The number of results to return in search."})]})]})]}),(0,n.jsx)(r.p,{children:(0,n.jsx)(r.strong,{children:"Outputs"})}),(0,n.jsxs)(r.table,{children:[(0,n.jsx)(r.thead,{children:(0,n.jsxs)(r.tr,{children:[(0,n.jsx)(r.th,{children:"Name"}),(0,n.jsx)(r.th,{children:"Type"}),(0,n.jsx)(r.th,{children:"Description"})]})}),(0,n.jsxs)(r.tbody,{children:[(0,n.jsxs)(r.tr,{children:[(0,n.jsx)(r.td,{children:"vector_store"}),(0,n.jsx)(r.td,{children:"SupabaseVectorStore"}),(0,n.jsx)(r.td,{children:"A Supabase vector store instance."})]}),(0,n.jsxs)(r.tr,{children:[(0,n.jsx)(r.td,{children:"search_results"}),(0,n.jsx)(r.td,{children:"List[Data]"}),(0,n.jsxs)(r.td,{children:["The results of the similarity search as a list of ",(0,n.jsx)(r.a,{href:"/concepts-objects#data-object",children:"Data"})," objects."]})]})]})]})]}),"\n",(0,n.jsx)(r.h2,{id:"upstash",children:"Upstash"}),"\n",(0,n.jsxs)(r.p,{children:["This component creates an Upstash Vector Store with search capabilities.\nFor more information, see the ",(0,n.jsx)(r.a,{href:"https://upstash.com/docs/introduction",children:"Upstash documentation"}),"."]}),"\n",(0,n.jsxs)(s,{children:[(0,n.jsx)("summary",{children:"Parameters"}),(0,n.jsx)(r.p,{children:(0,n.jsx)(r.strong,{children:"Inputs"})}),(0,n.jsxs)(r.table,{children:[(0,n.jsx)(r.thead,{children:(0,n.jsxs)(r.tr,{children:[(0,n.jsx)(r.th,{children:"Name"}),(0,n.jsx)(r.th,{children:"Type"}),(0,n.jsx)(r.th,{children:"Description"})]})}),(0,n.jsxs)(r.tbody,{children:[(0,n.jsxs)(r.tr,{children:[(0,n.jsx)(r.td,{children:"index_url"}),(0,n.jsx)(r.td,{children:"String"}),(0,n.jsx)(r.td,{children:"The URL of the Upstash index."})]}),(0,n.jsxs)(r.tr,{children:[(0,n.jsx)(r.td,{children:"index_token"}),(0,n.jsx)(r.td,{children:"SecretString"}),(0,n.jsx)(r.td,{children:"The token for the Upstash index."})]}),(0,n.jsxs)(r.tr,{children:[(0,n.jsx)(r.td,{children:"text_key"}),(0,n.jsx)(r.td,{children:"String"}),(0,n.jsx)(r.td,{children:"The key in the record to use as text."})]}),(0,n.jsxs)(r.tr,{children:[(0,n.jsx)(r.td,{children:"namespace"}),(0,n.jsx)(r.td,{children:"String"}),(0,n.jsx)(r.td,{children:"The namespace for the index."})]}),(0,n.jsxs)(r.tr,{children:[(0,n.jsx)(r.td,{children:"search_query"}),(0,n.jsx)(r.td,{children:"String"}),(0,n.jsx)(r.td,{children:"The query for similarity search."})]}),(0,n.jsxs)(r.tr,{children:[(0,n.jsx)(r.td,{children:"metadata_filter"}),(0,n.jsx)(r.td,{children:"String"}),(0,n.jsx)(r.td,{children:"Filter documents by metadata."})]}),(0,n.jsxs)(r.tr,{children:[(0,n.jsx)(r.td,{children:"ingest_data"}),(0,n.jsx)(r.td,{children:"Data"}),(0,n.jsx)(r.td,{children:"The data to be ingested into the vector store."})]}),(0,n.jsxs)(r.tr,{children:[(0,n.jsx)(r.td,{children:"embedding"}),(0,n.jsx)(r.td,{children:"Embeddings"}),(0,n.jsx)(r.td,{children:"The embedding function to use."})]}),(0,n.jsxs)(r.tr,{children:[(0,n.jsx)(r.td,{children:"number_of_results"}),(0,n.jsx)(r.td,{children:"Integer"}),(0,n.jsx)(r.td,{children:"The number of results to return in search."})]})]})]}),(0,n.jsx)(r.p,{children:(0,n.jsx)(r.strong,{children:"Outputs"})}),(0,n.jsxs)(r.table,{children:[(0,n.jsx)(r.thead,{children:(0,n.jsxs)(r.tr,{children:[(0,n.jsx)(r.th,{children:"Name"}),(0,n.jsx)(r.th,{children:"Type"}),(0,n.jsx)(r.th,{children:"Description"})]})}),(0,n.jsxs)(r.tbody,{children:[(0,n.jsxs)(r.tr,{children:[(0,n.jsx)(r.td,{children:"vector_store"}),(0,n.jsx)(r.td,{children:"UpstashVectorStore"}),(0,n.jsx)(r.td,{children:"An Upstash vector store instance."})]}),(0,n.jsxs)(r.tr,{children:[(0,n.jsx)(r.td,{children:"search_results"}),(0,n.jsx)(r.td,{children:"List[Data]"}),(0,n.jsxs)(r.td,{children:["The results of the similarity search as a list of ",(0,n.jsx)(r.a,{href:"/concepts-objects#data-object",children:"Data"})," objects."]})]})]})]})]}),"\n",(0,n.jsx)(r.h2,{id:"vectara",children:"Vectara"}),"\n",(0,n.jsxs)(r.p,{children:["This component creates a Vectara Vector Store with search capabilities.\nFor more information, see the ",(0,n.jsx)(r.a,{href:"https://docs.vectara.com/docs/",children:"Vectara documentation"}),"."]}),"\n",(0,n.jsxs)(s,{children:[(0,n.jsx)("summary",{children:"Parameters"}),(0,n.jsx)(r.p,{children:(0,n.jsx)(r.strong,{children:"Inputs"})}),(0,n.jsxs)(r.table,{children:[(0,n.jsx)(r.thead,{children:(0,n.jsxs)(r.tr,{children:[(0,n.jsx)(r.th,{children:"Name"}),(0,n.jsx)(r.th,{children:"Type"}),(0,n.jsx)(r.th,{children:"Description"})]})}),(0,n.jsxs)(r.tbody,{children:[(0,n.jsxs)(r.tr,{children:[(0,n.jsx)(r.td,{children:"vectara_customer_id"}),(0,n.jsx)(r.td,{children:"String"}),(0,n.jsx)(r.td,{children:"The Vectara customer ID."})]}),(0,n.jsxs)(r.tr,{children:[(0,n.jsx)(r.td,{children:"vectara_corpus_id"}),(0,n.jsx)(r.td,{children:"String"}),(0,n.jsx)(r.td,{children:"The Vectara corpus ID."})]}),(0,n.jsxs)(r.tr,{children:[(0,n.jsx)(r.td,{children:"vectara_api_key"}),(0,n.jsx)(r.td,{children:"SecretString"}),(0,n.jsx)(r.td,{children:"The Vectara API key."})]}),(0,n.jsxs)(r.tr,{children:[(0,n.jsx)(r.td,{children:"embedding"}),(0,n.jsx)(r.td,{children:"Embeddings"}),(0,n.jsx)(r.td,{children:"The embedding function to use (optional)."})]}),(0,n.jsxs)(r.tr,{children:[(0,n.jsx)(r.td,{children:"ingest_data"}),(0,n.jsx)(r.td,{children:"List[Document/Data]"}),(0,n.jsx)(r.td,{children:"The data to be ingested into the vector store."})]}),(0,n.jsxs)(r.tr,{children:[(0,n.jsx)(r.td,{children:"search_query"}),(0,n.jsx)(r.td,{children:"String"}),(0,n.jsx)(r.td,{children:"The query for similarity search."})]}),(0,n.jsxs)(r.tr,{children:[(0,n.jsx)(r.td,{children:"number_of_results"}),(0,n.jsx)(r.td,{children:"Integer"}),(0,n.jsx)(r.td,{children:"The number of results to return in search."})]})]})]}),(0,n.jsx)(r.p,{children:(0,n.jsx)(r.strong,{children:"Outputs"})}),(0,n.jsxs)(r.table,{children:[(0,n.jsx)(r.thead,{children:(0,n.jsxs)(r.tr,{children:[(0,n.jsx)(r.th,{children:"Name"}),(0,n.jsx)(r.th,{children:"Type"}),(0,n.jsx)(r.th,{children:"Description"})]})}),(0,n.jsxs)(r.tbody,{children:[(0,n.jsxs)(r.tr,{children:[(0,n.jsx)(r.td,{children:"vector_store"}),(0,n.jsx)(r.td,{children:"VectaraVectorStore"}),(0,n.jsx)(r.td,{children:"Vectara vector store instance."})]}),(0,n.jsxs)(r.tr,{children:[(0,n.jsx)(r.td,{children:"search_results"}),(0,n.jsx)(r.td,{children:"List[Data]"}),(0,n.jsxs)(r.td,{children:["The results of the similarity search as a list of ",(0,n.jsx)(r.a,{href:"/concepts-objects#data-object",children:"Data"})," objects."]})]})]})]})]}),"\n",(0,n.jsx)(r.h2,{id:"vectara-search",children:"Vectara Search"}),"\n",(0,n.jsxs)(r.p,{children:["This component searches a Vectara Vector Store for documents based on the provided input.\nFor more information, see the ",(0,n.jsx)(r.a,{href:"https://docs.vectara.com/docs/",children:"Vectara documentation"}),"."]}),"\n",(0,n.jsxs)(s,{children:[(0,n.jsx)("summary",{children:"Parameters"}),(0,n.jsx)(r.p,{children:(0,n.jsx)(r.strong,{children:"Inputs"})}),(0,n.jsxs)(r.table,{children:[(0,n.jsx)(r.thead,{children:(0,n.jsxs)(r.tr,{children:[(0,n.jsx)(r.th,{children:"Name"}),(0,n.jsx)(r.th,{children:"Type"}),(0,n.jsx)(r.th,{children:"Description"})]})}),(0,n.jsxs)(r.tbody,{children:[(0,n.jsxs)(r.tr,{children:[(0,n.jsx)(r.td,{children:"search_type"}),(0,n.jsx)(r.td,{children:"String"}),(0,n.jsx)(r.td,{children:'The type of search, such as "Similarity" or "MMR".'})]}),(0,n.jsxs)(r.tr,{children:[(0,n.jsx)(r.td,{children:"input_value"}),(0,n.jsx)(r.td,{children:"String"}),(0,n.jsx)(r.td,{children:"The search query."})]}),(0,n.jsxs)(r.tr,{children:[(0,n.jsx)(r.td,{children:"vectara_customer_id"}),(0,n.jsx)(r.td,{children:"String"}),(0,n.jsx)(r.td,{children:"The Vectara customer ID."})]}),(0,n.jsxs)(r.tr,{children:[(0,n.jsx)(r.td,{children:"vectara_corpus_id"}),(0,n.jsx)(r.td,{children:"String"}),(0,n.jsx)(r.td,{children:"The Vectara corpus ID."})]}),(0,n.jsxs)(r.tr,{children:[(0,n.jsx)(r.td,{children:"vectara_api_key"}),(0,n.jsx)(r.td,{children:"SecretString"}),(0,n.jsx)(r.td,{children:"The Vectara API key."})]}),(0,n.jsxs)(r.tr,{children:[(0,n.jsx)(r.td,{children:"files_url"}),(0,n.jsx)(r.td,{children:"List[String]"}),(0,n.jsx)(r.td,{children:"Optional URLs for file initialization."})]})]})]}),(0,n.jsx)(r.p,{children:(0,n.jsx)(r.strong,{children:"Outputs"})}),(0,n.jsxs)(r.table,{children:[(0,n.jsx)(r.thead,{children:(0,n.jsxs)(r.tr,{children:[(0,n.jsx)(r.th,{children:"Name"}),(0,n.jsx)(r.th,{children:"Type"}),(0,n.jsx)(r.th,{children:"Description"})]})}),(0,n.jsx)(r.tbody,{children:(0,n.jsxs)(r.tr,{children:[(0,n.jsx)(r.td,{children:"search_results"}),(0,n.jsx)(r.td,{children:"List[Data]"}),(0,n.jsxs)(r.td,{children:["The results of the similarity search as a list of ",(0,n.jsx)(r.a,{href:"/concepts-objects#data-object",children:"Data"})," objects."]})]})})]})]}),"\n",(0,n.jsx)(r.h2,{id:"weaviate",children:"Weaviate"}),"\n",(0,n.jsxs)(r.p,{children:["This component facilitates a Weaviate Vector Store setup, optimizing text and document indexing and retrieval.\nFor more information, see the ",(0,n.jsx)(r.a,{href:"https://weaviate.io/developers/weaviate",children:"Weaviate Documentation"}),"."]}),"\n",(0,n.jsxs)(s,{children:[(0,n.jsx)("summary",{children:"Parameters"}),(0,n.jsx)(r.p,{children:(0,n.jsx)(r.strong,{children:"Inputs"})}),(0,n.jsxs)(r.table,{children:[(0,n.jsx)(r.thead,{children:(0,n.jsxs)(r.tr,{children:[(0,n.jsx)(r.th,{children:"Name"}),(0,n.jsx)(r.th,{children:"Type"}),(0,n.jsx)(r.th,{children:"Description"})]})}),(0,n.jsxs)(r.tbody,{children:[(0,n.jsxs)(r.tr,{children:[(0,n.jsx)(r.td,{children:"weaviate_url"}),(0,n.jsx)(r.td,{children:"String"}),(0,n.jsx)(r.td,{children:"The default instance URL."})]}),(0,n.jsxs)(r.tr,{children:[(0,n.jsx)(r.td,{children:"search_by_text"}),(0,n.jsx)(r.td,{children:"Boolean"}),(0,n.jsx)(r.td,{children:"Indicates whether to search by text."})]}),(0,n.jsxs)(r.tr,{children:[(0,n.jsx)(r.td,{children:"api_key"}),(0,n.jsx)(r.td,{children:"SecretString"}),(0,n.jsx)(r.td,{children:"The optional API key for authentication."})]}),(0,n.jsxs)(r.tr,{children:[(0,n.jsx)(r.td,{children:"index_name"}),(0,n.jsx)(r.td,{children:"String"}),(0,n.jsx)(r.td,{children:"The optional index name."})]}),(0,n.jsxs)(r.tr,{children:[(0,n.jsx)(r.td,{children:"text_key"}),(0,n.jsx)(r.td,{children:"String"}),(0,n.jsx)(r.td,{children:"The default text extraction key."})]}),(0,n.jsxs)(r.tr,{children:[(0,n.jsx)(r.td,{children:"input"}),(0,n.jsx)(r.td,{children:"Document"}),(0,n.jsx)(r.td,{children:"The document or record."})]}),(0,n.jsxs)(r.tr,{children:[(0,n.jsx)(r.td,{children:"embedding"}),(0,n.jsx)(r.td,{children:"Embeddings"}),(0,n.jsx)(r.td,{children:"The embedding model used."})]}),(0,n.jsxs)(r.tr,{children:[(0,n.jsx)(r.td,{children:"attributes"}),(0,n.jsx)(r.td,{children:"List[String]"}),(0,n.jsx)(r.td,{children:"Optional additional attributes."})]})]})]}),(0,n.jsx)(r.p,{children:(0,n.jsx)(r.strong,{children:"Outputs"})}),(0,n.jsxs)(r.table,{children:[(0,n.jsx)(r.thead,{children:(0,n.jsxs)(r.tr,{children:[(0,n.jsx)(r.th,{children:"Name"}),(0,n.jsx)(r.th,{children:"Type"}),(0,n.jsx)(r.th,{children:"Description"})]})}),(0,n.jsx)(r.tbody,{children:(0,n.jsxs)(r.tr,{children:[(0,n.jsx)(r.td,{children:"vector_store"}),(0,n.jsx)(r.td,{children:"WeaviateVectorStore"}),(0,n.jsx)(r.td,{children:"The Weaviate vector store instance."})]})})]})]}),"\n",(0,n.jsx)(r.h2,{id:"weaviate-search",children:"Weaviate Search"}),"\n",(0,n.jsxs)(r.p,{children:["This component searches a Weaviate Vector Store for documents similar to the input.\nFor more information, see the ",(0,n.jsx)(r.a,{href:"https://weaviate.io/developers/weaviate",children:"Weaviate Documentation"}),"."]}),"\n",(0,n.jsxs)(s,{children:[(0,n.jsx)("summary",{children:"Parameters"}),(0,n.jsx)(r.p,{children:(0,n.jsx)(r.strong,{children:"Inputs"})}),(0,n.jsxs)(r.table,{children:[(0,n.jsx)(r.thead,{children:(0,n.jsxs)(r.tr,{children:[(0,n.jsx)(r.th,{children:"Name"}),(0,n.jsx)(r.th,{children:"Type"}),(0,n.jsx)(r.th,{children:"Description"})]})}),(0,n.jsxs)(r.tbody,{children:[(0,n.jsxs)(r.tr,{children:[(0,n.jsx)(r.td,{children:"search_type"}),(0,n.jsx)(r.td,{children:"String"}),(0,n.jsx)(r.td,{children:'The type of search, such as "Similarity" or "MMR"'})]}),(0,n.jsxs)(r.tr,{children:[(0,n.jsx)(r.td,{children:"input_value"}),(0,n.jsx)(r.td,{children:"String"}),(0,n.jsx)(r.td,{children:"The search query."})]}),(0,n.jsxs)(r.tr,{children:[(0,n.jsx)(r.td,{children:"weaviate_url"}),(0,n.jsx)(r.td,{children:"String"}),(0,n.jsx)(r.td,{children:"The default instance URL."})]}),(0,n.jsxs)(r.tr,{children:[(0,n.jsx)(r.td,{children:"search_by_text"}),(0,n.jsx)(r.td,{children:"Boolean"}),(0,n.jsx)(r.td,{children:"A boolean value that indicates whether to search by text."})]}),(0,n.jsxs)(r.tr,{children:[(0,n.jsx)(r.td,{children:"api_key"}),(0,n.jsx)(r.td,{children:"SecretString"}),(0,n.jsx)(r.td,{children:"The optional API key for authentication."})]}),(0,n.jsxs)(r.tr,{children:[(0,n.jsx)(r.td,{children:"index_name"}),(0,n.jsx)(r.td,{children:"String"}),(0,n.jsx)(r.td,{children:"The optional index name."})]}),(0,n.jsxs)(r.tr,{children:[(0,n.jsx)(r.td,{children:"text_key"}),(0,n.jsx)(r.td,{children:"String"}),(0,n.jsx)(r.td,{children:"The default text extraction key."})]}),(0,n.jsxs)(r.tr,{children:[(0,n.jsx)(r.td,{children:"embedding"}),(0,n.jsx)(r.td,{children:"Embeddings"}),(0,n.jsx)(r.td,{children:"The embeddings model used."})]}),(0,n.jsxs)(r.tr,{children:[(0,n.jsx)(r.td,{children:"attributes"}),(0,n.jsx)(r.td,{children:"List[String]"}),(0,n.jsx)(r.td,{children:"Optional additional attributes."})]})]})]}),(0,n.jsx)(r.p,{children:(0,n.jsx)(r.strong,{children:"Outputs"})}),(0,n.jsxs)(r.table,{children:[(0,n.jsx)(r.thead,{children:(0,n.jsxs)(r.tr,{children:[(0,n.jsx)(r.th,{children:"Name"}),(0,n.jsx)(r.th,{children:"Type"}),(0,n.jsx)(r.th,{children:"Description"})]})}),(0,n.jsx)(r.tbody,{children:(0,n.jsxs)(r.tr,{children:[(0,n.jsx)(r.td,{children:"search_results"}),(0,n.jsx)(r.td,{children:"List[Data]"}),(0,n.jsxs)(r.td,{children:["The results of the similarity search as a list of ",(0,n.jsx)(r.a,{href:"/concepts-objects#data-object",children:"Data"})," objects."]})]})})]})]})]})}function u(e={}){const{wrapper:r}={...(0,d.R)(),...e.components};return r?(0,n.jsx)(r,{...e,children:(0,n.jsx)(m,{...e})}):m(e)}function p(e,r){throw new Error("Expected "+(r?"component":"object")+" `"+e+"` to be defined: you likely forgot to import, pass, or provide it.")}},59072:(e,r,t)=>{t.d(r,{A:()=>s});const s=t.p+"assets/images/vector-store-agent-retrieval-tool-79066d11008a74c40390f55f7c73bd71.png"},60159:(e,r,t)=>{t.d(r,{A:()=>s});const s=t.p+"assets/images/component-local-db-465d080ccffb1c4db4e137eff9047ff5.png"},67719:(e,r,t)=>{t.d(r,{A:()=>s});const s=t.p+"assets/images/vector-store-retrieval-3201f1ea2f13a5f8a87652c81a5386c6.png"},84443:(e,r,t)=>{t.d(r,{A:()=>d});t(96540);var s=t(64058),n=t(74848);function d(e){let{name:r,...t}=e;const d=s[r];return d?(0,n.jsx)(d,{...t}):null}},88690:(e,r,t)=>{t.d(r,{A:()=>s});const s=t.p+"assets/images/component-chroma-db-4cd884c7b7fd4b4be27cda1aec03790b.png"}}]); \ No newline at end of file diff --git a/assets/js/fdefa9a8.40dce170.js b/assets/js/fdefa9a8.40dce170.js new file mode 100644 index 0000000000..2fdf933fc1 --- /dev/null +++ b/assets/js/fdefa9a8.40dce170.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunklangflow_docs=self.webpackChunklangflow_docs||[]).push([[7453],{8886:(e,t,s)=>{s.d(t,{A:()=>n});const n=s.p+"assets/images/component-url-regex-8cae4a8d6491d360115ad552f0c467d3.png"},33972:(e,t,s)=>{s.d(t,{A:()=>n});const n=s.p+"assets/images/component-api-request-chat-output-6dd0e176265482c2dca9899f0a70047a.png"},39245:(e,t,s)=>{s.r(t),s.d(t,{CH:()=>h,assets:()=>l,chCodeConfig:()=>a,contentTitle:()=>o,default:()=>p,frontMatter:()=>c,metadata:()=>n,toc:()=>x});const n=JSON.parse('{"id":"Components/components-data","title":"Data","description":"Data components load data from a source into your flow.","source":"@site/docs/Components/components-data.md","sourceDirName":"Components","slug":"/components-data","permalink":"/components-data","draft":false,"unlisted":false,"tags":[],"version":"current","frontMatter":{"title":"Data","slug":"/components-data"},"sidebar":"docs","previous":{"title":"Create custom Python components","permalink":"/components-custom-components"},"next":{"title":"Embeddings","permalink":"/components-embedding-models"}}');var r=s(74848),d=s(28453),i=s(24754);s(84443);const c={title:"Data",slug:"/components-data"},o="Data components in Langflow",l={},h={annotations:i.hk,Code:i.Cy},a={staticMediaQuery:"not screen, (max-width: 768px)",lineNumbers:!0,showCopyButton:!0,themeName:"github-dark"},x=[{value:"Use a data component in a flow",id:"use-a-data-component-in-a-flow",level:2},{value:"API Request",id:"api-request",level:2},{value:"Directory",id:"directory",level:2},{value:"File",id:"file",level:2},{value:"Supported File Types",id:"supported-file-types",level:3},{value:"SQL Query",id:"sql-query",level:2},{value:"URL",id:"url",level:2},{value:"Webhook",id:"webhook",level:2},{value:"Legacy components",id:"legacy-components",level:2},{value:"Gmail Loader",id:"gmail-loader",level:3},{value:"Google Drive Loader",id:"google-drive-loader",level:3},{value:"Google Drive Search",id:"google-drive-search",level:3}];function j(e){const t={a:"a",code:"code",h1:"h1",h2:"h2",h3:"h3",header:"header",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,d.R)(),...e.components},{Details:n}=t;return h||u("CH",!1),h.Code||u("CH.Code",!0),n||u("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.header,{children:(0,r.jsx)(t.h1,{id:"data-components-in-langflow",children:"Data components in Langflow"})}),"\n",(0,r.jsx)(t.p,{children:"Data components load data from a source into your flow."}),"\n",(0,r.jsx)(t.p,{children:"They may perform some processing or type checking, like converting raw HTML data into text, or ensuring your loaded file is of an acceptable type."}),"\n",(0,r.jsx)(t.h2,{id:"use-a-data-component-in-a-flow",children:"Use a data component in a flow"}),"\n",(0,r.jsxs)(t.p,{children:["The ",(0,r.jsx)(t.strong,{children:"URL"})," data component loads content from a list of URLs."]}),"\n",(0,r.jsxs)(t.p,{children:["In the component's ",(0,r.jsx)(t.strong,{children:"URLs"})," field, enter a comma-separated list of URLs you want to load. Alternatively, connect a component that outputs the ",(0,r.jsx)(t.code,{children:"Message"})," type, like the ",(0,r.jsx)(t.strong,{children:"Chat Input"})," component, to supply your URLs with a component."]}),"\n",(0,r.jsxs)(t.p,{children:["To output a ",(0,r.jsx)(t.code,{children:"Data"})," type, in the ",(0,r.jsx)(t.strong,{children:"Output Format"})," dropdown, select ",(0,r.jsx)(t.strong,{children:"Raw HTML"}),".\nTo output a ",(0,r.jsx)(t.code,{children:"Message"})," type, in the ",(0,r.jsx)(t.strong,{children:"Output Format"})," dropdown, select ",(0,r.jsx)(t.strong,{children:"Text"}),". This option applies postprocessing with the ",(0,r.jsx)(t.code,{children:"data_to_text"})," helper function."]}),"\n",(0,r.jsx)(t.p,{children:"In this example of a document ingestion pipeline, the URL component outputs raw HTML to a text splitter, which splits the raw content into chunks for a vector database to ingest."}),"\n",(0,r.jsx)(t.p,{children:(0,r.jsx)(t.img,{alt:"URL component in a data ingestion pipeline",src:s(80352).A+"",width:"2306",height:"1632"})}),"\n",(0,r.jsx)(t.h2,{id:"api-request",children:"API Request"}),"\n",(0,r.jsx)(t.p,{children:"This component makes HTTP requests using URLs or cURL commands."}),"\n",(0,r.jsxs)(t.ol,{children:["\n",(0,r.jsxs)(t.li,{children:["To use this component in a flow, connect the ",(0,r.jsx)(t.strong,{children:"Data"})," output to a component that accepts the input.\nFor example, connect the ",(0,r.jsx)(t.strong,{children:"API Request"})," component to a ",(0,r.jsx)(t.strong,{children:"Chat Output"})," component."]}),"\n"]}),"\n",(0,r.jsx)(t.p,{children:(0,r.jsx)(t.img,{alt:"API request into a chat output component",src:s(33972).A+"",width:"1742",height:"1248"})}),"\n",(0,r.jsxs)(t.ol,{start:"2",children:["\n",(0,r.jsxs)(t.li,{children:["\n",(0,r.jsxs)(t.p,{children:["In the API component's ",(0,r.jsx)(t.strong,{children:"URLs"})," field, enter the endpoint for your request.\nThis example uses ",(0,r.jsx)(t.code,{children:"https://dummy-json.mock.beeceptor.com/posts"}),", which is a list of technology blog posts."]}),"\n"]}),"\n",(0,r.jsxs)(t.li,{children:["\n",(0,r.jsxs)(t.p,{children:["In the ",(0,r.jsx)(t.strong,{children:"Method"})," field, enter the type of request.\nThis example uses GET to retrieve a list of blog posts.\nThe component also supports POST, PATCH, PUT, and DELETE."]}),"\n"]}),"\n",(0,r.jsxs)(t.li,{children:["\n",(0,r.jsxs)(t.p,{children:["Optionally, enable the ",(0,r.jsx)(t.strong,{children:"Use cURL"})," button to create a field for pasting curl requests.\nThe equivalent call in this example is ",(0,r.jsx)(t.code,{children:"curl -v https://dummy-json.mock.beeceptor.com/posts"}),"."]}),"\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 click ",(0,r.jsx)(t.strong,{children:"Run Flow"}),".\nYour request returns a list of blog posts in the ",(0,r.jsx)(t.code,{children:"result"})," field."]}),"\n"]}),"\n"]}),"\n",(0,r.jsxs)(n,{children:[(0,r.jsx)("summary",{children:"Parameters"}),(0,r.jsx)(t.p,{children:(0,r.jsx)(t.strong,{children:"Inputs"})}),(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:"urls"}),(0,r.jsx)(t.td,{children:"URLs"}),(0,r.jsx)(t.td,{children:"Enter one or more URLs, separated by commas."})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"curl"}),(0,r.jsx)(t.td,{children:"cURL"}),(0,r.jsx)(t.td,{children:"Paste a curl command to populate the dictionary fields for headers and body."})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"method"}),(0,r.jsx)(t.td,{children:"Method"}),(0,r.jsx)(t.td,{children:"The HTTP method to use."})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"use_curl"}),(0,r.jsx)(t.td,{children:"Use cURL"}),(0,r.jsx)(t.td,{children:"Enable cURL mode to populate fields from a cURL command."})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"query_params"}),(0,r.jsx)(t.td,{children:"Query Parameters"}),(0,r.jsx)(t.td,{children:"The query parameters to append to the URL."})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"body"}),(0,r.jsx)(t.td,{children:"Body"}),(0,r.jsxs)(t.td,{children:["The body to send with the request as a dictionary (for ",(0,r.jsx)(t.code,{children:"POST"}),", ",(0,r.jsx)(t.code,{children:"PATCH"}),", ",(0,r.jsx)(t.code,{children:"PUT"}),")."]})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"headers"}),(0,r.jsx)(t.td,{children:"Headers"}),(0,r.jsx)(t.td,{children:"The headers to send with the request as a dictionary."})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"timeout"}),(0,r.jsx)(t.td,{children:"Timeout"}),(0,r.jsx)(t.td,{children:"The timeout to use for the request."})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"follow_redirects"}),(0,r.jsx)(t.td,{children:"Follow Redirects"}),(0,r.jsx)(t.td,{children:"Whether to follow http redirects."})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"save_to_file"}),(0,r.jsx)(t.td,{children:"Save to File"}),(0,r.jsx)(t.td,{children:"Save the API response to a temporary file."})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"include_httpx_metadata"}),(0,r.jsx)(t.td,{children:"Include HTTPx Metadata"}),(0,r.jsxs)(t.td,{children:["Include properties such as ",(0,r.jsx)(t.code,{children:"headers"}),", ",(0,r.jsx)(t.code,{children:"status_code"}),", ",(0,r.jsx)(t.code,{children:"response_headers"}),", and ",(0,r.jsx)(t.code,{children:"redirection_history"})," in the output."]})]})]})]}),(0,r.jsx)(t.p,{children:(0,r.jsx)(t.strong,{children:"Outputs"})}),(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:"The result of the API requests. Returns a Data object containing source URL and results."})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"dataframe"}),(0,r.jsx)(t.td,{children:"DataFrame"}),(0,r.jsx)(t.td,{children:"Converts the API response data into a tabular DataFrame format."})]})]})]})]}),"\n",(0,r.jsx)(t.h2,{id:"directory",children:"Directory"}),"\n",(0,r.jsx)(t.p,{children:"This component recursively loads files from a directory, with options for file types, depth, and concurrency."}),"\n",(0,r.jsxs)(n,{children:[(0,r.jsx)("summary",{children:"Parameters"}),(0,r.jsx)(t.p,{children:(0,r.jsx)(t.strong,{children:"Inputs"})}),(0,r.jsxs)(t.table,{children:[(0,r.jsx)(t.thead,{children:(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.th,{children:"Input"}),(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:"path"}),(0,r.jsx)(t.td,{children:"MessageTextInput"}),(0,r.jsx)(t.td,{children:"The path to the directory to load files from."})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"types"}),(0,r.jsx)(t.td,{children:"MessageTextInput"}),(0,r.jsx)(t.td,{children:"The file types to load (leave empty to load all types)."})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"depth"}),(0,r.jsx)(t.td,{children:"IntInput"}),(0,r.jsx)(t.td,{children:"The depth to search for files."})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"max_concurrency"}),(0,r.jsx)(t.td,{children:"IntInput"}),(0,r.jsx)(t.td,{children:"The maximum concurrency for loading files."})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"load_hidden"}),(0,r.jsx)(t.td,{children:"BoolInput"}),(0,r.jsx)(t.td,{children:"If true, hidden files are loaded."})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"recursive"}),(0,r.jsx)(t.td,{children:"BoolInput"}),(0,r.jsx)(t.td,{children:"If true, the search is recursive."})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"silent_errors"}),(0,r.jsx)(t.td,{children:"BoolInput"}),(0,r.jsx)(t.td,{children:"If true, errors do not raise an exception."})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"use_multithreading"}),(0,r.jsx)(t.td,{children:"BoolInput"}),(0,r.jsx)(t.td,{children:"If true, multithreading is used."})]})]})]}),(0,r.jsx)(t.p,{children:(0,r.jsx)(t.strong,{children:"Outputs"})}),(0,r.jsxs)(t.table,{children:[(0,r.jsx)(t.thead,{children:(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.th,{children:"Output"}),(0,r.jsx)(t.th,{children:"Type"}),(0,r.jsx)(t.th,{children:"Description"})]})}),(0,r.jsx)(t.tbody,{children:(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"data"}),(0,r.jsx)(t.td,{children:"List[Data]"}),(0,r.jsx)(t.td,{children:"The loaded file data from the directory."})]})})]})]}),"\n",(0,r.jsx)(t.h2,{id:"file",children:"File"}),"\n",(0,r.jsxs)(t.p,{children:["This component loads and parses files of various supported formats and converts the content into a ",(0,r.jsx)(t.a,{href:"/concepts-objects",children:"Data"})," object. It supports multiple file types and provides options for parallel processing and error handling."]}),"\n",(0,r.jsx)(t.p,{children:"To load a document, follow these steps:"}),"\n",(0,r.jsxs)(t.ol,{children:["\n",(0,r.jsxs)(t.li,{children:["Click the ",(0,r.jsx)(t.strong,{children:"Select files"})," button."]}),"\n",(0,r.jsxs)(t.li,{children:["Select a local file or a file loaded with ",(0,r.jsx)(t.a,{href:"/concepts-file-management",children:"File management"}),", and then click ",(0,r.jsx)(t.strong,{children:"Select file"}),"."]}),"\n"]}),"\n",(0,r.jsx)(t.p,{children:"The loaded file name appears in the component."}),"\n",(0,r.jsxs)(t.p,{children:["The default maximum supported file size is 100 MB.\nTo modify this value, see ",(0,r.jsx)(t.a,{href:"/environment-variables#LANGFLOW_MAX_FILE_SIZE_UPLOAD",children:"--max-file-size-upload"}),"."]}),"\n",(0,r.jsxs)(n,{children:[(0,r.jsx)("summary",{children:"Parameters"}),(0,r.jsx)(t.p,{children:(0,r.jsx)(t.strong,{children:"Inputs"})}),(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:"path"}),(0,r.jsx)(t.td,{children:"Files"}),(0,r.jsx)(t.td,{children:"The path to files to load. Supports individual files or bundled archives."})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"file_path"}),(0,r.jsx)(t.td,{children:"Server File Path"}),(0,r.jsxs)(t.td,{children:["A Data object with a ",(0,r.jsx)(t.code,{children:"file_path"})," property pointing to the server file or a Message object with a path to the file. Supersedes 'Path' but supports the same file types."]})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"separator"}),(0,r.jsx)(t.td,{children:"Separator"}),(0,r.jsx)(t.td,{children:"The separator to use between multiple outputs in Message format."})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"silent_errors"}),(0,r.jsx)(t.td,{children:"Silent Errors"}),(0,r.jsx)(t.td,{children:"If true, errors do not raise an exception."})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"delete_server_file_after_processing"}),(0,r.jsx)(t.td,{children:"Delete Server File After Processing"}),(0,r.jsx)(t.td,{children:"If true, the Server File Path is deleted after processing."})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"ignore_unsupported_extensions"}),(0,r.jsx)(t.td,{children:"Ignore Unsupported Extensions"}),(0,r.jsx)(t.td,{children:"If true, files with unsupported extensions are not processed."})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"ignore_unspecified_files"}),(0,r.jsx)(t.td,{children:"Ignore Unspecified Files"}),(0,r.jsxs)(t.td,{children:["If true, ",(0,r.jsx)(t.code,{children:"Data"})," with no ",(0,r.jsx)(t.code,{children:"file_path"})," property is ignored."]})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"use_multithreading"}),(0,r.jsx)(t.td,{children:"[Deprecated] Use Multithreading"}),(0,r.jsxs)(t.td,{children:["Set 'Processing Concurrency' greater than ",(0,r.jsx)(t.code,{children:"1"})," to enable multithreading. This option is deprecated."]})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"concurrency_multithreading"}),(0,r.jsx)(t.td,{children:"Processing Concurrency"}),(0,r.jsx)(t.td,{children:"When multiple files are being processed, the number of files to process concurrently. Default is 1. Values greater than 1 enable parallel processing for 2 or more files."})]})]})]}),(0,r.jsx)(t.p,{children:(0,r.jsx)(t.strong,{children:"Outputs"})}),(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:["The parsed content of the file as a ",(0,r.jsx)(t.a,{href:"/concepts-objects",children:"Data"})," object."]})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"dataframe"}),(0,r.jsx)(t.td,{children:"DataFrame"}),(0,r.jsxs)(t.td,{children:["The file content as a ",(0,r.jsx)(t.a,{href:"/concepts-objects#dataframe-object",children:"DataFrame"})," object."]})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"message"}),(0,r.jsx)(t.td,{children:"Message"}),(0,r.jsxs)(t.td,{children:["The file content as a ",(0,r.jsx)(t.a,{href:"/concepts-objects#message-object",children:"Message"})," object."]})]})]})]})]}),"\n",(0,r.jsx)(t.h3,{id:"supported-file-types",children:"Supported File Types"}),"\n",(0,r.jsx)(t.p,{children:"Text files:"}),"\n",(0,r.jsxs)(t.ul,{children:["\n",(0,r.jsxs)(t.li,{children:[(0,r.jsx)(t.code,{children:".txt"})," - Text files"]}),"\n",(0,r.jsxs)(t.li,{children:[(0,r.jsx)(t.code,{children:".md"}),", ",(0,r.jsx)(t.code,{children:".mdx"})," - Markdown files"]}),"\n",(0,r.jsxs)(t.li,{children:[(0,r.jsx)(t.code,{children:".csv"})," - CSV files"]}),"\n",(0,r.jsxs)(t.li,{children:[(0,r.jsx)(t.code,{children:".json"})," - JSON files"]}),"\n",(0,r.jsxs)(t.li,{children:[(0,r.jsx)(t.code,{children:".yaml"}),", ",(0,r.jsx)(t.code,{children:".yml"})," - YAML files"]}),"\n",(0,r.jsxs)(t.li,{children:[(0,r.jsx)(t.code,{children:".xml"})," - XML files"]}),"\n",(0,r.jsxs)(t.li,{children:[(0,r.jsx)(t.code,{children:".html"}),", ",(0,r.jsx)(t.code,{children:".htm"})," - HTML files"]}),"\n",(0,r.jsxs)(t.li,{children:[(0,r.jsx)(t.code,{children:".pdf"})," - PDF files"]}),"\n",(0,r.jsxs)(t.li,{children:[(0,r.jsx)(t.code,{children:".docx"})," - Word documents"]}),"\n",(0,r.jsxs)(t.li,{children:[(0,r.jsx)(t.code,{children:".py"})," - Python files"]}),"\n",(0,r.jsxs)(t.li,{children:[(0,r.jsx)(t.code,{children:".sh"})," - Shell scripts"]}),"\n",(0,r.jsxs)(t.li,{children:[(0,r.jsx)(t.code,{children:".sql"})," - SQL files"]}),"\n",(0,r.jsxs)(t.li,{children:[(0,r.jsx)(t.code,{children:".js"})," - JavaScript files"]}),"\n",(0,r.jsxs)(t.li,{children:[(0,r.jsx)(t.code,{children:".ts"}),", ",(0,r.jsx)(t.code,{children:".tsx"})," - TypeScript files"]}),"\n"]}),"\n",(0,r.jsx)(t.p,{children:"Archive formats (for bundling multiple files):"}),"\n",(0,r.jsxs)(t.ul,{children:["\n",(0,r.jsxs)(t.li,{children:[(0,r.jsx)(t.code,{children:".zip"})," - ZIP archives"]}),"\n",(0,r.jsxs)(t.li,{children:[(0,r.jsx)(t.code,{children:".tar"})," - TAR archives"]}),"\n",(0,r.jsxs)(t.li,{children:[(0,r.jsx)(t.code,{children:".tgz"})," - Gzipped TAR archives"]}),"\n",(0,r.jsxs)(t.li,{children:[(0,r.jsx)(t.code,{children:".bz2"})," - Bzip2 compressed files"]}),"\n",(0,r.jsxs)(t.li,{children:[(0,r.jsx)(t.code,{children:".gz"})," - Gzip compressed files"]}),"\n"]}),"\n",(0,r.jsx)(t.h2,{id:"sql-query",children:"SQL Query"}),"\n",(0,r.jsx)(t.p,{children:"This component executes SQL queries on a specified database."}),"\n",(0,r.jsxs)(n,{children:[(0,r.jsx)("summary",{children:"Parameters"}),(0,r.jsx)(t.p,{children:(0,r.jsx)(t.strong,{children:"Inputs"})}),(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:"query"}),(0,r.jsx)(t.td,{children:"Query"}),(0,r.jsx)(t.td,{children:"The SQL query to execute."})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"database_url"}),(0,r.jsx)(t.td,{children:"Database URL"}),(0,r.jsx)(t.td,{children:"The URL of the database."})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"include_columns"}),(0,r.jsx)(t.td,{children:"Include Columns"}),(0,r.jsx)(t.td,{children:"Include columns in the result."})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"passthrough"}),(0,r.jsx)(t.td,{children:"Passthrough"}),(0,r.jsx)(t.td,{children:"If an error occurs, return the query instead of raising an exception."})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"add_error"}),(0,r.jsx)(t.td,{children:"Add Error"}),(0,r.jsx)(t.td,{children:"Add the error to the result."})]})]})]}),(0,r.jsx)(t.p,{children:(0,r.jsx)(t.strong,{children:"Outputs"})}),(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.jsx)(t.tbody,{children:(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"result"}),(0,r.jsx)(t.td,{children:"Result"}),(0,r.jsx)(t.td,{children:"The result of the SQL query execution."})]})})]})]}),"\n",(0,r.jsx)(t.h2,{id:"url",children:"URL"}),"\n",(0,r.jsx)(t.p,{children:"This component fetches content from one or more URLs, processes the content, and returns it in various formats. It supports output in plain text, raw HTML, or JSON, with options for cleaning and separating multiple outputs."}),"\n",(0,r.jsxs)(t.ol,{children:["\n",(0,r.jsxs)(t.li,{children:["To use this component in a flow, connect the ",(0,r.jsx)(t.strong,{children:"DataFrame"})," output to a component that accepts the input.\nFor example, connect the ",(0,r.jsx)(t.strong,{children:"URL"})," component to a ",(0,r.jsx)(t.strong,{children:"Chat Output"})," component."]}),"\n"]}),"\n",(0,r.jsx)(t.p,{children:(0,r.jsx)(t.img,{alt:"URL request into a chat output component",src:s(55228).A+"",width:"1578",height:"1086"})}),"\n",(0,r.jsxs)(t.ol,{start:"2",children:["\n",(0,r.jsxs)(t.li,{children:["\n",(0,r.jsxs)(t.p,{children:["In the URL component's ",(0,r.jsx)(t.strong,{children:"URLs"})," field, enter the URL for your request.\nThis example uses ",(0,r.jsx)(t.code,{children:"langflow.org"}),"."]}),"\n"]}),"\n",(0,r.jsxs)(t.li,{children:["\n",(0,r.jsxs)(t.p,{children:["Optionally, in the ",(0,r.jsx)(t.strong,{children:"Max Depth"})," field, enter how many pages away from the initial URL you want to crawl.\nSelect ",(0,r.jsx)(t.code,{children:"1"})," to crawl only the page specified in the ",(0,r.jsx)(t.strong,{children:"URLs"})," field.\nSelect ",(0,r.jsx)(t.code,{children:"2"})," to crawl all pages linked from that page.\nThe component crawls by link traversal, not by URL path depth."]}),"\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 click ",(0,r.jsx)(t.strong,{children:"Run Flow"}),".\nThe text contents of the URL are returned to the Playground as a structured DataFrame."]}),"\n"]}),"\n",(0,r.jsxs)(t.li,{children:["\n",(0,r.jsxs)(t.p,{children:["In the ",(0,r.jsx)(t.strong,{children:"URL"})," component, change the output port to ",(0,r.jsx)(t.strong,{children:"Message"}),", and then run the flow again.\nThe text contents of the URL are returned as unstructured raw text, which you can extract patterns from with the ",(0,r.jsx)(t.strong,{children:"Regex Extractor"})," tool."]}),"\n"]}),"\n",(0,r.jsxs)(t.li,{children:["\n",(0,r.jsxs)(t.p,{children:["Connect the ",(0,r.jsx)(t.strong,{children:"URL"})," component to a ",(0,r.jsx)(t.strong,{children:"Regex Extractor"})," and ",(0,r.jsx)(t.strong,{children:"Chat Output"}),"."]}),"\n"]}),"\n"]}),"\n",(0,r.jsx)(t.p,{children:(0,r.jsx)(t.img,{alt:"Regex extractor connected to url component",src:s(8886).A+"",width:"1606",height:"848"})}),"\n",(0,r.jsxs)(t.ol,{start:"7",children:["\n",(0,r.jsxs)(t.li,{children:["In the ",(0,r.jsx)(t.strong,{children:"Regex Extractor"})," tool, enter a pattern to extract text from the ",(0,r.jsx)(t.strong,{children:"URL"}),' component\'s raw output.\nThis example extracts the first paragraph from the "In the News" section of ',(0,r.jsx)(t.code,{children:"https://en.wikipedia.org/wiki/Main_Page"}),"."]}),"\n"]}),"\n",(0,r.jsx)(h.Code,{codeConfig:a,northPanel:{tabs:[""],active:"",heightRatio:1},files:[{name:"",focus:"",code:{lines:[{tokens:[{content:"In the news\\s*\\n(.*?)(?=\\n\\n)",props:{}}]}],lang:"text"},annotations:[]}]}),"\n",(0,r.jsx)(t.p,{children:"Result:"}),"\n",(0,r.jsx)(h.Code,{codeConfig:a,northPanel:{tabs:[""],active:"",heightRatio:1},files:[{name:"",focus:"",code:{lines:[{tokens:[{content:"Peruvian writer and Nobel Prize in Literature laureate Mario Vargas Llosa (pictured) dies at the age of 89.",props:{}}]}],lang:"text"},annotations:[]}]}),"\n",(0,r.jsxs)(n,{children:[(0,r.jsx)("summary",{children:"Parameters"}),(0,r.jsx)(t.p,{children:(0,r.jsx)(t.strong,{children:"Inputs"})}),(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:"urls"}),(0,r.jsx)(t.td,{children:"URLs"}),(0,r.jsx)(t.td,{children:"Enter one or more URLs. URLs are automatically validated and cleaned."})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"format"}),(0,r.jsx)(t.td,{children:"Output Format"}),(0,r.jsxs)(t.td,{children:["The output format. Use ",(0,r.jsx)(t.strong,{children:"Text"})," to extract text from the HTML, ",(0,r.jsx)(t.strong,{children:"Raw HTML"})," for the raw HTML content, or ",(0,r.jsx)(t.strong,{children:"JSON"})," to extract JSON from the HTML."]})]}),(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:["The separator to use between multiple outputs. Default for ",(0,r.jsx)(t.strong,{children:"Text"})," is ",(0,r.jsx)(t.code,{children:"\\n\\n"}),". Default for ",(0,r.jsx)(t.strong,{children:"Raw HTML"})," is ",(0,r.jsx)(t.code,{children:"\\n\x3c!-- Separator --\x3e\\n"}),"."]})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"clean_extra_whitespace"}),(0,r.jsx)(t.td,{children:"Clean Extra Whitespace"}),(0,r.jsxs)(t.td,{children:["Whether to clean excessive blank lines in the text output. Only applies to ",(0,r.jsx)(t.code,{children:"Text"})," format."]})]})]})]}),(0,r.jsx)(t.p,{children:(0,r.jsx)(t.strong,{children:"Outputs"})}),(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:["A list of ",(0,r.jsx)(t.a,{href:"/concepts-objects",children:"Data"})," objects containing fetched content and metadata."]})]}),(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:"The fetched content as formatted text, with applied separators and cleaning."})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"dataframe"}),(0,r.jsx)(t.td,{children:"DataFrame"}),(0,r.jsxs)(t.td,{children:["The content formatted as a ",(0,r.jsx)(t.a,{href:"/concepts-objects#dataframe-object",children:"DataFrame"})," object."]})]})]})]})]}),"\n",(0,r.jsx)(t.h2,{id:"webhook",children:"Webhook"}),"\n",(0,r.jsx)(t.p,{children:"This component defines a webhook trigger that runs a flow when it receives an HTTP POST request."}),"\n",(0,r.jsxs)(t.p,{children:["If the input is not valid JSON, the component wraps it in a ",(0,r.jsx)(t.code,{children:"payload"})," object so that it can be processed and still trigger the flow. The component does not require an API key."]}),"\n",(0,r.jsxs)(t.p,{children:["When a ",(0,r.jsx)(t.strong,{children:"Webhook"})," component is added to the workspace, a new ",(0,r.jsx)(t.strong,{children:"Webhook cURL"})," tab becomes available in the ",(0,r.jsx)(t.strong,{children:"API"})," pane that contains an HTTP POST request for triggering the webhook component. For example:"]}),"\n",(0,r.jsx)(h.Code,{codeConfig:a,northPanel:{tabs:[""],active:"",heightRatio:1},files:[{name:"",focus:"",code:{lines:[{tokens:[{content:"curl ",props:{style:{color:"#FFA657"}}},{content:"-X ",props:{style:{color:"#79C0FF"}}},{content:"POST ",props:{style:{color:"#A5D6FF"}}},{content:"\\",props:{style:{color:"#79C0FF"}}}]},{tokens:[{content:' "http://127.0.0.1:7860/api/v1/webhook/**YOUR_FLOW_ID**" ',props:{style:{color:"#A5D6FF"}}},{content:"\\",props:{style:{color:"#79C0FF"}}}]},{tokens:[{content:" -H ",props:{style:{color:"#79C0FF"}}},{content:"'Content-Type: application/json'",props:{style:{color:"#A5D6FF"}}},{content:"\\",props:{style:{color:"#79C0FF"}}}]},{tokens:[{content:" -d ",props:{style:{color:"#79C0FF"}}},{content:'\'{"any": "data"}\'',props:{style:{color:"#A5D6FF"}}}]}],lang:"bash"},annotations:[]}]}),"\n",(0,r.jsx)(t.p,{children:"To test the webhook component:"}),"\n",(0,r.jsxs)(t.ol,{children:["\n",(0,r.jsxs)(t.li,{children:["Add a ",(0,r.jsx)(t.strong,{children:"Webhook"})," component to the flow."]}),"\n",(0,r.jsxs)(t.li,{children:["Connect the ",(0,r.jsx)(t.strong,{children:"Webhook"})," component's ",(0,r.jsx)(t.strong,{children:"Data"})," output to the ",(0,r.jsx)(t.strong,{children:"Data"})," input of a ",(0,r.jsx)(t.a,{href:"/components-processing#parser",children:"Parser"})," component."]}),"\n",(0,r.jsxs)(t.li,{children:["Connect the ",(0,r.jsx)(t.strong,{children:"Parser"})," component's ",(0,r.jsx)(t.strong,{children:"Parsed Text"})," output to the ",(0,r.jsx)(t.strong,{children:"Text"})," input of a ",(0,r.jsx)(t.a,{href:"/components-io#chat-output",children:"Chat Output"})," component."]}),"\n",(0,r.jsxs)(t.li,{children:["In the ",(0,r.jsx)(t.strong,{children:"Parser"})," component, under ",(0,r.jsx)(t.strong,{children:"Mode"}),", select ",(0,r.jsx)(t.strong,{children:"Stringify"}),".\nThis mode passes the webhook's data as a string for the ",(0,r.jsx)(t.strong,{children:"Chat Output"})," component to print."]}),"\n",(0,r.jsxs)(t.li,{children:["To send a POST request, copy the code from the ",(0,r.jsx)(t.strong,{children:"Webhook cURL"})," tab in the ",(0,r.jsx)(t.strong,{children:"API"})," pane and paste it into a terminal."]}),"\n",(0,r.jsx)(t.li,{children:"Send the POST request."}),"\n",(0,r.jsxs)(t.li,{children:["Open the ",(0,r.jsx)(t.strong,{children:"Playground"}),".\nYour JSON data is posted to the ",(0,r.jsx)(t.strong,{children:"Chat Output"})," component, which indicates that the webhook component is correctly triggering the flow."]}),"\n"]}),"\n",(0,r.jsxs)(n,{children:[(0,r.jsx)("summary",{children:"Parameters"}),(0,r.jsx)(t.p,{children:(0,r.jsx)(t.strong,{children:"Inputs"})}),(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:"Description"})]})}),(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:"Payload"}),(0,r.jsx)(t.td,{children:"Receives a payload from external systems through HTTP POST requests."})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"curl"}),(0,r.jsx)(t.td,{children:"cURL"}),(0,r.jsx)(t.td,{children:"The cURL command template for making requests to this webhook."})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"endpoint"}),(0,r.jsx)(t.td,{children:"Endpoint"}),(0,r.jsx)(t.td,{children:"The endpoint URL where this webhook receives requests."})]})]})]}),(0,r.jsx)(t.p,{children:(0,r.jsx)(t.strong,{children:"Outputs"})}),(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:"Description"})]})}),(0,r.jsx)(t.tbody,{children:(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"output_data"}),(0,r.jsx)(t.td,{children:"Data"}),(0,r.jsxs)(t.td,{children:["Outputs processed data from the webhook input, and returns an empty ",(0,r.jsx)(t.a,{href:"/concepts-objects",children:"Data"})," object if no input is provided. If the input is not valid JSON, the component wraps it in a ",(0,r.jsx)(t.code,{children:"payload"})," object."]})]})})]})]}),"\n",(0,r.jsx)(t.h2,{id:"legacy-components",children:"Legacy components"}),"\n",(0,r.jsx)(t.p,{children:"Legacy components are available for use but are no longer supported."}),"\n",(0,r.jsx)(t.h3,{id:"gmail-loader",children:"Gmail Loader"}),"\n",(0,r.jsx)(t.p,{children:"This component loads emails from Gmail using provided credentials and filters."}),"\n",(0,r.jsxs)(t.p,{children:["For more information about creating a service account JSON, see ",(0,r.jsx)(t.a,{href:"https://developers.google.com/identity/protocols/oauth2/service-account",children:"Service Account JSON"}),"."]}),"\n",(0,r.jsxs)(n,{children:[(0,r.jsx)("summary",{children:"Parameters"}),(0,r.jsx)(t.p,{children:(0,r.jsx)(t.strong,{children:"Inputs"})}),(0,r.jsxs)(t.table,{children:[(0,r.jsx)(t.thead,{children:(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.th,{children:"Input"}),(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:"json_string"}),(0,r.jsx)(t.td,{children:"SecretStrInput"}),(0,r.jsx)(t.td,{children:"A JSON string containing OAuth 2.0 access token information for service account access."})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"label_ids"}),(0,r.jsx)(t.td,{children:"MessageTextInput"}),(0,r.jsx)(t.td,{children:"A comma-separated list of label IDs to filter emails."})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"max_results"}),(0,r.jsx)(t.td,{children:"MessageTextInput"}),(0,r.jsx)(t.td,{children:"The maximum number of emails to load."})]})]})]}),(0,r.jsx)(t.p,{children:(0,r.jsx)(t.strong,{children:"Outputs"})}),(0,r.jsxs)(t.table,{children:[(0,r.jsx)(t.thead,{children:(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.th,{children:"Output"}),(0,r.jsx)(t.th,{children:"Type"}),(0,r.jsx)(t.th,{children:"Description"})]})}),(0,r.jsx)(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:"The loaded email data."})]})})]})]}),"\n",(0,r.jsx)(t.h3,{id:"google-drive-loader",children:"Google Drive Loader"}),"\n",(0,r.jsx)(t.p,{children:"This component loads documents from Google Drive using provided credentials and a single document ID."}),"\n",(0,r.jsxs)(t.p,{children:["For more information about creating a service account JSON, see ",(0,r.jsx)(t.a,{href:"https://developers.google.com/identity/protocols/oauth2/service-account",children:"Service Account JSON"}),"."]}),"\n",(0,r.jsxs)(n,{children:[(0,r.jsx)("summary",{children:"Parameters"}),(0,r.jsx)(t.p,{children:(0,r.jsx)(t.strong,{children:"Inputs"})}),(0,r.jsxs)(t.table,{children:[(0,r.jsx)(t.thead,{children:(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.th,{children:"Input"}),(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:"json_string"}),(0,r.jsx)(t.td,{children:"SecretStrInput"}),(0,r.jsx)(t.td,{children:"A JSON string containing OAuth 2.0 access token information for service account access."})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"document_id"}),(0,r.jsx)(t.td,{children:"MessageTextInput"}),(0,r.jsx)(t.td,{children:"A single Google Drive document ID."})]})]})]}),(0,r.jsx)(t.p,{children:(0,r.jsx)(t.strong,{children:"Outputs"})}),(0,r.jsxs)(t.table,{children:[(0,r.jsx)(t.thead,{children:(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.th,{children:"Output"}),(0,r.jsx)(t.th,{children:"Type"}),(0,r.jsx)(t.th,{children:"Description"})]})}),(0,r.jsx)(t.tbody,{children:(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"docs"}),(0,r.jsx)(t.td,{children:"Data"}),(0,r.jsx)(t.td,{children:"The loaded document data."})]})})]})]}),"\n",(0,r.jsx)(t.h3,{id:"google-drive-search",children:"Google Drive Search"}),"\n",(0,r.jsx)(t.p,{children:"This component searches Google Drive files using provided credentials and query parameters."}),"\n",(0,r.jsxs)(t.p,{children:["For more information about creating a service account JSON, see ",(0,r.jsx)(t.a,{href:"https://developers.google.com/identity/protocols/oauth2/service-account",children:"Service Account JSON"}),"."]}),"\n",(0,r.jsxs)(n,{children:[(0,r.jsx)("summary",{children:"Parameters"}),(0,r.jsx)(t.p,{children:(0,r.jsx)(t.strong,{children:"Inputs"})}),(0,r.jsxs)(t.table,{children:[(0,r.jsx)(t.thead,{children:(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.th,{children:"Input"}),(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:"token_string"}),(0,r.jsx)(t.td,{children:"SecretStrInput"}),(0,r.jsx)(t.td,{children:"A JSON string containing OAuth 2.0 access token information for service account access."})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"query_item"}),(0,r.jsx)(t.td,{children:"DropdownInput"}),(0,r.jsx)(t.td,{children:"The field to query."})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"valid_operator"}),(0,r.jsx)(t.td,{children:"DropdownInput"}),(0,r.jsx)(t.td,{children:"The operator to use in the query."})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"search_term"}),(0,r.jsx)(t.td,{children:"MessageTextInput"}),(0,r.jsx)(t.td,{children:"The value to search for in the specified query item."})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"query_string"}),(0,r.jsx)(t.td,{children:"MessageTextInput"}),(0,r.jsx)(t.td,{children:"The query string used for searching."})]})]})]}),(0,r.jsx)(t.p,{children:(0,r.jsx)(t.strong,{children:"Outputs"})}),(0,r.jsxs)(t.table,{children:[(0,r.jsx)(t.thead,{children:(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.th,{children:"Output"}),(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:"doc_urls"}),(0,r.jsx)(t.td,{children:"List[str]"}),(0,r.jsx)(t.td,{children:"The URLs of the found documents."})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"doc_ids"}),(0,r.jsx)(t.td,{children:"List[str]"}),(0,r.jsx)(t.td,{children:"The IDs of the found documents."})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"doc_titles"}),(0,r.jsx)(t.td,{children:"List[str]"}),(0,r.jsx)(t.td,{children:"The titles of the found documents."})]}),(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:"The document titles and URLs in a structured format."})]})]})]})]})]})}function p(e={}){const{wrapper:t}={...(0,d.R)(),...e.components};return t?(0,r.jsx)(t,{...e,children:(0,r.jsx)(j,{...e})}):j(e)}function u(e,t){throw new Error("Expected "+(t?"component":"object")+" `"+e+"` to be defined: you likely forgot to import, pass, or provide it.")}},55228:(e,t,s)=>{s.d(t,{A:()=>n});const n=s.p+"assets/images/component-url-11d5306d5c7a52a376fab32344eab7a2.png"},80352:(e,t,s)=>{s.d(t,{A:()=>n});const n=s.p+"assets/images/url-component-fb712df73581345c0f344013ce6ff2fd.png"},84443:(e,t,s)=>{s.d(t,{A:()=>d});s(96540);var n=s(64058),r=s(74848);function d(e){let{name:t,...s}=e;const d=n[t];return d?(0,r.jsx)(d,{...s}):null}}}]); \ No newline at end of file diff --git a/assets/js/fdefa9a8.94ce1e19.js b/assets/js/fdefa9a8.94ce1e19.js deleted file mode 100644 index dd59804bb4..0000000000 --- a/assets/js/fdefa9a8.94ce1e19.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunklangflow_docs=self.webpackChunklangflow_docs||[]).push([[7453],{8886:(e,t,n)=>{n.d(t,{A:()=>s});const s=n.p+"assets/images/component-url-regex-8cae4a8d6491d360115ad552f0c467d3.png"},33972:(e,t,n)=>{n.d(t,{A:()=>s});const s=n.p+"assets/images/component-api-request-chat-output-6dd0e176265482c2dca9899f0a70047a.png"},39245:(e,t,n)=>{n.r(t),n.d(t,{CH:()=>a,assets:()=>h,chCodeConfig:()=>x,contentTitle:()=>c,default:()=>u,frontMatter:()=>l,metadata:()=>s,toc:()=>j});const s=JSON.parse('{"id":"Components/components-data","title":"Data","description":"Data components load data from a source into your flow.","source":"@site/docs/Components/components-data.md","sourceDirName":"Components","slug":"/components-data","permalink":"/components-data","draft":false,"unlisted":false,"tags":[],"version":"current","frontMatter":{"title":"Data","slug":"/components-data"},"sidebar":"docs","previous":{"title":"Create custom Python components","permalink":"/components-custom-components"},"next":{"title":"Embeddings","permalink":"/components-embedding-models"}}');var r=n(74848),i=n(28453),d=n(24754),o=n(84443);const l={title:"Data",slug:"/components-data"},c="Data components in Langflow",h={},a={annotations:d.hk,Code:d.Cy},x={staticMediaQuery:"not screen, (max-width: 768px)",lineNumbers:!0,showCopyButton:!0,themeName:"github-dark"},j=[{value:"Use a data component in a flow",id:"use-a-data-component-in-a-flow",level:2},{value:"API Request",id:"api-request",level:2},{value:"Filter API request data",id:"filter-api-request-data",level:3},{value:"Inputs",id:"inputs",level:3},{value:"Outputs",id:"outputs",level:3},{value:"Directory",id:"directory",level:2},{value:"Inputs",id:"inputs-1",level:3},{value:"Outputs",id:"outputs-1",level:3},{value:"File",id:"file",level:2},{value:"Inputs",id:"inputs-2",level:3},{value:"Outputs",id:"outputs-2",level:3},{value:"Supported File Types",id:"supported-file-types",level:3},{value:"Gmail Loader",id:"gmail-loader",level:2},{value:"Inputs",id:"inputs-3",level:3},{value:"Outputs",id:"outputs-3",level:3},{value:"Google Drive Loader",id:"google-drive-loader",level:2},{value:"Inputs",id:"inputs-4",level:3},{value:"Outputs",id:"outputs-4",level:3},{value:"Google Drive Search",id:"google-drive-search",level:2},{value:"Inputs",id:"inputs-5",level:3},{value:"Outputs",id:"outputs-5",level:3},{value:"SQL Query",id:"sql-query",level:2},{value:"Inputs",id:"inputs-6",level:3},{value:"Outputs",id:"outputs-6",level:3},{value:"URL",id:"url",level:2},{value:"Inputs",id:"inputs-7",level:3},{value:"Outputs",id:"outputs-7",level:3},{value:"Webhook",id:"webhook",level:2},{value:"Inputs",id:"inputs-8",level:3},{value:"Outputs",id:"outputs-8",level:3}];function p(e){const t={a:"a",admonition:"admonition",code:"code",h1:"h1",h2:"h2",h3:"h3",header:"header",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,i.R)(),...e.components};return a||m("CH",!1),a.Code||m("CH.Code",!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.header,{children:(0,r.jsx)(t.h1,{id:"data-components-in-langflow",children:"Data components in Langflow"})}),"\n",(0,r.jsx)(t.p,{children:"Data components load data from a source into your flow."}),"\n",(0,r.jsx)(t.p,{children:"They may perform some processing or type checking, like converting raw HTML data into text, or ensuring your loaded file is of an acceptable type."}),"\n",(0,r.jsx)(t.h2,{id:"use-a-data-component-in-a-flow",children:"Use a data component in a flow"}),"\n",(0,r.jsxs)(t.p,{children:["The ",(0,r.jsx)(t.strong,{children:"URL"})," data component loads content from a list of URLs."]}),"\n",(0,r.jsxs)(t.p,{children:["In the component's ",(0,r.jsx)(t.strong,{children:"URLs"})," field, enter a comma-separated list of URLs you want to load. Alternatively, connect a component that outputs the ",(0,r.jsx)(t.code,{children:"Message"})," type, like the ",(0,r.jsx)(t.strong,{children:"Chat Input"})," component, to supply your URLs with a component."]}),"\n",(0,r.jsxs)(t.p,{children:["To output a ",(0,r.jsx)(t.code,{children:"Data"})," type, in the ",(0,r.jsx)(t.strong,{children:"Output Format"})," dropdown, select ",(0,r.jsx)(t.strong,{children:"Raw HTML"}),".\nTo output a ",(0,r.jsx)(t.code,{children:"Message"})," type, in the ",(0,r.jsx)(t.strong,{children:"Output Format"})," dropdown, select ",(0,r.jsx)(t.strong,{children:"Text"}),". This option applies postprocessing with the ",(0,r.jsx)(t.code,{children:"data_to_text"})," helper function."]}),"\n",(0,r.jsx)(t.p,{children:"In this example of a document ingestion pipeline, the URL component outputs raw HTML to a text splitter, which splits the raw content into chunks for a vector database to ingest."}),"\n",(0,r.jsx)(t.p,{children:(0,r.jsx)(t.img,{alt:"URL component in a data ingestion pipeline",src:n(80352).A+"",width:"2306",height:"1632"})}),"\n",(0,r.jsx)(t.h2,{id:"api-request",children:"API Request"}),"\n",(0,r.jsx)(t.p,{children:"This component makes HTTP requests using URLs or cURL commands."}),"\n",(0,r.jsxs)(t.ol,{children:["\n",(0,r.jsxs)(t.li,{children:["To use this component in a flow, connect the ",(0,r.jsx)(t.strong,{children:"Data"})," output to a component that accepts the input.\nFor example, connect the ",(0,r.jsx)(t.strong,{children:"API Request"})," component to a ",(0,r.jsx)(t.strong,{children:"Chat Output"})," component."]}),"\n"]}),"\n",(0,r.jsx)(t.p,{children:(0,r.jsx)(t.img,{alt:"API request into a chat output component",src:n(33972).A+"",width:"1742",height:"1248"})}),"\n",(0,r.jsxs)(t.ol,{start:"2",children:["\n",(0,r.jsxs)(t.li,{children:["\n",(0,r.jsxs)(t.p,{children:["In the API component's ",(0,r.jsx)(t.strong,{children:"URLs"})," field, enter the endpoint for your request.\nThis example uses ",(0,r.jsx)(t.code,{children:"https://dummy-json.mock.beeceptor.com/posts"}),", which is a list of technology blog posts."]}),"\n"]}),"\n",(0,r.jsxs)(t.li,{children:["\n",(0,r.jsxs)(t.p,{children:["In the ",(0,r.jsx)(t.strong,{children:"Method"})," field, enter the type of request.\nThis example uses GET to retrieve a list of blog posts.\nThe component also supports POST, PATCH, PUT, and DELETE."]}),"\n"]}),"\n",(0,r.jsxs)(t.li,{children:["\n",(0,r.jsxs)(t.p,{children:["Optionally, enable the ",(0,r.jsx)(t.strong,{children:"Use cURL"})," button to create a field for pasting curl requests.\nThe equivalent call in this example is ",(0,r.jsx)(t.code,{children:"curl -v https://dummy-json.mock.beeceptor.com/posts"}),"."]}),"\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 click ",(0,r.jsx)(t.strong,{children:"Run Flow"}),".\nYour request returns a list of blog posts in the ",(0,r.jsx)(t.code,{children:"result"})," field."]}),"\n"]}),"\n"]}),"\n",(0,r.jsx)(t.h3,{id:"filter-api-request-data",children:"Filter API request data"}),"\n",(0,r.jsxs)(t.p,{children:["The ",(0,r.jsx)(t.strong,{children:"API Request"})," component retrieved a list of JSON objects in the ",(0,r.jsx)(t.code,{children:"result"})," field.\nFor this example, you will use the ",(0,r.jsx)(t.strong,{children:"Lambda Filter"})," to extract the desired data nested within the ",(0,r.jsx)(t.code,{children:"result"})," field."]}),"\n",(0,r.jsxs)(t.ol,{children:["\n",(0,r.jsxs)(t.li,{children:["Connect a ",(0,r.jsx)(t.strong,{children:"Lambda Filter"})," to the API request component, and a ",(0,r.jsx)(t.strong,{children:"Language model"})," to the ",(0,r.jsx)(t.strong,{children:"Lambda Filter"}),". This example connects a ",(0,r.jsx)(t.strong,{children:"Groq"})," model component."]}),"\n",(0,r.jsxs)(t.li,{children:["In the ",(0,r.jsx)(t.strong,{children:"Groq"})," model component, add your ",(0,r.jsx)(t.strong,{children:"Groq"})," API key."]}),"\n",(0,r.jsxs)(t.li,{children:["To filter the data, in the ",(0,r.jsx)(t.strong,{children:"Lambda filter"})," component, in the ",(0,r.jsx)(t.strong,{children:"Instructions"})," field, use natural language to describe how the data should be filtered.\nFor this example, enter:"]}),"\n"]}),"\n",(0,r.jsx)(a.Code,{codeConfig:x,northPanel:{tabs:[""],active:"",heightRatio:1},files:[{name:"",focus:"",code:{lines:[{tokens:[{content:"I want to explode the result column out into a Data object",props:{}}]}],lang:"text"},annotations:[]}]}),"\n",(0,r.jsx)(t.admonition,{type:"tip",children:(0,r.jsxs)(t.p,{children:["Avoid punctuation in the ",(0,r.jsx)(t.strong,{children:"Instructions"})," field, as it can cause errors."]})}),"\n",(0,r.jsxs)(t.ol,{start:"4",children:["\n",(0,r.jsxs)(t.li,{children:["To run the flow, in the ",(0,r.jsx)(t.strong,{children:"Lambda Filter"})," component, click ",(0,r.jsx)(o.A,{name:"Play","aria-label":"Play icon"}),"."]}),"\n",(0,r.jsxs)(t.li,{children:["To inspect the filtered data, in the ",(0,r.jsx)(t.strong,{children:"Lambda Filter"})," component, click ",(0,r.jsx)(o.A,{name:"TextSearch","aria-label":"Inspect icon"}),".\nThe result is a structured DataFrame."]}),"\n"]}),"\n",(0,r.jsx)(a.Code,{codeConfig:x,northPanel:{tabs:[""],active:"",heightRatio:1},files:[{name:"",focus:"",code:{lines:[{tokens:[{content:"| userId | id | title | body | link | comment_count |",props:{}}]},{tokens:[{content:"|---|----|-------|------|------|---------------|",props:{}}]},{tokens:[{content:"| 1 | 1 | Introduction to Artificial Intelligence | Learn the basics of AI ...| https://example.com/article1 | 8 |",props:{}}]},{tokens:[{content:"| 2 | 2 | Web Development with React | Build modern web applications ...| https://example.com/article2 | 12 |",props:{}}]}],lang:"text"},annotations:[]}]}),"\n",(0,r.jsx)(t.h3,{id:"inputs",children:"Inputs"}),"\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:"urls"}),(0,r.jsx)(t.td,{children:"URLs"}),(0,r.jsx)(t.td,{children:"Enter one or more URLs, separated by commas."})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"curl"}),(0,r.jsx)(t.td,{children:"cURL"}),(0,r.jsx)(t.td,{children:"Paste a curl command to populate the dictionary fields for headers and body."})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"method"}),(0,r.jsx)(t.td,{children:"Method"}),(0,r.jsx)(t.td,{children:"The HTTP method to use."})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"use_curl"}),(0,r.jsx)(t.td,{children:"Use cURL"}),(0,r.jsx)(t.td,{children:"Enable cURL mode to populate fields from a cURL command."})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"query_params"}),(0,r.jsx)(t.td,{children:"Query Parameters"}),(0,r.jsx)(t.td,{children:"The query parameters to append to the URL."})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"body"}),(0,r.jsx)(t.td,{children:"Body"}),(0,r.jsxs)(t.td,{children:["The body to send with the request as a dictionary (for ",(0,r.jsx)(t.code,{children:"POST"}),", ",(0,r.jsx)(t.code,{children:"PATCH"}),", ",(0,r.jsx)(t.code,{children:"PUT"}),")."]})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"headers"}),(0,r.jsx)(t.td,{children:"Headers"}),(0,r.jsx)(t.td,{children:"The headers to send with the request as a dictionary."})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"timeout"}),(0,r.jsx)(t.td,{children:"Timeout"}),(0,r.jsx)(t.td,{children:"The timeout to use for the request."})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"follow_redirects"}),(0,r.jsx)(t.td,{children:"Follow Redirects"}),(0,r.jsx)(t.td,{children:"Whether to follow http redirects."})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"save_to_file"}),(0,r.jsx)(t.td,{children:"Save to File"}),(0,r.jsx)(t.td,{children:"Save the API response to a temporary file"})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"include_httpx_metadata"}),(0,r.jsx)(t.td,{children:"Include HTTPx Metadata"}),(0,r.jsxs)(t.td,{children:["Include properties such as ",(0,r.jsx)(t.code,{children:"headers"}),", ",(0,r.jsx)(t.code,{children:"status_code"}),", ",(0,r.jsx)(t.code,{children:"response_headers"}),", and ",(0,r.jsx)(t.code,{children:"redirection_history"})," in the output."]})]})]})]}),"\n",(0,r.jsx)(t.h3,{id:"outputs",children:"Outputs"}),"\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:"The result of the API requests. Returns a Data object containing source URL and results."})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"dataframe"}),(0,r.jsx)(t.td,{children:"DataFrame"}),(0,r.jsx)(t.td,{children:"Converts the API response data into a tabular DataFrame format."})]})]})]}),"\n",(0,r.jsx)(t.h2,{id:"directory",children:"Directory"}),"\n",(0,r.jsx)(t.p,{children:"This component recursively loads files from a directory, with options for file types, depth, and concurrency."}),"\n",(0,r.jsx)(t.h3,{id:"inputs-1",children:"Inputs"}),"\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:"Input"}),(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:"path"}),(0,r.jsx)(t.td,{children:"MessageTextInput"}),(0,r.jsx)(t.td,{children:"Path to the directory to load files from"})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"types"}),(0,r.jsx)(t.td,{children:"MessageTextInput"}),(0,r.jsx)(t.td,{children:"File types to load (leave empty to load all types)"})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"depth"}),(0,r.jsx)(t.td,{children:"IntInput"}),(0,r.jsx)(t.td,{children:"Depth to search for files"})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"max_concurrency"}),(0,r.jsx)(t.td,{children:"IntInput"}),(0,r.jsx)(t.td,{children:"Maximum concurrency for loading files"})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"load_hidden"}),(0,r.jsx)(t.td,{children:"BoolInput"}),(0,r.jsx)(t.td,{children:"If true, hidden files are loaded"})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"recursive"}),(0,r.jsx)(t.td,{children:"BoolInput"}),(0,r.jsx)(t.td,{children:"If true, the search is recursive"})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"silent_errors"}),(0,r.jsx)(t.td,{children:"BoolInput"}),(0,r.jsx)(t.td,{children:"If true, errors do not raise an exception"})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"use_multithreading"}),(0,r.jsx)(t.td,{children:"BoolInput"}),(0,r.jsx)(t.td,{children:"If true, multithreading is used"})]})]})]}),"\n",(0,r.jsx)(t.h3,{id:"outputs-1",children:"Outputs"}),"\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:"Output"}),(0,r.jsx)(t.th,{children:"Type"}),(0,r.jsx)(t.th,{children:"Description"})]})}),(0,r.jsx)(t.tbody,{children:(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"data"}),(0,r.jsx)(t.td,{children:"List[Data]"}),(0,r.jsx)(t.td,{children:"Loaded file data from the directory"})]})})]}),"\n",(0,r.jsx)(t.h2,{id:"file",children:"File"}),"\n",(0,r.jsxs)(t.p,{children:["This component loads and parses files of various supported formats and converts the content into a ",(0,r.jsx)(t.a,{href:"/concepts-objects",children:"Data"})," object. It supports multiple file types and provides options for parallel processing and error handling."]}),"\n",(0,r.jsx)(t.p,{children:"To load a document, follow these steps:"}),"\n",(0,r.jsxs)(t.ol,{children:["\n",(0,r.jsxs)(t.li,{children:["Click the ",(0,r.jsx)(t.strong,{children:"Select files"})," button."]}),"\n",(0,r.jsxs)(t.li,{children:["Select a local file or a file loaded with ",(0,r.jsx)(t.a,{href:"/concepts-file-management",children:"File management"}),", and then click ",(0,r.jsx)(t.strong,{children:"Select file"}),"."]}),"\n"]}),"\n",(0,r.jsx)(t.p,{children:"The loaded file name appears in the component."}),"\n",(0,r.jsxs)(t.p,{children:["The default maximum supported file size is 100 MB.\nTo modify this value, see ",(0,r.jsx)(t.a,{href:"/environment-variables#LANGFLOW_MAX_FILE_SIZE_UPLOAD",children:"--max-file-size-upload"}),"."]}),"\n",(0,r.jsx)(t.h3,{id:"inputs-2",children:"Inputs"}),"\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:"path"}),(0,r.jsx)(t.td,{children:"Files"}),(0,r.jsx)(t.td,{children:"Path to file(s) to load. Supports individual files or bundled archives."})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"file_path"}),(0,r.jsx)(t.td,{children:"Server File Path"}),(0,r.jsxs)(t.td,{children:["Data object with a ",(0,r.jsx)(t.code,{children:"file_path"})," property pointing to the server file or a Message object with a path to the file. Supersedes 'Path' but supports the same file types."]})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"separator"}),(0,r.jsx)(t.td,{children:"Separator"}),(0,r.jsx)(t.td,{children:"Specify the separator to use between multiple outputs in Message format."})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"silent_errors"}),(0,r.jsx)(t.td,{children:"Silent Errors"}),(0,r.jsx)(t.td,{children:"If true, errors do not raise an exception."})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"delete_server_file_after_processing"}),(0,r.jsx)(t.td,{children:"Delete Server File After Processing"}),(0,r.jsx)(t.td,{children:"If true, the Server File Path is deleted after processing."})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"ignore_unsupported_extensions"}),(0,r.jsx)(t.td,{children:"Ignore Unsupported Extensions"}),(0,r.jsx)(t.td,{children:"If true, files with unsupported extensions are not processed."})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"ignore_unspecified_files"}),(0,r.jsx)(t.td,{children:"Ignore Unspecified Files"}),(0,r.jsxs)(t.td,{children:["If true, ",(0,r.jsx)(t.code,{children:"Data"})," with no ",(0,r.jsx)(t.code,{children:"file_path"})," property is ignored."]})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"use_multithreading"}),(0,r.jsx)(t.td,{children:"[Deprecated] Use Multithreading"}),(0,r.jsxs)(t.td,{children:["Set 'Processing Concurrency' greater than ",(0,r.jsx)(t.code,{children:"1"})," to enable multithreading. This option is deprecated."]})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"concurrency_multithreading"}),(0,r.jsx)(t.td,{children:"Processing Concurrency"}),(0,r.jsx)(t.td,{children:"When multiple files are being processed, the number of files to process concurrently. Default is 1. Values greater than 1 enable parallel processing for 2 or more files."})]})]})]}),"\n",(0,r.jsx)(t.h3,{id:"outputs-2",children:"Outputs"}),"\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:["Parsed content of the file as a ",(0,r.jsx)(t.a,{href:"/concepts-objects",children:"Data"})," object."]})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"dataframe"}),(0,r.jsx)(t.td,{children:"DataFrame"}),(0,r.jsxs)(t.td,{children:["File content as a ",(0,r.jsx)(t.a,{href:"/concepts-objects#dataframe-object",children:"DataFrame"})," object."]})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"message"}),(0,r.jsx)(t.td,{children:"Message"}),(0,r.jsxs)(t.td,{children:["File content as a ",(0,r.jsx)(t.a,{href:"/concepts-objects#message-object",children:"Message"})," object."]})]})]})]}),"\n",(0,r.jsx)(t.h3,{id:"supported-file-types",children:"Supported File Types"}),"\n",(0,r.jsx)(t.p,{children:"Text files:"}),"\n",(0,r.jsxs)(t.ul,{children:["\n",(0,r.jsxs)(t.li,{children:[(0,r.jsx)(t.code,{children:".txt"})," - Text files"]}),"\n",(0,r.jsxs)(t.li,{children:[(0,r.jsx)(t.code,{children:".md"}),", ",(0,r.jsx)(t.code,{children:".mdx"})," - Markdown files"]}),"\n",(0,r.jsxs)(t.li,{children:[(0,r.jsx)(t.code,{children:".csv"})," - CSV files"]}),"\n",(0,r.jsxs)(t.li,{children:[(0,r.jsx)(t.code,{children:".json"})," - JSON files"]}),"\n",(0,r.jsxs)(t.li,{children:[(0,r.jsx)(t.code,{children:".yaml"}),", ",(0,r.jsx)(t.code,{children:".yml"})," - YAML files"]}),"\n",(0,r.jsxs)(t.li,{children:[(0,r.jsx)(t.code,{children:".xml"})," - XML files"]}),"\n",(0,r.jsxs)(t.li,{children:[(0,r.jsx)(t.code,{children:".html"}),", ",(0,r.jsx)(t.code,{children:".htm"})," - HTML files"]}),"\n",(0,r.jsxs)(t.li,{children:[(0,r.jsx)(t.code,{children:".pdf"})," - PDF files"]}),"\n",(0,r.jsxs)(t.li,{children:[(0,r.jsx)(t.code,{children:".docx"})," - Word documents"]}),"\n",(0,r.jsxs)(t.li,{children:[(0,r.jsx)(t.code,{children:".py"})," - Python files"]}),"\n",(0,r.jsxs)(t.li,{children:[(0,r.jsx)(t.code,{children:".sh"})," - Shell scripts"]}),"\n",(0,r.jsxs)(t.li,{children:[(0,r.jsx)(t.code,{children:".sql"})," - SQL files"]}),"\n",(0,r.jsxs)(t.li,{children:[(0,r.jsx)(t.code,{children:".js"})," - JavaScript files"]}),"\n",(0,r.jsxs)(t.li,{children:[(0,r.jsx)(t.code,{children:".ts"}),", ",(0,r.jsx)(t.code,{children:".tsx"})," - TypeScript files"]}),"\n"]}),"\n",(0,r.jsx)(t.p,{children:"Archive formats (for bundling multiple files):"}),"\n",(0,r.jsxs)(t.ul,{children:["\n",(0,r.jsxs)(t.li,{children:[(0,r.jsx)(t.code,{children:".zip"})," - ZIP archives"]}),"\n",(0,r.jsxs)(t.li,{children:[(0,r.jsx)(t.code,{children:".tar"})," - TAR archives"]}),"\n",(0,r.jsxs)(t.li,{children:[(0,r.jsx)(t.code,{children:".tgz"})," - Gzipped TAR archives"]}),"\n",(0,r.jsxs)(t.li,{children:[(0,r.jsx)(t.code,{children:".bz2"})," - Bzip2 compressed files"]}),"\n",(0,r.jsxs)(t.li,{children:[(0,r.jsx)(t.code,{children:".gz"})," - Gzip compressed files"]}),"\n"]}),"\n",(0,r.jsx)(t.h2,{id:"gmail-loader",children:"Gmail Loader"}),"\n",(0,r.jsx)(t.admonition,{type:"info",children:(0,r.jsxs)(t.p,{children:["Google components are available in the ",(0,r.jsx)(t.strong,{children:"Components"})," menu under ",(0,r.jsx)(t.strong,{children:"Bundles"}),".\nFor more information, see ",(0,r.jsx)(t.a,{href:"/integrations-setup-google-oauth-langflow",children:"Integrate Google OAuth with Langflow"}),"."]})}),"\n",(0,r.jsx)(t.p,{children:"This component loads emails from Gmail using provided credentials and filters."}),"\n",(0,r.jsxs)(t.p,{children:["For more on creating a service account JSON, see ",(0,r.jsx)(t.a,{href:"https://developers.google.com/identity/protocols/oauth2/service-account",children:"Service Account JSON"}),"."]}),"\n",(0,r.jsx)(t.h3,{id:"inputs-3",children:"Inputs"}),"\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:"Input"}),(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:"json_string"}),(0,r.jsx)(t.td,{children:"SecretStrInput"}),(0,r.jsx)(t.td,{children:"JSON string containing OAuth 2.0 access token information for service account access"})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"label_ids"}),(0,r.jsx)(t.td,{children:"MessageTextInput"}),(0,r.jsx)(t.td,{children:"Comma-separated list of label IDs to filter emails"})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"max_results"}),(0,r.jsx)(t.td,{children:"MessageTextInput"}),(0,r.jsx)(t.td,{children:"Maximum number of emails to load"})]})]})]}),"\n",(0,r.jsx)(t.h3,{id:"outputs-3",children:"Outputs"}),"\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:"Output"}),(0,r.jsx)(t.th,{children:"Type"}),(0,r.jsx)(t.th,{children:"Description"})]})}),(0,r.jsx)(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:"Loaded email data"})]})})]}),"\n",(0,r.jsx)(t.h2,{id:"google-drive-loader",children:"Google Drive Loader"}),"\n",(0,r.jsx)(t.admonition,{type:"info",children:(0,r.jsxs)(t.p,{children:["Google components are available in the ",(0,r.jsx)(t.strong,{children:"Components"})," menu under ",(0,r.jsx)(t.strong,{children:"Bundles"}),".\nFor more information, see ",(0,r.jsx)(t.a,{href:"/integrations-setup-google-oauth-langflow",children:"Integrate Google OAuth with Langflow"}),"."]})}),"\n",(0,r.jsx)(t.p,{children:"This component loads documents from Google Drive using provided credentials and a single document ID."}),"\n",(0,r.jsxs)(t.p,{children:["For more on creating a service account JSON, see ",(0,r.jsx)(t.a,{href:"https://developers.google.com/identity/protocols/oauth2/service-account",children:"Service Account JSON"}),"."]}),"\n",(0,r.jsx)(t.h3,{id:"inputs-4",children:"Inputs"}),"\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:"Input"}),(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:"json_string"}),(0,r.jsx)(t.td,{children:"SecretStrInput"}),(0,r.jsx)(t.td,{children:"JSON string containing OAuth 2.0 access token information for service account access"})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"document_id"}),(0,r.jsx)(t.td,{children:"MessageTextInput"}),(0,r.jsx)(t.td,{children:"Single Google Drive document ID"})]})]})]}),"\n",(0,r.jsx)(t.h3,{id:"outputs-4",children:"Outputs"}),"\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:"Output"}),(0,r.jsx)(t.th,{children:"Type"}),(0,r.jsx)(t.th,{children:"Description"})]})}),(0,r.jsx)(t.tbody,{children:(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"docs"}),(0,r.jsx)(t.td,{children:"Data"}),(0,r.jsx)(t.td,{children:"Loaded document data"})]})})]}),"\n",(0,r.jsx)(t.h2,{id:"google-drive-search",children:"Google Drive Search"}),"\n",(0,r.jsx)(t.admonition,{type:"info",children:(0,r.jsxs)(t.p,{children:["Google components are available in the ",(0,r.jsx)(t.strong,{children:"Components"})," menu under ",(0,r.jsx)(t.strong,{children:"Bundles"}),".\nFor more information, see ",(0,r.jsx)(t.a,{href:"/integrations-setup-google-oauth-langflow",children:"Integrate Google OAuth with Langflow"}),"."]})}),"\n",(0,r.jsx)(t.p,{children:"This component searches Google Drive files using provided credentials and query parameters."}),"\n",(0,r.jsxs)(t.p,{children:["For more on creating a service account JSON, see ",(0,r.jsx)(t.a,{href:"https://developers.google.com/identity/protocols/oauth2/service-account",children:"Service Account JSON"}),"."]}),"\n",(0,r.jsx)(t.h3,{id:"inputs-5",children:"Inputs"}),"\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:"Input"}),(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:"token_string"}),(0,r.jsx)(t.td,{children:"SecretStrInput"}),(0,r.jsx)(t.td,{children:"JSON string containing OAuth 2.0 access token information for service account access"})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"query_item"}),(0,r.jsx)(t.td,{children:"DropdownInput"}),(0,r.jsx)(t.td,{children:"The field to query"})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"valid_operator"}),(0,r.jsx)(t.td,{children:"DropdownInput"}),(0,r.jsx)(t.td,{children:"Operator to use in the query"})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"search_term"}),(0,r.jsx)(t.td,{children:"MessageTextInput"}),(0,r.jsx)(t.td,{children:"The value to search for in the specified query item"})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"query_string"}),(0,r.jsx)(t.td,{children:"MessageTextInput"}),(0,r.jsx)(t.td,{children:"The query string used for searching (can be edited manually)"})]})]})]}),"\n",(0,r.jsx)(t.h3,{id:"outputs-5",children:"Outputs"}),"\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:"Output"}),(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:"doc_urls"}),(0,r.jsx)(t.td,{children:"List[str]"}),(0,r.jsx)(t.td,{children:"URLs of the found documents"})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"doc_ids"}),(0,r.jsx)(t.td,{children:"List[str]"}),(0,r.jsx)(t.td,{children:"IDs of the found documents"})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"doc_titles"}),(0,r.jsx)(t.td,{children:"List[str]"}),(0,r.jsx)(t.td,{children:"Titles of the found documents"})]}),(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:"Document titles and URLs in a structured format"})]})]})]}),"\n",(0,r.jsx)(t.h2,{id:"sql-query",children:"SQL Query"}),"\n",(0,r.jsx)(t.p,{children:"This component executes SQL queries on a specified database."}),"\n",(0,r.jsx)(t.h3,{id:"inputs-6",children:"Inputs"}),"\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:"query"}),(0,r.jsx)(t.td,{children:"Query"}),(0,r.jsx)(t.td,{children:"The SQL query to execute."})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"database_url"}),(0,r.jsx)(t.td,{children:"Database URL"}),(0,r.jsx)(t.td,{children:"The URL of the database."})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"include_columns"}),(0,r.jsx)(t.td,{children:"Include Columns"}),(0,r.jsx)(t.td,{children:"Include columns in the result."})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"passthrough"}),(0,r.jsx)(t.td,{children:"Passthrough"}),(0,r.jsx)(t.td,{children:"If an error occurs, return the query instead of raising an exception."})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"add_error"}),(0,r.jsx)(t.td,{children:"Add Error"}),(0,r.jsx)(t.td,{children:"Add the error to the result."})]})]})]}),"\n",(0,r.jsx)(t.h3,{id:"outputs-6",children:"Outputs"}),"\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.jsx)(t.tbody,{children:(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"result"}),(0,r.jsx)(t.td,{children:"Result"}),(0,r.jsx)(t.td,{children:"The result of the SQL query execution."})]})})]}),"\n",(0,r.jsx)(t.h2,{id:"url",children:"URL"}),"\n",(0,r.jsx)(t.p,{children:"This component fetches content from one or more URLs, processes the content, and returns it in various formats. It supports output in plain text, raw HTML, or JSON, with options for cleaning and separating multiple outputs."}),"\n",(0,r.jsxs)(t.ol,{children:["\n",(0,r.jsxs)(t.li,{children:["To use this component in a flow, connect the ",(0,r.jsx)(t.strong,{children:"DataFrame"})," output to a component that accepts the input.\nFor example, connect the ",(0,r.jsx)(t.strong,{children:"URL"})," component to a ",(0,r.jsx)(t.strong,{children:"Chat Output"})," component."]}),"\n"]}),"\n",(0,r.jsx)(t.p,{children:(0,r.jsx)(t.img,{alt:"URL request into a chat output component",src:n(55228).A+"",width:"1578",height:"1086"})}),"\n",(0,r.jsxs)(t.ol,{start:"2",children:["\n",(0,r.jsxs)(t.li,{children:["\n",(0,r.jsxs)(t.p,{children:["In the URL component's ",(0,r.jsx)(t.strong,{children:"URLs"})," field, enter the URL for your request.\nThis example uses ",(0,r.jsx)(t.code,{children:"langflow.org"}),"."]}),"\n"]}),"\n",(0,r.jsxs)(t.li,{children:["\n",(0,r.jsxs)(t.p,{children:["Optionally, in the ",(0,r.jsx)(t.strong,{children:"Max Depth"})," field, enter how many pages away from the initial URL you want to crawl.\nSelect ",(0,r.jsx)(t.code,{children:"1"})," to crawl only the page specified in the ",(0,r.jsx)(t.strong,{children:"URLs"})," field.\nSelect ",(0,r.jsx)(t.code,{children:"2"})," to crawl all pages linked from that page.\nThe component crawls by link traversal, not by URL path depth."]}),"\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 click ",(0,r.jsx)(t.strong,{children:"Run Flow"}),".\nThe text contents of the URL are returned to the Playground as a structured DataFrame."]}),"\n"]}),"\n",(0,r.jsxs)(t.li,{children:["\n",(0,r.jsxs)(t.p,{children:["In the ",(0,r.jsx)(t.strong,{children:"URL"})," component, change the output port to ",(0,r.jsx)(t.strong,{children:"Message"}),", and then run the flow again.\nThe text contents of the URL are returned as unstructured raw text, which you can extract patterns from with the ",(0,r.jsx)(t.strong,{children:"Regex Extractor"})," tool."]}),"\n"]}),"\n",(0,r.jsxs)(t.li,{children:["\n",(0,r.jsxs)(t.p,{children:["Connect the ",(0,r.jsx)(t.strong,{children:"URL"})," component to a ",(0,r.jsx)(t.strong,{children:"Regex Extractor"})," and ",(0,r.jsx)(t.strong,{children:"Chat Output"}),"."]}),"\n"]}),"\n"]}),"\n",(0,r.jsx)(t.p,{children:(0,r.jsx)(t.img,{alt:"Regex extractor connected to url component",src:n(8886).A+"",width:"1606",height:"848"})}),"\n",(0,r.jsxs)(t.ol,{start:"7",children:["\n",(0,r.jsxs)(t.li,{children:["In the ",(0,r.jsx)(t.strong,{children:"Regex Extractor"})," tool, enter a pattern to extract text from the ",(0,r.jsx)(t.strong,{children:"URL"}),' component\'s raw output.\nThis example extracts the first paragraph from the "In the News" section of ',(0,r.jsx)(t.code,{children:"https://en.wikipedia.org/wiki/Main_Page"}),"."]}),"\n"]}),"\n",(0,r.jsx)(a.Code,{codeConfig:x,northPanel:{tabs:[""],active:"",heightRatio:1},files:[{name:"",focus:"",code:{lines:[{tokens:[{content:"In the news\\s*\\n(.*?)(?=\\n\\n)",props:{}}]}],lang:"text"},annotations:[]}]}),"\n",(0,r.jsx)(t.p,{children:"Result:"}),"\n",(0,r.jsx)(a.Code,{codeConfig:x,northPanel:{tabs:[""],active:"",heightRatio:1},files:[{name:"",focus:"",code:{lines:[{tokens:[{content:"Peruvian writer and Nobel Prize in Literature laureate Mario Vargas Llosa (pictured) dies at the age of 89.",props:{}}]}],lang:"text"},annotations:[]}]}),"\n",(0,r.jsx)(t.h3,{id:"inputs-7",children:"Inputs"}),"\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:"urls"}),(0,r.jsx)(t.td,{children:"URLs"}),(0,r.jsx)(t.td,{children:"Enter one or more URLs. URLs are automatically validated and cleaned."})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"format"}),(0,r.jsx)(t.td,{children:"Output Format"}),(0,r.jsxs)(t.td,{children:["Output Format. Use ",(0,r.jsx)(t.strong,{children:"Text"})," to extract text from the HTML, ",(0,r.jsx)(t.strong,{children:"Raw HTML"})," for the raw HTML content, or ",(0,r.jsx)(t.strong,{children:"JSON"})," to extract JSON from the HTML."]})]}),(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:["Specify the separator to use between multiple outputs. Default for ",(0,r.jsx)(t.strong,{children:"Text"})," is ",(0,r.jsx)(t.code,{children:"\\n\\n"}),". Default for ",(0,r.jsx)(t.strong,{children:"Raw HTML"})," is ",(0,r.jsx)(t.code,{children:"\\n\x3c!-- Separator --\x3e\\n"}),"."]})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"clean_extra_whitespace"}),(0,r.jsx)(t.td,{children:"Clean Extra Whitespace"}),(0,r.jsxs)(t.td,{children:["Whether to clean excessive blank lines in the text output. Only applies to ",(0,r.jsx)(t.code,{children:"Text"})," format."]})]})]})]}),"\n",(0,r.jsx)(t.h3,{id:"outputs-7",children:"Outputs"}),"\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:["List of ",(0,r.jsx)(t.a,{href:"/concepts-objects",children:"Data"})," objects containing fetched content and metadata."]})]}),(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:"Fetched content as formatted text, with applied separators and cleaning."})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"dataframe"}),(0,r.jsx)(t.td,{children:"DataFrame"}),(0,r.jsxs)(t.td,{children:["Content formatted as a ",(0,r.jsx)(t.a,{href:"/concepts-objects#dataframe-object",children:"DataFrame"})," object."]})]})]})]}),"\n",(0,r.jsx)(t.h2,{id:"webhook",children:"Webhook"}),"\n",(0,r.jsx)(t.p,{children:"This component defines a webhook trigger that runs a flow when it receives an HTTP POST request."}),"\n",(0,r.jsxs)(t.p,{children:["If the input is not valid JSON, the component wraps it in a ",(0,r.jsx)(t.code,{children:"payload"})," object so that it can be processed and still trigger the flow. The component does not require an API key."]}),"\n",(0,r.jsxs)(t.p,{children:["When a ",(0,r.jsx)(t.strong,{children:"Webhook"})," component is added to the workspace, a new ",(0,r.jsx)(t.strong,{children:"Webhook cURL"})," tab becomes available in the ",(0,r.jsx)(t.strong,{children:"API"})," pane that contains an HTTP POST request for triggering the webhook component. For example:"]}),"\n",(0,r.jsx)(a.Code,{codeConfig:x,northPanel:{tabs:[""],active:"",heightRatio:1},files:[{name:"",focus:"",code:{lines:[{tokens:[{content:"curl ",props:{style:{color:"#FFA657"}}},{content:"-X ",props:{style:{color:"#79C0FF"}}},{content:"POST ",props:{style:{color:"#A5D6FF"}}},{content:"\\",props:{style:{color:"#79C0FF"}}}]},{tokens:[{content:' "http://127.0.0.1:7860/api/v1/webhook/**YOUR_FLOW_ID**" ',props:{style:{color:"#A5D6FF"}}},{content:"\\",props:{style:{color:"#79C0FF"}}}]},{tokens:[{content:" -H ",props:{style:{color:"#79C0FF"}}},{content:"'Content-Type: application/json'",props:{style:{color:"#A5D6FF"}}},{content:"\\",props:{style:{color:"#79C0FF"}}}]},{tokens:[{content:" -d ",props:{style:{color:"#79C0FF"}}},{content:'\'{"any": "data"}\'',props:{style:{color:"#A5D6FF"}}}]}],lang:"bash"},annotations:[]}]}),"\n",(0,r.jsx)(t.p,{children:"To test the webhook component:"}),"\n",(0,r.jsxs)(t.ol,{children:["\n",(0,r.jsxs)(t.li,{children:["Add a ",(0,r.jsx)(t.strong,{children:"Webhook"})," component to the flow."]}),"\n",(0,r.jsxs)(t.li,{children:["Connect the ",(0,r.jsx)(t.strong,{children:"Webhook"})," component's ",(0,r.jsx)(t.strong,{children:"Data"})," output to the ",(0,r.jsx)(t.strong,{children:"Data"})," input of a ",(0,r.jsx)(t.a,{href:"/components-processing#parser",children:"Parser"})," component."]}),"\n",(0,r.jsxs)(t.li,{children:["Connect the ",(0,r.jsx)(t.strong,{children:"Parser"})," component's ",(0,r.jsx)(t.strong,{children:"Parsed Text"})," output to the ",(0,r.jsx)(t.strong,{children:"Text"})," input of a ",(0,r.jsx)(t.a,{href:"/components-io#chat-output",children:"Chat Output"})," component."]}),"\n",(0,r.jsxs)(t.li,{children:["In the ",(0,r.jsx)(t.strong,{children:"Parser"})," component, under ",(0,r.jsx)(t.strong,{children:"Mode"}),", select ",(0,r.jsx)(t.strong,{children:"Stringify"}),".\nThis mode passes the webhook's data as a string for the ",(0,r.jsx)(t.strong,{children:"Chat Output"})," component to print."]}),"\n",(0,r.jsxs)(t.li,{children:["To send a POST request, copy the code from the ",(0,r.jsx)(t.strong,{children:"Webhook cURL"})," tab in the ",(0,r.jsx)(t.strong,{children:"API"})," pane and paste it into a terminal."]}),"\n",(0,r.jsx)(t.li,{children:"Send the POST request."}),"\n",(0,r.jsxs)(t.li,{children:["Open the ",(0,r.jsx)(t.strong,{children:"Playground"}),".\nYour JSON data is posted to the ",(0,r.jsx)(t.strong,{children:"Chat Output"})," component, which indicates that the webhook component is correctly triggering the flow."]}),"\n"]}),"\n",(0,r.jsx)(t.h3,{id:"inputs-8",children:"Inputs"}),"\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:"Description"})]})}),(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:"Payload"}),(0,r.jsx)(t.td,{children:"Receives a payload from external systems through HTTP POST requests."})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"curl"}),(0,r.jsx)(t.td,{children:"cURL"}),(0,r.jsx)(t.td,{children:"The cURL command template for making requests to this webhook."})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"endpoint"}),(0,r.jsx)(t.td,{children:"Endpoint"}),(0,r.jsx)(t.td,{children:"The endpoint URL where this webhook receives requests."})]})]})]}),"\n",(0,r.jsx)(t.h3,{id:"outputs-8",children:"Outputs"}),"\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:"Description"})]})}),(0,r.jsx)(t.tbody,{children:(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"output_data"}),(0,r.jsx)(t.td,{children:"Data"}),(0,r.jsxs)(t.td,{children:["Outputs processed data from the webhook input, and returns an empty ",(0,r.jsx)(t.a,{href:"/concepts-objects",children:"Data"})," object if no input is provided. If the input is not valid JSON, the component wraps it in a ",(0,r.jsx)(t.code,{children:"payload"})," object."]})]})})]})]})}function u(e={}){const{wrapper:t}={...(0,i.R)(),...e.components};return t?(0,r.jsx)(t,{...e,children:(0,r.jsx)(p,{...e})}):p(e)}function m(e,t){throw new Error("Expected "+(t?"component":"object")+" `"+e+"` to be defined: you likely forgot to import, pass, or provide it.")}},55228:(e,t,n)=>{n.d(t,{A:()=>s});const s=n.p+"assets/images/component-url-11d5306d5c7a52a376fab32344eab7a2.png"},80352:(e,t,n)=>{n.d(t,{A:()=>s});const s=n.p+"assets/images/url-component-fb712df73581345c0f344013ce6ff2fd.png"},84443:(e,t,n)=>{n.d(t,{A:()=>i});n(96540);var s=n(64058),r=n(74848);function i(e){let{name:t,...n}=e;const i=s[t];return i?(0,r.jsx)(i,{...n}):null}}}]); \ No newline at end of file diff --git a/assets/js/runtime~main.aa121d7a.js b/assets/js/runtime~main.ac9da146.js similarity index 93% rename from assets/js/runtime~main.aa121d7a.js rename to assets/js/runtime~main.ac9da146.js index 236ed501e8..42e2d463a1 100644 --- a/assets/js/runtime~main.aa121d7a.js +++ b/assets/js/runtime~main.ac9da146.js @@ -1 +1 @@ -(()=>{"use strict";var e,a,c,f,d,b={},t={};function r(e){var a=t[e];if(void 0!==a)return a.exports;var c=t[e]={id:e,loaded:!1,exports:{}};return b[e].call(c.exports,c,c.exports,r),c.loaded=!0,c.exports}r.m=b,r.c=t,e=[],r.O=(a,c,f,d)=>{if(!c){var b=1/0;for(i=0;i=d)&&Object.keys(r.O).every((e=>r.O[e](c[o])))?c.splice(o--,1):(t=!1,d0&&e[i-1][2]>d;i--)e[i]=e[i-1];e[i]=[c,f,d]},r.n=e=>{var a=e&&e.__esModule?()=>e.default:()=>e;return r.d(a,{a:a}),a},c=Object.getPrototypeOf?e=>Object.getPrototypeOf(e):e=>e.__proto__,r.t=function(e,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 d=Object.create(null);r.r(d);var b={};a=a||[null,c({}),c([]),c(c)];for(var t=2&f&&e;"object"==typeof t&&!~a.indexOf(t);t=c(t))Object.getOwnPropertyNames(t).forEach((a=>b[a]=()=>e[a]));return b.default=()=>e,r.d(d,b),d},r.d=(e,a)=>{for(var c in a)r.o(a,c)&&!r.o(e,c)&&Object.defineProperty(e,c,{enumerable:!0,get:a[c]})},r.f={},r.e=e=>Promise.all(Object.keys(r.f).reduce(((a,c)=>(r.f[c](e,a),a)),[])),r.u=e=>"assets/js/"+({11:"d2df9b4e",31:"03e862ce",51:"b7251463",145:"0be1d5fe",191:"c643a6d5",202:"32c42bbe",230:"bc63ae25",265:"d3ca7a96",266:"eca2a4e0",299:"9b5a408c",321:"6e1a9721",368:"07c30ae4",417:"93e16042",444:"14f42f9e",730:"86b18dd0",762:"4af57a32",768:"6d684b63",787:"672a0eba",800:"a4c0ff01",868:"dc7b1ef3",944:"d3600190",957:"c141421f",964:"05d835b4",982:"021496c4",1022:"8a61012d",1035:"24d32e91",1079:"f5818e36",1185:"c2de64b8",1227:"647965d5",1394:"8054effa",1488:"ac3cc3f5",1500:"1e9025f7",1556:"264ffc80",1563:"3ef76b56",1567:"22dd74f7",1625:"92852ade",1690:"41a97a99",1841:"de94873f",1845:"2ab0d4f5",1956:"fe6f9601",2008:"7ad92a12",2073:"7b7db446",2097:"338a6f8e",2138:"1a4e3797",2273:"e756fa26",2288:"faf7ef88",2341:"0123c128",2551:"394022bb",2624:"8ff68e6f",2657:"a3ab51d1",2777:"b3ba68b4",2818:"a9b73094",3110:"6a2beaac",3225:"99a4401d",3247:"bd7ab245",3327:"6aa941bb",3347:"b5257597",3391:"f66238ae",3576:"64045095",3694:"c2b1730c",3740:"f113d167",3795:"c85076de",3832:"c3d82421",3859:"7679ca6e",3917:"c8dad5f1",3964:"829ff4d2",3968:"0e5205b8",4046:"9ac856ad",4133:"5cf11f26",4526:"8311683c",4615:"6801371f",4633:"c563aec0",4645:"fef056e9",4778:"e189eece",4784:"438e4337",4806:"fba42286",4841:"8298c1cb",4867:"d73246f8",4891:"ca67d85f",4930:"d2ad385b",4931:"a9b4f8aa",4954:"a71efd4a",4973:"2d2c4fcb",5107:"10156854",5109:"3542ed72",5138:"309383dc",5179:"41e3c105",5195:"b1ab2a41",5281:"a0511a5b",5284:"64ca91f1",5304:"7dbff1af",5339:"9447891f",5395:"98058046",5448:"5c480e8b",5467:"40d13080",5474:"d175aa8b",5475:"18f3809a",5513:"20d49d07",5514:"02955c09",5562:"20e9af62",5572:"873ebc27",5628:"a83bc7c0",5634:"9822a706",5647:"885eb549",5673:"73af8c33",5716:"946d1cee",5718:"5ccf4833",5742:"aba21aa0",5772:"4e7126f8",5799:"364e949f",5824:"214b2cc2",5865:"e1766139",5866:"3b577cbb",5883:"61cfab8e",5894:"f178e9b3",6003:"4d983c8e",6008:"445668ec",6010:"60c70af6",6053:"dfc50084",6066:"3f19c00a",6080:"4d15791b",6147:"ab17fe15",6201:"9ab37888",6214:"b1220dbd",6281:"c96ce3ed",6332:"873508e7",6350:"188ee668",6419:"96eb0e67",6445:"9fb9a766",6473:"4c5e977b",6511:"320c2db0",6559:"6f13807a",6649:"02e43f39",6682:"5a6d6120",6688:"388c3769",6753:"ff349d2f",6757:"86bd0a2e",6890:"8b85e1d0",6920:"c817e236",6934:"d745f4e6",6949:"b36bb719",7088:"91282a5c",7098:"a7bd4aaa",7108:"688feaef",7118:"4ce9199e",7142:"d0c1f670",7159:"aecfdd3d",7165:"547df4a1",7211:"cacdc615",7338:"c39b795e",7339:"7a774ddf",7408:"3ae94ad4",7453:"fdefa9a8",7462:"921b5fc1",7472:"744aaf8b",7507:"651ef245",7713:"3a82b27e",7894:"0f44198a",8031:"25bf2d67",8054:"85112c90",8064:"274fd934",8085:"cc44357e",8102:"019dbd1f",8184:"222029a9",8188:"ecd67556",8196:"75a9e1e0",8208:"216e3ed7",8245:"5e834a3c",8298:"153f2b62",8304:"73d1a090",8356:"c6a5eaec",8374:"261f8123",8401:"17896441",8504:"e6c6a4d2",8598:"44dfcf75",8661:"8f774222",8679:"3705a9c0",8927:"ae68aa8b",8929:"172b3cfb",8953:"adef6868",8977:"e5eb12ce",9036:"850d3674",9048:"a94703ab",9099:"b1bc5ffe",9126:"169603ea",9141:"19136925",9306:"667d0790",9371:"991799c5",9431:"cd8dccb5",9453:"913561e8",9455:"54175a6c",9476:"57c9a2b8",9479:"4e038a6a",9483:"7823fa72",9509:"49311ca0",9555:"dedd5914",9619:"29b8e27a",9642:"eae80ce0",9647:"5e95c892",9681:"5ff9f4db",9705:"ee3b5967",9731:"52edee88",9751:"25255263",9752:"72d61395",9789:"537e1953",9836:"b3c57e4b",9888:"be76515e",9905:"43df3697"}[e]||e)+"."+{11:"168581d1",31:"43b16ba0",51:"41498688",145:"9d54f496",191:"83533b11",202:"69f8fc12",230:"77c8c240",265:"b8b17601",266:"c2163ebe",299:"d952b796",321:"3ffaf0d0",368:"c9246492",417:"423af991",444:"a6d9ecf3",730:"03766140",756:"240f2e9c",762:"f26eeca8",768:"959a4bbe",787:"d1de1e24",800:"c2dd11be",868:"d601174d",900:"f83a9a5d",944:"ad8345f5",957:"da9e1d2b",964:"28ff855d",982:"bd4bbe43",1022:"11242dbc",1035:"be5d74c5",1079:"812abec2",1185:"f640094c",1227:"efa89a5e",1394:"c6bf3115",1488:"0fd73816",1500:"97378ff5",1556:"673367c0",1563:"892a275e",1567:"1d02fab2",1625:"14cdddbe",1690:"18a0aabc",1809:"2ba71c72",1841:"2b011ec8",1845:"d354f8ad",1956:"0790982a",2008:"7ff881a6",2073:"6755cfe3",2097:"e2eb4320",2138:"02023697",2273:"fad9ed79",2288:"c860cf3b",2341:"f79cba73",2551:"2680f7e9",2624:"34deb45b",2657:"e301f410",2777:"e7886ea7",2818:"e14e61cc",3042:"f1fb0b14",3110:"0cb7cba6",3225:"125619ad",3247:"122fa329",3327:"ea2cd923",3347:"ed4c3a68",3391:"20b884ca",3576:"d3102945",3694:"e6dfa3ca",3740:"3b4b7014",3795:"0272ba02",3832:"e1931c05",3859:"ab383010",3917:"5b041d0c",3964:"33002324",3968:"da2769ba",3997:"ff54fe17",4046:"f7eca8e9",4058:"44d6af12",4133:"56fe7f12",4526:"46dbc5ed",4615:"82ac6ca0",4633:"2670172c",4645:"6f7c5ff8",4778:"28645669",4784:"94e93dbb",4806:"0f85ccb8",4841:"fad5bbcc",4867:"5b7ac5f5",4891:"818b374a",4930:"0dd2be1d",4931:"1f0853a9",4954:"6b159ac6",4973:"c4fea60c",5107:"1499c50a",5109:"534de25b",5138:"71993e93",5179:"b2881237",5195:"bebcd954",5281:"e2ab724c",5284:"2c396846",5304:"11ff4120",5339:"5447d46a",5395:"299e8e2d",5448:"34a5f81a",5467:"7bd80a85",5474:"21c9fbe2",5475:"d430c771",5513:"cdc0240e",5514:"855d0709",5562:"10eed1f2",5572:"ddc13f75",5628:"42006513",5634:"f0694192",5647:"5304d422",5673:"8a7c3581",5716:"2e412524",5718:"31276840",5742:"60b1d5b2",5772:"a7008733",5799:"a81e256c",5824:"df4edbad",5865:"786bf75c",5866:"ced87a42",5883:"6e960c1d",5894:"4ccf5f1a",6003:"35524587",6008:"5253986f",6010:"839f9e75",6053:"9b0d787e",6066:"076e5cc7",6080:"447a7218",6147:"0bd0c5ae",6201:"01e4e67e",6214:"41cb2bfe",6281:"60bd4a36",6332:"b2221cb0",6350:"01382664",6419:"76078b34",6445:"d3c24372",6473:"b5e32ff9",6511:"9f084237",6559:"c00a5ffd",6649:"667f9b4f",6682:"11546dbd",6688:"25512b38",6753:"fd250f80",6757:"88aaa7e5",6890:"af012556",6920:"20525113",6934:"8cef23f5",6949:"f6fdd0e4",7088:"1f49a1ed",7098:"d9bb61a0",7108:"b0173767",7118:"67e70c99",7142:"eaad0747",7159:"dceac5e8",7165:"3b87e098",7211:"2931db6c",7338:"ead0f1d0",7339:"38a12705",7408:"23b1699f",7453:"94ce1e19",7462:"5b0d7c49",7472:"4f49843b",7507:"f01e92e1",7713:"54701759",7894:"27692bde",8031:"d39ee16a",8054:"b01ef0b9",8064:"3dcda3b4",8085:"949a33d1",8102:"37d56f47",8158:"20de8b80",8184:"fc212127",8188:"75897100",8196:"9193a95c",8208:"c162501f",8245:"d723ee5e",8298:"633b75a4",8304:"c4e31b33",8356:"ff51d102",8374:"a7f6d0b6",8401:"bf953603",8504:"3b926452",8598:"70cf61ed",8661:"d1261411",8679:"627546dd",8913:"47209f3b",8927:"9d9ff467",8929:"99703724",8953:"f5324ebd",8977:"637025ee",9036:"0b9cf465",9048:"810f8ad8",9099:"46601ad6",9126:"c5e02c3c",9141:"d3838c09",9306:"8ecb1a62",9371:"537c060f",9431:"e4916159",9453:"ff972203",9455:"7fe77314",9476:"5ec69f98",9479:"6c9076f2",9483:"b1231ce2",9509:"b5d4cdad",9555:"dabc08f6",9619:"f661ff54",9642:"450b576a",9647:"e6d9c2b6",9681:"47d8123a",9705:"d8c5b908",9729:"b22b7ae1",9731:"61443ecd",9751:"80a4b9a2",9752:"be046320",9789:"a25e6068",9836:"69fcbaa3",9888:"1d44fd01",9905:"3d8e83e3"}[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={},d="langflow-docs:",r.l=(e,a,c,b)=>{if(f[e])f[e].push(a);else{var t,o;if(void 0!==c)for(var n=document.getElementsByTagName("script"),i=0;i{t.onerror=t.onload=null,clearTimeout(s);var d=f[e];if(delete f[e],t.parentNode&&t.parentNode.removeChild(t),d&&d.forEach((e=>e(c))),a)return a(c)},s=setTimeout(u.bind(null,void 0,{type:"timeout",target:t}),12e4);t.onerror=u.bind(null,t.onerror),t.onload=u.bind(null,t.onload),o&&document.head.appendChild(t)}},r.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},r.nmd=e=>(e.paths=[],e.children||(e.children=[]),e),r.p="/",r.gca=function(e){return e={10156854:"5107",17896441:"8401",19136925:"9141",25255263:"9751",64045095:"3576",98058046:"5395",d2df9b4e:"11","03e862ce":"31",b7251463:"51","0be1d5fe":"145",c643a6d5:"191","32c42bbe":"202",bc63ae25:"230",d3ca7a96:"265",eca2a4e0:"266","9b5a408c":"299","6e1a9721":"321","07c30ae4":"368","93e16042":"417","14f42f9e":"444","86b18dd0":"730","4af57a32":"762","6d684b63":"768","672a0eba":"787",a4c0ff01:"800",dc7b1ef3:"868",d3600190:"944",c141421f:"957","05d835b4":"964","021496c4":"982","8a61012d":"1022","24d32e91":"1035",f5818e36:"1079",c2de64b8:"1185","647965d5":"1227","8054effa":"1394",ac3cc3f5:"1488","1e9025f7":"1500","264ffc80":"1556","3ef76b56":"1563","22dd74f7":"1567","92852ade":"1625","41a97a99":"1690",de94873f:"1841","2ab0d4f5":"1845",fe6f9601:"1956","7ad92a12":"2008","7b7db446":"2073","338a6f8e":"2097","1a4e3797":"2138",e756fa26:"2273",faf7ef88:"2288","0123c128":"2341","394022bb":"2551","8ff68e6f":"2624",a3ab51d1:"2657",b3ba68b4:"2777",a9b73094:"2818","6a2beaac":"3110","99a4401d":"3225",bd7ab245:"3247","6aa941bb":"3327",b5257597:"3347",f66238ae:"3391",c2b1730c:"3694",f113d167:"3740",c85076de:"3795",c3d82421:"3832","7679ca6e":"3859",c8dad5f1:"3917","829ff4d2":"3964","0e5205b8":"3968","9ac856ad":"4046","5cf11f26":"4133","8311683c":"4526","6801371f":"4615",c563aec0:"4633",fef056e9:"4645",e189eece:"4778","438e4337":"4784",fba42286:"4806","8298c1cb":"4841",d73246f8:"4867",ca67d85f:"4891",d2ad385b:"4930",a9b4f8aa:"4931",a71efd4a:"4954","2d2c4fcb":"4973","3542ed72":"5109","309383dc":"5138","41e3c105":"5179",b1ab2a41:"5195",a0511a5b:"5281","64ca91f1":"5284","7dbff1af":"5304","9447891f":"5339","5c480e8b":"5448","40d13080":"5467",d175aa8b:"5474","18f3809a":"5475","20d49d07":"5513","02955c09":"5514","20e9af62":"5562","873ebc27":"5572",a83bc7c0:"5628","9822a706":"5634","885eb549":"5647","73af8c33":"5673","946d1cee":"5716","5ccf4833":"5718",aba21aa0:"5742","4e7126f8":"5772","364e949f":"5799","214b2cc2":"5824",e1766139:"5865","3b577cbb":"5866","61cfab8e":"5883",f178e9b3:"5894","4d983c8e":"6003","445668ec":"6008","60c70af6":"6010",dfc50084:"6053","3f19c00a":"6066","4d15791b":"6080",ab17fe15:"6147","9ab37888":"6201",b1220dbd:"6214",c96ce3ed:"6281","873508e7":"6332","188ee668":"6350","96eb0e67":"6419","9fb9a766":"6445","4c5e977b":"6473","320c2db0":"6511","6f13807a":"6559","02e43f39":"6649","5a6d6120":"6682","388c3769":"6688",ff349d2f:"6753","86bd0a2e":"6757","8b85e1d0":"6890",c817e236:"6920",d745f4e6:"6934",b36bb719:"6949","91282a5c":"7088",a7bd4aaa:"7098","688feaef":"7108","4ce9199e":"7118",d0c1f670:"7142",aecfdd3d:"7159","547df4a1":"7165",cacdc615:"7211",c39b795e:"7338","7a774ddf":"7339","3ae94ad4":"7408",fdefa9a8:"7453","921b5fc1":"7462","744aaf8b":"7472","651ef245":"7507","3a82b27e":"7713","0f44198a":"7894","25bf2d67":"8031","85112c90":"8054","274fd934":"8064",cc44357e:"8085","019dbd1f":"8102","222029a9":"8184",ecd67556:"8188","75a9e1e0":"8196","216e3ed7":"8208","5e834a3c":"8245","153f2b62":"8298","73d1a090":"8304",c6a5eaec:"8356","261f8123":"8374",e6c6a4d2:"8504","44dfcf75":"8598","8f774222":"8661","3705a9c0":"8679",ae68aa8b:"8927","172b3cfb":"8929",adef6868:"8953",e5eb12ce:"8977","850d3674":"9036",a94703ab:"9048",b1bc5ffe:"9099","169603ea":"9126","667d0790":"9306","991799c5":"9371",cd8dccb5:"9431","913561e8":"9453","54175a6c":"9455","57c9a2b8":"9476","4e038a6a":"9479","7823fa72":"9483","49311ca0":"9509",dedd5914:"9555","29b8e27a":"9619",eae80ce0:"9642","5e95c892":"9647","5ff9f4db":"9681",ee3b5967:"9705","52edee88":"9731","72d61395":"9752","537e1953":"9789",b3c57e4b:"9836",be76515e:"9888","43df3697":"9905"}[e]||e,r.p+r.u(e)},(()=>{var e={5354:0,1869:0};r.f.j=(a,c)=>{var f=r.o(e,a)?e[a]:void 0;if(0!==f)if(f)c.push(f[2]);else if(/^(1869|5354)$/.test(a))e[a]=0;else{var d=new Promise(((c,d)=>f=e[a]=[c,d]));c.push(f[2]=d);var b=r.p+r.u(a),t=new Error;r.l(b,(c=>{if(r.o(e,a)&&(0!==(f=e[a])&&(e[a]=void 0),f)){var d=c&&("load"===c.type?"missing":c.type),b=c&&c.target&&c.target.src;t.message="Loading chunk "+a+" failed.\n("+d+": "+b+")",t.name="ChunkLoadError",t.type=d,t.request=b,f[1](t)}}),"chunk-"+a,a)}},r.O.j=a=>0===e[a];var a=(a,c)=>{var f,d,b=c[0],t=c[1],o=c[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(c);n{"use strict";var e,a,c,f,d,b={},t={};function r(e){var a=t[e];if(void 0!==a)return a.exports;var c=t[e]={id:e,loaded:!1,exports:{}};return b[e].call(c.exports,c,c.exports,r),c.loaded=!0,c.exports}r.m=b,r.c=t,e=[],r.O=(a,c,f,d)=>{if(!c){var b=1/0;for(i=0;i=d)&&Object.keys(r.O).every((e=>r.O[e](c[o])))?c.splice(o--,1):(t=!1,d0&&e[i-1][2]>d;i--)e[i]=e[i-1];e[i]=[c,f,d]},r.n=e=>{var a=e&&e.__esModule?()=>e.default:()=>e;return r.d(a,{a:a}),a},c=Object.getPrototypeOf?e=>Object.getPrototypeOf(e):e=>e.__proto__,r.t=function(e,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 d=Object.create(null);r.r(d);var b={};a=a||[null,c({}),c([]),c(c)];for(var t=2&f&&e;"object"==typeof t&&!~a.indexOf(t);t=c(t))Object.getOwnPropertyNames(t).forEach((a=>b[a]=()=>e[a]));return b.default=()=>e,r.d(d,b),d},r.d=(e,a)=>{for(var c in a)r.o(a,c)&&!r.o(e,c)&&Object.defineProperty(e,c,{enumerable:!0,get:a[c]})},r.f={},r.e=e=>Promise.all(Object.keys(r.f).reduce(((a,c)=>(r.f[c](e,a),a)),[])),r.u=e=>"assets/js/"+({11:"d2df9b4e",31:"03e862ce",51:"b7251463",145:"0be1d5fe",191:"c643a6d5",202:"32c42bbe",230:"bc63ae25",265:"d3ca7a96",266:"eca2a4e0",299:"9b5a408c",321:"6e1a9721",368:"07c30ae4",417:"93e16042",444:"14f42f9e",730:"86b18dd0",762:"4af57a32",768:"6d684b63",787:"672a0eba",800:"a4c0ff01",868:"dc7b1ef3",944:"d3600190",957:"c141421f",964:"05d835b4",982:"021496c4",1022:"8a61012d",1035:"24d32e91",1079:"f5818e36",1185:"c2de64b8",1227:"647965d5",1394:"8054effa",1488:"ac3cc3f5",1500:"1e9025f7",1556:"264ffc80",1563:"3ef76b56",1567:"22dd74f7",1625:"92852ade",1690:"41a97a99",1841:"de94873f",1845:"2ab0d4f5",1956:"fe6f9601",2008:"7ad92a12",2073:"7b7db446",2097:"338a6f8e",2138:"1a4e3797",2273:"e756fa26",2288:"faf7ef88",2341:"0123c128",2551:"394022bb",2624:"8ff68e6f",2657:"a3ab51d1",2777:"b3ba68b4",2818:"a9b73094",3110:"6a2beaac",3225:"99a4401d",3247:"bd7ab245",3327:"6aa941bb",3347:"b5257597",3391:"f66238ae",3576:"64045095",3694:"c2b1730c",3740:"f113d167",3795:"c85076de",3832:"c3d82421",3859:"7679ca6e",3917:"c8dad5f1",3964:"829ff4d2",3968:"0e5205b8",4046:"9ac856ad",4133:"5cf11f26",4526:"8311683c",4615:"6801371f",4633:"c563aec0",4645:"fef056e9",4778:"e189eece",4784:"438e4337",4806:"fba42286",4841:"8298c1cb",4867:"d73246f8",4891:"ca67d85f",4930:"d2ad385b",4931:"a9b4f8aa",4954:"a71efd4a",4973:"2d2c4fcb",5107:"10156854",5109:"3542ed72",5138:"309383dc",5179:"41e3c105",5195:"b1ab2a41",5281:"a0511a5b",5284:"64ca91f1",5304:"7dbff1af",5339:"9447891f",5395:"98058046",5448:"5c480e8b",5467:"40d13080",5474:"d175aa8b",5475:"18f3809a",5513:"20d49d07",5514:"02955c09",5562:"20e9af62",5572:"873ebc27",5628:"a83bc7c0",5634:"9822a706",5647:"885eb549",5673:"73af8c33",5716:"946d1cee",5718:"5ccf4833",5742:"aba21aa0",5772:"4e7126f8",5799:"364e949f",5824:"214b2cc2",5865:"e1766139",5866:"3b577cbb",5883:"61cfab8e",5894:"f178e9b3",6003:"4d983c8e",6008:"445668ec",6010:"60c70af6",6053:"dfc50084",6066:"3f19c00a",6080:"4d15791b",6147:"ab17fe15",6201:"9ab37888",6214:"b1220dbd",6281:"c96ce3ed",6332:"873508e7",6350:"188ee668",6419:"96eb0e67",6445:"9fb9a766",6473:"4c5e977b",6511:"320c2db0",6559:"6f13807a",6649:"02e43f39",6682:"5a6d6120",6688:"388c3769",6753:"ff349d2f",6757:"86bd0a2e",6890:"8b85e1d0",6920:"c817e236",6934:"d745f4e6",6949:"b36bb719",7088:"91282a5c",7098:"a7bd4aaa",7108:"688feaef",7118:"4ce9199e",7142:"d0c1f670",7159:"aecfdd3d",7165:"547df4a1",7211:"cacdc615",7338:"c39b795e",7339:"7a774ddf",7408:"3ae94ad4",7453:"fdefa9a8",7462:"921b5fc1",7472:"744aaf8b",7507:"651ef245",7713:"3a82b27e",7894:"0f44198a",8031:"25bf2d67",8054:"85112c90",8064:"274fd934",8085:"cc44357e",8102:"019dbd1f",8184:"222029a9",8188:"ecd67556",8196:"75a9e1e0",8208:"216e3ed7",8245:"5e834a3c",8298:"153f2b62",8304:"73d1a090",8356:"c6a5eaec",8374:"261f8123",8401:"17896441",8504:"e6c6a4d2",8598:"44dfcf75",8661:"8f774222",8679:"3705a9c0",8927:"ae68aa8b",8929:"172b3cfb",8953:"adef6868",8977:"e5eb12ce",9036:"850d3674",9048:"a94703ab",9099:"b1bc5ffe",9126:"169603ea",9141:"19136925",9306:"667d0790",9371:"991799c5",9431:"cd8dccb5",9453:"913561e8",9455:"54175a6c",9476:"57c9a2b8",9479:"4e038a6a",9483:"7823fa72",9509:"49311ca0",9555:"dedd5914",9619:"29b8e27a",9642:"eae80ce0",9647:"5e95c892",9681:"5ff9f4db",9705:"ee3b5967",9731:"52edee88",9751:"25255263",9752:"72d61395",9789:"537e1953",9836:"b3c57e4b",9888:"be76515e",9905:"43df3697"}[e]||e)+"."+{11:"168581d1",31:"43b16ba0",51:"41498688",145:"b571522a",191:"83533b11",202:"69f8fc12",230:"77c8c240",265:"b8b17601",266:"c2163ebe",299:"d952b796",321:"b2f38580",368:"c9246492",417:"423af991",444:"a6d9ecf3",730:"03766140",756:"240f2e9c",762:"f26eeca8",768:"959a4bbe",787:"d1de1e24",800:"c2dd11be",868:"d601174d",900:"f83a9a5d",944:"ad8345f5",957:"da9e1d2b",964:"28ff855d",982:"bd4bbe43",1022:"11242dbc",1035:"be5d74c5",1079:"812abec2",1185:"f640094c",1227:"9389c053",1394:"c6bf3115",1488:"0fd73816",1500:"97378ff5",1556:"673367c0",1563:"892a275e",1567:"f52a55a9",1625:"14cdddbe",1690:"18a0aabc",1809:"2ba71c72",1841:"2b011ec8",1845:"29af1518",1956:"0790982a",2008:"7ff881a6",2073:"6755cfe3",2097:"e2eb4320",2138:"02023697",2273:"fad9ed79",2288:"c860cf3b",2341:"f79cba73",2551:"2680f7e9",2624:"34deb45b",2657:"e301f410",2777:"e7886ea7",2818:"e14e61cc",3042:"f1fb0b14",3110:"0cb7cba6",3225:"125619ad",3247:"122fa329",3327:"6cf4daa5",3347:"ed4c3a68",3391:"bba50808",3576:"d3102945",3694:"e6dfa3ca",3740:"3b4b7014",3795:"0272ba02",3832:"e1931c05",3859:"ab383010",3917:"5b041d0c",3964:"33002324",3968:"da2769ba",3997:"ff54fe17",4046:"f7eca8e9",4058:"44d6af12",4133:"56fe7f12",4526:"46dbc5ed",4615:"82ac6ca0",4633:"2670172c",4645:"6f7c5ff8",4778:"28645669",4784:"94e93dbb",4806:"0f85ccb8",4841:"fad5bbcc",4867:"5b7ac5f5",4891:"818b374a",4930:"0dd2be1d",4931:"1f0853a9",4954:"6b159ac6",4973:"c4fea60c",5107:"1499c50a",5109:"534de25b",5138:"71993e93",5179:"b2881237",5195:"bebcd954",5281:"e2ab724c",5284:"2c396846",5304:"11ff4120",5339:"5447d46a",5395:"299e8e2d",5448:"34a5f81a",5467:"7bd80a85",5474:"21c9fbe2",5475:"d430c771",5513:"cdc0240e",5514:"855d0709",5562:"10eed1f2",5572:"ddc13f75",5628:"42006513",5634:"f0694192",5647:"b5bc7ea1",5673:"8a7c3581",5716:"2e412524",5718:"31276840",5742:"60b1d5b2",5772:"a7008733",5799:"a81e256c",5824:"df4edbad",5865:"786bf75c",5866:"ced87a42",5883:"6e960c1d",5894:"4ccf5f1a",6003:"35524587",6008:"5253986f",6010:"839f9e75",6053:"9b0d787e",6066:"076e5cc7",6080:"447a7218",6147:"0bd0c5ae",6201:"01e4e67e",6214:"41cb2bfe",6281:"60bd4a36",6332:"b2221cb0",6350:"01382664",6419:"76078b34",6445:"d3c24372",6473:"b5e32ff9",6511:"9f084237",6559:"c00a5ffd",6649:"667f9b4f",6682:"11546dbd",6688:"25512b38",6753:"fd250f80",6757:"88aaa7e5",6890:"af012556",6920:"20525113",6934:"8cef23f5",6949:"f6fdd0e4",7088:"1f49a1ed",7098:"d9bb61a0",7108:"b0173767",7118:"67e70c99",7142:"eaad0747",7159:"dceac5e8",7165:"3b87e098",7211:"2931db6c",7338:"e7a7ebbf",7339:"38a12705",7408:"e49d3ad7",7453:"40dce170",7462:"4fa35110",7472:"4f49843b",7507:"f01e92e1",7713:"54701759",7894:"27692bde",8031:"d39ee16a",8054:"b01ef0b9",8064:"3dcda3b4",8085:"949a33d1",8102:"37d56f47",8158:"20de8b80",8184:"fc212127",8188:"75897100",8196:"9193a95c",8208:"c162501f",8245:"d723ee5e",8298:"633b75a4",8304:"c4e31b33",8356:"ff51d102",8374:"a7f6d0b6",8401:"bf953603",8504:"4a7e2d69",8598:"70cf61ed",8661:"d4baa7a3",8679:"627546dd",8913:"47209f3b",8927:"4c824b91",8929:"99703724",8953:"7239ff5d",8977:"637025ee",9036:"0b9cf465",9048:"810f8ad8",9099:"46601ad6",9126:"c5e02c3c",9141:"d3838c09",9306:"8ecb1a62",9371:"537c060f",9431:"e4916159",9453:"ff972203",9455:"7fe77314",9476:"5ec69f98",9479:"6c9076f2",9483:"b1231ce2",9509:"b5d4cdad",9555:"dabc08f6",9619:"f661ff54",9642:"450b576a",9647:"e6d9c2b6",9681:"47d8123a",9705:"d8c5b908",9729:"b22b7ae1",9731:"61443ecd",9751:"80a4b9a2",9752:"be046320",9789:"a25e6068",9836:"69fcbaa3",9888:"1d44fd01",9905:"3d8e83e3"}[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={},d="langflow-docs:",r.l=(e,a,c,b)=>{if(f[e])f[e].push(a);else{var t,o;if(void 0!==c)for(var n=document.getElementsByTagName("script"),i=0;i{t.onerror=t.onload=null,clearTimeout(s);var d=f[e];if(delete f[e],t.parentNode&&t.parentNode.removeChild(t),d&&d.forEach((e=>e(c))),a)return a(c)},s=setTimeout(u.bind(null,void 0,{type:"timeout",target:t}),12e4);t.onerror=u.bind(null,t.onerror),t.onload=u.bind(null,t.onload),o&&document.head.appendChild(t)}},r.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},r.nmd=e=>(e.paths=[],e.children||(e.children=[]),e),r.p="/",r.gca=function(e){return e={10156854:"5107",17896441:"8401",19136925:"9141",25255263:"9751",64045095:"3576",98058046:"5395",d2df9b4e:"11","03e862ce":"31",b7251463:"51","0be1d5fe":"145",c643a6d5:"191","32c42bbe":"202",bc63ae25:"230",d3ca7a96:"265",eca2a4e0:"266","9b5a408c":"299","6e1a9721":"321","07c30ae4":"368","93e16042":"417","14f42f9e":"444","86b18dd0":"730","4af57a32":"762","6d684b63":"768","672a0eba":"787",a4c0ff01:"800",dc7b1ef3:"868",d3600190:"944",c141421f:"957","05d835b4":"964","021496c4":"982","8a61012d":"1022","24d32e91":"1035",f5818e36:"1079",c2de64b8:"1185","647965d5":"1227","8054effa":"1394",ac3cc3f5:"1488","1e9025f7":"1500","264ffc80":"1556","3ef76b56":"1563","22dd74f7":"1567","92852ade":"1625","41a97a99":"1690",de94873f:"1841","2ab0d4f5":"1845",fe6f9601:"1956","7ad92a12":"2008","7b7db446":"2073","338a6f8e":"2097","1a4e3797":"2138",e756fa26:"2273",faf7ef88:"2288","0123c128":"2341","394022bb":"2551","8ff68e6f":"2624",a3ab51d1:"2657",b3ba68b4:"2777",a9b73094:"2818","6a2beaac":"3110","99a4401d":"3225",bd7ab245:"3247","6aa941bb":"3327",b5257597:"3347",f66238ae:"3391",c2b1730c:"3694",f113d167:"3740",c85076de:"3795",c3d82421:"3832","7679ca6e":"3859",c8dad5f1:"3917","829ff4d2":"3964","0e5205b8":"3968","9ac856ad":"4046","5cf11f26":"4133","8311683c":"4526","6801371f":"4615",c563aec0:"4633",fef056e9:"4645",e189eece:"4778","438e4337":"4784",fba42286:"4806","8298c1cb":"4841",d73246f8:"4867",ca67d85f:"4891",d2ad385b:"4930",a9b4f8aa:"4931",a71efd4a:"4954","2d2c4fcb":"4973","3542ed72":"5109","309383dc":"5138","41e3c105":"5179",b1ab2a41:"5195",a0511a5b:"5281","64ca91f1":"5284","7dbff1af":"5304","9447891f":"5339","5c480e8b":"5448","40d13080":"5467",d175aa8b:"5474","18f3809a":"5475","20d49d07":"5513","02955c09":"5514","20e9af62":"5562","873ebc27":"5572",a83bc7c0:"5628","9822a706":"5634","885eb549":"5647","73af8c33":"5673","946d1cee":"5716","5ccf4833":"5718",aba21aa0:"5742","4e7126f8":"5772","364e949f":"5799","214b2cc2":"5824",e1766139:"5865","3b577cbb":"5866","61cfab8e":"5883",f178e9b3:"5894","4d983c8e":"6003","445668ec":"6008","60c70af6":"6010",dfc50084:"6053","3f19c00a":"6066","4d15791b":"6080",ab17fe15:"6147","9ab37888":"6201",b1220dbd:"6214",c96ce3ed:"6281","873508e7":"6332","188ee668":"6350","96eb0e67":"6419","9fb9a766":"6445","4c5e977b":"6473","320c2db0":"6511","6f13807a":"6559","02e43f39":"6649","5a6d6120":"6682","388c3769":"6688",ff349d2f:"6753","86bd0a2e":"6757","8b85e1d0":"6890",c817e236:"6920",d745f4e6:"6934",b36bb719:"6949","91282a5c":"7088",a7bd4aaa:"7098","688feaef":"7108","4ce9199e":"7118",d0c1f670:"7142",aecfdd3d:"7159","547df4a1":"7165",cacdc615:"7211",c39b795e:"7338","7a774ddf":"7339","3ae94ad4":"7408",fdefa9a8:"7453","921b5fc1":"7462","744aaf8b":"7472","651ef245":"7507","3a82b27e":"7713","0f44198a":"7894","25bf2d67":"8031","85112c90":"8054","274fd934":"8064",cc44357e:"8085","019dbd1f":"8102","222029a9":"8184",ecd67556:"8188","75a9e1e0":"8196","216e3ed7":"8208","5e834a3c":"8245","153f2b62":"8298","73d1a090":"8304",c6a5eaec:"8356","261f8123":"8374",e6c6a4d2:"8504","44dfcf75":"8598","8f774222":"8661","3705a9c0":"8679",ae68aa8b:"8927","172b3cfb":"8929",adef6868:"8953",e5eb12ce:"8977","850d3674":"9036",a94703ab:"9048",b1bc5ffe:"9099","169603ea":"9126","667d0790":"9306","991799c5":"9371",cd8dccb5:"9431","913561e8":"9453","54175a6c":"9455","57c9a2b8":"9476","4e038a6a":"9479","7823fa72":"9483","49311ca0":"9509",dedd5914:"9555","29b8e27a":"9619",eae80ce0:"9642","5e95c892":"9647","5ff9f4db":"9681",ee3b5967:"9705","52edee88":"9731","72d61395":"9752","537e1953":"9789",b3c57e4b:"9836",be76515e:"9888","43df3697":"9905"}[e]||e,r.p+r.u(e)},(()=>{var e={5354:0,1869:0};r.f.j=(a,c)=>{var f=r.o(e,a)?e[a]:void 0;if(0!==f)if(f)c.push(f[2]);else if(/^(1869|5354)$/.test(a))e[a]=0;else{var d=new Promise(((c,d)=>f=e[a]=[c,d]));c.push(f[2]=d);var b=r.p+r.u(a),t=new Error;r.l(b,(c=>{if(r.o(e,a)&&(0!==(f=e[a])&&(e[a]=void 0),f)){var d=c&&("load"===c.type?"missing":c.type),b=c&&c.target&&c.target.src;t.message="Loading chunk "+a+" failed.\n("+d+": "+b+")",t.name="ChunkLoadError",t.type=d,t.request=b,f[1](t)}}),"chunk-"+a,a)}},r.O.j=a=>0===e[a];var a=(a,c)=>{var f,d,b=c[0],t=c[1],o=c[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(c);n - + diff --git a/components-agents.html b/components-agents.html index 4d2925473e..0f7bd2e1e9 100644 --- a/components-agents.html +++ b/components-agents.html @@ -21,7 +21,7 @@ - + @@ -36,107 +36,67 @@

Agent components in Langflow

Agent components define the behavior and capabilities of AI agents in your flow.

Agents use LLMs as a reasoning engine to decide which of the connected tool components to use to solve a problem.

-

Tools in agentic functions are, essentially, functions that the agent can call to perform tasks or access external resources. -A function is wrapped as a Tool object, with a common interface the agent understands. -Agents become aware of tools through tool registration, where the agent is provided a list of available tools, typically at agent initialization. The Tool object's description tells the agent what the tool can do.

+

Tools in agentic functions are essentially functions that the agent can call to perform tasks or access external resources. +A function is wrapped as a Tool object with a common interface the agent understands. +Agents become aware of tools through tool registration where the agent is provided a list of available tools typically at agent initialization. The Tool object's description tells the agent what the tool can do.

The agent then uses a connected LLM to reason through the problem to decide which tool is best for the job.

Use an agent in a flow​

The simple agent starter project uses an agent component connected to URL and Calculator tools to answer a user's questions. The OpenAI LLM acts as a brain for the agent to decide which tool to use. Tools are connected to agent components at the Tools port.

Simple agent starter flow

-

For a multi-agent example, see Create a problem-solving agent.

+

For a multi-agent example see, Create a problem-solving agent.

Agent component​

This component creates an agent that can use tools to answer questions and perform tasks based on given instructions.

The component includes an LLM model integration, a system message prompt, and a Tools port to connect tools to extend its capabilities.

For more information on this component, see the tool calling agent documentation.

-

Inputs​

-
NameTypeDescription
agent_llmDropdownThe provider of the language model that the agent will use to generate responses. Options include OpenAI and other providers, or Custom.
system_promptStringSystem Prompt: Initial instructions and context provided to guide the agent's behavior.
toolsListList of tools available for the agent to use.
input_valueStringThe input task or question for the agent to process.
add_current_date_toolBooleanIf true, adds a tool to the agent that returns the current date.
memoryMemoryOptional memory configuration for maintaining conversation history.
max_iterationsIntegerMaximum number of iterations the agent can perform.
handle_parsing_errorsBooleanWhether to handle parsing errors during agent execution.
verboseBooleanEnables verbose output for detailed logging.
-

Outputs​

-
NameTypeDescription
responseMessageThe agent's response to the given input task.
-

CSV Agent​

-

This component creates a CSV agent from a CSV file and LLM.

-

Inputs​

-
NameTypeDescription
llmLanguageModelLanguage model to use for the agent
pathFilePath to the CSV file
agent_typeStringType of agent to create (zero-shot-react-description, openai-functions, or openai-tools)
-

Outputs​

-
NameTypeDescription
agentAgentExecutorCSV agent instance
-

CrewAI Agent​

-

This component represents an Agent of CrewAI, allowing for the creation of specialized AI agents with defined roles, goals, and capabilities within a crew.

-

For more information, see the CrewAI documentation.

-

Inputs​

-
NameDisplay NameInfo
roleRoleThe role of the agent
goalGoalThe objective of the agent
backstoryBackstoryThe backstory of the agent
toolsToolsTools at agent's disposal
llmLanguage ModelLanguage model that will run the agent
memoryMemoryWhether the agent should have memory or not
verboseVerboseEnables verbose output
allow_delegationAllow DelegationWhether the agent is allowed to delegate tasks to other agents
allow_code_executionAllow Code ExecutionWhether the agent is allowed to execute code
kwargskwargsAdditional keyword arguments for the agent
-

Outputs​

-
NameDisplay NameInfo
outputAgentThe constructed CrewAI Agent object
-

Hierarchical Crew​

-

This component represents a group of agents, managing how they should collaborate and the tasks they should perform in a hierarchical structure. This component allows for the creation of a crew with a manager overseeing the task execution.

-

For more information, see the CrewAI documentation.

-

Inputs​

-
NameDisplay NameInfo
agentsAgentsList of Agent objects representing the crew members
tasksTasksList of HierarchicalTask objects representing the tasks to be executed
manager_llmManager LLMLanguage model for the manager agent (optional)
manager_agentManager AgentSpecific agent to act as the manager (optional)
verboseVerboseEnables verbose output for detailed logging
memoryMemorySpecifies the memory configuration for the crew
use_cacheUse CacheEnables caching of results
max_rpmMax RPMSets the maximum requests per minute
share_crewShare CrewDetermines if the crew information is shared among agents
function_calling_llmFunction Calling LLMSpecifies the language model for function calling
-

Outputs​

-
NameDisplay NameInfo
crewCrewThe constructed Crew object with hierarchical task execution
-

JSON Agent​

+
Parameters

Inputs

NameTypeDescription
agent_llmDropdownThe provider of the language model that the agent uses to generate responses. Options include OpenAI and other providers or Custom.
system_promptStringThe system prompt provides initial instructions and context to guide the agent's behavior.
toolsListThe list of tools available for the agent to use.
input_valueStringThe input task or question for the agent to process.
add_current_date_toolBooleanWhen true this adds a tool to the agent that returns the current date.
memoryMemoryAn optional memory configuration for maintaining conversation history.
max_iterationsIntegerThe maximum number of iterations the agent can perform.
handle_parsing_errorsBooleanThis determines whether to handle parsing errors during agent execution.
verboseBooleanThis enables verbose output for detailed logging.

Outputs

NameTypeDescription
responseMessageThe agent's response to the given input task.
+

Legacy components​

+

Legacy components are available for use but are no longer supported.

+

JSON Agent​

This component creates a JSON agent from a JSON or YAML file and an LLM.

-

Inputs​

-
NameTypeDescription
llmLanguageModelLanguage model to use for the agent
pathFilePath to the JSON or YAML file
-

Outputs​

-
NameTypeDescription
agentAgentExecutorJSON agent instance
-

OpenAI Tools Agent​

-

This component creates an OpenAI Tools Agent using LangChain.

-

For more information, see the LangChain documentation.

-

Inputs​

-
NameTypeDescription
llmLanguageModelLanguage model to use for the agent (must be tool-enabled)
system_promptStringSystem prompt for the agent
user_promptStringUser prompt template (must contain 'input' key)
chat_historyList[Data]Optional chat history for the agent
toolsList[Tool]List of tools available to the agent
-

Outputs​

-
NameTypeDescription
agentAgentExecutorOpenAI Tools Agent instance
-

OpenAPI Agent​

-

This component creates an OpenAPI Agent to interact with APIs defined by OpenAPI specifications.

-

For more information, see the LangChain documentation on OpenAPI Agents.

-

Inputs​

-
NameTypeDescription
llmLanguageModelLanguage model to use for the agent
pathFilePath to the OpenAPI specification file (JSON or YAML)
allow_dangerous_requestsBooleanWhether to allow potentially dangerous API requests
-

Outputs​

-
NameTypeDescription
agentAgentExecutorOpenAPI Agent instance
-

SQL Agent​

-

This component creates a SQL Agent to interact with SQL databases.

-

Inputs​

-
NameTypeDescription
llmLanguageModelLanguage model to use for the agent
database_uriStringURI of the SQL database to connect to
extra_toolsList[Tool]Additional tools to provide to the agent (optional)
-

Outputs​

-
NameTypeDescription
agentAgentExecutorSQL Agent instance
-

Sequential Crew​

+
Parameters

Inputs

NameTypeDescription
llmLanguageModelThe language model to use for the agent.
pathFileThe path to the JSON or YAML file.

Outputs

NameTypeDescription
agentAgentExecutorThe JSON agent instance.
+

Vector Store Agent​

+

This component creates a Vector Store Agent using LangChain.

+
Parameters

Inputs

NameTypeDescription
llmLanguageModelThe language model to use for the agent.
vectorstoreVectorStoreInfoThe vector store information for the agent to use.

Outputs

NameTypeDescription
agentAgentExecutorThe Vector Store Agent instance.
+

Vector Store Router Agent​

+

This component creates a Vector Store Router Agent using LangChain.

+
Parameters

Inputs

NameTypeDescription
llmLanguageModelThe language model to use for the agent.
vectorstoresList[VectorStoreInfo]The list of vector store information for the agent to route between.

Outputs

NameTypeDescription
agentAgentExecutorThe Vector Store Router Agent instance.
+

Moved components​

+

The following components are available under Bundles.

+

CrewAI Agent​

+

This component represents an Agent of CrewAI allowing for the creation of specialized AI agents with defined roles goals and capabilities within a crew.

+

For more information, see the CrewAI documentation.

+
Parameters

Inputs

NameDisplay NameInfo
roleRoleThe role of the agent.
goalGoalThe objective of the agent.
backstoryBackstoryThe backstory of the agent.
toolsToolsThe tools at the agent's disposal.
llmLanguage ModelThe language model that runs the agent.
memoryMemoryThis determines whether the agent should have memory or not.
verboseVerboseThis enables verbose output.
allow_delegationAllow DelegationThis determines whether the agent is allowed to delegate tasks to other agents.
allow_code_executionAllow Code ExecutionThis determines whether the agent is allowed to execute code.
kwargskwargsAdditional keyword arguments for the agent.

Outputs

NameDisplay NameInfo
outputAgentThe constructed CrewAI Agent object.
+

Hierarchical Crew​

+

This component represents a group of agents managing how they should collaborate and the tasks they should perform in a hierarchical structure. This component allows for the creation of a crew with a manager overseeing the task execution.

+

For more information, see the CrewAI documentation.

+
Parameters

Inputs

NameDisplay NameInfo
agentsAgentsThe list of Agent objects representing the crew members.
tasksTasksThe list of HierarchicalTask objects representing the tasks to be executed.
manager_llmManager LLMThe language model for the manager agent.
manager_agentManager AgentThe specific agent to act as the manager.
verboseVerboseThis enables verbose output for detailed logging.
memoryMemoryThe memory configuration for the crew.
use_cacheUse CacheThis enables caching of results.
max_rpmMax RPMThis sets the maximum requests per minute.
share_crewShare CrewThis determines if the crew information is shared among agents.
function_calling_llmFunction Calling LLMThe language model for function calling.

Outputs

NameDisplay NameInfo
crewCrewThe constructed Crew object with hierarchical task execution.
+

CSV Agent​

+

This component creates a CSV agent from a CSV file and LLM.

+
Parameters

Inputs

NameTypeDescription
llmLanguageModelThe language model to use for the agent.
pathFileThe path to the CSV file.
agent_typeStringThe type of agent to create.

Outputs

NameTypeDescription
agentAgentExecutorThe CSV agent instance.
+

OpenAI Tools Agent​

+

This component creates an OpenAI Tools Agent.

+
Parameters

Inputs

NameTypeDescription
llmLanguageModelThe language model to use.
toolsList of ToolsThe tools to give the agent access to.
system_promptStringThe system prompt to provide context to the agent.
input_valueStringThe user's input to the agent.
memoryMemoryThe memory for the agent to use for context persistence.
max_iterationsIntegerThe maximum number of iterations to allow the agent to execute.
verboseBooleanThis determines whether to print out the agent's intermediate steps.
handle_parsing_errorsBooleanThis determines whether to handle parsing errors in the agent.

Outputs

NameTypeDescription
agentAgentExecutorThe OpenAI Tools agent instance.
outputStringThe output from executing the agent on the input.
+

OpenAPI Agent​

+

This component creates an agent for interacting with OpenAPI services.

+
Parameters

Inputs

NameTypeDescription
llmLanguageModelThe language model to use.
openapi_specStringThe OpenAPI specification for the service.
base_urlStringThe base URL for the API.
headersDictThe optional headers for API requests.
agent_executor_kwargsDictThe optional parameters for the agent executor.

Outputs

NameTypeDescription
agentAgentExecutorThe OpenAPI agent instance.
+

Sequential Crew​

This component represents a group of agents with tasks that are executed sequentially. This component allows for the creation of a crew that performs tasks in a specific order.

For more information, see the CrewAI documentation.

-

Inputs​

-
NameDisplay NameInfo
tasksTasksList of SequentialTask objects representing the tasks to be executed
verboseVerboseEnables verbose output for detailed logging
memoryMemorySpecifies the memory configuration for the crew
use_cacheUse CacheEnables caching of results
max_rpmMax RPMSets the maximum requests per minute
share_crewShare CrewDetermines if the crew information is shared among agents
function_calling_llmFunction Calling LLMSpecifies the language model for function calling
-

Outputs​

-
NameDisplay NameInfo
crewCrewThe constructed Crew object with sequential task execution
-

Sequential task agent​

-

This component creates a CrewAI Task and its associated Agent, allowing for the definition of sequential tasks with specific agent roles and capabilities.

+
Parameters

Inputs

NameDisplay NameInfo
tasksTasksThe list of SequentialTask objects representing the tasks to be executed.
verboseVerboseThis enables verbose output for detailed logging.
memoryMemoryThe memory configuration for the crew.
use_cacheUse CacheThis enables caching of results.
max_rpmMax RPMThis sets the maximum requests per minute.
share_crewShare CrewThis determines if the crew information is shared among agents.
function_calling_llmFunction Calling LLMThe language model for function calling.

Outputs

NameDisplay NameInfo
crewCrewThe constructed Crew object with sequential task execution.
+

Sequential task agent​

+

This component creates a CrewAI Task and its associated Agent allowing for the definition of sequential tasks with specific agent roles and capabilities.

For more information, see the CrewAI documentation.

-

Inputs​

-
NameDisplay NameInfo
roleRoleThe role of the agent
goalGoalThe objective of the agent
backstoryBackstoryThe backstory of the agent
toolsToolsTools at agent's disposal
llmLanguage ModelLanguage model that will run the agent
memoryMemoryWhether the agent should have memory or not
verboseVerboseEnables verbose output
allow_delegationAllow DelegationWhether the agent is allowed to delegate tasks to other agents
allow_code_executionAllow Code ExecutionWhether the agent is allowed to execute code
agent_kwargsAgent kwargsAdditional kwargs for the agent
task_descriptionTask DescriptionDescriptive text detailing task's purpose and execution
expected_outputExpected Task OutputClear definition of expected task outcome
async_executionAsync ExecutionBoolean flag indicating asynchronous task execution
previous_taskPrevious TaskThe previous task in the sequence (for chaining)
-

Outputs​

-
NameDisplay NameInfo
task_outputSequential TaskList of SequentialTask objects representing the created tasks
-

Tool Calling Agent​

-

This component creates a Tool Calling Agent using LangChain.

-

Inputs​

-
NameTypeDescription
llmLanguageModelLanguage model to use for the agent
system_promptStringSystem prompt for the agent
user_promptStringUser prompt template (must contain 'input' key)
chat_historyList[Data]Optional chat history for the agent
toolsList[Tool]List of tools available to the agent
-

Outputs​

-
NameTypeDescription
agentAgentExecutorTool Calling Agent instance
-

Vector Store Agent​

-

This component creates a Vector Store Agent using LangChain.

-

Inputs​

-
NameTypeDescription
llmLanguageModelLanguage model to use for the agent
vectorstoreVectorStoreInfoVector store information for the agent to use
-

Outputs​

-
NameTypeDescription
agentAgentExecutorVector Store Agent instance
-

Vector Store Router Agent​

-

This component creates a Vector Store Router Agent using LangChain.

-

Inputs​

-
NameTypeDescription
llmLanguageModelLanguage model to use for the agent
vectorstoresList[VectorStoreInfo]List of vector store information for the agent to route between
-

Outputs​

-
NameTypeDescription
agentAgentExecutorVector Store Router Agent instance
-

XML Agent​

+
Parameters

Inputs

NameDisplay NameInfo
roleRoleThe role of the agent.
goalGoalThe objective of the agent.
backstoryBackstoryThe backstory of the agent.
toolsToolsThe tools at the agent's disposal.
llmLanguage ModelThe language model that runs the agent.
memoryMemoryThis determines whether the agent should have memory or not.
verboseVerboseThis enables verbose output.
allow_delegationAllow DelegationThis determines whether the agent is allowed to delegate tasks to other agents.
allow_code_executionAllow Code ExecutionThis determines whether the agent is allowed to execute code.
agent_kwargsAgent kwargsThe additional kwargs for the agent.
task_descriptionTask DescriptionThe descriptive text detailing the task's purpose and execution.
expected_outputExpected Task OutputThe clear definition of the expected task outcome.
async_executionAsync ExecutionThe boolean flag indicating asynchronous task execution.
previous_taskPrevious TaskThe previous task in the sequence for chaining.

Outputs

NameDisplay NameInfo
task_outputSequential TaskThe list of SequentialTask objects representing the created tasks.
+

SQL Agent​

+

This component creates an agent for interacting with SQL databases.

+
Parameters

Inputs

NameTypeDescription
llmLanguageModelThe language model to use.
databaseDatabaseThe SQL database connection.
top_kIntegerThe number of results to return from a SELECT query.
use_toolsBooleanThis determines whether to use tools for query execution.
return_intermediate_stepsBooleanThis determines whether to return the agent's intermediate steps.
max_iterationsIntegerThe maximum number of iterations to run the agent.
max_execution_timeIntegerThe maximum execution time in seconds.
early_stopping_methodStringThe method to use for early stopping.
verboseBooleanThis determines whether to print the agent's thoughts.

Outputs

NameTypeDescription
agentAgentExecutorThe SQL agent instance.
+

Tool Calling Agent​

+

This component creates an agent for structured tool calling with various language models.

+
Parameters

Inputs

NameTypeDescription
llmLanguageModelThe language model to use.
toolsList[Tool]The list of tools available to the agent.
system_messageStringThe system message to use for the agent.
return_intermediate_stepsBooleanThis determines whether to return the agent's intermediate steps.
max_iterationsIntegerThe maximum number of iterations to run the agent.
max_execution_timeIntegerThe maximum execution time in seconds.
early_stopping_methodStringThe method to use for early stopping.
verboseBooleanThis determines whether to print the agent's thoughts.

Outputs

NameTypeDescription
agentAgentExecutorThe tool calling agent instance.
+

XML Agent​

This component creates an XML Agent using LangChain.

The agent uses XML formatting for tool instructions to the Language Model.

-

Inputs​

-
NameTypeDescription
llmLanguageModelLanguage model to use for the agent
user_promptStringCustom prompt template for the agent (includes XML formatting instructions)
toolsList[Tool]List of tools available to the agent
-

Outputs​

-
NameTypeDescription
agentAgentExecutorXML Agent instance