langflow-base-nightly 0.5.1.dev2__py3-none-any.whl → 0.5.1.dev4__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- langflow/__init__.py +215 -0
- langflow/__main__.py +16 -2
- langflow/alembic/versions/006b3990db50_add_unique_constraints.py +4 -7
- langflow/alembic/versions/012fb73ac359_add_folder_table.py +4 -5
- langflow/alembic/versions/0ae3a2674f32_update_the_columns_that_need_to_change_.py +11 -20
- langflow/alembic/versions/0b8757876a7c_.py +4 -7
- langflow/alembic/versions/0d60fcbd4e8e_create_vertex_builds_table.py +4 -6
- langflow/alembic/versions/1a110b568907_replace_credential_table_with_variable.py +4 -5
- langflow/alembic/versions/1b8b740a6fa3_remove_fk_constraint_in_message_.py +32 -27
- langflow/alembic/versions/1c79524817ed_add_unique_constraints_per_user_in_.py +4 -5
- langflow/alembic/versions/1d90f8a0efe1_update_description_columns_type.py +4 -5
- langflow/alembic/versions/1eab2c3eb45e_event_error.py +14 -15
- langflow/alembic/versions/1ef9c4f3765d_.py +5 -10
- langflow/alembic/versions/1f4d6df60295_add_default_fields_column.py +4 -5
- langflow/alembic/versions/260dbcc8b680_adds_tables.py +4 -5
- langflow/alembic/versions/29fe8f1f806b_add_missing_index.py +4 -5
- langflow/alembic/versions/2ac71eb9c3ae_adds_credential_table.py +4 -7
- langflow/alembic/versions/3bb0ddf32dfb_add_unique_constraints_per_user_in_flow_.py +4 -5
- langflow/alembic/versions/4e5980a44eaa_fix_date_times_again.py +1 -2
- langflow/alembic/versions/58b28437a398_modify_nullable.py +1 -2
- langflow/alembic/versions/5ace73a7f223_new_remove_table_upgrade_op.py +6 -12
- langflow/alembic/versions/631faacf5da2_add_webhook_columns.py +4 -5
- langflow/alembic/versions/63b9c451fd30_add_icon_and_icon_bg_color_to_flow.py +4 -5
- langflow/alembic/versions/66f72f04a1de_add_mcp_support_with_project_settings_.py +21 -23
- langflow/alembic/versions/67cc006d50bf_add_profile_image_column.py +4 -5
- langflow/alembic/versions/6e7b581b5648_fix_nullable.py +4 -5
- langflow/alembic/versions/7843803a87b5_store_updates.py +4 -6
- langflow/alembic/versions/79e675cb6752_change_datetime_type.py +1 -2
- langflow/alembic/versions/7d2162acc8b2_adds_updated_at_and_folder_cols.py +4 -10
- langflow/alembic/versions/90be8e2ed91e_create_transactions_table.py +4 -6
- langflow/alembic/versions/93e2705fa8d6_add_column_save_path_to_flow.py +7 -9
- langflow/alembic/versions/a72f5cf9c2f9_add_endpoint_name_col.py +4 -5
- langflow/alembic/versions/b2fa308044b5_add_unique_constraints.py +1 -2
- langflow/alembic/versions/bc2f01c40e4a_new_fixes.py +4 -5
- langflow/alembic/versions/c153816fd85f_set_name_and_value_to_not_nullable.py +4 -5
- langflow/alembic/versions/d066bfd22890_add_message_table.py +4 -4
- langflow/alembic/versions/d2d475a1f7c0_add_tags_column_to_flow.py +12 -13
- langflow/alembic/versions/d3dbf656a499_add_gradient_column_in_flow.py +12 -12
- langflow/alembic/versions/d9a6ea21edcd_rename_default_folder.py +7 -10
- langflow/alembic/versions/dd9e0804ebd1_add_v2_file_table.py +8 -7
- langflow/alembic/versions/e3162c1804e6_add_persistent_locked_state.py +10 -10
- langflow/alembic/versions/e3bc869fa272_fix_nullable.py +4 -5
- langflow/alembic/versions/e56d87f8994a_add_optins_column_to_user.py +13 -14
- langflow/alembic/versions/e5a65ecff2cd_nullable_in_vertex_build.py +4 -5
- langflow/alembic/versions/eb5866d51fd2_change_columns_to_be_nullable.py +4 -5
- langflow/alembic/versions/eb5e72293a8e_add_error_and_edit_flags_to_message.py +4 -5
- langflow/alembic/versions/f3b2d1f1002d_add_column_access_type_to_flow.py +19 -15
- langflow/alembic/versions/f5ee9749d1a6_user_id_can_be_null_in_flow.py +4 -6
- langflow/alembic/versions/fd531f8868b1_fix_credential_table.py +5 -8
- langflow/api/build.py +5 -4
- langflow/api/health_check_router.py +1 -1
- langflow/api/limited_background_tasks.py +1 -1
- langflow/api/log_router.py +1 -2
- langflow/api/utils.py +2 -2
- langflow/api/v1/base.py +1 -2
- langflow/api/v1/callback.py +4 -9
- langflow/api/v1/chat.py +6 -7
- langflow/api/v1/endpoints.py +15 -15
- langflow/api/v1/files.py +1 -1
- langflow/api/v1/flows.py +1 -1
- langflow/api/v1/knowledge_bases.py +1 -1
- langflow/api/v1/mcp.py +1 -1
- langflow/api/v1/mcp_projects.py +14 -5
- langflow/api/v1/mcp_utils.py +3 -3
- langflow/api/v1/openai_responses.py +4 -4
- langflow/api/v1/schemas.py +3 -38
- langflow/api/v1/starter_projects.py +61 -3
- langflow/api/v1/store.py +1 -1
- langflow/api/v1/validate.py +3 -3
- langflow/api/v1/voice_mode.py +2 -2
- langflow/api/v2/files.py +1 -1
- langflow/api/v2/mcp.py +2 -2
- langflow/base/__init__.py +11 -0
- langflow/base/agents/__init__.py +3 -0
- langflow/base/data/__init__.py +2 -4
- langflow/base/data/utils.py +2 -197
- langflow/base/embeddings/__init__.py +3 -0
- langflow/base/io/__init__.py +7 -0
- langflow/base/io/chat.py +5 -18
- langflow/base/io/text.py +2 -21
- langflow/base/knowledge_bases/__init__.py +3 -0
- langflow/base/memory/__init__.py +3 -0
- langflow/base/models/__init__.py +2 -2
- langflow/base/models/openai_constants.py +6 -120
- langflow/base/prompts/__init__.py +3 -0
- langflow/base/prompts/api_utils.py +2 -223
- langflow/base/textsplitters/__init__.py +3 -0
- langflow/base/tools/__init__.py +3 -0
- langflow/base/vectorstores/__init__.py +3 -0
- langflow/components/__init__.py +7 -259
- langflow/components/agents.py +6 -0
- langflow/components/anthropic.py +6 -0
- langflow/components/data.py +6 -0
- langflow/components/helpers.py +6 -0
- langflow/components/knowledge_bases/ingestion.py +13 -14
- langflow/components/knowledge_bases/retrieval.py +8 -7
- langflow/components/openai.py +6 -0
- langflow/components/processing/__init__.py +1 -117
- langflow/components/processing/converter.py +3 -149
- langflow/custom/__init__.py +26 -3
- langflow/custom/custom_component/__init__.py +4 -0
- langflow/custom/custom_component/component.py +20 -1738
- langflow/custom/custom_component/component_with_cache.py +1 -8
- langflow/custom/custom_component/custom_component.py +1 -552
- langflow/custom/utils.py +1 -872
- langflow/custom/validate.py +1 -0
- langflow/events/event_manager.py +18 -108
- langflow/field_typing/__init__.py +6 -6
- langflow/field_typing/constants.py +87 -122
- langflow/field_typing/range_spec.py +2 -32
- langflow/frontend/assets/{SlackIcon-Cc7Qnzki.js → SlackIcon-v88osOTA.js} +1 -1
- langflow/frontend/assets/{Wikipedia-7ulMZY46.js → Wikipedia-DD_S2k00.js} +1 -1
- langflow/frontend/assets/{Wolfram-By9PGsHS.js → Wolfram-EO2C5noN.js} +1 -1
- langflow/frontend/assets/{index-DVLIDc2_.js → index-1Gv1mfvk.js} +1 -1
- langflow/frontend/assets/{index-MVW4HTEk.js → index-7v-bzlzf.js} +1 -1
- langflow/frontend/assets/{index-CUzlcce2.js → index-9CbMazbV.js} +1 -1
- langflow/frontend/assets/{index-CU16NJD7.js → index-B8ZHP8g2.js} +1 -1
- langflow/frontend/assets/{index-v8eXbWlM.js → index-B8y2e6vN.js} +1 -1
- langflow/frontend/assets/{index-BX_asvRB.js → index-BBRUGsyr.js} +1 -1
- langflow/frontend/assets/{index-9FL5xjkL.js → index-BGwqQwlh.js} +1 -1
- langflow/frontend/assets/{index-BAn-AzCS.js → index-BIq-k-FG.js} +1 -1
- langflow/frontend/assets/{index-D5c2nNvp.js → index-BSN73YP8.js} +1 -1
- langflow/frontend/assets/{index-DMCerPJM.js → index-BU8R8jRn.js} +1 -1
- langflow/frontend/assets/{index-CvSoff-8.js → index-BV6yx8ey.js} +1 -1
- langflow/frontend/assets/{index-BISPW-f6.js → index-BYIsg-Eh.js} +1 -1
- langflow/frontend/assets/{index-GzOGB_fo.js → index-B_ksDBSQ.js} +1 -1
- langflow/frontend/assets/{index-BIqEYjNT.js → index-Ba1UOZ9A.js} +1 -1
- langflow/frontend/assets/{index-ByxGmq5p.js → index-Ba9tKRQg.js} +1 -1
- langflow/frontend/assets/{index-BLEWsL1U.js → index-Bbfaw8ca.js} +1 -1
- langflow/frontend/assets/{index-C_MhBX6R.js → index-BbuGqvAx.js} +1 -1
- langflow/frontend/assets/{index-RH_I78z_.js → index-BeoXu1YX.js} +1 -1
- langflow/frontend/assets/{index-cYFKmtmg.js → index-BfjZmOnH.js} +1 -1
- langflow/frontend/assets/{index-Bm9i8F4W.js → index-Bjzy_HZB.js} +1 -1
- langflow/frontend/assets/{index-_szO7sta.js → index-BofEkpYB.js} +1 -1
- langflow/frontend/assets/{index-DP1oE6QB.js → index-Bp7Mty2H.js} +1 -1
- langflow/frontend/assets/{index-CeswGUz3.js → index-BqX1H6yK.js} +1 -1
- langflow/frontend/assets/{index-C8pI0lzi.js → index-BqtBAJAN.js} +1 -1
- langflow/frontend/assets/{index-BusCv3bR.js → index-Bsfraj7A.js} +1 -1
- langflow/frontend/assets/{index-BWnKMRFJ.js → index-BtFl7fER.js} +1 -1
- langflow/frontend/assets/{index-DnlVWWU8.js → index-BvX993Sv.js} +1 -1
- langflow/frontend/assets/{index-C676MS3I.js → index-BvgQ2vzM.js} +1 -1
- langflow/frontend/assets/{index-DJ6HD14g.js → index-BwY98u8n.js} +1 -1
- langflow/frontend/assets/{index-C51yNvIL.js → index-C-RIJAOS.js} +1 -1
- langflow/frontend/assets/{index-DiblXWmk.js → index-C1K6A38P.js} +1 -1
- langflow/frontend/assets/{index-Co__gFM1.js → index-C3Vwhx0t.js} +1 -1
- langflow/frontend/assets/{index-Coi86oqP.js → index-C5XUG_gr.js} +1 -1
- langflow/frontend/assets/{index-jwzN3Jd_.js → index-C6ouLG9o.js} +1 -1
- langflow/frontend/assets/{index-CQQ-4XMS.js → index-C7ZJ_Z6f.js} +1 -1
- langflow/frontend/assets/{index-Bl7RpmrB.js → index-CCOGIwGY.js} +1 -1
- langflow/frontend/assets/{index-CVkIdc6y.js → index-CCcye2rt.js} +1 -1
- langflow/frontend/assets/{index-bMhyLtgS.js → index-CFR4yJQB.js} +1 -1
- langflow/frontend/assets/{index-aAgSKWb3.js → index-CIGmPP0H.js} +1 -1
- langflow/frontend/assets/{index-BGt6jQ4x.js → index-CJmMEa6d.js} +1 -1
- langflow/frontend/assets/{index-DX7JcSMz.js → index-CJxD7lyU.js} +1 -1
- langflow/frontend/assets/{index-BZ-A4K98.js → index-CL_vu6ut.js} +1 -1
- langflow/frontend/assets/{index-BMpKFGhI.js → index-COf3UnBn.js} +1 -1
- langflow/frontend/assets/{index-xN8ogFdo.js → index-CV9650h_.js} +1 -1
- langflow/frontend/assets/{index-OsUvqIUr.js → index-CVDzych0.js} +1 -1
- langflow/frontend/assets/{index-BH7AyHxp.js → index-CWIHsC4D.js} +1 -1
- langflow/frontend/assets/{index-mjwtJmkP.js → index-CXCnFZ0L.js} +1 -1
- langflow/frontend/assets/{index-3jlSQi5Y.js → index-Ca_Pw_Dn.js} +1 -1
- langflow/frontend/assets/{index-D-SnFlhU.js → index-Cbb3bX9e.js} +1 -1
- langflow/frontend/assets/{index--e0oQqZh.js → index-CcJtOz-Z.js} +1 -1
- langflow/frontend/assets/{index-S-sc0Cm9.js → index-CfTbTHEv.js} +1 -1
- langflow/frontend/assets/{index-Deu8rlaZ.js → index-ChoxDAgX.js} +1 -1
- langflow/frontend/assets/{index-lnF9Eqr2.js → index-Cn4gw8aE.js} +1 -1
- langflow/frontend/assets/{index-C_NwzK6j.js → index-CnpLg4zX.js} +1 -1
- langflow/frontend/assets/{index-DznH7Jbq.js → index-Cpao2omG.js} +1 -1
- langflow/frontend/assets/{index-DpWrk8mA.js → index-CqoxM01j.js} +1 -1
- langflow/frontend/assets/{index-Bw-TIIC6.js → index-CrHf2Ic1.js} +1 -1
- langflow/frontend/assets/{index-DmYLDQag.js → index-CrV0uIjp.js} +1 -1
- langflow/frontend/assets/{index-Dp7ZQyL3.js → index-CssADaak.js} +1 -1
- langflow/frontend/assets/{index-CNh0rwur.js → index-CtJdNLy9.js} +1 -1
- langflow/frontend/assets/{index-Ca1b7Iag.js → index-CyeWD2dh.js} +1 -1
- langflow/frontend/assets/{index-DcApTyZ7.js → index-D1xzD7uc.js} +1 -1
- langflow/frontend/assets/{index-B3GvPjhD.js → index-D6MuXC4L.js} +1 -1
- langflow/frontend/assets/{index-Cw0UComa.js → index-D8w9zvIF.js} +1 -1
- langflow/frontend/assets/{index-C-2MRYoJ.js → index-D98Gn0A6.js} +1 -1
- langflow/frontend/assets/{index-aWnZIwHd.js → index-DBhjpWkf.js} +1 -1
- langflow/frontend/assets/{index-nw3WF9lY.js → index-DCCRJzcY.js} +1 -1
- langflow/frontend/assets/{index-RjeC0kaX.js → index-DCTRSkEW.js} +1 -1
- langflow/frontend/assets/{index-B_kBTgxV.js → index-DCUfitVj.js} +1 -1
- langflow/frontend/assets/{index-ChsGhZn3.js → index-DDdz-Xcl.js} +1 -1
- langflow/frontend/assets/{index-7yAHPRxv.js → index-DGdMwZjG.js} +1 -1
- langflow/frontend/assets/{index-DjQElpEg.js → index-DGtl2vMw.js} +1 -1
- langflow/frontend/assets/{index-BCXhKCOK.js → index-DHVdkrni.js} +1 -1
- langflow/frontend/assets/{index-S8uJXTOq.js → index-DJBWwjgl.js} +1 -1
- langflow/frontend/assets/{index-qiVTWUuf.js → index-DMAkJ_qX.js} +1 -1
- langflow/frontend/assets/{index-D-WStJI6.js → index-DMEvEQI5.js} +1 -1
- langflow/frontend/assets/{index-BhqVw9WQ.js → index-DNGRoOsp.js} +1 -1
- langflow/frontend/assets/{index-Cu7vC48Y.js → index-DNT_TUTa.js} +1 -1
- langflow/frontend/assets/{index-Bhcv5M0n.js → index-DQKOH_9K.js} +1 -1
- langflow/frontend/assets/{index-CLcaktde.js → index-DQhqqtqQ.js} +1 -1
- langflow/frontend/assets/{index-DZVgPCio.js → index-DRM7KKnG.js} +1 -1
- langflow/frontend/assets/{index-uybez8MR.js → index-DSCtl3a5.js} +1 -1
- langflow/frontend/assets/{index-CJ5A6STv.js → index-DSLNlm0Z.js} +1 -1
- langflow/frontend/assets/{index-Drg8me2a.js → index-DT-PspE-.js} +1 -1
- langflow/frontend/assets/{index-DsEZjOcp.js → index-DTpbH-p8.js} +1 -1
- langflow/frontend/assets/{index-DrXXKzpD.js → index-DWV6MsIq.js} +1 -1
- langflow/frontend/assets/{index-4JIEdyIM.js → index-DWeL4US_.js} +1 -1
- langflow/frontend/assets/{index-BlDsBQ_1.js → index-DYKZHhpU.js} +1 -1
- langflow/frontend/assets/{index-DFY8YFbC.js → index-DZyQHiMR.js} +1 -1
- langflow/frontend/assets/{index-CKPZpkQk.js → index-Dc6qVuSa.js} +1 -1
- langflow/frontend/assets/{index-yyAaYjLR.js → index-DkYuicnC.js} +1 -1
- langflow/frontend/assets/{index-DmVt5Jlx.js → index-Dlj_2mMs.js} +1 -1
- langflow/frontend/assets/{index-BvRIG6P5.js → index-DmGJUrEp.js} +1 -1
- langflow/frontend/assets/{index-BWFIrwW1.js → index-Dn6hpCAZ.js} +1 -1
- langflow/frontend/assets/{index-Cb5G9Ifd.js → index-DrJU8Fgb.js} +1 -1
- langflow/frontend/assets/{index-COoTCxvs.js → index-DsWfdCzp.js} +1 -1
- langflow/frontend/assets/{index-ZjeocHyu.js → index-DvCPWs2_.js} +1 -1
- langflow/frontend/assets/{index-B5LHnuQR.js → index-DvPVq7OP.js} +1 -1
- langflow/frontend/assets/{index-BnCnYnao.js → index-Dw71ufW4.js} +1 -1
- langflow/frontend/assets/{index-AALDfCyt.js → index-DxkJactf.js} +1 -1
- langflow/frontend/assets/{index-k9jP5chN.js → index-Dz2GTphU.js} +1 -1
- langflow/frontend/assets/{index-BdjfHsrf.js → index-Fvd524_c.js} +1 -1
- langflow/frontend/assets/{index-AKVkmT4S.js → index-GAQ0Mk2M.js} +1 -1
- langflow/frontend/assets/{index-BZSa2qz7.js → index-Hm5-4ItD.js} +1 -1
- langflow/frontend/assets/{index-DbfS_UH-.js → index-IT67FzsK.js} +1 -1
- langflow/frontend/assets/{index-BLXN681C.js → index-ItYiij1i.js} +1 -1
- langflow/frontend/assets/{index-CiklyQU3.js → index-IuR_FEdB.js} +1 -1
- langflow/frontend/assets/{index-xV6ystWy.js → index-Jj60FQkv.js} +1 -1
- langflow/frontend/assets/{index-C_157Mb-.js → index-LlvshmVz.js} +1 -1
- langflow/frontend/assets/{index-CDphUsa3.js → index-LwKh3I_W.js} +1 -1
- langflow/frontend/assets/{index-BrDz-PxE.js → index-N-xxmKKH.js} +1 -1
- langflow/frontend/assets/{index-BsdLyYMY.js → index-RwpaHIAH.js} +1 -1
- langflow/frontend/assets/{index-Cu2Xr6_j.js → index-TVvsp-xh.js} +1 -1
- langflow/frontend/assets/{index-CPiM2oyj.js → index-TdE2u9zP.js} +1 -1
- langflow/frontend/assets/{index-DOj_QWqG.js → index-_x-NkYeW.js} +1 -1
- langflow/frontend/assets/{index-YJsAl7vm.js → index-a-YclEbW.js} +1 -1
- langflow/frontend/assets/{index-5-CSw2-z.js → index-e9MFKUCo.js} +1 -1
- langflow/frontend/assets/{index-BSwBVwyF.js → index-krPr8f2F.js} +1 -1
- langflow/frontend/assets/{index-Df6psZEj.js → index-kveiUWuL.js} +1 -1
- langflow/frontend/assets/{index-CF4_Og1m.js → index-lE3oSjJi.js} +1 -1
- langflow/frontend/assets/{index-C6nzdeYx.js → index-lM3UYg7F.js} +1 -1
- langflow/frontend/assets/{index-C-wnbBBY.js → index-nsRk3qgA.js} +1 -1
- langflow/frontend/assets/{index-D234yKNJ.js → index-pBO0SZLD.js} +4 -4
- langflow/frontend/assets/{index-BMvp94tO.js → index-pbZHsbuE.js} +1 -1
- langflow/frontend/assets/{index-hg2y9OAt.js → index-sfX3aWyp.js} +1 -1
- langflow/frontend/assets/{index-DTCrijba.js → index-xQz-VJ0-.js} +1 -1
- langflow/frontend/assets/{index-SB4rw8D5.js → index-yfcsaHS6.js} +1 -1
- langflow/frontend/assets/{index-C-bjC2sz.js → index-zcGjo9fx.js} +1 -1
- langflow/frontend/assets/lazyIconImports-BjqDmNYG.js +2 -0
- langflow/frontend/assets/{use-post-add-user-JUeLDErC.js → use-post-add-user-w3vpKSOB.js} +1 -1
- langflow/frontend/index.html +1 -1
- langflow/graph/__init__.py +4 -4
- langflow/helpers/data.py +2 -2
- langflow/helpers/flow.py +9 -7
- langflow/helpers/user.py +2 -2
- langflow/initial_setup/setup.py +9 -9
- langflow/initial_setup/starter_projects/Basic Prompt Chaining.json +119 -41
- langflow/initial_setup/starter_projects/Basic Prompting.json +45 -19
- langflow/initial_setup/starter_projects/Blog Writer.json +53 -21
- langflow/initial_setup/starter_projects/Custom Component Generator.json +121 -97
- langflow/initial_setup/starter_projects/Document Q&A.json +46 -18
- langflow/initial_setup/starter_projects/Financial Report Parser.json +49 -17
- langflow/initial_setup/starter_projects/Hybrid Search RAG.json +89 -50
- langflow/initial_setup/starter_projects/Image Sentiment Analysis.json +86 -22
- langflow/initial_setup/starter_projects/Instagram Copywriter.json +210 -57
- langflow/initial_setup/starter_projects/Invoice Summarizer.json +132 -35
- langflow/initial_setup/starter_projects/Knowledge Ingestion.json +8 -8
- langflow/initial_setup/starter_projects/Knowledge Retrieval.json +8 -8
- langflow/initial_setup/starter_projects/Market Research.json +174 -48
- langflow/initial_setup/starter_projects/Meeting Summary.json +102 -38
- langflow/initial_setup/starter_projects/Memory Chatbot.json +49 -21
- langflow/initial_setup/starter_projects/News Aggregator.json +140 -39
- langflow/initial_setup/starter_projects/Nvidia Remix.json +153 -181
- langflow/initial_setup/starter_projects/Pok/303/251dex Agent.json" +132 -35
- langflow/initial_setup/starter_projects/Portfolio Website Code Generator.json +106 -43
- langflow/initial_setup/starter_projects/Price Deal Finder.json +136 -39
- langflow/initial_setup/starter_projects/Research Agent.json +206 -53
- langflow/initial_setup/starter_projects/Research Translation Loop.json +66 -34
- langflow/initial_setup/starter_projects/SEO Keyword Generator.json +41 -15
- langflow/initial_setup/starter_projects/SaaS Pricing.json +128 -31
- langflow/initial_setup/starter_projects/Search agent.json +132 -35
- langflow/initial_setup/starter_projects/Sequential Tasks Agents.json +422 -98
- langflow/initial_setup/starter_projects/Simple Agent.json +150 -42
- langflow/initial_setup/starter_projects/Social Media Agent.json +150 -42
- langflow/initial_setup/starter_projects/Text Sentiment Analysis.json +120 -24
- langflow/initial_setup/starter_projects/Travel Planning Agents.json +418 -94
- langflow/initial_setup/starter_projects/Twitter Thread Generator.json +69 -37
- langflow/initial_setup/starter_projects/Vector Store RAG.json +66 -38
- langflow/initial_setup/starter_projects/Youtube Analysis.json +191 -51
- langflow/initial_setup/starter_projects/basic_prompting.py +4 -4
- langflow/initial_setup/starter_projects/blog_writer.py +5 -5
- langflow/initial_setup/starter_projects/complex_agent.py +8 -8
- langflow/initial_setup/starter_projects/document_qa.py +5 -5
- langflow/initial_setup/starter_projects/hierarchical_tasks_agent.py +8 -8
- langflow/initial_setup/starter_projects/memory_chatbot.py +6 -6
- langflow/initial_setup/starter_projects/sequential_tasks_agent.py +7 -7
- langflow/initial_setup/starter_projects/vector_store_rag.py +8 -8
- langflow/inputs/__init__.py +3 -2
- langflow/inputs/constants.py +3 -2
- langflow/inputs/input_mixin.py +49 -310
- langflow/inputs/inputs.py +72 -703
- langflow/inputs/validators.py +2 -18
- langflow/interface/__init__.py +4 -0
- langflow/interface/components.py +3 -491
- langflow/interface/initialize/loading.py +7 -6
- langflow/interface/listing.py +3 -25
- langflow/interface/run.py +1 -1
- langflow/interface/utils.py +3 -111
- langflow/io/__init__.py +2 -2
- langflow/io/schema.py +11 -302
- langflow/load/__init__.py +4 -2
- langflow/load/utils.py +2 -96
- langflow/logging/__init__.py +2 -1
- langflow/logging/setup.py +1 -1
- langflow/main.py +8 -5
- langflow/memory.py +12 -6
- langflow/middleware.py +1 -1
- langflow/processing/process.py +7 -7
- langflow/schema/__init__.py +22 -5
- langflow/schema/artifact.py +1 -1
- langflow/schema/data.py +5 -303
- langflow/schema/dataframe.py +2 -205
- langflow/schema/graph.py +4 -45
- langflow/schema/image.py +2 -67
- langflow/schema/message.py +6 -470
- langflow/schema/playground_events.py +5 -6
- langflow/schema/schema.py +24 -117
- langflow/serialization/constants.py +3 -2
- langflow/serialization/serialization.py +1 -1
- langflow/server.py +1 -2
- langflow/services/__init__.py +1 -2
- langflow/services/auth/mcp_encryption.py +1 -1
- langflow/services/auth/service.py +1 -1
- langflow/services/auth/utils.py +5 -5
- langflow/services/cache/disk.py +2 -2
- langflow/services/cache/factory.py +2 -2
- langflow/services/cache/service.py +2 -2
- langflow/services/cache/utils.py +0 -11
- langflow/services/database/factory.py +1 -1
- langflow/services/database/models/flow/model.py +1 -1
- langflow/services/database/models/message/crud.py +2 -1
- langflow/services/database/models/transactions/crud.py +1 -1
- langflow/services/database/models/user/crud.py +1 -1
- langflow/services/database/service.py +2 -2
- langflow/services/database/utils.py +1 -2
- langflow/services/deps.py +12 -17
- langflow/services/enhanced_manager.py +71 -0
- langflow/services/factory.py +14 -7
- langflow/services/flow/flow_runner.py +4 -4
- langflow/services/job_queue/service.py +2 -1
- langflow/services/manager.py +14 -130
- langflow/services/schema.py +0 -1
- langflow/services/session/service.py +3 -2
- langflow/services/settings/__init__.py +0 -3
- langflow/services/settings/base.py +16 -549
- langflow/services/settings/factory.py +2 -21
- langflow/services/settings/feature_flags.py +2 -11
- langflow/services/settings/service.py +2 -31
- langflow/services/shared_component_cache/factory.py +1 -1
- langflow/services/socket/service.py +1 -1
- langflow/services/socket/utils.py +1 -8
- langflow/services/state/factory.py +1 -1
- langflow/services/state/service.py +3 -2
- langflow/services/storage/factory.py +2 -2
- langflow/services/storage/local.py +1 -2
- langflow/services/storage/s3.py +1 -2
- langflow/services/storage/service.py +2 -1
- langflow/services/store/factory.py +1 -1
- langflow/services/store/service.py +2 -2
- langflow/services/store/utils.py +1 -2
- langflow/services/task/service.py +2 -1
- langflow/services/task/temp_flow_cleanup.py +1 -1
- langflow/services/telemetry/factory.py +1 -1
- langflow/services/telemetry/service.py +2 -3
- langflow/services/tracing/arize_phoenix.py +3 -3
- langflow/services/tracing/base.py +1 -1
- langflow/services/tracing/factory.py +1 -1
- langflow/services/tracing/langfuse.py +2 -2
- langflow/services/tracing/langsmith.py +2 -2
- langflow/services/tracing/langwatch.py +4 -4
- langflow/services/tracing/opik.py +2 -2
- langflow/services/tracing/service.py +17 -11
- langflow/services/tracing/traceloop.py +2 -2
- langflow/services/tracing/utils.py +1 -1
- langflow/services/utils.py +54 -9
- langflow/services/variable/factory.py +1 -1
- langflow/services/variable/kubernetes.py +2 -3
- langflow/services/variable/kubernetes_secrets.py +1 -2
- langflow/services/variable/service.py +2 -3
- langflow/template/__init__.py +2 -9
- langflow/template/field/__init__.py +3 -0
- langflow/template/field/base.py +2 -256
- langflow/template/frontend_node.py +3 -0
- langflow/template/utils.py +2 -216
- langflow/utils/constants.py +28 -204
- langflow/utils/lazy_load.py +3 -14
- langflow/utils/schemas.py +2 -3
- langflow/utils/template_validation.py +2 -2
- langflow/utils/util.py +59 -479
- langflow/utils/validate.py +2 -488
- langflow/utils/voice_utils.py +1 -2
- langflow/worker.py +1 -1
- {langflow_base_nightly-0.5.1.dev2.dist-info → langflow_base_nightly-0.5.1.dev4.dist-info}/METADATA +2 -1
- langflow_base_nightly-0.5.1.dev4.dist-info/RECORD +633 -0
- langflow/base/agents/agent.py +0 -267
- langflow/base/agents/callback.py +0 -130
- langflow/base/agents/context.py +0 -109
- langflow/base/agents/crewai/__init__.py +0 -0
- langflow/base/agents/crewai/crew.py +0 -231
- langflow/base/agents/crewai/tasks.py +0 -12
- langflow/base/agents/default_prompts.py +0 -23
- langflow/base/agents/errors.py +0 -15
- langflow/base/agents/events.py +0 -346
- langflow/base/agents/utils.py +0 -205
- langflow/base/astra_assistants/__init__.py +0 -0
- langflow/base/astra_assistants/util.py +0 -171
- langflow/base/chains/__init__.py +0 -0
- langflow/base/chains/model.py +0 -19
- langflow/base/composio/__init__.py +0 -0
- langflow/base/composio/composio_base.py +0 -1297
- langflow/base/compressors/__init__.py +0 -0
- langflow/base/compressors/model.py +0 -60
- langflow/base/constants.py +0 -46
- langflow/base/curl/__init__.py +0 -0
- langflow/base/curl/parse.py +0 -188
- langflow/base/data/base_file.py +0 -685
- langflow/base/data/docling_utils.py +0 -245
- langflow/base/document_transformers/__init__.py +0 -0
- langflow/base/document_transformers/model.py +0 -43
- langflow/base/embeddings/aiml_embeddings.py +0 -62
- langflow/base/embeddings/model.py +0 -26
- langflow/base/flow_processing/__init__.py +0 -0
- langflow/base/flow_processing/utils.py +0 -86
- langflow/base/huggingface/__init__.py +0 -0
- langflow/base/huggingface/model_bridge.py +0 -133
- langflow/base/langchain_utilities/__init__.py +0 -0
- langflow/base/langchain_utilities/model.py +0 -35
- langflow/base/langchain_utilities/spider_constants.py +0 -1
- langflow/base/langwatch/__init__.py +0 -0
- langflow/base/langwatch/utils.py +0 -18
- langflow/base/mcp/__init__.py +0 -0
- langflow/base/mcp/constants.py +0 -2
- langflow/base/mcp/util.py +0 -1524
- langflow/base/memory/memory.py +0 -49
- langflow/base/memory/model.py +0 -38
- langflow/base/models/aiml_constants.py +0 -51
- langflow/base/models/anthropic_constants.py +0 -47
- langflow/base/models/aws_constants.py +0 -151
- langflow/base/models/chat_result.py +0 -76
- langflow/base/models/google_generative_ai_constants.py +0 -70
- langflow/base/models/groq_constants.py +0 -134
- langflow/base/models/model.py +0 -375
- langflow/base/models/model_input_constants.py +0 -299
- langflow/base/models/model_metadata.py +0 -41
- langflow/base/models/model_utils.py +0 -8
- langflow/base/models/novita_constants.py +0 -35
- langflow/base/models/ollama_constants.py +0 -49
- langflow/base/models/sambanova_constants.py +0 -18
- langflow/base/processing/__init__.py +0 -0
- langflow/base/prompts/utils.py +0 -61
- langflow/base/textsplitters/model.py +0 -28
- langflow/base/tools/base.py +0 -26
- langflow/base/tools/component_tool.py +0 -324
- langflow/base/tools/constants.py +0 -49
- langflow/base/tools/flow_tool.py +0 -131
- langflow/base/tools/run_flow.py +0 -227
- langflow/base/vectorstores/model.py +0 -193
- langflow/base/vectorstores/utils.py +0 -22
- langflow/base/vectorstores/vector_store_connection_decorator.py +0 -52
- langflow/components/FAISS/__init__.py +0 -34
- langflow/components/FAISS/faiss.py +0 -111
- langflow/components/Notion/__init__.py +0 -19
- langflow/components/Notion/add_content_to_page.py +0 -269
- langflow/components/Notion/create_page.py +0 -94
- langflow/components/Notion/list_database_properties.py +0 -68
- langflow/components/Notion/list_pages.py +0 -122
- langflow/components/Notion/list_users.py +0 -77
- langflow/components/Notion/page_content_viewer.py +0 -93
- langflow/components/Notion/search.py +0 -111
- langflow/components/Notion/update_page_property.py +0 -114
- langflow/components/_importing.py +0 -37
- langflow/components/agentql/__init__.py +0 -3
- langflow/components/agentql/agentql_api.py +0 -151
- langflow/components/agents/__init__.py +0 -4
- langflow/components/agents/agent.py +0 -554
- langflow/components/agents/mcp_component.py +0 -501
- langflow/components/aiml/__init__.py +0 -37
- langflow/components/aiml/aiml.py +0 -112
- langflow/components/aiml/aiml_embeddings.py +0 -37
- langflow/components/amazon/__init__.py +0 -36
- langflow/components/amazon/amazon_bedrock_embedding.py +0 -109
- langflow/components/amazon/amazon_bedrock_model.py +0 -124
- langflow/components/amazon/s3_bucket_uploader.py +0 -211
- langflow/components/anthropic/__init__.py +0 -34
- langflow/components/anthropic/anthropic.py +0 -187
- langflow/components/apify/__init__.py +0 -5
- langflow/components/apify/apify_actor.py +0 -325
- langflow/components/arxiv/__init__.py +0 -3
- langflow/components/arxiv/arxiv.py +0 -163
- langflow/components/assemblyai/__init__.py +0 -46
- langflow/components/assemblyai/assemblyai_get_subtitles.py +0 -83
- langflow/components/assemblyai/assemblyai_lemur.py +0 -183
- langflow/components/assemblyai/assemblyai_list_transcripts.py +0 -95
- langflow/components/assemblyai/assemblyai_poll_transcript.py +0 -72
- langflow/components/assemblyai/assemblyai_start_transcript.py +0 -188
- langflow/components/azure/__init__.py +0 -37
- langflow/components/azure/azure_openai.py +0 -95
- langflow/components/azure/azure_openai_embeddings.py +0 -83
- langflow/components/baidu/__init__.py +0 -32
- langflow/components/baidu/baidu_qianfan_chat.py +0 -113
- langflow/components/bing/__init__.py +0 -3
- langflow/components/bing/bing_search_api.py +0 -61
- langflow/components/cassandra/__init__.py +0 -40
- langflow/components/cassandra/cassandra.py +0 -264
- langflow/components/cassandra/cassandra_chat.py +0 -92
- langflow/components/cassandra/cassandra_graph.py +0 -238
- langflow/components/chains/__init__.py +0 -0
- langflow/components/chroma/__init__.py +0 -34
- langflow/components/chroma/chroma.py +0 -167
- langflow/components/cleanlab/__init__.py +0 -40
- langflow/components/cleanlab/cleanlab_evaluator.py +0 -157
- langflow/components/cleanlab/cleanlab_rag_evaluator.py +0 -254
- langflow/components/cleanlab/cleanlab_remediator.py +0 -131
- langflow/components/clickhouse/__init__.py +0 -34
- langflow/components/clickhouse/clickhouse.py +0 -135
- langflow/components/cloudflare/__init__.py +0 -32
- langflow/components/cloudflare/cloudflare.py +0 -81
- langflow/components/cohere/__init__.py +0 -40
- langflow/components/cohere/cohere_embeddings.py +0 -81
- langflow/components/cohere/cohere_models.py +0 -46
- langflow/components/cohere/cohere_rerank.py +0 -51
- langflow/components/composio/__init__.py +0 -73
- langflow/components/composio/composio_api.py +0 -268
- langflow/components/composio/dropbox_compnent.py +0 -11
- langflow/components/composio/github_composio.py +0 -11
- langflow/components/composio/gmail_composio.py +0 -38
- langflow/components/composio/googlecalendar_composio.py +0 -11
- langflow/components/composio/googlemeet_composio.py +0 -11
- langflow/components/composio/googletasks_composio.py +0 -8
- langflow/components/composio/linear_composio.py +0 -11
- langflow/components/composio/outlook_composio.py +0 -11
- langflow/components/composio/reddit_composio.py +0 -11
- langflow/components/composio/slack_composio.py +0 -11
- langflow/components/composio/slackbot_composio.py +0 -11
- langflow/components/composio/supabase_composio.py +0 -11
- langflow/components/composio/todoist_composio.py +0 -11
- langflow/components/composio/youtube_composio.py +0 -11
- langflow/components/confluence/__init__.py +0 -3
- langflow/components/confluence/confluence.py +0 -84
- langflow/components/couchbase/__init__.py +0 -34
- langflow/components/couchbase/couchbase.py +0 -102
- langflow/components/crewai/__init__.py +0 -49
- langflow/components/crewai/crewai.py +0 -107
- langflow/components/crewai/hierarchical_crew.py +0 -46
- langflow/components/crewai/hierarchical_task.py +0 -44
- langflow/components/crewai/sequential_crew.py +0 -52
- langflow/components/crewai/sequential_task.py +0 -73
- langflow/components/crewai/sequential_task_agent.py +0 -143
- langflow/components/custom_component/__init__.py +0 -34
- langflow/components/custom_component/custom_component.py +0 -31
- langflow/components/data/__init__.py +0 -25
- langflow/components/data/api_request.py +0 -545
- langflow/components/data/csv_to_data.py +0 -95
- langflow/components/data/directory.py +0 -113
- langflow/components/data/file.py +0 -586
- langflow/components/data/json_to_data.py +0 -98
- langflow/components/data/news_search.py +0 -164
- langflow/components/data/rss.py +0 -69
- langflow/components/data/sql_executor.py +0 -99
- langflow/components/data/url.py +0 -299
- langflow/components/data/web_search.py +0 -112
- langflow/components/data/webhook.py +0 -56
- langflow/components/datastax/__init__.py +0 -70
- langflow/components/datastax/astra_assistant_manager.py +0 -306
- langflow/components/datastax/astra_db.py +0 -69
- langflow/components/datastax/astra_vectorize.py +0 -124
- langflow/components/datastax/astradb_cql.py +0 -314
- langflow/components/datastax/astradb_graph.py +0 -319
- langflow/components/datastax/astradb_tool.py +0 -414
- langflow/components/datastax/astradb_vectorstore.py +0 -1285
- langflow/components/datastax/create_assistant.py +0 -58
- langflow/components/datastax/create_thread.py +0 -32
- langflow/components/datastax/dotenv.py +0 -35
- langflow/components/datastax/get_assistant.py +0 -37
- langflow/components/datastax/getenvvar.py +0 -30
- langflow/components/datastax/graph_rag.py +0 -141
- langflow/components/datastax/hcd.py +0 -314
- langflow/components/datastax/list_assistants.py +0 -25
- langflow/components/datastax/run.py +0 -89
- langflow/components/deactivated/__init__.py +0 -19
- langflow/components/deactivated/amazon_kendra.py +0 -66
- langflow/components/deactivated/chat_litellm_model.py +0 -158
- langflow/components/deactivated/code_block_extractor.py +0 -26
- langflow/components/deactivated/documents_to_data.py +0 -22
- langflow/components/deactivated/embed.py +0 -16
- langflow/components/deactivated/extract_key_from_data.py +0 -46
- langflow/components/deactivated/json_document_builder.py +0 -59
- langflow/components/deactivated/list_flows.py +0 -20
- langflow/components/deactivated/mcp_sse.py +0 -61
- langflow/components/deactivated/mcp_stdio.py +0 -62
- langflow/components/deactivated/merge_data.py +0 -93
- langflow/components/deactivated/message.py +0 -37
- langflow/components/deactivated/metal.py +0 -54
- langflow/components/deactivated/multi_query.py +0 -59
- langflow/components/deactivated/retriever.py +0 -43
- langflow/components/deactivated/selective_passthrough.py +0 -77
- langflow/components/deactivated/should_run_next.py +0 -40
- langflow/components/deactivated/split_text.py +0 -63
- langflow/components/deactivated/store_message.py +0 -24
- langflow/components/deactivated/sub_flow.py +0 -124
- langflow/components/deactivated/vectara_self_query.py +0 -76
- langflow/components/deactivated/vector_store.py +0 -24
- langflow/components/deepseek/__init__.py +0 -34
- langflow/components/deepseek/deepseek.py +0 -136
- langflow/components/docling/__init__.py +0 -43
- langflow/components/docling/chunk_docling_document.py +0 -186
- langflow/components/docling/docling_inline.py +0 -235
- langflow/components/docling/docling_remote.py +0 -193
- langflow/components/docling/export_docling_document.py +0 -117
- langflow/components/documentloaders/__init__.py +0 -0
- langflow/components/duckduckgo/__init__.py +0 -3
- langflow/components/duckduckgo/duck_duck_go_search_run.py +0 -92
- langflow/components/elastic/__init__.py +0 -37
- langflow/components/elastic/elasticsearch.py +0 -267
- langflow/components/elastic/opensearch.py +0 -243
- langflow/components/embeddings/__init__.py +0 -37
- langflow/components/embeddings/similarity.py +0 -76
- langflow/components/embeddings/text_embedder.py +0 -64
- langflow/components/exa/__init__.py +0 -3
- langflow/components/exa/exa_search.py +0 -68
- langflow/components/firecrawl/__init__.py +0 -43
- langflow/components/firecrawl/firecrawl_crawl_api.py +0 -88
- langflow/components/firecrawl/firecrawl_extract_api.py +0 -136
- langflow/components/firecrawl/firecrawl_map_api.py +0 -89
- langflow/components/firecrawl/firecrawl_scrape_api.py +0 -73
- langflow/components/git/__init__.py +0 -4
- langflow/components/git/git.py +0 -262
- langflow/components/git/gitextractor.py +0 -196
- langflow/components/glean/__init__.py +0 -3
- langflow/components/glean/glean_search_api.py +0 -173
- langflow/components/google/__init__.py +0 -17
- langflow/components/google/gmail.py +0 -192
- langflow/components/google/google_bq_sql_executor.py +0 -157
- langflow/components/google/google_drive.py +0 -92
- langflow/components/google/google_drive_search.py +0 -152
- langflow/components/google/google_generative_ai.py +0 -147
- langflow/components/google/google_generative_ai_embeddings.py +0 -141
- langflow/components/google/google_oauth_token.py +0 -89
- langflow/components/google/google_search_api_core.py +0 -68
- langflow/components/google/google_serper_api_core.py +0 -74
- langflow/components/groq/__init__.py +0 -34
- langflow/components/groq/groq.py +0 -140
- langflow/components/helpers/__init__.py +0 -52
- langflow/components/helpers/calculator_core.py +0 -89
- langflow/components/helpers/create_list.py +0 -40
- langflow/components/helpers/current_date.py +0 -42
- langflow/components/helpers/id_generator.py +0 -42
- langflow/components/helpers/memory.py +0 -251
- langflow/components/helpers/output_parser.py +0 -45
- langflow/components/helpers/store_message.py +0 -90
- langflow/components/homeassistant/__init__.py +0 -7
- langflow/components/homeassistant/home_assistant_control.py +0 -152
- langflow/components/homeassistant/list_home_assistant_states.py +0 -137
- langflow/components/huggingface/__init__.py +0 -37
- langflow/components/huggingface/huggingface.py +0 -197
- langflow/components/huggingface/huggingface_inference_api.py +0 -106
- langflow/components/ibm/__init__.py +0 -34
- langflow/components/ibm/watsonx.py +0 -203
- langflow/components/ibm/watsonx_embeddings.py +0 -135
- langflow/components/icosacomputing/__init__.py +0 -5
- langflow/components/icosacomputing/combinatorial_reasoner.py +0 -84
- langflow/components/input_output/__init__.py +0 -38
- langflow/components/input_output/chat.py +0 -120
- langflow/components/input_output/chat_output.py +0 -200
- langflow/components/input_output/text.py +0 -27
- langflow/components/input_output/text_output.py +0 -29
- langflow/components/jigsawstack/__init__.py +0 -23
- langflow/components/jigsawstack/ai_scrape.py +0 -126
- langflow/components/jigsawstack/ai_web_search.py +0 -136
- langflow/components/jigsawstack/file_read.py +0 -115
- langflow/components/jigsawstack/file_upload.py +0 -94
- langflow/components/jigsawstack/image_generation.py +0 -205
- langflow/components/jigsawstack/nsfw.py +0 -60
- langflow/components/jigsawstack/object_detection.py +0 -124
- langflow/components/jigsawstack/sentiment.py +0 -112
- langflow/components/jigsawstack/text_to_sql.py +0 -90
- langflow/components/jigsawstack/text_translate.py +0 -77
- langflow/components/jigsawstack/vocr.py +0 -107
- langflow/components/langchain_utilities/__init__.py +0 -109
- langflow/components/langchain_utilities/character.py +0 -53
- langflow/components/langchain_utilities/conversation.py +0 -52
- langflow/components/langchain_utilities/csv_agent.py +0 -107
- langflow/components/langchain_utilities/fake_embeddings.py +0 -26
- langflow/components/langchain_utilities/html_link_extractor.py +0 -35
- langflow/components/langchain_utilities/json_agent.py +0 -45
- langflow/components/langchain_utilities/langchain_hub.py +0 -126
- langflow/components/langchain_utilities/language_recursive.py +0 -49
- langflow/components/langchain_utilities/language_semantic.py +0 -138
- langflow/components/langchain_utilities/llm_checker.py +0 -39
- langflow/components/langchain_utilities/llm_math.py +0 -42
- langflow/components/langchain_utilities/natural_language.py +0 -61
- langflow/components/langchain_utilities/openai_tools.py +0 -53
- langflow/components/langchain_utilities/openapi.py +0 -48
- langflow/components/langchain_utilities/recursive_character.py +0 -60
- langflow/components/langchain_utilities/retrieval_qa.py +0 -83
- langflow/components/langchain_utilities/runnable_executor.py +0 -137
- langflow/components/langchain_utilities/self_query.py +0 -80
- langflow/components/langchain_utilities/spider.py +0 -142
- langflow/components/langchain_utilities/sql.py +0 -40
- langflow/components/langchain_utilities/sql_database.py +0 -35
- langflow/components/langchain_utilities/sql_generator.py +0 -78
- langflow/components/langchain_utilities/tool_calling.py +0 -59
- langflow/components/langchain_utilities/vector_store_info.py +0 -49
- langflow/components/langchain_utilities/vector_store_router.py +0 -33
- langflow/components/langchain_utilities/xml_agent.py +0 -71
- langflow/components/langwatch/__init__.py +0 -3
- langflow/components/langwatch/langwatch.py +0 -278
- langflow/components/link_extractors/__init__.py +0 -0
- langflow/components/lmstudio/__init__.py +0 -34
- langflow/components/lmstudio/lmstudioembeddings.py +0 -89
- langflow/components/lmstudio/lmstudiomodel.py +0 -129
- langflow/components/logic/__init__.py +0 -52
- langflow/components/logic/conditional_router.py +0 -171
- langflow/components/logic/data_conditional_router.py +0 -125
- langflow/components/logic/flow_tool.py +0 -110
- langflow/components/logic/listen.py +0 -29
- langflow/components/logic/loop.py +0 -125
- langflow/components/logic/notify.py +0 -88
- langflow/components/logic/pass_message.py +0 -35
- langflow/components/logic/run_flow.py +0 -71
- langflow/components/logic/sub_flow.py +0 -114
- langflow/components/maritalk/__init__.py +0 -32
- langflow/components/maritalk/maritalk.py +0 -52
- langflow/components/mem0/__init__.py +0 -3
- langflow/components/mem0/mem0_chat_memory.py +0 -136
- langflow/components/milvus/__init__.py +0 -34
- langflow/components/milvus/milvus.py +0 -115
- langflow/components/mistral/__init__.py +0 -37
- langflow/components/mistral/mistral.py +0 -114
- langflow/components/mistral/mistral_embeddings.py +0 -58
- langflow/components/models/__init__.py +0 -34
- langflow/components/models/embedding_model.py +0 -114
- langflow/components/models/language_model.py +0 -144
- langflow/components/mongodb/__init__.py +0 -34
- langflow/components/mongodb/mongodb_atlas.py +0 -213
- langflow/components/needle/__init__.py +0 -3
- langflow/components/needle/needle.py +0 -104
- langflow/components/notdiamond/__init__.py +0 -36
- langflow/components/notdiamond/notdiamond.py +0 -228
- langflow/components/novita/__init__.py +0 -32
- langflow/components/novita/novita.py +0 -130
- langflow/components/nvidia/__init__.py +0 -57
- langflow/components/nvidia/nvidia.py +0 -157
- langflow/components/nvidia/nvidia_embedding.py +0 -77
- langflow/components/nvidia/nvidia_ingest.py +0 -317
- langflow/components/nvidia/nvidia_rerank.py +0 -63
- langflow/components/nvidia/system_assist.py +0 -65
- langflow/components/olivya/__init__.py +0 -3
- langflow/components/olivya/olivya.py +0 -116
- langflow/components/ollama/__init__.py +0 -37
- langflow/components/ollama/ollama.py +0 -330
- langflow/components/ollama/ollama_embeddings.py +0 -106
- langflow/components/openai/__init__.py +0 -37
- langflow/components/openai/openai.py +0 -100
- langflow/components/openai/openai_chat_model.py +0 -158
- langflow/components/openrouter/__init__.py +0 -32
- langflow/components/openrouter/openrouter.py +0 -202
- langflow/components/output_parsers/__init__.py +0 -0
- langflow/components/perplexity/__init__.py +0 -34
- langflow/components/perplexity/perplexity.py +0 -75
- langflow/components/pgvector/__init__.py +0 -34
- langflow/components/pgvector/pgvector.py +0 -72
- langflow/components/pinecone/__init__.py +0 -34
- langflow/components/pinecone/pinecone.py +0 -134
- langflow/components/processing/alter_metadata.py +0 -108
- langflow/components/processing/batch_run.py +0 -205
- langflow/components/processing/combine_text.py +0 -39
- langflow/components/processing/create_data.py +0 -110
- langflow/components/processing/data_operations.py +0 -438
- langflow/components/processing/data_to_dataframe.py +0 -70
- langflow/components/processing/dataframe_operations.py +0 -321
- langflow/components/processing/extract_key.py +0 -53
- langflow/components/processing/filter_data.py +0 -42
- langflow/components/processing/filter_data_values.py +0 -88
- langflow/components/processing/json_cleaner.py +0 -103
- langflow/components/processing/lambda_filter.py +0 -154
- langflow/components/processing/llm_router.py +0 -499
- langflow/components/processing/merge_data.py +0 -90
- langflow/components/processing/message_to_data.py +0 -36
- langflow/components/processing/parse_data.py +0 -70
- langflow/components/processing/parse_dataframe.py +0 -68
- langflow/components/processing/parse_json_data.py +0 -90
- langflow/components/processing/parser.py +0 -143
- langflow/components/processing/prompt.py +0 -67
- langflow/components/processing/python_repl_core.py +0 -98
- langflow/components/processing/regex.py +0 -82
- langflow/components/processing/save_file.py +0 -208
- langflow/components/processing/select_data.py +0 -48
- langflow/components/processing/split_text.py +0 -141
- langflow/components/processing/structured_output.py +0 -202
- langflow/components/processing/update_data.py +0 -160
- langflow/components/prototypes/__init__.py +0 -34
- langflow/components/prototypes/python_function.py +0 -73
- langflow/components/qdrant/__init__.py +0 -34
- langflow/components/qdrant/qdrant.py +0 -109
- langflow/components/redis/__init__.py +0 -37
- langflow/components/redis/redis.py +0 -89
- langflow/components/redis/redis_chat.py +0 -43
- langflow/components/sambanova/__init__.py +0 -32
- langflow/components/sambanova/sambanova.py +0 -84
- langflow/components/scrapegraph/__init__.py +0 -40
- langflow/components/scrapegraph/scrapegraph_markdownify_api.py +0 -64
- langflow/components/scrapegraph/scrapegraph_search_api.py +0 -64
- langflow/components/scrapegraph/scrapegraph_smart_scraper_api.py +0 -71
- langflow/components/searchapi/__init__.py +0 -36
- langflow/components/searchapi/search.py +0 -79
- langflow/components/serpapi/__init__.py +0 -3
- langflow/components/serpapi/serp.py +0 -115
- langflow/components/serper/__init__.py +0 -3
- langflow/components/serper/google_serper_api_core.py +0 -74
- langflow/components/supabase/__init__.py +0 -37
- langflow/components/supabase/supabase.py +0 -76
- langflow/components/tavily/__init__.py +0 -4
- langflow/components/tavily/tavily_extract.py +0 -117
- langflow/components/tavily/tavily_search.py +0 -212
- langflow/components/textsplitters/__init__.py +0 -0
- langflow/components/toolkits/__init__.py +0 -0
- langflow/components/tools/__init__.py +0 -72
- langflow/components/tools/calculator.py +0 -103
- langflow/components/tools/google_search_api.py +0 -45
- langflow/components/tools/google_serper_api.py +0 -115
- langflow/components/tools/python_code_structured_tool.py +0 -327
- langflow/components/tools/python_repl.py +0 -97
- langflow/components/tools/search_api.py +0 -87
- langflow/components/tools/searxng.py +0 -145
- langflow/components/tools/serp_api.py +0 -119
- langflow/components/tools/tavily_search_tool.py +0 -344
- langflow/components/tools/wikidata_api.py +0 -102
- langflow/components/tools/wikipedia_api.py +0 -49
- langflow/components/tools/yahoo_finance.py +0 -124
- langflow/components/twelvelabs/__init__.py +0 -52
- langflow/components/twelvelabs/convert_astra_results.py +0 -84
- langflow/components/twelvelabs/pegasus_index.py +0 -311
- langflow/components/twelvelabs/split_video.py +0 -291
- langflow/components/twelvelabs/text_embeddings.py +0 -57
- langflow/components/twelvelabs/twelvelabs_pegasus.py +0 -408
- langflow/components/twelvelabs/video_embeddings.py +0 -100
- langflow/components/twelvelabs/video_file.py +0 -179
- langflow/components/unstructured/__init__.py +0 -3
- langflow/components/unstructured/unstructured.py +0 -121
- langflow/components/upstash/__init__.py +0 -34
- langflow/components/upstash/upstash.py +0 -124
- langflow/components/vectara/__init__.py +0 -37
- langflow/components/vectara/vectara.py +0 -97
- langflow/components/vectara/vectara_rag.py +0 -164
- langflow/components/vectorstores/__init__.py +0 -34
- langflow/components/vectorstores/local_db.py +0 -261
- langflow/components/vertexai/__init__.py +0 -37
- langflow/components/vertexai/vertexai.py +0 -71
- langflow/components/vertexai/vertexai_embeddings.py +0 -67
- langflow/components/weaviate/__init__.py +0 -34
- langflow/components/weaviate/weaviate.py +0 -89
- langflow/components/wikipedia/__init__.py +0 -4
- langflow/components/wikipedia/wikidata.py +0 -86
- langflow/components/wikipedia/wikipedia.py +0 -53
- langflow/components/wolframalpha/__init__.py +0 -3
- langflow/components/wolframalpha/wolfram_alpha_api.py +0 -54
- langflow/components/xai/__init__.py +0 -32
- langflow/components/xai/xai.py +0 -167
- langflow/components/yahoosearch/__init__.py +0 -3
- langflow/components/yahoosearch/yahoo.py +0 -137
- langflow/components/youtube/__init__.py +0 -52
- langflow/components/youtube/channel.py +0 -227
- langflow/components/youtube/comments.py +0 -231
- langflow/components/youtube/playlist.py +0 -33
- langflow/components/youtube/search.py +0 -120
- langflow/components/youtube/trending.py +0 -285
- langflow/components/youtube/video_details.py +0 -263
- langflow/components/youtube/youtube_transcripts.py +0 -118
- langflow/components/zep/__init__.py +0 -3
- langflow/components/zep/zep.py +0 -44
- langflow/custom/attributes.py +0 -86
- langflow/custom/code_parser/__init__.py +0 -3
- langflow/custom/code_parser/code_parser.py +0 -361
- langflow/custom/custom_component/base_component.py +0 -118
- langflow/custom/dependency_analyzer.py +0 -165
- langflow/custom/directory_reader/__init__.py +0 -3
- langflow/custom/directory_reader/directory_reader.py +0 -359
- langflow/custom/directory_reader/utils.py +0 -171
- langflow/custom/eval.py +0 -12
- langflow/custom/schema.py +0 -32
- langflow/custom/tree_visitor.py +0 -21
- langflow/frontend/assets/lazyIconImports-Ci-S9xBA.js +0 -2
- langflow/graph/edge/__init__.py +0 -0
- langflow/graph/edge/base.py +0 -277
- langflow/graph/edge/schema.py +0 -119
- langflow/graph/edge/utils.py +0 -0
- langflow/graph/graph/__init__.py +0 -0
- langflow/graph/graph/ascii.py +0 -202
- langflow/graph/graph/base.py +0 -2185
- langflow/graph/graph/constants.py +0 -58
- langflow/graph/graph/runnable_vertices_manager.py +0 -133
- langflow/graph/graph/schema.py +0 -53
- langflow/graph/graph/state_model.py +0 -66
- langflow/graph/graph/utils.py +0 -1024
- langflow/graph/schema.py +0 -75
- langflow/graph/state/__init__.py +0 -0
- langflow/graph/state/model.py +0 -237
- langflow/graph/utils.py +0 -229
- langflow/graph/vertex/__init__.py +0 -0
- langflow/graph/vertex/base.py +0 -811
- langflow/graph/vertex/constants.py +0 -0
- langflow/graph/vertex/exceptions.py +0 -4
- langflow/graph/vertex/param_handler.py +0 -255
- langflow/graph/vertex/schema.py +0 -26
- langflow/graph/vertex/utils.py +0 -19
- langflow/graph/vertex/vertex_types.py +0 -489
- langflow/legacy_custom/__init__.py +0 -0
- langflow/legacy_custom/customs.py +0 -16
- langflow/load/load.py +0 -250
- langflow/logging/logger.py +0 -369
- langflow/processing/utils.py +0 -25
- langflow/schema/openai_responses_schemas.py +0 -74
- langflow/schema/serialize.py +0 -13
- langflow/services/chat/config.py +0 -2
- langflow/services/settings/auth.py +0 -130
- langflow/services/settings/constants.py +0 -31
- langflow/services/settings/manager.py +0 -49
- langflow/services/settings/utils.py +0 -40
- langflow/template/field/prompt.py +0 -2
- langflow/template/frontend_node/__init__.py +0 -6
- langflow/template/frontend_node/base.py +0 -212
- langflow/template/frontend_node/constants.py +0 -65
- langflow/template/frontend_node/custom_components.py +0 -97
- langflow/template/template/__init__.py +0 -0
- langflow/template/template/base.py +0 -99
- langflow/utils/async_helpers.py +0 -42
- langflow/utils/concurrency.py +0 -60
- langflow/utils/util_strings.py +0 -56
- langflow_base_nightly-0.5.1.dev2.dist-info/RECORD +0 -1159
- {langflow_base_nightly-0.5.1.dev2.dist-info → langflow_base_nightly-0.5.1.dev4.dist-info}/WHEEL +0 -0
- {langflow_base_nightly-0.5.1.dev2.dist-info → langflow_base_nightly-0.5.1.dev4.dist-info}/entry_points.txt +0 -0
|
@@ -1,267 +0,0 @@
|
|
|
1
|
-
from typing import Any
|
|
2
|
-
|
|
3
|
-
from elasticsearch import Elasticsearch
|
|
4
|
-
from langchain.schema import Document
|
|
5
|
-
from langchain_elasticsearch import ElasticsearchStore
|
|
6
|
-
|
|
7
|
-
from langflow.base.vectorstores.model import LCVectorStoreComponent, check_cached_vector_store
|
|
8
|
-
from langflow.io import (
|
|
9
|
-
BoolInput,
|
|
10
|
-
DropdownInput,
|
|
11
|
-
FloatInput,
|
|
12
|
-
HandleInput,
|
|
13
|
-
IntInput,
|
|
14
|
-
SecretStrInput,
|
|
15
|
-
StrInput,
|
|
16
|
-
)
|
|
17
|
-
from langflow.schema.data import Data
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
class ElasticsearchVectorStoreComponent(LCVectorStoreComponent):
|
|
21
|
-
"""Elasticsearch Vector Store with with advanced, customizable search capabilities."""
|
|
22
|
-
|
|
23
|
-
display_name: str = "Elasticsearch"
|
|
24
|
-
description: str = "Elasticsearch Vector Store with with advanced, customizable search capabilities."
|
|
25
|
-
name = "Elasticsearch"
|
|
26
|
-
icon = "ElasticsearchStore"
|
|
27
|
-
|
|
28
|
-
inputs = [
|
|
29
|
-
StrInput(
|
|
30
|
-
name="elasticsearch_url",
|
|
31
|
-
display_name="Elasticsearch URL",
|
|
32
|
-
value="http://localhost:9200",
|
|
33
|
-
info="URL for self-managed Elasticsearch deployments (e.g., http://localhost:9200). "
|
|
34
|
-
"Do not use with Elastic Cloud deployments, use Elastic Cloud ID instead.",
|
|
35
|
-
),
|
|
36
|
-
SecretStrInput(
|
|
37
|
-
name="cloud_id",
|
|
38
|
-
display_name="Elastic Cloud ID",
|
|
39
|
-
value="",
|
|
40
|
-
info="Use this for Elastic Cloud deployments. Do not use together with 'Elasticsearch URL'.",
|
|
41
|
-
),
|
|
42
|
-
StrInput(
|
|
43
|
-
name="index_name",
|
|
44
|
-
display_name="Index Name",
|
|
45
|
-
value="langflow",
|
|
46
|
-
info="The index name where the vectors will be stored in Elasticsearch cluster.",
|
|
47
|
-
),
|
|
48
|
-
*LCVectorStoreComponent.inputs,
|
|
49
|
-
StrInput(
|
|
50
|
-
name="username",
|
|
51
|
-
display_name="Username",
|
|
52
|
-
value="",
|
|
53
|
-
advanced=False,
|
|
54
|
-
info=(
|
|
55
|
-
"Elasticsearch username (e.g., 'elastic'). "
|
|
56
|
-
"Required for both local and Elastic Cloud setups unless API keys are used."
|
|
57
|
-
),
|
|
58
|
-
),
|
|
59
|
-
SecretStrInput(
|
|
60
|
-
name="password",
|
|
61
|
-
display_name="Password",
|
|
62
|
-
value="",
|
|
63
|
-
advanced=False,
|
|
64
|
-
info=(
|
|
65
|
-
"Elasticsearch password for the specified user. "
|
|
66
|
-
"Required for both local and Elastic Cloud setups unless API keys are used."
|
|
67
|
-
),
|
|
68
|
-
),
|
|
69
|
-
HandleInput(
|
|
70
|
-
name="embedding",
|
|
71
|
-
display_name="Embedding",
|
|
72
|
-
input_types=["Embeddings"],
|
|
73
|
-
),
|
|
74
|
-
DropdownInput(
|
|
75
|
-
name="search_type",
|
|
76
|
-
display_name="Search Type",
|
|
77
|
-
options=["similarity", "mmr"],
|
|
78
|
-
value="similarity",
|
|
79
|
-
advanced=True,
|
|
80
|
-
),
|
|
81
|
-
IntInput(
|
|
82
|
-
name="number_of_results",
|
|
83
|
-
display_name="Number of Results",
|
|
84
|
-
info="Number of results to return.",
|
|
85
|
-
advanced=True,
|
|
86
|
-
value=4,
|
|
87
|
-
),
|
|
88
|
-
FloatInput(
|
|
89
|
-
name="search_score_threshold",
|
|
90
|
-
display_name="Search Score Threshold",
|
|
91
|
-
info="Minimum similarity score threshold for search results.",
|
|
92
|
-
value=0.0,
|
|
93
|
-
advanced=True,
|
|
94
|
-
),
|
|
95
|
-
SecretStrInput(
|
|
96
|
-
name="api_key",
|
|
97
|
-
display_name="Elastic API Key",
|
|
98
|
-
value="",
|
|
99
|
-
advanced=True,
|
|
100
|
-
info="API Key for Elastic Cloud authentication. If used, 'username' and 'password' are not required.",
|
|
101
|
-
),
|
|
102
|
-
BoolInput(
|
|
103
|
-
name="verify_certs",
|
|
104
|
-
display_name="Verify SSL Certificates",
|
|
105
|
-
value=True,
|
|
106
|
-
advanced=True,
|
|
107
|
-
info="Whether to verify SSL certificates when connecting to Elasticsearch.",
|
|
108
|
-
),
|
|
109
|
-
]
|
|
110
|
-
|
|
111
|
-
@check_cached_vector_store
|
|
112
|
-
def build_vector_store(self) -> ElasticsearchStore:
|
|
113
|
-
"""Builds the Elasticsearch Vector Store object."""
|
|
114
|
-
if self.cloud_id and self.elasticsearch_url:
|
|
115
|
-
msg = (
|
|
116
|
-
"Both 'cloud_id' and 'elasticsearch_url' provided. "
|
|
117
|
-
"Please use only one based on your deployment (Cloud or Local)."
|
|
118
|
-
)
|
|
119
|
-
raise ValueError(msg)
|
|
120
|
-
|
|
121
|
-
es_params = {
|
|
122
|
-
"index_name": self.index_name,
|
|
123
|
-
"embedding": self.embedding,
|
|
124
|
-
"es_user": self.username or None,
|
|
125
|
-
"es_password": self.password or None,
|
|
126
|
-
}
|
|
127
|
-
|
|
128
|
-
if self.cloud_id:
|
|
129
|
-
es_params["es_cloud_id"] = self.cloud_id
|
|
130
|
-
else:
|
|
131
|
-
es_params["es_url"] = self.elasticsearch_url
|
|
132
|
-
|
|
133
|
-
if self.api_key:
|
|
134
|
-
es_params["api_key"] = self.api_key
|
|
135
|
-
|
|
136
|
-
# Check if we need to verify SSL certificates
|
|
137
|
-
if self.verify_certs is False:
|
|
138
|
-
# Build client parameters for Elasticsearch constructor
|
|
139
|
-
client_params: dict[str, Any] = {}
|
|
140
|
-
client_params["verify_certs"] = False
|
|
141
|
-
|
|
142
|
-
if self.cloud_id:
|
|
143
|
-
client_params["cloud_id"] = self.cloud_id
|
|
144
|
-
else:
|
|
145
|
-
client_params["hosts"] = [self.elasticsearch_url]
|
|
146
|
-
|
|
147
|
-
if self.api_key:
|
|
148
|
-
client_params["api_key"] = self.api_key
|
|
149
|
-
elif self.username and self.password:
|
|
150
|
-
client_params["basic_auth"] = (self.username, self.password)
|
|
151
|
-
|
|
152
|
-
es_client = Elasticsearch(**client_params)
|
|
153
|
-
es_params["es_connection"] = es_client
|
|
154
|
-
|
|
155
|
-
elasticsearch = ElasticsearchStore(**es_params)
|
|
156
|
-
|
|
157
|
-
# If documents are provided, add them to the store
|
|
158
|
-
if self.ingest_data:
|
|
159
|
-
documents = self._prepare_documents()
|
|
160
|
-
if documents:
|
|
161
|
-
elasticsearch.add_documents(documents)
|
|
162
|
-
|
|
163
|
-
return elasticsearch
|
|
164
|
-
|
|
165
|
-
def _prepare_documents(self) -> list[Document]:
|
|
166
|
-
"""Prepares documents from the input data to add to the vector store."""
|
|
167
|
-
self.ingest_data = self._prepare_ingest_data()
|
|
168
|
-
|
|
169
|
-
documents = []
|
|
170
|
-
for data in self.ingest_data:
|
|
171
|
-
if isinstance(data, Data):
|
|
172
|
-
documents.append(data.to_lc_document())
|
|
173
|
-
else:
|
|
174
|
-
error_message = "Vector Store Inputs must be Data objects."
|
|
175
|
-
self.log(error_message)
|
|
176
|
-
raise TypeError(error_message)
|
|
177
|
-
return documents
|
|
178
|
-
|
|
179
|
-
def _add_documents_to_vector_store(self, vector_store: "ElasticsearchStore") -> None:
|
|
180
|
-
"""Adds documents to the Vector Store."""
|
|
181
|
-
documents = self._prepare_documents()
|
|
182
|
-
if documents and self.embedding:
|
|
183
|
-
self.log(f"Adding {len(documents)} documents to the Vector Store.")
|
|
184
|
-
vector_store.add_documents(documents)
|
|
185
|
-
else:
|
|
186
|
-
self.log("No documents to add to the Vector Store.")
|
|
187
|
-
|
|
188
|
-
def search(self, query: str | None = None) -> list[dict[str, Any]]:
|
|
189
|
-
"""Search for similar documents in the vector store or retrieve all documents if no query is provided."""
|
|
190
|
-
vector_store = self.build_vector_store()
|
|
191
|
-
search_kwargs = {
|
|
192
|
-
"k": self.number_of_results,
|
|
193
|
-
"score_threshold": self.search_score_threshold,
|
|
194
|
-
}
|
|
195
|
-
|
|
196
|
-
if query:
|
|
197
|
-
search_type = self.search_type.lower()
|
|
198
|
-
if search_type not in {"similarity", "mmr"}:
|
|
199
|
-
msg = f"Invalid search type: {self.search_type}"
|
|
200
|
-
self.log(msg)
|
|
201
|
-
raise ValueError(msg)
|
|
202
|
-
try:
|
|
203
|
-
if search_type == "similarity":
|
|
204
|
-
results = vector_store.similarity_search_with_score(query, **search_kwargs)
|
|
205
|
-
elif search_type == "mmr":
|
|
206
|
-
results = vector_store.max_marginal_relevance_search(query, **search_kwargs)
|
|
207
|
-
except Exception as e:
|
|
208
|
-
msg = (
|
|
209
|
-
"Error occurred while querying the Elasticsearch VectorStore,"
|
|
210
|
-
" there is no Data into the VectorStore."
|
|
211
|
-
)
|
|
212
|
-
self.log(msg)
|
|
213
|
-
raise ValueError(msg) from e
|
|
214
|
-
return [
|
|
215
|
-
{"page_content": doc.page_content, "metadata": doc.metadata, "score": score} for doc, score in results
|
|
216
|
-
]
|
|
217
|
-
results = self.get_all_documents(vector_store, **search_kwargs)
|
|
218
|
-
return [{"page_content": doc.page_content, "metadata": doc.metadata, "score": score} for doc, score in results]
|
|
219
|
-
|
|
220
|
-
def get_all_documents(self, vector_store: ElasticsearchStore, **kwargs) -> list[tuple[Document, float]]:
|
|
221
|
-
"""Retrieve all documents from the vector store."""
|
|
222
|
-
client = vector_store.client
|
|
223
|
-
index_name = self.index_name
|
|
224
|
-
|
|
225
|
-
query = {
|
|
226
|
-
"query": {"match_all": {}},
|
|
227
|
-
"size": kwargs.get("k", self.number_of_results),
|
|
228
|
-
}
|
|
229
|
-
|
|
230
|
-
response = client.search(index=index_name, body=query)
|
|
231
|
-
|
|
232
|
-
results = []
|
|
233
|
-
for hit in response["hits"]["hits"]:
|
|
234
|
-
doc = Document(
|
|
235
|
-
page_content=hit["_source"].get("text", ""),
|
|
236
|
-
metadata=hit["_source"].get("metadata", {}),
|
|
237
|
-
)
|
|
238
|
-
score = hit["_score"]
|
|
239
|
-
results.append((doc, score))
|
|
240
|
-
|
|
241
|
-
return results
|
|
242
|
-
|
|
243
|
-
def search_documents(self) -> list[Data]:
|
|
244
|
-
"""Search for documents in the vector store based on the search input.
|
|
245
|
-
|
|
246
|
-
If no search input is provided, retrieve all documents.
|
|
247
|
-
"""
|
|
248
|
-
results = self.search(self.search_query)
|
|
249
|
-
retrieved_data = [
|
|
250
|
-
Data(
|
|
251
|
-
text=result["page_content"],
|
|
252
|
-
file_path=result["metadata"].get("file_path", ""),
|
|
253
|
-
)
|
|
254
|
-
for result in results
|
|
255
|
-
]
|
|
256
|
-
self.status = retrieved_data
|
|
257
|
-
return retrieved_data
|
|
258
|
-
|
|
259
|
-
def get_retriever_kwargs(self):
|
|
260
|
-
"""Get the keyword arguments for the retriever."""
|
|
261
|
-
return {
|
|
262
|
-
"search_type": self.search_type.lower(),
|
|
263
|
-
"search_kwargs": {
|
|
264
|
-
"k": self.number_of_results,
|
|
265
|
-
"score_threshold": self.search_score_threshold,
|
|
266
|
-
},
|
|
267
|
-
}
|
|
@@ -1,243 +0,0 @@
|
|
|
1
|
-
import json
|
|
2
|
-
from typing import Any
|
|
3
|
-
|
|
4
|
-
from langchain_community.vectorstores import OpenSearchVectorSearch
|
|
5
|
-
|
|
6
|
-
from langflow.base.vectorstores.model import LCVectorStoreComponent, check_cached_vector_store
|
|
7
|
-
from langflow.base.vectorstores.vector_store_connection_decorator import vector_store_connection
|
|
8
|
-
from langflow.io import (
|
|
9
|
-
BoolInput,
|
|
10
|
-
DropdownInput,
|
|
11
|
-
FloatInput,
|
|
12
|
-
HandleInput,
|
|
13
|
-
IntInput,
|
|
14
|
-
MultilineInput,
|
|
15
|
-
SecretStrInput,
|
|
16
|
-
StrInput,
|
|
17
|
-
)
|
|
18
|
-
from langflow.schema.data import Data
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
@vector_store_connection
|
|
22
|
-
class OpenSearchVectorStoreComponent(LCVectorStoreComponent):
|
|
23
|
-
"""OpenSearch Vector Store with advanced, customizable search capabilities."""
|
|
24
|
-
|
|
25
|
-
display_name: str = "OpenSearch"
|
|
26
|
-
description: str = "OpenSearch Vector Store with advanced, customizable search capabilities."
|
|
27
|
-
name = "OpenSearch"
|
|
28
|
-
icon = "OpenSearch"
|
|
29
|
-
|
|
30
|
-
inputs = [
|
|
31
|
-
StrInput(
|
|
32
|
-
name="opensearch_url",
|
|
33
|
-
display_name="OpenSearch URL",
|
|
34
|
-
value="http://localhost:9200",
|
|
35
|
-
info="URL for OpenSearch cluster (e.g. https://192.168.1.1:9200).",
|
|
36
|
-
),
|
|
37
|
-
StrInput(
|
|
38
|
-
name="index_name",
|
|
39
|
-
display_name="Index Name",
|
|
40
|
-
value="langflow",
|
|
41
|
-
info="The index name where the vectors will be stored in OpenSearch cluster.",
|
|
42
|
-
),
|
|
43
|
-
*LCVectorStoreComponent.inputs,
|
|
44
|
-
HandleInput(name="embedding", display_name="Embedding", input_types=["Embeddings"]),
|
|
45
|
-
DropdownInput(
|
|
46
|
-
name="search_type",
|
|
47
|
-
display_name="Search Type",
|
|
48
|
-
options=["similarity", "similarity_score_threshold", "mmr"],
|
|
49
|
-
value="similarity",
|
|
50
|
-
advanced=True,
|
|
51
|
-
),
|
|
52
|
-
IntInput(
|
|
53
|
-
name="number_of_results",
|
|
54
|
-
display_name="Number of Results",
|
|
55
|
-
info="Number of results to return.",
|
|
56
|
-
advanced=True,
|
|
57
|
-
value=4,
|
|
58
|
-
),
|
|
59
|
-
FloatInput(
|
|
60
|
-
name="search_score_threshold",
|
|
61
|
-
display_name="Search Score Threshold",
|
|
62
|
-
info="Minimum similarity score threshold for search results.",
|
|
63
|
-
value=0.0,
|
|
64
|
-
advanced=True,
|
|
65
|
-
),
|
|
66
|
-
StrInput(
|
|
67
|
-
name="username",
|
|
68
|
-
display_name="Username",
|
|
69
|
-
value="admin",
|
|
70
|
-
advanced=True,
|
|
71
|
-
),
|
|
72
|
-
SecretStrInput(
|
|
73
|
-
name="password",
|
|
74
|
-
display_name="Password",
|
|
75
|
-
value="admin",
|
|
76
|
-
advanced=True,
|
|
77
|
-
),
|
|
78
|
-
BoolInput(
|
|
79
|
-
name="use_ssl",
|
|
80
|
-
display_name="Use SSL",
|
|
81
|
-
value=True,
|
|
82
|
-
advanced=True,
|
|
83
|
-
),
|
|
84
|
-
BoolInput(
|
|
85
|
-
name="verify_certs",
|
|
86
|
-
display_name="Verify Certificates",
|
|
87
|
-
value=False,
|
|
88
|
-
advanced=True,
|
|
89
|
-
),
|
|
90
|
-
MultilineInput(
|
|
91
|
-
name="hybrid_search_query",
|
|
92
|
-
display_name="Hybrid Search Query",
|
|
93
|
-
value="",
|
|
94
|
-
advanced=True,
|
|
95
|
-
info=(
|
|
96
|
-
"Provide a custom hybrid search query in JSON format. This allows you to combine "
|
|
97
|
-
"vector similarity and keyword matching."
|
|
98
|
-
),
|
|
99
|
-
),
|
|
100
|
-
]
|
|
101
|
-
|
|
102
|
-
@check_cached_vector_store
|
|
103
|
-
def build_vector_store(self) -> OpenSearchVectorSearch:
|
|
104
|
-
"""Builds the OpenSearch Vector Store object."""
|
|
105
|
-
try:
|
|
106
|
-
from langchain_community.vectorstores import OpenSearchVectorSearch
|
|
107
|
-
except ImportError as e:
|
|
108
|
-
error_message = f"Failed to import required modules: {e}"
|
|
109
|
-
self.log(error_message)
|
|
110
|
-
raise ImportError(error_message) from e
|
|
111
|
-
|
|
112
|
-
try:
|
|
113
|
-
opensearch = OpenSearchVectorSearch(
|
|
114
|
-
index_name=self.index_name,
|
|
115
|
-
embedding_function=self.embedding,
|
|
116
|
-
opensearch_url=self.opensearch_url,
|
|
117
|
-
http_auth=(self.username, self.password),
|
|
118
|
-
use_ssl=self.use_ssl,
|
|
119
|
-
verify_certs=self.verify_certs,
|
|
120
|
-
ssl_assert_hostname=False,
|
|
121
|
-
ssl_show_warn=False,
|
|
122
|
-
)
|
|
123
|
-
except Exception as e:
|
|
124
|
-
error_message = f"Failed to create OpenSearchVectorSearch instance: {e}"
|
|
125
|
-
self.log(error_message)
|
|
126
|
-
raise RuntimeError(error_message) from e
|
|
127
|
-
|
|
128
|
-
if self.ingest_data:
|
|
129
|
-
self._add_documents_to_vector_store(opensearch)
|
|
130
|
-
|
|
131
|
-
return opensearch
|
|
132
|
-
|
|
133
|
-
def _add_documents_to_vector_store(self, vector_store: "OpenSearchVectorSearch") -> None:
|
|
134
|
-
"""Adds documents to the Vector Store."""
|
|
135
|
-
# Convert DataFrame to Data if needed using parent's method
|
|
136
|
-
self.ingest_data = self._prepare_ingest_data()
|
|
137
|
-
|
|
138
|
-
documents = []
|
|
139
|
-
for _input in self.ingest_data or []:
|
|
140
|
-
if isinstance(_input, Data):
|
|
141
|
-
documents.append(_input.to_lc_document())
|
|
142
|
-
else:
|
|
143
|
-
error_message = f"Expected Data object, got {type(_input)}"
|
|
144
|
-
self.log(error_message)
|
|
145
|
-
raise TypeError(error_message)
|
|
146
|
-
|
|
147
|
-
if documents and self.embedding is not None:
|
|
148
|
-
self.log(f"Adding {len(documents)} documents to the Vector Store.")
|
|
149
|
-
try:
|
|
150
|
-
vector_store.add_documents(documents)
|
|
151
|
-
except Exception as e:
|
|
152
|
-
error_message = f"Error adding documents to Vector Store: {e}"
|
|
153
|
-
self.log(error_message)
|
|
154
|
-
raise RuntimeError(error_message) from e
|
|
155
|
-
else:
|
|
156
|
-
self.log("No documents to add to the Vector Store.")
|
|
157
|
-
|
|
158
|
-
def search(self, query: str | None = None) -> list[dict[str, Any]]:
|
|
159
|
-
"""Search for similar documents in the vector store or retrieve all documents if no query is provided."""
|
|
160
|
-
try:
|
|
161
|
-
vector_store = self.build_vector_store()
|
|
162
|
-
|
|
163
|
-
query = query or ""
|
|
164
|
-
|
|
165
|
-
if self.hybrid_search_query.strip():
|
|
166
|
-
try:
|
|
167
|
-
hybrid_query = json.loads(self.hybrid_search_query)
|
|
168
|
-
except json.JSONDecodeError as e:
|
|
169
|
-
error_message = f"Invalid hybrid search query JSON: {e}"
|
|
170
|
-
self.log(error_message)
|
|
171
|
-
raise ValueError(error_message) from e
|
|
172
|
-
|
|
173
|
-
results = vector_store.client.search(index=self.index_name, body=hybrid_query)
|
|
174
|
-
|
|
175
|
-
processed_results = []
|
|
176
|
-
for hit in results.get("hits", {}).get("hits", []):
|
|
177
|
-
source = hit.get("_source", {})
|
|
178
|
-
text = source.get("text", "")
|
|
179
|
-
metadata = source.get("metadata", {})
|
|
180
|
-
|
|
181
|
-
if isinstance(text, dict):
|
|
182
|
-
text = text.get("text", "")
|
|
183
|
-
|
|
184
|
-
processed_results.append(
|
|
185
|
-
{
|
|
186
|
-
"page_content": text,
|
|
187
|
-
"metadata": metadata,
|
|
188
|
-
}
|
|
189
|
-
)
|
|
190
|
-
return processed_results
|
|
191
|
-
|
|
192
|
-
search_kwargs = {"k": self.number_of_results}
|
|
193
|
-
search_type = self.search_type.lower()
|
|
194
|
-
|
|
195
|
-
if search_type == "similarity":
|
|
196
|
-
results = vector_store.similarity_search(query, **search_kwargs)
|
|
197
|
-
return [{"page_content": doc.page_content, "metadata": doc.metadata} for doc in results]
|
|
198
|
-
if search_type == "similarity_score_threshold":
|
|
199
|
-
search_kwargs["score_threshold"] = self.search_score_threshold
|
|
200
|
-
results = vector_store.similarity_search_with_relevance_scores(query, **search_kwargs)
|
|
201
|
-
return [
|
|
202
|
-
{
|
|
203
|
-
"page_content": doc.page_content,
|
|
204
|
-
"metadata": doc.metadata,
|
|
205
|
-
"score": score,
|
|
206
|
-
}
|
|
207
|
-
for doc, score in results
|
|
208
|
-
]
|
|
209
|
-
if search_type == "mmr":
|
|
210
|
-
results = vector_store.max_marginal_relevance_search(query, **search_kwargs)
|
|
211
|
-
return [{"page_content": doc.page_content, "metadata": doc.metadata} for doc in results]
|
|
212
|
-
|
|
213
|
-
except Exception as e:
|
|
214
|
-
error_message = f"Error during search: {e}"
|
|
215
|
-
self.log(error_message)
|
|
216
|
-
raise RuntimeError(error_message) from e
|
|
217
|
-
|
|
218
|
-
error_message = f"Error during search. Invalid search type: {self.search_type}"
|
|
219
|
-
self.log(error_message)
|
|
220
|
-
raise ValueError(error_message)
|
|
221
|
-
|
|
222
|
-
def search_documents(self) -> list[Data]:
|
|
223
|
-
"""Search for documents in the vector store based on the search input.
|
|
224
|
-
|
|
225
|
-
If no search input is provided, retrieve all documents.
|
|
226
|
-
"""
|
|
227
|
-
try:
|
|
228
|
-
query = self.search_query.strip() if self.search_query else None
|
|
229
|
-
results = self.search(query)
|
|
230
|
-
retrieved_data = [
|
|
231
|
-
Data(
|
|
232
|
-
file_path=result["metadata"].get("file_path", ""),
|
|
233
|
-
text=result["page_content"],
|
|
234
|
-
)
|
|
235
|
-
for result in results
|
|
236
|
-
]
|
|
237
|
-
except Exception as e:
|
|
238
|
-
error_message = f"Error during document search: {e}"
|
|
239
|
-
self.log(error_message)
|
|
240
|
-
raise RuntimeError(error_message) from e
|
|
241
|
-
|
|
242
|
-
self.status = retrieved_data
|
|
243
|
-
return retrieved_data
|
|
@@ -1,37 +0,0 @@
|
|
|
1
|
-
from __future__ import annotations
|
|
2
|
-
|
|
3
|
-
from typing import TYPE_CHECKING, Any
|
|
4
|
-
|
|
5
|
-
from langflow.components._importing import import_mod
|
|
6
|
-
|
|
7
|
-
if TYPE_CHECKING:
|
|
8
|
-
from langflow.components.embeddings.similarity import EmbeddingSimilarityComponent
|
|
9
|
-
from langflow.components.embeddings.text_embedder import TextEmbedderComponent
|
|
10
|
-
|
|
11
|
-
_dynamic_imports = {
|
|
12
|
-
"EmbeddingSimilarityComponent": "similarity",
|
|
13
|
-
"TextEmbedderComponent": "text_embedder",
|
|
14
|
-
}
|
|
15
|
-
|
|
16
|
-
__all__ = [
|
|
17
|
-
"EmbeddingSimilarityComponent",
|
|
18
|
-
"TextEmbedderComponent",
|
|
19
|
-
]
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
def __getattr__(attr_name: str) -> Any:
|
|
23
|
-
"""Lazily import embedding components on attribute access."""
|
|
24
|
-
if attr_name not in _dynamic_imports:
|
|
25
|
-
msg = f"module '{__name__}' has no attribute '{attr_name}'"
|
|
26
|
-
raise AttributeError(msg)
|
|
27
|
-
try:
|
|
28
|
-
result = import_mod(attr_name, _dynamic_imports[attr_name], __spec__.parent)
|
|
29
|
-
except (ModuleNotFoundError, ImportError, AttributeError) as e:
|
|
30
|
-
msg = f"Could not import '{attr_name}' from '{__name__}': {e}"
|
|
31
|
-
raise AttributeError(msg) from e
|
|
32
|
-
globals()[attr_name] = result
|
|
33
|
-
return result
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
def __dir__() -> list[str]:
|
|
37
|
-
return list(__all__)
|
|
@@ -1,76 +0,0 @@
|
|
|
1
|
-
from typing import Any
|
|
2
|
-
|
|
3
|
-
import numpy as np
|
|
4
|
-
|
|
5
|
-
from langflow.custom.custom_component.component import Component
|
|
6
|
-
from langflow.io import DataInput, DropdownInput, Output
|
|
7
|
-
from langflow.schema.data import Data
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
class EmbeddingSimilarityComponent(Component):
|
|
11
|
-
display_name: str = "Embedding Similarity"
|
|
12
|
-
description: str = "Compute selected form of similarity between two embedding vectors."
|
|
13
|
-
icon = "equal"
|
|
14
|
-
legacy: bool = True
|
|
15
|
-
|
|
16
|
-
inputs = [
|
|
17
|
-
DataInput(
|
|
18
|
-
name="embedding_vectors",
|
|
19
|
-
display_name="Embedding Vectors",
|
|
20
|
-
info="A list containing exactly two data objects with embedding vectors to compare.",
|
|
21
|
-
is_list=True,
|
|
22
|
-
required=True,
|
|
23
|
-
),
|
|
24
|
-
DropdownInput(
|
|
25
|
-
name="similarity_metric",
|
|
26
|
-
display_name="Similarity Metric",
|
|
27
|
-
info="Select the similarity metric to use.",
|
|
28
|
-
options=["Cosine Similarity", "Euclidean Distance", "Manhattan Distance"],
|
|
29
|
-
value="Cosine Similarity",
|
|
30
|
-
),
|
|
31
|
-
]
|
|
32
|
-
|
|
33
|
-
outputs = [
|
|
34
|
-
Output(display_name="Similarity Data", name="similarity_data", method="compute_similarity"),
|
|
35
|
-
]
|
|
36
|
-
|
|
37
|
-
def compute_similarity(self) -> Data:
|
|
38
|
-
embedding_vectors: list[Data] = self.embedding_vectors
|
|
39
|
-
|
|
40
|
-
# Assert that the list contains exactly two Data objects
|
|
41
|
-
if len(embedding_vectors) != 2: # noqa: PLR2004
|
|
42
|
-
msg = "Exactly two embedding vectors are required."
|
|
43
|
-
raise ValueError(msg)
|
|
44
|
-
|
|
45
|
-
embedding_1 = np.array(embedding_vectors[0].data["embeddings"])
|
|
46
|
-
embedding_2 = np.array(embedding_vectors[1].data["embeddings"])
|
|
47
|
-
|
|
48
|
-
if embedding_1.shape != embedding_2.shape:
|
|
49
|
-
similarity_score: dict[str, Any] = {"error": "Embeddings must have the same dimensions."}
|
|
50
|
-
else:
|
|
51
|
-
similarity_metric = self.similarity_metric
|
|
52
|
-
|
|
53
|
-
if similarity_metric == "Cosine Similarity":
|
|
54
|
-
score = np.dot(embedding_1, embedding_2) / (np.linalg.norm(embedding_1) * np.linalg.norm(embedding_2))
|
|
55
|
-
similarity_score = {"cosine_similarity": score}
|
|
56
|
-
|
|
57
|
-
elif similarity_metric == "Euclidean Distance":
|
|
58
|
-
score = np.linalg.norm(embedding_1 - embedding_2)
|
|
59
|
-
similarity_score = {"euclidean_distance": score}
|
|
60
|
-
|
|
61
|
-
elif similarity_metric == "Manhattan Distance":
|
|
62
|
-
score = np.sum(np.abs(embedding_1 - embedding_2))
|
|
63
|
-
similarity_score = {"manhattan_distance": score}
|
|
64
|
-
|
|
65
|
-
# Create a Data object to encapsulate the similarity score and additional information
|
|
66
|
-
similarity_data = Data(
|
|
67
|
-
data={
|
|
68
|
-
"embedding_1": embedding_vectors[0].data["embeddings"],
|
|
69
|
-
"embedding_2": embedding_vectors[1].data["embeddings"],
|
|
70
|
-
"similarity_score": similarity_score,
|
|
71
|
-
},
|
|
72
|
-
text_key="similarity_score",
|
|
73
|
-
)
|
|
74
|
-
|
|
75
|
-
self.status = similarity_data
|
|
76
|
-
return similarity_data
|
|
@@ -1,64 +0,0 @@
|
|
|
1
|
-
from typing import TYPE_CHECKING
|
|
2
|
-
|
|
3
|
-
from langflow.custom.custom_component.component import Component
|
|
4
|
-
from langflow.io import HandleInput, MessageInput, Output
|
|
5
|
-
from langflow.logging.logger import logger
|
|
6
|
-
from langflow.schema.data import Data
|
|
7
|
-
|
|
8
|
-
if TYPE_CHECKING:
|
|
9
|
-
from langflow.field_typing import Embeddings
|
|
10
|
-
from langflow.schema.message import Message
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
class TextEmbedderComponent(Component):
|
|
14
|
-
display_name: str = "Text Embedder"
|
|
15
|
-
description: str = "Generate embeddings for a given message using the specified embedding model."
|
|
16
|
-
icon = "binary"
|
|
17
|
-
legacy: bool = True
|
|
18
|
-
inputs = [
|
|
19
|
-
HandleInput(
|
|
20
|
-
name="embedding_model",
|
|
21
|
-
display_name="Embedding Model",
|
|
22
|
-
info="The embedding model to use for generating embeddings.",
|
|
23
|
-
input_types=["Embeddings"],
|
|
24
|
-
required=True,
|
|
25
|
-
),
|
|
26
|
-
MessageInput(
|
|
27
|
-
name="message",
|
|
28
|
-
display_name="Message",
|
|
29
|
-
info="The message to generate embeddings for.",
|
|
30
|
-
required=True,
|
|
31
|
-
),
|
|
32
|
-
]
|
|
33
|
-
outputs = [
|
|
34
|
-
Output(display_name="Embedding Data", name="embeddings", method="generate_embeddings"),
|
|
35
|
-
]
|
|
36
|
-
|
|
37
|
-
def generate_embeddings(self) -> Data:
|
|
38
|
-
try:
|
|
39
|
-
embedding_model: Embeddings = self.embedding_model
|
|
40
|
-
message: Message = self.message
|
|
41
|
-
|
|
42
|
-
# Combine validation checks to reduce nesting
|
|
43
|
-
if not embedding_model or not hasattr(embedding_model, "embed_documents"):
|
|
44
|
-
msg = "Invalid or incompatible embedding model"
|
|
45
|
-
raise ValueError(msg)
|
|
46
|
-
|
|
47
|
-
text_content = message.text if message and message.text else ""
|
|
48
|
-
if not text_content:
|
|
49
|
-
msg = "No text content found in message"
|
|
50
|
-
raise ValueError(msg)
|
|
51
|
-
|
|
52
|
-
embeddings = embedding_model.embed_documents([text_content])
|
|
53
|
-
if not embeddings or not isinstance(embeddings, list):
|
|
54
|
-
msg = "Invalid embeddings generated"
|
|
55
|
-
raise ValueError(msg)
|
|
56
|
-
|
|
57
|
-
embedding_vector = embeddings[0]
|
|
58
|
-
self.status = {"text": text_content, "embeddings": embedding_vector}
|
|
59
|
-
return Data(data={"text": text_content, "embeddings": embedding_vector})
|
|
60
|
-
except Exception as e: # noqa: BLE001
|
|
61
|
-
logger.exception("Error generating embeddings")
|
|
62
|
-
error_data = Data(data={"text": "", "embeddings": [], "error": str(e)})
|
|
63
|
-
self.status = {"error": str(e)}
|
|
64
|
-
return error_data
|