langflow-base-nightly 0.5.1.dev3__py3-none-any.whl → 0.5.1.dev5__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.dev3.dist-info → langflow_base_nightly-0.5.1.dev5.dist-info}/METADATA +2 -1
- langflow_base_nightly-0.5.1.dev5.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.dev3.dist-info/RECORD +0 -1159
- {langflow_base_nightly-0.5.1.dev3.dist-info → langflow_base_nightly-0.5.1.dev5.dist-info}/WHEEL +0 -0
- {langflow_base_nightly-0.5.1.dev3.dist-info → langflow_base_nightly-0.5.1.dev5.dist-info}/entry_points.txt +0 -0
|
@@ -1,89 +0,0 @@
|
|
|
1
|
-
from typing import Any
|
|
2
|
-
from urllib.parse import urljoin
|
|
3
|
-
|
|
4
|
-
import httpx
|
|
5
|
-
|
|
6
|
-
from langflow.base.embeddings.model import LCEmbeddingsModel
|
|
7
|
-
from langflow.field_typing import Embeddings
|
|
8
|
-
from langflow.inputs.inputs import DropdownInput, SecretStrInput
|
|
9
|
-
from langflow.io import FloatInput, MessageTextInput
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
class LMStudioEmbeddingsComponent(LCEmbeddingsModel):
|
|
13
|
-
display_name: str = "LM Studio Embeddings"
|
|
14
|
-
description: str = "Generate embeddings using LM Studio."
|
|
15
|
-
icon = "LMStudio"
|
|
16
|
-
|
|
17
|
-
async def update_build_config(self, build_config: dict, field_value: Any, field_name: str | None = None): # noqa: ARG002
|
|
18
|
-
if field_name == "model":
|
|
19
|
-
base_url_dict = build_config.get("base_url", {})
|
|
20
|
-
base_url_load_from_db = base_url_dict.get("load_from_db", False)
|
|
21
|
-
base_url_value = base_url_dict.get("value")
|
|
22
|
-
if base_url_load_from_db:
|
|
23
|
-
base_url_value = await self.get_variables(base_url_value, field_name)
|
|
24
|
-
elif not base_url_value:
|
|
25
|
-
base_url_value = "http://localhost:1234/v1"
|
|
26
|
-
build_config["model"]["options"] = await self.get_model(base_url_value)
|
|
27
|
-
|
|
28
|
-
return build_config
|
|
29
|
-
|
|
30
|
-
@staticmethod
|
|
31
|
-
async def get_model(base_url_value: str) -> list[str]:
|
|
32
|
-
try:
|
|
33
|
-
url = urljoin(base_url_value, "/v1/models")
|
|
34
|
-
async with httpx.AsyncClient() as client:
|
|
35
|
-
response = await client.get(url)
|
|
36
|
-
response.raise_for_status()
|
|
37
|
-
data = response.json()
|
|
38
|
-
|
|
39
|
-
return [model["id"] for model in data.get("data", [])]
|
|
40
|
-
except Exception as e:
|
|
41
|
-
msg = "Could not retrieve models. Please, make sure the LM Studio server is running."
|
|
42
|
-
raise ValueError(msg) from e
|
|
43
|
-
|
|
44
|
-
inputs = [
|
|
45
|
-
DropdownInput(
|
|
46
|
-
name="model",
|
|
47
|
-
display_name="Model",
|
|
48
|
-
advanced=False,
|
|
49
|
-
refresh_button=True,
|
|
50
|
-
required=True,
|
|
51
|
-
),
|
|
52
|
-
MessageTextInput(
|
|
53
|
-
name="base_url",
|
|
54
|
-
display_name="LM Studio Base URL",
|
|
55
|
-
refresh_button=True,
|
|
56
|
-
value="http://localhost:1234/v1",
|
|
57
|
-
required=True,
|
|
58
|
-
),
|
|
59
|
-
SecretStrInput(
|
|
60
|
-
name="api_key",
|
|
61
|
-
display_name="LM Studio API Key",
|
|
62
|
-
advanced=True,
|
|
63
|
-
value="LMSTUDIO_API_KEY",
|
|
64
|
-
),
|
|
65
|
-
FloatInput(
|
|
66
|
-
name="temperature",
|
|
67
|
-
display_name="Model Temperature",
|
|
68
|
-
value=0.1,
|
|
69
|
-
advanced=True,
|
|
70
|
-
),
|
|
71
|
-
]
|
|
72
|
-
|
|
73
|
-
def build_embeddings(self) -> Embeddings:
|
|
74
|
-
try:
|
|
75
|
-
from langchain_nvidia_ai_endpoints import NVIDIAEmbeddings
|
|
76
|
-
except ImportError as e:
|
|
77
|
-
msg = "Please install langchain-nvidia-ai-endpoints to use LM Studio Embeddings."
|
|
78
|
-
raise ImportError(msg) from e
|
|
79
|
-
try:
|
|
80
|
-
output = NVIDIAEmbeddings(
|
|
81
|
-
model=self.model,
|
|
82
|
-
base_url=self.base_url,
|
|
83
|
-
temperature=self.temperature,
|
|
84
|
-
nvidia_api_key=self.api_key,
|
|
85
|
-
)
|
|
86
|
-
except Exception as e:
|
|
87
|
-
msg = f"Could not connect to LM Studio API. Error: {e}"
|
|
88
|
-
raise ValueError(msg) from e
|
|
89
|
-
return output
|
|
@@ -1,129 +0,0 @@
|
|
|
1
|
-
from typing import Any
|
|
2
|
-
from urllib.parse import urljoin
|
|
3
|
-
|
|
4
|
-
import httpx
|
|
5
|
-
from langchain_openai import ChatOpenAI
|
|
6
|
-
from typing_extensions import override
|
|
7
|
-
|
|
8
|
-
from langflow.base.models.model import LCModelComponent
|
|
9
|
-
from langflow.field_typing import LanguageModel
|
|
10
|
-
from langflow.field_typing.range_spec import RangeSpec
|
|
11
|
-
from langflow.inputs.inputs import DictInput, DropdownInput, FloatInput, IntInput, SecretStrInput, StrInput
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
class LMStudioModelComponent(LCModelComponent):
|
|
15
|
-
display_name = "LM Studio"
|
|
16
|
-
description = "Generate text using LM Studio Local LLMs."
|
|
17
|
-
icon = "LMStudio"
|
|
18
|
-
name = "LMStudioModel"
|
|
19
|
-
|
|
20
|
-
@override
|
|
21
|
-
async def update_build_config(self, build_config: dict, field_value: Any, field_name: str | None = None):
|
|
22
|
-
if field_name == "model_name":
|
|
23
|
-
base_url_dict = build_config.get("base_url", {})
|
|
24
|
-
base_url_load_from_db = base_url_dict.get("load_from_db", False)
|
|
25
|
-
base_url_value = base_url_dict.get("value")
|
|
26
|
-
if base_url_load_from_db:
|
|
27
|
-
base_url_value = await self.get_variables(base_url_value, field_name)
|
|
28
|
-
elif not base_url_value:
|
|
29
|
-
base_url_value = "http://localhost:1234/v1"
|
|
30
|
-
build_config["model_name"]["options"] = await self.get_model(base_url_value)
|
|
31
|
-
|
|
32
|
-
return build_config
|
|
33
|
-
|
|
34
|
-
@staticmethod
|
|
35
|
-
async def get_model(base_url_value: str) -> list[str]:
|
|
36
|
-
try:
|
|
37
|
-
url = urljoin(base_url_value, "/v1/models")
|
|
38
|
-
async with httpx.AsyncClient() as client:
|
|
39
|
-
response = await client.get(url)
|
|
40
|
-
response.raise_for_status()
|
|
41
|
-
data = response.json()
|
|
42
|
-
|
|
43
|
-
return [model["id"] for model in data.get("data", [])]
|
|
44
|
-
except Exception as e:
|
|
45
|
-
msg = "Could not retrieve models. Please, make sure the LM Studio server is running."
|
|
46
|
-
raise ValueError(msg) from e
|
|
47
|
-
|
|
48
|
-
inputs = [
|
|
49
|
-
*LCModelComponent._base_inputs,
|
|
50
|
-
IntInput(
|
|
51
|
-
name="max_tokens",
|
|
52
|
-
display_name="Max Tokens",
|
|
53
|
-
advanced=True,
|
|
54
|
-
info="The maximum number of tokens to generate. Set to 0 for unlimited tokens.",
|
|
55
|
-
range_spec=RangeSpec(min=0, max=128000),
|
|
56
|
-
),
|
|
57
|
-
DictInput(name="model_kwargs", display_name="Model Kwargs", advanced=True),
|
|
58
|
-
DropdownInput(
|
|
59
|
-
name="model_name",
|
|
60
|
-
display_name="Model Name",
|
|
61
|
-
advanced=False,
|
|
62
|
-
refresh_button=True,
|
|
63
|
-
),
|
|
64
|
-
StrInput(
|
|
65
|
-
name="base_url",
|
|
66
|
-
display_name="Base URL",
|
|
67
|
-
advanced=False,
|
|
68
|
-
info="Endpoint of the LM Studio API. Defaults to 'http://localhost:1234/v1' if not specified.",
|
|
69
|
-
value="http://localhost:1234/v1",
|
|
70
|
-
),
|
|
71
|
-
SecretStrInput(
|
|
72
|
-
name="api_key",
|
|
73
|
-
display_name="LM Studio API Key",
|
|
74
|
-
info="The LM Studio API Key to use for LM Studio.",
|
|
75
|
-
advanced=True,
|
|
76
|
-
value="LMSTUDIO_API_KEY",
|
|
77
|
-
),
|
|
78
|
-
FloatInput(
|
|
79
|
-
name="temperature",
|
|
80
|
-
display_name="Temperature",
|
|
81
|
-
value=0.1,
|
|
82
|
-
advanced=True,
|
|
83
|
-
),
|
|
84
|
-
IntInput(
|
|
85
|
-
name="seed",
|
|
86
|
-
display_name="Seed",
|
|
87
|
-
info="The seed controls the reproducibility of the job.",
|
|
88
|
-
advanced=True,
|
|
89
|
-
value=1,
|
|
90
|
-
),
|
|
91
|
-
]
|
|
92
|
-
|
|
93
|
-
def build_model(self) -> LanguageModel: # type: ignore[type-var]
|
|
94
|
-
lmstudio_api_key = self.api_key
|
|
95
|
-
temperature = self.temperature
|
|
96
|
-
model_name: str = self.model_name
|
|
97
|
-
max_tokens = self.max_tokens
|
|
98
|
-
model_kwargs = self.model_kwargs or {}
|
|
99
|
-
base_url = self.base_url or "http://localhost:1234/v1"
|
|
100
|
-
seed = self.seed
|
|
101
|
-
|
|
102
|
-
return ChatOpenAI(
|
|
103
|
-
max_tokens=max_tokens or None,
|
|
104
|
-
model_kwargs=model_kwargs,
|
|
105
|
-
model=model_name,
|
|
106
|
-
base_url=base_url,
|
|
107
|
-
api_key=lmstudio_api_key,
|
|
108
|
-
temperature=temperature if temperature is not None else 0.1,
|
|
109
|
-
seed=seed,
|
|
110
|
-
)
|
|
111
|
-
|
|
112
|
-
def _get_exception_message(self, e: Exception):
|
|
113
|
-
"""Get a message from an LM Studio exception.
|
|
114
|
-
|
|
115
|
-
Args:
|
|
116
|
-
e (Exception): The exception to get the message from.
|
|
117
|
-
|
|
118
|
-
Returns:
|
|
119
|
-
str: The message from the exception.
|
|
120
|
-
"""
|
|
121
|
-
try:
|
|
122
|
-
from openai import BadRequestError
|
|
123
|
-
except ImportError:
|
|
124
|
-
return None
|
|
125
|
-
if isinstance(e, BadRequestError):
|
|
126
|
-
message = e.body.get("message")
|
|
127
|
-
if message:
|
|
128
|
-
return message
|
|
129
|
-
return None
|
|
@@ -1,52 +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.logic.conditional_router import ConditionalRouterComponent
|
|
9
|
-
from langflow.components.logic.data_conditional_router import DataConditionalRouterComponent
|
|
10
|
-
from langflow.components.logic.flow_tool import FlowToolComponent
|
|
11
|
-
from langflow.components.logic.loop import LoopComponent
|
|
12
|
-
from langflow.components.logic.pass_message import PassMessageComponent
|
|
13
|
-
from langflow.components.logic.run_flow import RunFlowComponent
|
|
14
|
-
from langflow.components.logic.sub_flow import SubFlowComponent
|
|
15
|
-
|
|
16
|
-
_dynamic_imports = {
|
|
17
|
-
"ConditionalRouterComponent": "conditional_router",
|
|
18
|
-
"DataConditionalRouterComponent": "data_conditional_router",
|
|
19
|
-
"FlowToolComponent": "flow_tool",
|
|
20
|
-
"LoopComponent": "loop",
|
|
21
|
-
"PassMessageComponent": "pass_message",
|
|
22
|
-
"RunFlowComponent": "run_flow",
|
|
23
|
-
"SubFlowComponent": "sub_flow",
|
|
24
|
-
}
|
|
25
|
-
|
|
26
|
-
__all__ = [
|
|
27
|
-
"ConditionalRouterComponent",
|
|
28
|
-
"DataConditionalRouterComponent",
|
|
29
|
-
"FlowToolComponent",
|
|
30
|
-
"LoopComponent",
|
|
31
|
-
"PassMessageComponent",
|
|
32
|
-
"RunFlowComponent",
|
|
33
|
-
"SubFlowComponent",
|
|
34
|
-
]
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
def __getattr__(attr_name: str) -> Any:
|
|
38
|
-
"""Lazily import logic components on attribute access."""
|
|
39
|
-
if attr_name not in _dynamic_imports:
|
|
40
|
-
msg = f"module '{__name__}' has no attribute '{attr_name}'"
|
|
41
|
-
raise AttributeError(msg)
|
|
42
|
-
try:
|
|
43
|
-
result = import_mod(attr_name, _dynamic_imports[attr_name], __spec__.parent)
|
|
44
|
-
except (ModuleNotFoundError, ImportError, AttributeError) as e:
|
|
45
|
-
msg = f"Could not import '{attr_name}' from '{__name__}': {e}"
|
|
46
|
-
raise AttributeError(msg) from e
|
|
47
|
-
globals()[attr_name] = result
|
|
48
|
-
return result
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
def __dir__() -> list[str]:
|
|
52
|
-
return list(__all__)
|
|
@@ -1,171 +0,0 @@
|
|
|
1
|
-
import re
|
|
2
|
-
|
|
3
|
-
from langflow.custom.custom_component.component import Component
|
|
4
|
-
from langflow.io import BoolInput, DropdownInput, IntInput, MessageInput, MessageTextInput, Output
|
|
5
|
-
from langflow.schema.message import Message
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
class ConditionalRouterComponent(Component):
|
|
9
|
-
display_name = "If-Else"
|
|
10
|
-
description = "Routes an input message to a corresponding output based on text comparison."
|
|
11
|
-
documentation: str = "https://docs.langflow.org/components-logic#conditional-router-if-else-component"
|
|
12
|
-
icon = "split"
|
|
13
|
-
name = "ConditionalRouter"
|
|
14
|
-
|
|
15
|
-
def __init__(self, *args, **kwargs):
|
|
16
|
-
super().__init__(*args, **kwargs)
|
|
17
|
-
self.__iteration_updated = False
|
|
18
|
-
|
|
19
|
-
inputs = [
|
|
20
|
-
MessageTextInput(
|
|
21
|
-
name="input_text",
|
|
22
|
-
display_name="Text Input",
|
|
23
|
-
info="The primary text input for the operation.",
|
|
24
|
-
required=True,
|
|
25
|
-
),
|
|
26
|
-
DropdownInput(
|
|
27
|
-
name="operator",
|
|
28
|
-
display_name="Operator",
|
|
29
|
-
options=[
|
|
30
|
-
"equals",
|
|
31
|
-
"not equals",
|
|
32
|
-
"contains",
|
|
33
|
-
"starts with",
|
|
34
|
-
"ends with",
|
|
35
|
-
"regex",
|
|
36
|
-
"less than",
|
|
37
|
-
"less than or equal",
|
|
38
|
-
"greater than",
|
|
39
|
-
"greater than or equal",
|
|
40
|
-
],
|
|
41
|
-
info="The operator to apply for comparing the texts.",
|
|
42
|
-
value="equals",
|
|
43
|
-
real_time_refresh=True,
|
|
44
|
-
),
|
|
45
|
-
MessageTextInput(
|
|
46
|
-
name="match_text",
|
|
47
|
-
display_name="Match Text",
|
|
48
|
-
info="The text input to compare against.",
|
|
49
|
-
required=True,
|
|
50
|
-
),
|
|
51
|
-
BoolInput(
|
|
52
|
-
name="case_sensitive",
|
|
53
|
-
display_name="Case Sensitive",
|
|
54
|
-
info="If true, the comparison will be case sensitive.",
|
|
55
|
-
value=True,
|
|
56
|
-
advanced=True,
|
|
57
|
-
),
|
|
58
|
-
MessageInput(
|
|
59
|
-
name="true_case_message",
|
|
60
|
-
display_name="Case True",
|
|
61
|
-
info="The message to pass if the condition is True.",
|
|
62
|
-
advanced=True,
|
|
63
|
-
),
|
|
64
|
-
MessageInput(
|
|
65
|
-
name="false_case_message",
|
|
66
|
-
display_name="Case False",
|
|
67
|
-
info="The message to pass if the condition is False.",
|
|
68
|
-
advanced=True,
|
|
69
|
-
),
|
|
70
|
-
IntInput(
|
|
71
|
-
name="max_iterations",
|
|
72
|
-
display_name="Max Iterations",
|
|
73
|
-
info="The maximum number of iterations for the conditional router.",
|
|
74
|
-
value=10,
|
|
75
|
-
advanced=True,
|
|
76
|
-
),
|
|
77
|
-
DropdownInput(
|
|
78
|
-
name="default_route",
|
|
79
|
-
display_name="Default Route",
|
|
80
|
-
options=["true_result", "false_result"],
|
|
81
|
-
info="The default route to take when max iterations are reached.",
|
|
82
|
-
value="false_result",
|
|
83
|
-
advanced=True,
|
|
84
|
-
),
|
|
85
|
-
]
|
|
86
|
-
|
|
87
|
-
outputs = [
|
|
88
|
-
Output(display_name="True", name="true_result", method="true_response", group_outputs=True),
|
|
89
|
-
Output(display_name="False", name="false_result", method="false_response", group_outputs=True),
|
|
90
|
-
]
|
|
91
|
-
|
|
92
|
-
def _pre_run_setup(self):
|
|
93
|
-
self.__iteration_updated = False
|
|
94
|
-
|
|
95
|
-
def evaluate_condition(self, input_text: str, match_text: str, operator: str, *, case_sensitive: bool) -> bool:
|
|
96
|
-
if not case_sensitive and operator != "regex":
|
|
97
|
-
input_text = input_text.lower()
|
|
98
|
-
match_text = match_text.lower()
|
|
99
|
-
|
|
100
|
-
if operator == "equals":
|
|
101
|
-
return input_text == match_text
|
|
102
|
-
if operator == "not equals":
|
|
103
|
-
return input_text != match_text
|
|
104
|
-
if operator == "contains":
|
|
105
|
-
return match_text in input_text
|
|
106
|
-
if operator == "starts with":
|
|
107
|
-
return input_text.startswith(match_text)
|
|
108
|
-
if operator == "ends with":
|
|
109
|
-
return input_text.endswith(match_text)
|
|
110
|
-
if operator == "regex":
|
|
111
|
-
try:
|
|
112
|
-
return bool(re.match(match_text, input_text))
|
|
113
|
-
except re.error:
|
|
114
|
-
return False # Return False if the regex is invalid
|
|
115
|
-
if operator in ["less than", "less than or equal", "greater than", "greater than or equal"]:
|
|
116
|
-
try:
|
|
117
|
-
input_num = float(input_text)
|
|
118
|
-
match_num = float(match_text)
|
|
119
|
-
if operator == "less than":
|
|
120
|
-
return input_num < match_num
|
|
121
|
-
if operator == "less than or equal":
|
|
122
|
-
return input_num <= match_num
|
|
123
|
-
if operator == "greater than":
|
|
124
|
-
return input_num > match_num
|
|
125
|
-
if operator == "greater than or equal":
|
|
126
|
-
return input_num >= match_num
|
|
127
|
-
except ValueError:
|
|
128
|
-
return False # Invalid number format for comparison
|
|
129
|
-
return False
|
|
130
|
-
|
|
131
|
-
def iterate_and_stop_once(self, route_to_stop: str):
|
|
132
|
-
if not self.__iteration_updated:
|
|
133
|
-
self.update_ctx({f"{self._id}_iteration": self.ctx.get(f"{self._id}_iteration", 0) + 1})
|
|
134
|
-
self.__iteration_updated = True
|
|
135
|
-
if self.ctx.get(f"{self._id}_iteration", 0) >= self.max_iterations and route_to_stop == self.default_route:
|
|
136
|
-
route_to_stop = "true_result" if route_to_stop == "false_result" else "false_result"
|
|
137
|
-
self.stop(route_to_stop)
|
|
138
|
-
|
|
139
|
-
def true_response(self) -> Message:
|
|
140
|
-
result = self.evaluate_condition(
|
|
141
|
-
self.input_text, self.match_text, self.operator, case_sensitive=self.case_sensitive
|
|
142
|
-
)
|
|
143
|
-
if result:
|
|
144
|
-
self.status = self.true_case_message
|
|
145
|
-
self.iterate_and_stop_once("false_result")
|
|
146
|
-
return self.true_case_message
|
|
147
|
-
self.iterate_and_stop_once("true_result")
|
|
148
|
-
return Message(content="")
|
|
149
|
-
|
|
150
|
-
def false_response(self) -> Message:
|
|
151
|
-
result = self.evaluate_condition(
|
|
152
|
-
self.input_text, self.match_text, self.operator, case_sensitive=self.case_sensitive
|
|
153
|
-
)
|
|
154
|
-
if not result:
|
|
155
|
-
self.status = self.false_case_message
|
|
156
|
-
self.iterate_and_stop_once("true_result")
|
|
157
|
-
return self.false_case_message
|
|
158
|
-
self.iterate_and_stop_once("false_result")
|
|
159
|
-
return Message(content="")
|
|
160
|
-
|
|
161
|
-
def update_build_config(self, build_config: dict, field_value: str, field_name: str | None = None) -> dict:
|
|
162
|
-
if field_name == "operator":
|
|
163
|
-
if field_value == "regex":
|
|
164
|
-
build_config.pop("case_sensitive", None)
|
|
165
|
-
elif "case_sensitive" not in build_config:
|
|
166
|
-
case_sensitive_input = next(
|
|
167
|
-
(input_field for input_field in self.inputs if input_field.name == "case_sensitive"), None
|
|
168
|
-
)
|
|
169
|
-
if case_sensitive_input:
|
|
170
|
-
build_config["case_sensitive"] = case_sensitive_input.to_dict()
|
|
171
|
-
return build_config
|
|
@@ -1,125 +0,0 @@
|
|
|
1
|
-
from typing import Any
|
|
2
|
-
|
|
3
|
-
from langflow.custom.custom_component.component import Component
|
|
4
|
-
from langflow.io import DataInput, DropdownInput, MessageTextInput, Output
|
|
5
|
-
from langflow.schema.data import Data
|
|
6
|
-
from langflow.schema.dotdict import dotdict
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
class DataConditionalRouterComponent(Component):
|
|
10
|
-
display_name = "Condition"
|
|
11
|
-
description = "Route Data object(s) based on a condition applied to a specified key, including boolean validation."
|
|
12
|
-
icon = "split"
|
|
13
|
-
name = "DataConditionalRouter"
|
|
14
|
-
legacy = True
|
|
15
|
-
|
|
16
|
-
inputs = [
|
|
17
|
-
DataInput(
|
|
18
|
-
name="data_input",
|
|
19
|
-
display_name="Data Input",
|
|
20
|
-
info="The Data object or list of Data objects to process",
|
|
21
|
-
is_list=True,
|
|
22
|
-
),
|
|
23
|
-
MessageTextInput(
|
|
24
|
-
name="key_name",
|
|
25
|
-
display_name="Key Name",
|
|
26
|
-
info="The name of the key in the Data object(s) to check",
|
|
27
|
-
),
|
|
28
|
-
DropdownInput(
|
|
29
|
-
name="operator",
|
|
30
|
-
display_name="Operator",
|
|
31
|
-
options=["equals", "not equals", "contains", "starts with", "ends with", "boolean validator"],
|
|
32
|
-
info="The operator to apply for comparing the values. 'boolean validator' treats the value as a boolean.",
|
|
33
|
-
value="equals",
|
|
34
|
-
),
|
|
35
|
-
MessageTextInput(
|
|
36
|
-
name="compare_value",
|
|
37
|
-
display_name="Match Text",
|
|
38
|
-
info="The value to compare against (not used for boolean validator)",
|
|
39
|
-
),
|
|
40
|
-
]
|
|
41
|
-
|
|
42
|
-
outputs = [
|
|
43
|
-
Output(display_name="True Output", name="true_output", method="process_data"),
|
|
44
|
-
Output(display_name="False Output", name="false_output", method="process_data"),
|
|
45
|
-
]
|
|
46
|
-
|
|
47
|
-
def compare_values(self, item_value: str, compare_value: str, operator: str) -> bool:
|
|
48
|
-
if operator == "equals":
|
|
49
|
-
return item_value == compare_value
|
|
50
|
-
if operator == "not equals":
|
|
51
|
-
return item_value != compare_value
|
|
52
|
-
if operator == "contains":
|
|
53
|
-
return compare_value in item_value
|
|
54
|
-
if operator == "starts with":
|
|
55
|
-
return item_value.startswith(compare_value)
|
|
56
|
-
if operator == "ends with":
|
|
57
|
-
return item_value.endswith(compare_value)
|
|
58
|
-
if operator == "boolean validator":
|
|
59
|
-
return self.parse_boolean(item_value)
|
|
60
|
-
return False
|
|
61
|
-
|
|
62
|
-
def parse_boolean(self, value):
|
|
63
|
-
if isinstance(value, bool):
|
|
64
|
-
return value
|
|
65
|
-
if isinstance(value, str):
|
|
66
|
-
return value.lower() in {"true", "1", "yes", "y", "on"}
|
|
67
|
-
return bool(value)
|
|
68
|
-
|
|
69
|
-
def validate_input(self, data_item: Data) -> bool:
|
|
70
|
-
if not isinstance(data_item, Data):
|
|
71
|
-
self.status = "Input is not a Data object"
|
|
72
|
-
return False
|
|
73
|
-
if self.key_name not in data_item.data:
|
|
74
|
-
self.status = f"Key '{self.key_name}' not found in Data"
|
|
75
|
-
return False
|
|
76
|
-
return True
|
|
77
|
-
|
|
78
|
-
def process_data(self) -> Data | list[Data]:
|
|
79
|
-
if isinstance(self.data_input, list):
|
|
80
|
-
true_output = []
|
|
81
|
-
false_output = []
|
|
82
|
-
for item in self.data_input:
|
|
83
|
-
if self.validate_input(item):
|
|
84
|
-
result = self.process_single_data(item)
|
|
85
|
-
if result:
|
|
86
|
-
true_output.append(item)
|
|
87
|
-
else:
|
|
88
|
-
false_output.append(item)
|
|
89
|
-
self.stop("false_output" if true_output else "true_output")
|
|
90
|
-
return true_output or false_output
|
|
91
|
-
if not self.validate_input(self.data_input):
|
|
92
|
-
return Data(data={"error": self.status})
|
|
93
|
-
result = self.process_single_data(self.data_input)
|
|
94
|
-
self.stop("false_output" if result else "true_output")
|
|
95
|
-
return self.data_input
|
|
96
|
-
|
|
97
|
-
def process_single_data(self, data_item: Data) -> bool:
|
|
98
|
-
item_value = data_item.data[self.key_name]
|
|
99
|
-
operator = self.operator
|
|
100
|
-
|
|
101
|
-
if operator == "boolean validator":
|
|
102
|
-
condition_met = self.parse_boolean(item_value)
|
|
103
|
-
condition_description = f"Boolean validation of '{self.key_name}'"
|
|
104
|
-
else:
|
|
105
|
-
compare_value = self.compare_value
|
|
106
|
-
condition_met = self.compare_values(str(item_value), compare_value, operator)
|
|
107
|
-
condition_description = f"{self.key_name} {operator} {compare_value}"
|
|
108
|
-
|
|
109
|
-
if condition_met:
|
|
110
|
-
self.status = f"Condition met: {condition_description}"
|
|
111
|
-
return True
|
|
112
|
-
self.status = f"Condition not met: {condition_description}"
|
|
113
|
-
return False
|
|
114
|
-
|
|
115
|
-
def update_build_config(self, build_config: dotdict, field_value: Any, field_name: str | None = None):
|
|
116
|
-
if field_name == "operator":
|
|
117
|
-
if field_value == "boolean validator":
|
|
118
|
-
build_config["compare_value"]["show"] = False
|
|
119
|
-
build_config["compare_value"]["advanced"] = True
|
|
120
|
-
build_config["compare_value"]["value"] = None
|
|
121
|
-
else:
|
|
122
|
-
build_config["compare_value"]["show"] = True
|
|
123
|
-
build_config["compare_value"]["advanced"] = False
|
|
124
|
-
|
|
125
|
-
return build_config
|
|
@@ -1,110 +0,0 @@
|
|
|
1
|
-
from typing import Any
|
|
2
|
-
|
|
3
|
-
from typing_extensions import override
|
|
4
|
-
|
|
5
|
-
from langflow.base.langchain_utilities.model import LCToolComponent
|
|
6
|
-
from langflow.base.tools.flow_tool import FlowTool
|
|
7
|
-
from langflow.field_typing import Tool
|
|
8
|
-
from langflow.graph.graph.base import Graph
|
|
9
|
-
from langflow.helpers.flow import get_flow_inputs
|
|
10
|
-
from langflow.io import BoolInput, DropdownInput, Output, StrInput
|
|
11
|
-
from langflow.logging.logger import logger
|
|
12
|
-
from langflow.schema.data import Data
|
|
13
|
-
from langflow.schema.dotdict import dotdict
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
class FlowToolComponent(LCToolComponent):
|
|
17
|
-
display_name = "Flow as Tool [Deprecated]"
|
|
18
|
-
description = "Construct a Tool from a function that runs the loaded Flow."
|
|
19
|
-
field_order = ["flow_name", "name", "description", "return_direct"]
|
|
20
|
-
trace_type = "tool"
|
|
21
|
-
name = "FlowTool"
|
|
22
|
-
legacy: bool = True
|
|
23
|
-
icon = "hammer"
|
|
24
|
-
|
|
25
|
-
async def get_flow_names(self) -> list[str]:
|
|
26
|
-
flow_datas = await self.alist_flows()
|
|
27
|
-
return [flow_data.data["name"] for flow_data in flow_datas]
|
|
28
|
-
|
|
29
|
-
async def get_flow(self, flow_name: str) -> Data | None:
|
|
30
|
-
"""Retrieves a flow by its name.
|
|
31
|
-
|
|
32
|
-
Args:
|
|
33
|
-
flow_name (str): The name of the flow to retrieve.
|
|
34
|
-
|
|
35
|
-
Returns:
|
|
36
|
-
Optional[Text]: The flow record if found, None otherwise.
|
|
37
|
-
"""
|
|
38
|
-
flow_datas = await self.alist_flows()
|
|
39
|
-
for flow_data in flow_datas:
|
|
40
|
-
if flow_data.data["name"] == flow_name:
|
|
41
|
-
return flow_data
|
|
42
|
-
return None
|
|
43
|
-
|
|
44
|
-
@override
|
|
45
|
-
async def update_build_config(self, build_config: dotdict, field_value: Any, field_name: str | None = None):
|
|
46
|
-
if field_name == "flow_name":
|
|
47
|
-
build_config["flow_name"]["options"] = self.get_flow_names()
|
|
48
|
-
|
|
49
|
-
return build_config
|
|
50
|
-
|
|
51
|
-
inputs = [
|
|
52
|
-
DropdownInput(
|
|
53
|
-
name="flow_name", display_name="Flow Name", info="The name of the flow to run.", refresh_button=True
|
|
54
|
-
),
|
|
55
|
-
StrInput(
|
|
56
|
-
name="tool_name",
|
|
57
|
-
display_name="Name",
|
|
58
|
-
info="The name of the tool.",
|
|
59
|
-
),
|
|
60
|
-
StrInput(
|
|
61
|
-
name="tool_description",
|
|
62
|
-
display_name="Description",
|
|
63
|
-
info="The description of the tool; defaults to the Flow's description.",
|
|
64
|
-
),
|
|
65
|
-
BoolInput(
|
|
66
|
-
name="return_direct",
|
|
67
|
-
display_name="Return Direct",
|
|
68
|
-
info="Return the result directly from the Tool.",
|
|
69
|
-
advanced=True,
|
|
70
|
-
),
|
|
71
|
-
]
|
|
72
|
-
|
|
73
|
-
outputs = [
|
|
74
|
-
Output(name="api_build_tool", display_name="Tool", method="build_tool"),
|
|
75
|
-
]
|
|
76
|
-
|
|
77
|
-
async def build_tool(self) -> Tool:
|
|
78
|
-
FlowTool.model_rebuild()
|
|
79
|
-
if "flow_name" not in self._attributes or not self._attributes["flow_name"]:
|
|
80
|
-
msg = "Flow name is required"
|
|
81
|
-
raise ValueError(msg)
|
|
82
|
-
flow_name = self._attributes["flow_name"]
|
|
83
|
-
flow_data = await self.get_flow(flow_name)
|
|
84
|
-
if not flow_data:
|
|
85
|
-
msg = "Flow not found."
|
|
86
|
-
raise ValueError(msg)
|
|
87
|
-
graph = Graph.from_payload(
|
|
88
|
-
flow_data.data["data"],
|
|
89
|
-
user_id=str(self.user_id),
|
|
90
|
-
)
|
|
91
|
-
try:
|
|
92
|
-
graph.set_run_id(self.graph.run_id)
|
|
93
|
-
except Exception: # noqa: BLE001
|
|
94
|
-
logger.warning("Failed to set run_id", exc_info=True)
|
|
95
|
-
inputs = get_flow_inputs(graph)
|
|
96
|
-
tool_description = self.tool_description.strip() or flow_data.description
|
|
97
|
-
tool = FlowTool(
|
|
98
|
-
name=self.tool_name,
|
|
99
|
-
description=tool_description,
|
|
100
|
-
graph=graph,
|
|
101
|
-
return_direct=self.return_direct,
|
|
102
|
-
inputs=inputs,
|
|
103
|
-
flow_id=str(flow_data.id),
|
|
104
|
-
user_id=str(self.user_id),
|
|
105
|
-
session_id=self.graph.session_id if hasattr(self, "graph") else None,
|
|
106
|
-
)
|
|
107
|
-
description_repr = repr(tool.description).strip("'")
|
|
108
|
-
args_str = "\n".join([f"- {arg_name}: {arg_data['description']}" for arg_name, arg_data in tool.args.items()])
|
|
109
|
-
self.status = f"{description_repr}\nArguments:\n{args_str}"
|
|
110
|
-
return tool
|