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
langflow/base/tools/flow_tool.py
DELETED
|
@@ -1,131 +0,0 @@
|
|
|
1
|
-
from __future__ import annotations
|
|
2
|
-
|
|
3
|
-
from typing import TYPE_CHECKING, Any
|
|
4
|
-
|
|
5
|
-
from langchain_core.tools import BaseTool, ToolException
|
|
6
|
-
from typing_extensions import override
|
|
7
|
-
|
|
8
|
-
from langflow.base.flow_processing.utils import build_data_from_result_data, format_flow_output_data
|
|
9
|
-
from langflow.graph.graph.base import Graph # cannot be a part of TYPE_CHECKING # noqa: TC001
|
|
10
|
-
from langflow.graph.vertex.base import Vertex # cannot be a part of TYPE_CHECKING # noqa: TC001
|
|
11
|
-
from langflow.helpers.flow import build_schema_from_inputs, get_arg_names, get_flow_inputs, run_flow
|
|
12
|
-
from langflow.logging.logger import logger
|
|
13
|
-
from langflow.utils.async_helpers import run_until_complete
|
|
14
|
-
|
|
15
|
-
if TYPE_CHECKING:
|
|
16
|
-
from langchain_core.runnables import RunnableConfig
|
|
17
|
-
from pydantic.v1 import BaseModel
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
class FlowTool(BaseTool):
|
|
21
|
-
name: str
|
|
22
|
-
description: str
|
|
23
|
-
graph: Graph | None = None
|
|
24
|
-
flow_id: str | None = None
|
|
25
|
-
user_id: str | None = None
|
|
26
|
-
session_id: str | None = None
|
|
27
|
-
inputs: list[Vertex] = []
|
|
28
|
-
get_final_results_only: bool = True
|
|
29
|
-
|
|
30
|
-
@property
|
|
31
|
-
def args(self) -> dict:
|
|
32
|
-
schema = self.get_input_schema()
|
|
33
|
-
return schema.schema()["properties"]
|
|
34
|
-
|
|
35
|
-
@override
|
|
36
|
-
def get_input_schema( # type: ignore[misc]
|
|
37
|
-
self, config: RunnableConfig | None = None
|
|
38
|
-
) -> type[BaseModel]:
|
|
39
|
-
"""The tool's input schema."""
|
|
40
|
-
if self.args_schema is not None:
|
|
41
|
-
return self.args_schema
|
|
42
|
-
if self.graph is not None:
|
|
43
|
-
return build_schema_from_inputs(self.name, get_flow_inputs(self.graph))
|
|
44
|
-
msg = "No input schema available."
|
|
45
|
-
raise ToolException(msg)
|
|
46
|
-
|
|
47
|
-
def _run(
|
|
48
|
-
self,
|
|
49
|
-
*args: Any,
|
|
50
|
-
**kwargs: Any,
|
|
51
|
-
) -> str:
|
|
52
|
-
"""Use the tool."""
|
|
53
|
-
args_names = get_arg_names(self.inputs)
|
|
54
|
-
if len(args_names) == len(args):
|
|
55
|
-
kwargs = {arg["arg_name"]: arg_value for arg, arg_value in zip(args_names, args, strict=True)}
|
|
56
|
-
elif len(args_names) != len(args) and len(args) != 0:
|
|
57
|
-
msg = "Number of arguments does not match the number of inputs. Pass keyword arguments instead."
|
|
58
|
-
raise ToolException(msg)
|
|
59
|
-
tweaks = {arg["component_name"]: kwargs[arg["arg_name"]] for arg in args_names}
|
|
60
|
-
|
|
61
|
-
run_outputs = run_until_complete(
|
|
62
|
-
run_flow(
|
|
63
|
-
graph=self.graph,
|
|
64
|
-
tweaks={key: {"input_value": value} for key, value in tweaks.items()},
|
|
65
|
-
flow_id=self.flow_id,
|
|
66
|
-
user_id=self.user_id,
|
|
67
|
-
session_id=self.session_id,
|
|
68
|
-
)
|
|
69
|
-
)
|
|
70
|
-
if not run_outputs:
|
|
71
|
-
return "No output"
|
|
72
|
-
run_output = run_outputs[0]
|
|
73
|
-
|
|
74
|
-
data = []
|
|
75
|
-
if run_output is not None:
|
|
76
|
-
for output in run_output.outputs:
|
|
77
|
-
if output:
|
|
78
|
-
data.extend(build_data_from_result_data(output))
|
|
79
|
-
return format_flow_output_data(data)
|
|
80
|
-
|
|
81
|
-
def validate_inputs(self, args_names: list[dict[str, str]], args: Any, kwargs: Any):
|
|
82
|
-
"""Validate the inputs."""
|
|
83
|
-
if len(args) > 0 and len(args) != len(args_names):
|
|
84
|
-
msg = "Number of positional arguments does not match the number of inputs. Pass keyword arguments instead."
|
|
85
|
-
raise ToolException(msg)
|
|
86
|
-
|
|
87
|
-
if len(args) == len(args_names):
|
|
88
|
-
kwargs = {arg_name["arg_name"]: arg_value for arg_name, arg_value in zip(args_names, args, strict=True)}
|
|
89
|
-
|
|
90
|
-
missing_args = [arg["arg_name"] for arg in args_names if arg["arg_name"] not in kwargs]
|
|
91
|
-
if missing_args:
|
|
92
|
-
msg = f"Missing required arguments: {', '.join(missing_args)}"
|
|
93
|
-
raise ToolException(msg)
|
|
94
|
-
|
|
95
|
-
return kwargs
|
|
96
|
-
|
|
97
|
-
def build_tweaks_dict(self, args, kwargs):
|
|
98
|
-
args_names = get_arg_names(self.inputs)
|
|
99
|
-
kwargs = self.validate_inputs(args_names=args_names, args=args, kwargs=kwargs)
|
|
100
|
-
return {arg["component_name"]: kwargs[arg["arg_name"]] for arg in args_names}
|
|
101
|
-
|
|
102
|
-
async def _arun(
|
|
103
|
-
self,
|
|
104
|
-
*args: Any,
|
|
105
|
-
**kwargs: Any,
|
|
106
|
-
) -> str:
|
|
107
|
-
"""Use the tool asynchronously."""
|
|
108
|
-
tweaks = self.build_tweaks_dict(args, kwargs)
|
|
109
|
-
try:
|
|
110
|
-
run_id = self.graph.run_id if hasattr(self, "graph") and self.graph else None
|
|
111
|
-
except Exception: # noqa: BLE001
|
|
112
|
-
logger.warning("Failed to set run_id", exc_info=True)
|
|
113
|
-
run_id = None
|
|
114
|
-
run_outputs = await run_flow(
|
|
115
|
-
tweaks={key: {"input_value": value} for key, value in tweaks.items()},
|
|
116
|
-
flow_id=self.flow_id,
|
|
117
|
-
user_id=self.user_id,
|
|
118
|
-
run_id=run_id,
|
|
119
|
-
session_id=self.session_id,
|
|
120
|
-
graph=self.graph,
|
|
121
|
-
)
|
|
122
|
-
if not run_outputs:
|
|
123
|
-
return "No output"
|
|
124
|
-
run_output = run_outputs[0]
|
|
125
|
-
|
|
126
|
-
data = []
|
|
127
|
-
if run_output is not None:
|
|
128
|
-
for output in run_output.outputs:
|
|
129
|
-
if output:
|
|
130
|
-
data.extend(build_data_from_result_data(output))
|
|
131
|
-
return format_flow_output_data(data)
|
langflow/base/tools/run_flow.py
DELETED
|
@@ -1,227 +0,0 @@
|
|
|
1
|
-
from abc import abstractmethod
|
|
2
|
-
from typing import TYPE_CHECKING
|
|
3
|
-
|
|
4
|
-
from typing_extensions import override
|
|
5
|
-
|
|
6
|
-
from langflow.custom.custom_component.component import Component, _get_component_toolkit
|
|
7
|
-
from langflow.field_typing import Tool
|
|
8
|
-
from langflow.graph.graph.base import Graph
|
|
9
|
-
from langflow.graph.vertex.base import Vertex
|
|
10
|
-
from langflow.helpers.flow import get_flow_inputs
|
|
11
|
-
from langflow.inputs.inputs import DropdownInput, InputTypes, MessageInput
|
|
12
|
-
from langflow.logging.logger import logger
|
|
13
|
-
from langflow.schema.data import Data
|
|
14
|
-
from langflow.schema.dataframe import DataFrame
|
|
15
|
-
from langflow.schema.dotdict import dotdict
|
|
16
|
-
from langflow.schema.message import Message
|
|
17
|
-
from langflow.template.field.base import Output
|
|
18
|
-
|
|
19
|
-
if TYPE_CHECKING:
|
|
20
|
-
from langflow.base.tools.component_tool import ComponentToolkit
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
class RunFlowBaseComponent(Component):
|
|
24
|
-
def __init__(self, *args, **kwargs):
|
|
25
|
-
super().__init__(*args, **kwargs)
|
|
26
|
-
self.add_tool_output = True
|
|
27
|
-
|
|
28
|
-
_base_inputs: list[InputTypes] = [
|
|
29
|
-
DropdownInput(
|
|
30
|
-
name="flow_name_selected",
|
|
31
|
-
display_name="Flow Name",
|
|
32
|
-
info="The name of the flow to run.",
|
|
33
|
-
options=[],
|
|
34
|
-
real_time_refresh=True,
|
|
35
|
-
value=None,
|
|
36
|
-
),
|
|
37
|
-
MessageInput(
|
|
38
|
-
name="session_id",
|
|
39
|
-
display_name="Session ID",
|
|
40
|
-
info="The session ID to run the flow in.",
|
|
41
|
-
value="",
|
|
42
|
-
advanced=True,
|
|
43
|
-
),
|
|
44
|
-
]
|
|
45
|
-
_base_outputs: list[Output] = [
|
|
46
|
-
Output(
|
|
47
|
-
name="flow_outputs_data",
|
|
48
|
-
display_name="Flow Data Output",
|
|
49
|
-
method="data_output",
|
|
50
|
-
hidden=True,
|
|
51
|
-
group_outputs=True,
|
|
52
|
-
tool_mode=False, # This output is not intended to be used as a tool, so tool_mode is disabled.
|
|
53
|
-
),
|
|
54
|
-
Output(
|
|
55
|
-
name="flow_outputs_dataframe",
|
|
56
|
-
display_name="Flow Dataframe Output",
|
|
57
|
-
method="dataframe_output",
|
|
58
|
-
hidden=True,
|
|
59
|
-
group_outputs=True,
|
|
60
|
-
tool_mode=False, # This output is not intended to be used as a tool, so tool_mode is disabled.
|
|
61
|
-
),
|
|
62
|
-
Output(
|
|
63
|
-
name="flow_outputs_message", group_outputs=True, display_name="Flow Message Output", method="message_output"
|
|
64
|
-
),
|
|
65
|
-
]
|
|
66
|
-
default_keys = ["code", "_type", "flow_name_selected", "session_id"]
|
|
67
|
-
FLOW_INPUTS: list[dotdict] = []
|
|
68
|
-
flow_tweak_data: dict = {}
|
|
69
|
-
|
|
70
|
-
@abstractmethod
|
|
71
|
-
async def run_flow_with_tweaks(self) -> list[Data]:
|
|
72
|
-
"""Run the flow with tweaks."""
|
|
73
|
-
|
|
74
|
-
async def data_output(self) -> Data:
|
|
75
|
-
"""Return the data output."""
|
|
76
|
-
run_outputs = await self.run_flow_with_tweaks()
|
|
77
|
-
first_output = run_outputs[0]
|
|
78
|
-
|
|
79
|
-
if isinstance(first_output, Data):
|
|
80
|
-
return first_output
|
|
81
|
-
|
|
82
|
-
# just adaptive output Message
|
|
83
|
-
_, message_result = next(iter(run_outputs[0].outputs[0].results.items()))
|
|
84
|
-
message_data = message_result.data
|
|
85
|
-
return Data(data=message_data)
|
|
86
|
-
|
|
87
|
-
async def dataframe_output(self) -> DataFrame:
|
|
88
|
-
"""Return the dataframe output."""
|
|
89
|
-
run_outputs = await self.run_flow_with_tweaks()
|
|
90
|
-
first_output = run_outputs[0]
|
|
91
|
-
|
|
92
|
-
if isinstance(first_output, DataFrame):
|
|
93
|
-
return first_output
|
|
94
|
-
|
|
95
|
-
# just adaptive output Message
|
|
96
|
-
_, message_result = next(iter(run_outputs[0].outputs[0].results.items()))
|
|
97
|
-
message_data = message_result.data
|
|
98
|
-
return DataFrame(data=message_data if isinstance(message_data, list) else [message_data])
|
|
99
|
-
|
|
100
|
-
async def message_output(self) -> Message:
|
|
101
|
-
"""Return the message output."""
|
|
102
|
-
run_outputs = await self.run_flow_with_tweaks()
|
|
103
|
-
_, message_result = next(iter(run_outputs[0].outputs[0].results.items()))
|
|
104
|
-
if isinstance(message_result, Message):
|
|
105
|
-
return message_result
|
|
106
|
-
if isinstance(message_result, str):
|
|
107
|
-
return Message(text=message_result)
|
|
108
|
-
return Message(text=message_result.data["text"])
|
|
109
|
-
|
|
110
|
-
async def get_flow_names(self) -> list[str]:
|
|
111
|
-
# TODO: get flfow ID with flow name
|
|
112
|
-
flow_data = await self.alist_flows()
|
|
113
|
-
return [flow_data.data["name"] for flow_data in flow_data]
|
|
114
|
-
|
|
115
|
-
async def get_flow(self, flow_name_selected: str) -> Data | None:
|
|
116
|
-
# get flow from flow id
|
|
117
|
-
flow_datas = await self.alist_flows()
|
|
118
|
-
for flow_data in flow_datas:
|
|
119
|
-
if flow_data.data["name"] == flow_name_selected:
|
|
120
|
-
return flow_data
|
|
121
|
-
return None
|
|
122
|
-
|
|
123
|
-
async def get_graph(self, flow_name_selected: str | None = None) -> Graph:
|
|
124
|
-
if flow_name_selected:
|
|
125
|
-
flow_data = await self.get_flow(flow_name_selected)
|
|
126
|
-
if flow_data:
|
|
127
|
-
return Graph.from_payload(flow_data.data["data"])
|
|
128
|
-
msg = "Flow not found"
|
|
129
|
-
raise ValueError(msg)
|
|
130
|
-
# Ensure a Graph is always returned or an exception is raised
|
|
131
|
-
msg = "No valid flow JSON or flow name selected."
|
|
132
|
-
raise ValueError(msg)
|
|
133
|
-
|
|
134
|
-
def get_new_fields_from_graph(self, graph: Graph) -> list[dotdict]:
|
|
135
|
-
inputs = get_flow_inputs(graph)
|
|
136
|
-
return self.get_new_fields(inputs)
|
|
137
|
-
|
|
138
|
-
def update_build_config_from_graph(self, build_config: dotdict, graph: Graph):
|
|
139
|
-
try:
|
|
140
|
-
# Get all inputs from the graph
|
|
141
|
-
new_fields = self.get_new_fields_from_graph(graph)
|
|
142
|
-
old_fields = self.get_old_fields(build_config, new_fields)
|
|
143
|
-
self.delete_fields(build_config, old_fields)
|
|
144
|
-
build_config = self.add_new_fields(build_config, new_fields)
|
|
145
|
-
|
|
146
|
-
except Exception as e:
|
|
147
|
-
msg = "Error updating build config from graph"
|
|
148
|
-
logger.exception(msg)
|
|
149
|
-
raise RuntimeError(msg) from e
|
|
150
|
-
|
|
151
|
-
def get_new_fields(self, inputs_vertex: list[Vertex]) -> list[dotdict]:
|
|
152
|
-
new_fields: list[dotdict] = []
|
|
153
|
-
|
|
154
|
-
for vertex in inputs_vertex:
|
|
155
|
-
field_template = vertex.data.get("node", {}).get("template", {})
|
|
156
|
-
field_order = vertex.data.get("node", {}).get("field_order", [])
|
|
157
|
-
if field_order and field_template:
|
|
158
|
-
new_vertex_inputs = [
|
|
159
|
-
dotdict(
|
|
160
|
-
{
|
|
161
|
-
**field_template[input_name],
|
|
162
|
-
"display_name": vertex.display_name + " - " + field_template[input_name]["display_name"],
|
|
163
|
-
"name": f"{vertex.id}~{input_name}",
|
|
164
|
-
"tool_mode": not (field_template[input_name].get("advanced", False)),
|
|
165
|
-
}
|
|
166
|
-
)
|
|
167
|
-
for input_name in field_order
|
|
168
|
-
if input_name in field_template
|
|
169
|
-
]
|
|
170
|
-
new_fields += new_vertex_inputs
|
|
171
|
-
return new_fields
|
|
172
|
-
|
|
173
|
-
def add_new_fields(self, build_config: dotdict, new_fields: list[dotdict]) -> dotdict:
|
|
174
|
-
"""Add new fields to the build_config."""
|
|
175
|
-
for field in new_fields:
|
|
176
|
-
build_config[field["name"]] = field
|
|
177
|
-
return build_config
|
|
178
|
-
|
|
179
|
-
def delete_fields(self, build_config: dotdict, fields: dict | list[str]) -> None:
|
|
180
|
-
"""Delete specified fields from build_config."""
|
|
181
|
-
if isinstance(fields, dict):
|
|
182
|
-
fields = list(fields.keys())
|
|
183
|
-
for field in fields:
|
|
184
|
-
build_config.pop(field, None)
|
|
185
|
-
|
|
186
|
-
def get_old_fields(self, build_config: dotdict, new_fields: list[dotdict]) -> list[str]:
|
|
187
|
-
"""Get fields that are in build_config but not in new_fields."""
|
|
188
|
-
return [
|
|
189
|
-
field
|
|
190
|
-
for field in build_config
|
|
191
|
-
if field not in [new_field["name"] for new_field in new_fields] + self.default_keys
|
|
192
|
-
]
|
|
193
|
-
|
|
194
|
-
async def get_required_data(self, flow_name_selected):
|
|
195
|
-
self.flow_data = await self.alist_flows()
|
|
196
|
-
for flow_data in self.flow_data:
|
|
197
|
-
if flow_data.data["name"] == flow_name_selected:
|
|
198
|
-
graph = Graph.from_payload(flow_data.data["data"])
|
|
199
|
-
new_fields = self.get_new_fields_from_graph(graph)
|
|
200
|
-
new_fields = self.update_input_types(new_fields)
|
|
201
|
-
|
|
202
|
-
return flow_data.data["description"], [field for field in new_fields if field.get("tool_mode") is True]
|
|
203
|
-
return None
|
|
204
|
-
|
|
205
|
-
def update_input_types(self, fields: list[dotdict]) -> list[dotdict]:
|
|
206
|
-
for field in fields:
|
|
207
|
-
if isinstance(field, dict):
|
|
208
|
-
if field.get("input_types") is None:
|
|
209
|
-
field["input_types"] = []
|
|
210
|
-
elif hasattr(field, "input_types") and field.input_types is None:
|
|
211
|
-
field.input_types = []
|
|
212
|
-
return fields
|
|
213
|
-
|
|
214
|
-
@override
|
|
215
|
-
async def _get_tools(self) -> list[Tool]:
|
|
216
|
-
component_toolkit: type[ComponentToolkit] = _get_component_toolkit()
|
|
217
|
-
flow_description, tool_mode_inputs = await self.get_required_data(self.flow_name_selected)
|
|
218
|
-
# # convert list of dicts to list of dotdicts
|
|
219
|
-
tool_mode_inputs = [dotdict(field) for field in tool_mode_inputs]
|
|
220
|
-
return component_toolkit(component=self).get_tools(
|
|
221
|
-
tool_name=f"{self.flow_name_selected}_tool",
|
|
222
|
-
tool_description=(
|
|
223
|
-
f"Tool designed to execute the flow '{self.flow_name_selected}'. Flow details: {flow_description}."
|
|
224
|
-
),
|
|
225
|
-
callbacks=self.get_langchain_callbacks(),
|
|
226
|
-
flow_mode_inputs=tool_mode_inputs,
|
|
227
|
-
)
|
|
@@ -1,193 +0,0 @@
|
|
|
1
|
-
from abc import abstractmethod
|
|
2
|
-
from functools import wraps
|
|
3
|
-
from typing import TYPE_CHECKING, Any
|
|
4
|
-
|
|
5
|
-
from langflow.custom.custom_component.component import Component
|
|
6
|
-
from langflow.field_typing import Text, VectorStore
|
|
7
|
-
from langflow.helpers.data import docs_to_data
|
|
8
|
-
from langflow.inputs.inputs import BoolInput
|
|
9
|
-
from langflow.io import HandleInput, Output, QueryInput
|
|
10
|
-
from langflow.schema.data import Data
|
|
11
|
-
from langflow.schema.dataframe import DataFrame
|
|
12
|
-
|
|
13
|
-
if TYPE_CHECKING:
|
|
14
|
-
from langchain_core.documents import Document
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
def check_cached_vector_store(f):
|
|
18
|
-
"""Decorator to check for cached vector stores, and returns them if they exist.
|
|
19
|
-
|
|
20
|
-
Note: caching only occurs during the execution of a component - they do not persist
|
|
21
|
-
across separate invocations of the component. This method exists so that components with
|
|
22
|
-
multiple output methods share the same vector store during the same invocation of the
|
|
23
|
-
component.
|
|
24
|
-
"""
|
|
25
|
-
|
|
26
|
-
@wraps(f)
|
|
27
|
-
def check_cached(self, *args, **kwargs):
|
|
28
|
-
should_cache = getattr(self, "should_cache_vector_store", True)
|
|
29
|
-
|
|
30
|
-
if should_cache and self._cached_vector_store is not None:
|
|
31
|
-
return self._cached_vector_store
|
|
32
|
-
|
|
33
|
-
result = f(self, *args, **kwargs)
|
|
34
|
-
self._cached_vector_store = result
|
|
35
|
-
return result
|
|
36
|
-
|
|
37
|
-
check_cached.is_cached_vector_store_checked = True
|
|
38
|
-
return check_cached
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
class LCVectorStoreComponent(Component):
|
|
42
|
-
# Used to ensure a single vector store is built for each run of the flow
|
|
43
|
-
_cached_vector_store: VectorStore | None = None
|
|
44
|
-
|
|
45
|
-
def __init_subclass__(cls, **kwargs):
|
|
46
|
-
"""Enforces the check cached decorator on all subclasses."""
|
|
47
|
-
super().__init_subclass__(**kwargs)
|
|
48
|
-
if hasattr(cls, "build_vector_store"):
|
|
49
|
-
method = cls.build_vector_store
|
|
50
|
-
if not hasattr(method, "is_cached_vector_store_checked"):
|
|
51
|
-
msg = (
|
|
52
|
-
f"The method 'build_vector_store' in class {cls.__name__} "
|
|
53
|
-
"must be decorated with @check_cached_vector_store"
|
|
54
|
-
)
|
|
55
|
-
raise TypeError(msg)
|
|
56
|
-
|
|
57
|
-
trace_type = "retriever"
|
|
58
|
-
|
|
59
|
-
inputs = [
|
|
60
|
-
HandleInput(
|
|
61
|
-
name="ingest_data",
|
|
62
|
-
display_name="Ingest Data",
|
|
63
|
-
input_types=["Data", "DataFrame"],
|
|
64
|
-
is_list=True,
|
|
65
|
-
),
|
|
66
|
-
QueryInput(
|
|
67
|
-
name="search_query",
|
|
68
|
-
display_name="Search Query",
|
|
69
|
-
info="Enter a query to run a similarity search.",
|
|
70
|
-
placeholder="Enter a query...",
|
|
71
|
-
tool_mode=True,
|
|
72
|
-
),
|
|
73
|
-
BoolInput(
|
|
74
|
-
name="should_cache_vector_store",
|
|
75
|
-
display_name="Cache Vector Store",
|
|
76
|
-
value=True,
|
|
77
|
-
advanced=True,
|
|
78
|
-
info="If True, the vector store will be cached for the current build of the component. "
|
|
79
|
-
"This is useful for components that have multiple output methods and want to share the same vector store.",
|
|
80
|
-
),
|
|
81
|
-
]
|
|
82
|
-
|
|
83
|
-
outputs = [
|
|
84
|
-
Output(
|
|
85
|
-
display_name="Search Results",
|
|
86
|
-
name="search_results",
|
|
87
|
-
method="search_documents",
|
|
88
|
-
),
|
|
89
|
-
Output(display_name="DataFrame", name="dataframe", method="as_dataframe"),
|
|
90
|
-
]
|
|
91
|
-
|
|
92
|
-
def _validate_outputs(self) -> None:
|
|
93
|
-
# At least these three outputs must be defined
|
|
94
|
-
required_output_methods = [
|
|
95
|
-
"search_documents",
|
|
96
|
-
"build_vector_store",
|
|
97
|
-
]
|
|
98
|
-
output_names = [output.name for output in self.outputs]
|
|
99
|
-
for method_name in required_output_methods:
|
|
100
|
-
if method_name not in output_names:
|
|
101
|
-
msg = f"Output with name '{method_name}' must be defined."
|
|
102
|
-
raise ValueError(msg)
|
|
103
|
-
if not hasattr(self, method_name):
|
|
104
|
-
msg = f"Method '{method_name}' must be defined."
|
|
105
|
-
raise ValueError(msg)
|
|
106
|
-
|
|
107
|
-
def _prepare_ingest_data(self) -> list[Any]:
|
|
108
|
-
"""Prepares ingest_data by converting DataFrame to Data if needed."""
|
|
109
|
-
ingest_data: list | Data | DataFrame = self.ingest_data
|
|
110
|
-
if not ingest_data:
|
|
111
|
-
return []
|
|
112
|
-
|
|
113
|
-
if not isinstance(ingest_data, list):
|
|
114
|
-
ingest_data = [ingest_data]
|
|
115
|
-
|
|
116
|
-
result = []
|
|
117
|
-
|
|
118
|
-
for _input in ingest_data:
|
|
119
|
-
if isinstance(_input, DataFrame):
|
|
120
|
-
result.extend(_input.to_data_list())
|
|
121
|
-
else:
|
|
122
|
-
result.append(_input)
|
|
123
|
-
return result
|
|
124
|
-
|
|
125
|
-
def search_with_vector_store(
|
|
126
|
-
self,
|
|
127
|
-
input_value: Text,
|
|
128
|
-
search_type: str,
|
|
129
|
-
vector_store: VectorStore,
|
|
130
|
-
k=10,
|
|
131
|
-
**kwargs,
|
|
132
|
-
) -> list[Data]:
|
|
133
|
-
"""Search for data in the vector store based on the input value and search type.
|
|
134
|
-
|
|
135
|
-
Args:
|
|
136
|
-
input_value (Text): The input value to search for.
|
|
137
|
-
search_type (str): The type of search to perform.
|
|
138
|
-
vector_store (VectorStore): The vector store to search in.
|
|
139
|
-
k (int): The number of results to return.
|
|
140
|
-
**kwargs: Additional keyword arguments to pass to the vector store search method.
|
|
141
|
-
|
|
142
|
-
Returns:
|
|
143
|
-
List[Data]: A list of data matching the search criteria.
|
|
144
|
-
|
|
145
|
-
Raises:
|
|
146
|
-
ValueError: If invalid inputs are provided.
|
|
147
|
-
"""
|
|
148
|
-
docs: list[Document] = []
|
|
149
|
-
if input_value and isinstance(input_value, str) and hasattr(vector_store, "search"):
|
|
150
|
-
docs = vector_store.search(query=input_value, search_type=search_type.lower(), k=k, **kwargs)
|
|
151
|
-
else:
|
|
152
|
-
msg = "Invalid inputs provided."
|
|
153
|
-
raise ValueError(msg)
|
|
154
|
-
data = docs_to_data(docs)
|
|
155
|
-
self.status = data
|
|
156
|
-
return data
|
|
157
|
-
|
|
158
|
-
def search_documents(self) -> list[Data]:
|
|
159
|
-
"""Search for documents in the vector store."""
|
|
160
|
-
if self._cached_vector_store is not None:
|
|
161
|
-
vector_store = self._cached_vector_store
|
|
162
|
-
else:
|
|
163
|
-
vector_store = self.build_vector_store()
|
|
164
|
-
self._cached_vector_store = vector_store
|
|
165
|
-
|
|
166
|
-
search_query: str = self.search_query
|
|
167
|
-
if not search_query:
|
|
168
|
-
self.status = ""
|
|
169
|
-
return []
|
|
170
|
-
|
|
171
|
-
self.log(f"Search input: {search_query}")
|
|
172
|
-
self.log(f"Search type: {self.search_type}")
|
|
173
|
-
self.log(f"Number of results: {self.number_of_results}")
|
|
174
|
-
|
|
175
|
-
search_results = self.search_with_vector_store(
|
|
176
|
-
search_query, self.search_type, vector_store, k=self.number_of_results
|
|
177
|
-
)
|
|
178
|
-
self.status = search_results
|
|
179
|
-
return search_results
|
|
180
|
-
|
|
181
|
-
def as_dataframe(self) -> DataFrame:
|
|
182
|
-
return DataFrame(self.search_documents())
|
|
183
|
-
|
|
184
|
-
def get_retriever_kwargs(self):
|
|
185
|
-
"""Get the retriever kwargs. Implementations can override this method to provide custom retriever kwargs."""
|
|
186
|
-
return {}
|
|
187
|
-
|
|
188
|
-
@abstractmethod
|
|
189
|
-
@check_cached_vector_store
|
|
190
|
-
def build_vector_store(self) -> VectorStore:
|
|
191
|
-
"""Builds the Vector Store object."""
|
|
192
|
-
msg = "build_vector_store method must be implemented."
|
|
193
|
-
raise NotImplementedError(msg)
|
|
@@ -1,22 +0,0 @@
|
|
|
1
|
-
from langflow.schema.data import Data
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
def chroma_collection_to_data(collection_dict: dict):
|
|
5
|
-
"""Converts a collection of chroma vectors into a list of data.
|
|
6
|
-
|
|
7
|
-
Args:
|
|
8
|
-
collection_dict (dict): A dictionary containing the collection of chroma vectors.
|
|
9
|
-
|
|
10
|
-
Returns:
|
|
11
|
-
list: A list of data, where each record represents a document in the collection.
|
|
12
|
-
"""
|
|
13
|
-
data = []
|
|
14
|
-
for i, doc in enumerate(collection_dict["documents"]):
|
|
15
|
-
data_dict = {
|
|
16
|
-
"id": collection_dict["ids"][i],
|
|
17
|
-
"text": doc,
|
|
18
|
-
}
|
|
19
|
-
if ("metadatas" in collection_dict) and collection_dict["metadatas"][i]:
|
|
20
|
-
data_dict.update(collection_dict["metadatas"][i].items())
|
|
21
|
-
data.append(Data(**data_dict))
|
|
22
|
-
return data
|
|
@@ -1,52 +0,0 @@
|
|
|
1
|
-
from langchain_core.vectorstores import VectorStore
|
|
2
|
-
|
|
3
|
-
from langflow.io import Output
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
def vector_store_connection(cls):
|
|
7
|
-
"""A decorator that adds vector store connection functionality to a class.
|
|
8
|
-
|
|
9
|
-
This decorator performs the following actions:
|
|
10
|
-
1. Adds a `decorated` attribute to the class and sets it to True.
|
|
11
|
-
2. Checks if the class has an `outputs` attribute:
|
|
12
|
-
- If it does, it makes a copy of the `outputs` attribute to avoid modifying the base class attribute.
|
|
13
|
-
- It then checks if "vectorstoreconnection" is not already in the output names.
|
|
14
|
-
- If not, it adds a new `Output` entry for "Vector Store Connection" to the `outputs` attribute.
|
|
15
|
-
3. Adds an `as_vector_store` method to the class, which returns the result of the `build_vector_store` method.
|
|
16
|
-
|
|
17
|
-
Args:
|
|
18
|
-
cls (type): The class to be decorated.
|
|
19
|
-
|
|
20
|
-
Returns:
|
|
21
|
-
type: The decorated class with added vector store connection functionality.
|
|
22
|
-
"""
|
|
23
|
-
cls.decorated = True # Add an attribute to the class
|
|
24
|
-
|
|
25
|
-
if hasattr(cls, "outputs"):
|
|
26
|
-
cls.outputs = cls.outputs.copy() # Make a copy to avoid modifying the base class attribute
|
|
27
|
-
output_names = [output.name for output in cls.outputs]
|
|
28
|
-
|
|
29
|
-
if "vectorstoreconnection" not in output_names:
|
|
30
|
-
cls.outputs.extend(
|
|
31
|
-
[
|
|
32
|
-
Output(
|
|
33
|
-
display_name="Vector Store Connection",
|
|
34
|
-
hidden=True,
|
|
35
|
-
name="vectorstoreconnection",
|
|
36
|
-
method="as_vector_store",
|
|
37
|
-
group_outputs=False,
|
|
38
|
-
)
|
|
39
|
-
]
|
|
40
|
-
)
|
|
41
|
-
|
|
42
|
-
def as_vector_store(self) -> VectorStore:
|
|
43
|
-
"""Converts the current instance to a VectorStore object.
|
|
44
|
-
|
|
45
|
-
Returns:
|
|
46
|
-
VectorStore: The resulting VectorStore object.
|
|
47
|
-
"""
|
|
48
|
-
return self.build_vector_store()
|
|
49
|
-
|
|
50
|
-
cls.as_vector_store = as_vector_store # Ensures that the method is added to the class
|
|
51
|
-
|
|
52
|
-
return cls
|
|
@@ -1,34 +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 .faiss import FaissVectorStoreComponent
|
|
9
|
-
|
|
10
|
-
_dynamic_imports = {
|
|
11
|
-
"FaissVectorStoreComponent": "faiss",
|
|
12
|
-
}
|
|
13
|
-
|
|
14
|
-
__all__ = [
|
|
15
|
-
"FaissVectorStoreComponent",
|
|
16
|
-
]
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
def __getattr__(attr_name: str) -> Any:
|
|
20
|
-
"""Lazily import FAISS components on attribute access."""
|
|
21
|
-
if attr_name not in _dynamic_imports:
|
|
22
|
-
msg = f"module '{__name__}' has no attribute '{attr_name}'"
|
|
23
|
-
raise AttributeError(msg)
|
|
24
|
-
try:
|
|
25
|
-
result = import_mod(attr_name, _dynamic_imports[attr_name], __spec__.parent)
|
|
26
|
-
except (ModuleNotFoundError, ImportError, AttributeError) as e:
|
|
27
|
-
msg = f"Could not import '{attr_name}' from '{__name__}': {e}"
|
|
28
|
-
raise AttributeError(msg) from e
|
|
29
|
-
globals()[attr_name] = result
|
|
30
|
-
return result
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
def __dir__() -> list[str]:
|
|
34
|
-
return list(__all__)
|