langflow-base-nightly 0.5.1.dev3__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.dev3.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.dev3.dist-info/RECORD +0 -1159
- {langflow_base_nightly-0.5.1.dev3.dist-info → langflow_base_nightly-0.5.1.dev4.dist-info}/WHEEL +0 -0
- {langflow_base_nightly-0.5.1.dev3.dist-info → langflow_base_nightly-0.5.1.dev4.dist-info}/entry_points.txt +0 -0
langflow/interface/utils.py
CHANGED
|
@@ -1,112 +1,4 @@
|
|
|
1
|
-
|
|
2
|
-
import json
|
|
3
|
-
import os
|
|
4
|
-
from io import BytesIO
|
|
5
|
-
from pathlib import Path
|
|
6
|
-
from string import Formatter
|
|
1
|
+
"""Interface utils module for langflow - imports from lfx."""
|
|
7
2
|
|
|
8
|
-
|
|
9
|
-
from
|
|
10
|
-
from PIL.Image import Image
|
|
11
|
-
|
|
12
|
-
from langflow.logging.logger import logger
|
|
13
|
-
from langflow.services.chat.config import ChatConfig
|
|
14
|
-
from langflow.services.deps import get_settings_service
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
def load_file_into_dict(file_path: str) -> dict:
|
|
18
|
-
file_path_ = Path(file_path)
|
|
19
|
-
if not file_path_.exists():
|
|
20
|
-
msg = f"File not found: {file_path}"
|
|
21
|
-
raise FileNotFoundError(msg)
|
|
22
|
-
|
|
23
|
-
# Files names are UUID, so we can't find the extension
|
|
24
|
-
with file_path_.open(encoding="utf-8") as file:
|
|
25
|
-
try:
|
|
26
|
-
data = json.load(file)
|
|
27
|
-
except json.JSONDecodeError:
|
|
28
|
-
file.seek(0)
|
|
29
|
-
data = yaml.safe_load(file)
|
|
30
|
-
except ValueError as exc:
|
|
31
|
-
msg = "Invalid file type. Expected .json or .yaml."
|
|
32
|
-
raise ValueError(msg) from exc
|
|
33
|
-
return data
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
def pil_to_base64(image: Image) -> str:
|
|
37
|
-
buffered = BytesIO()
|
|
38
|
-
image.save(buffered, format="PNG")
|
|
39
|
-
img_str = base64.b64encode(buffered.getvalue())
|
|
40
|
-
return img_str.decode("utf-8")
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
def try_setting_streaming_options(langchain_object):
|
|
44
|
-
# If the LLM type is OpenAI or ChatOpenAI,
|
|
45
|
-
# set streaming to True
|
|
46
|
-
# First we need to find the LLM
|
|
47
|
-
llm = None
|
|
48
|
-
if hasattr(langchain_object, "llm"):
|
|
49
|
-
llm = langchain_object.llm
|
|
50
|
-
elif hasattr(langchain_object, "llm_chain") and hasattr(langchain_object.llm_chain, "llm"):
|
|
51
|
-
llm = langchain_object.llm_chain.llm
|
|
52
|
-
|
|
53
|
-
if isinstance(llm, BaseLanguageModel):
|
|
54
|
-
if hasattr(llm, "streaming") and isinstance(llm.streaming, bool):
|
|
55
|
-
llm.streaming = ChatConfig.streaming
|
|
56
|
-
elif hasattr(llm, "stream") and isinstance(llm.stream, bool):
|
|
57
|
-
llm.stream = ChatConfig.streaming
|
|
58
|
-
|
|
59
|
-
return langchain_object
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
def extract_input_variables_from_prompt(prompt: str) -> list[str]:
|
|
63
|
-
"""Extract variable names from a prompt string using Python's built-in string formatter.
|
|
64
|
-
|
|
65
|
-
Uses the same convention as Python's .format() method:
|
|
66
|
-
- Single braces {name} are variable placeholders
|
|
67
|
-
- Double braces {{name}} are escape sequences that render as literal {name}
|
|
68
|
-
"""
|
|
69
|
-
formatter = Formatter()
|
|
70
|
-
variables: list[str] = []
|
|
71
|
-
seen: set[str] = set()
|
|
72
|
-
|
|
73
|
-
# Use local bindings for micro-optimization
|
|
74
|
-
variables_append = variables.append
|
|
75
|
-
seen_add = seen.add
|
|
76
|
-
seen_contains = seen.__contains__
|
|
77
|
-
|
|
78
|
-
for _, field_name, _, _ in formatter.parse(prompt):
|
|
79
|
-
if field_name and not seen_contains(field_name):
|
|
80
|
-
variables_append(field_name)
|
|
81
|
-
seen_add(field_name)
|
|
82
|
-
|
|
83
|
-
return variables
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
def setup_llm_caching() -> None:
|
|
87
|
-
"""Setup LLM caching."""
|
|
88
|
-
settings_service = get_settings_service()
|
|
89
|
-
try:
|
|
90
|
-
set_langchain_cache(settings_service.settings)
|
|
91
|
-
except ImportError:
|
|
92
|
-
logger.warning(f"Could not import {settings_service.settings.cache_type}. ")
|
|
93
|
-
except Exception: # noqa: BLE001
|
|
94
|
-
logger.warning("Could not setup LLM caching.")
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
def set_langchain_cache(settings) -> None:
|
|
98
|
-
from langchain.globals import set_llm_cache
|
|
99
|
-
|
|
100
|
-
from langflow.interface.importing.utils import import_class
|
|
101
|
-
|
|
102
|
-
if cache_type := os.getenv("LANGFLOW_LANGCHAIN_CACHE"):
|
|
103
|
-
try:
|
|
104
|
-
cache_class = import_class(f"langchain_community.cache.{cache_type or settings.LANGCHAIN_CACHE}")
|
|
105
|
-
|
|
106
|
-
logger.debug(f"Setting up LLM caching with {cache_class.__name__}")
|
|
107
|
-
set_llm_cache(cache_class())
|
|
108
|
-
logger.info(f"LLM caching setup with {cache_class.__name__}")
|
|
109
|
-
except ImportError:
|
|
110
|
-
logger.warning(f"Could not import {cache_type}. ")
|
|
111
|
-
else:
|
|
112
|
-
logger.debug("No LLM cache set.")
|
|
3
|
+
# Import everything from lfx.interface.utils
|
|
4
|
+
from lfx.interface.utils import * # noqa: F403
|
langflow/io/__init__.py
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
from
|
|
1
|
+
from lfx.io import (
|
|
2
2
|
BoolInput,
|
|
3
3
|
CodeInput,
|
|
4
4
|
DataFrameInput,
|
|
@@ -27,7 +27,7 @@ from langflow.inputs import (
|
|
|
27
27
|
TableInput,
|
|
28
28
|
ToolsInput,
|
|
29
29
|
)
|
|
30
|
-
from
|
|
30
|
+
from lfx.template import Output
|
|
31
31
|
|
|
32
32
|
__all__ = [
|
|
33
33
|
"BoolInput",
|
langflow/io/schema.py
CHANGED
|
@@ -1,304 +1,13 @@
|
|
|
1
|
-
from
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
from langflow.inputs.inputs import (
|
|
7
|
-
BoolInput,
|
|
8
|
-
DictInput,
|
|
9
|
-
DropdownInput,
|
|
10
|
-
FieldTypes,
|
|
11
|
-
FloatInput,
|
|
12
|
-
InputTypes,
|
|
13
|
-
IntInput,
|
|
14
|
-
MessageTextInput,
|
|
1
|
+
from lfx.io.schema import (
|
|
2
|
+
create_input_schema,
|
|
3
|
+
create_input_schema_from_dict,
|
|
4
|
+
flatten_schema,
|
|
5
|
+
schema_to_langflow_inputs,
|
|
15
6
|
)
|
|
16
|
-
from langflow.schema.dotdict import dotdict
|
|
17
|
-
|
|
18
|
-
_convert_field_type_to_type: dict[FieldTypes, type] = {
|
|
19
|
-
FieldTypes.TEXT: str,
|
|
20
|
-
FieldTypes.INTEGER: int,
|
|
21
|
-
FieldTypes.FLOAT: float,
|
|
22
|
-
FieldTypes.BOOLEAN: bool,
|
|
23
|
-
FieldTypes.DICT: dict,
|
|
24
|
-
FieldTypes.NESTED_DICT: dict,
|
|
25
|
-
FieldTypes.TABLE: dict,
|
|
26
|
-
FieldTypes.FILE: str,
|
|
27
|
-
FieldTypes.PROMPT: str,
|
|
28
|
-
FieldTypes.CODE: str,
|
|
29
|
-
FieldTypes.OTHER: str,
|
|
30
|
-
FieldTypes.TAB: str,
|
|
31
|
-
FieldTypes.QUERY: str,
|
|
32
|
-
}
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
_convert_type_to_field_type = {
|
|
36
|
-
str: MessageTextInput,
|
|
37
|
-
int: IntInput,
|
|
38
|
-
float: FloatInput,
|
|
39
|
-
bool: BoolInput,
|
|
40
|
-
dict: DictInput,
|
|
41
|
-
list: MessageTextInput,
|
|
42
|
-
}
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
def flatten_schema(root_schema: dict[str, Any]) -> dict[str, Any]:
|
|
46
|
-
"""Flatten a JSON RPC style schema into a single level JSON Schema.
|
|
47
|
-
|
|
48
|
-
If the input schema is already flat (no $defs / $ref / nested objects or arrays)
|
|
49
|
-
the function simply returns the original i.e. a noop.
|
|
50
|
-
"""
|
|
51
|
-
defs = root_schema.get("$defs", {})
|
|
52
|
-
|
|
53
|
-
# --- Fast path: schema is already flat ---------------------------------
|
|
54
|
-
props = root_schema.get("properties", {})
|
|
55
|
-
if not defs and all("$ref" not in v and v.get("type") not in ("object", "array") for v in props.values()):
|
|
56
|
-
return root_schema
|
|
57
|
-
# -----------------------------------------------------------------------
|
|
58
|
-
|
|
59
|
-
flat_props: dict[str, dict[str, Any]] = {}
|
|
60
|
-
required_list: list[str] = []
|
|
61
|
-
|
|
62
|
-
def _resolve_if_ref(schema: dict[str, Any]) -> dict[str, Any]:
|
|
63
|
-
while "$ref" in schema:
|
|
64
|
-
ref_name = schema["$ref"].split("/")[-1]
|
|
65
|
-
schema = defs.get(ref_name, {})
|
|
66
|
-
return schema
|
|
67
|
-
|
|
68
|
-
def _walk(name: str, schema: dict[str, Any], *, inherited_req: bool) -> None:
|
|
69
|
-
schema = _resolve_if_ref(schema)
|
|
70
|
-
t = schema.get("type")
|
|
71
|
-
|
|
72
|
-
# ── objects ─────────────────────────────────────────────────────────
|
|
73
|
-
if t == "object":
|
|
74
|
-
req_here = set(schema.get("required", []))
|
|
75
|
-
for k, subschema in schema.get("properties", {}).items():
|
|
76
|
-
child_name = f"{name}.{k}" if name else k
|
|
77
|
-
_walk(name=child_name, schema=subschema, inherited_req=inherited_req and k in req_here)
|
|
78
|
-
return
|
|
79
|
-
|
|
80
|
-
# ── arrays (always recurse into the first item as “[0]”) ───────────
|
|
81
|
-
if t == "array":
|
|
82
|
-
items = schema.get("items", {})
|
|
83
|
-
_walk(name=f"{name}[0]", schema=items, inherited_req=inherited_req)
|
|
84
|
-
return
|
|
85
|
-
|
|
86
|
-
leaf: dict[str, Any] = {
|
|
87
|
-
k: v
|
|
88
|
-
for k, v in schema.items()
|
|
89
|
-
if k
|
|
90
|
-
in (
|
|
91
|
-
"type",
|
|
92
|
-
"description",
|
|
93
|
-
"pattern",
|
|
94
|
-
"format",
|
|
95
|
-
"enum",
|
|
96
|
-
"default",
|
|
97
|
-
"minLength",
|
|
98
|
-
"maxLength",
|
|
99
|
-
"minimum",
|
|
100
|
-
"maximum",
|
|
101
|
-
"exclusiveMinimum",
|
|
102
|
-
"exclusiveMaximum",
|
|
103
|
-
"additionalProperties",
|
|
104
|
-
"examples",
|
|
105
|
-
)
|
|
106
|
-
}
|
|
107
|
-
flat_props[name] = leaf
|
|
108
|
-
if inherited_req:
|
|
109
|
-
required_list.append(name)
|
|
110
|
-
|
|
111
|
-
# kick things off at the true root
|
|
112
|
-
root_required = set(root_schema.get("required", []))
|
|
113
|
-
for k, subschema in props.items():
|
|
114
|
-
_walk(k, subschema, inherited_req=k in root_required)
|
|
115
|
-
|
|
116
|
-
# build the flattened schema; keep any descriptive metadata
|
|
117
|
-
result: dict[str, Any] = {
|
|
118
|
-
"type": "object",
|
|
119
|
-
"properties": flat_props,
|
|
120
|
-
**{k: v for k, v in root_schema.items() if k not in ("properties", "$defs")},
|
|
121
|
-
}
|
|
122
|
-
if required_list:
|
|
123
|
-
result["required"] = required_list
|
|
124
|
-
return result
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
def schema_to_langflow_inputs(schema: type[BaseModel]) -> list[InputTypes]:
|
|
128
|
-
inputs: list[InputTypes] = []
|
|
129
|
-
|
|
130
|
-
for field_name, model_field in schema.model_fields.items():
|
|
131
|
-
ann = model_field.annotation
|
|
132
|
-
if isinstance(ann, UnionType):
|
|
133
|
-
# Extract non-None types from Union
|
|
134
|
-
non_none_types = [t for t in get_args(ann) if t is not type(None)]
|
|
135
|
-
if len(non_none_types) == 1:
|
|
136
|
-
ann = non_none_types[0]
|
|
137
|
-
|
|
138
|
-
is_list = False
|
|
139
|
-
|
|
140
|
-
if get_origin(ann) is list:
|
|
141
|
-
is_list = True
|
|
142
|
-
ann = get_args(ann)[0]
|
|
143
|
-
|
|
144
|
-
options: list[Any] | None = None
|
|
145
|
-
if get_origin(ann) is Literal:
|
|
146
|
-
options = list(get_args(ann))
|
|
147
|
-
if options:
|
|
148
|
-
ann = type(options[0])
|
|
149
|
-
|
|
150
|
-
if get_origin(ann) is Union:
|
|
151
|
-
non_none = [t for t in get_args(ann) if t is not type(None)]
|
|
152
|
-
if len(non_none) == 1:
|
|
153
|
-
ann = non_none[0]
|
|
154
|
-
|
|
155
|
-
# 1) Nested Pydantic model?
|
|
156
|
-
# if isinstance(ann, type) and issubclass(ann, BaseModel):
|
|
157
|
-
# nested = schema_to_langflow_inputs(ann)
|
|
158
|
-
# inputs.append(
|
|
159
|
-
# ObjectInput(
|
|
160
|
-
# display_name=model_field.title or field_name.replace("_", " ").title(),
|
|
161
|
-
# name=field_name,
|
|
162
|
-
# info=model_field.description or "",
|
|
163
|
-
# required=model_field.is_required(),
|
|
164
|
-
# is_list=is_list,
|
|
165
|
-
# inputs=nested,
|
|
166
|
-
# )
|
|
167
|
-
# )
|
|
168
|
-
# continue
|
|
169
|
-
|
|
170
|
-
# 2) Enumerated choices
|
|
171
|
-
if options is not None:
|
|
172
|
-
inputs.append(
|
|
173
|
-
DropdownInput(
|
|
174
|
-
display_name=model_field.title or field_name.replace("_", " ").title(),
|
|
175
|
-
name=field_name,
|
|
176
|
-
info=model_field.description or "",
|
|
177
|
-
required=model_field.is_required(),
|
|
178
|
-
is_list=is_list,
|
|
179
|
-
options=options,
|
|
180
|
-
)
|
|
181
|
-
)
|
|
182
|
-
continue
|
|
183
|
-
|
|
184
|
-
# 3) “Any” fallback → text
|
|
185
|
-
if ann is Any:
|
|
186
|
-
inputs.append(
|
|
187
|
-
MessageTextInput(
|
|
188
|
-
display_name=model_field.title or field_name.replace("_", " ").title(),
|
|
189
|
-
name=field_name,
|
|
190
|
-
info=model_field.description or "",
|
|
191
|
-
required=model_field.is_required(),
|
|
192
|
-
is_list=is_list,
|
|
193
|
-
)
|
|
194
|
-
)
|
|
195
|
-
continue
|
|
196
|
-
|
|
197
|
-
# 4) Primitive via your mapping
|
|
198
|
-
try:
|
|
199
|
-
lf_cls = _convert_type_to_field_type[ann]
|
|
200
|
-
except KeyError as err:
|
|
201
|
-
msg = f"Unsupported field type: {ann}"
|
|
202
|
-
raise TypeError(msg) from err
|
|
203
|
-
inputs.append(
|
|
204
|
-
lf_cls(
|
|
205
|
-
display_name=model_field.title or field_name.replace("_", " ").title(),
|
|
206
|
-
name=field_name,
|
|
207
|
-
info=model_field.description or "",
|
|
208
|
-
required=model_field.is_required(),
|
|
209
|
-
is_list=is_list,
|
|
210
|
-
)
|
|
211
|
-
)
|
|
212
|
-
|
|
213
|
-
return inputs
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
def create_input_schema(inputs: list["InputTypes"]) -> type[BaseModel]:
|
|
217
|
-
if not isinstance(inputs, list):
|
|
218
|
-
msg = "inputs must be a list of Inputs"
|
|
219
|
-
raise TypeError(msg)
|
|
220
|
-
fields = {}
|
|
221
|
-
for input_model in inputs:
|
|
222
|
-
# Create a Pydantic Field for each input field
|
|
223
|
-
field_type = input_model.field_type
|
|
224
|
-
if isinstance(field_type, FieldTypes):
|
|
225
|
-
field_type = _convert_field_type_to_type[field_type]
|
|
226
|
-
else:
|
|
227
|
-
msg = f"Invalid field type: {field_type}"
|
|
228
|
-
raise TypeError(msg)
|
|
229
|
-
if hasattr(input_model, "options") and isinstance(input_model.options, list) and input_model.options:
|
|
230
|
-
literal_string = f"Literal{input_model.options}"
|
|
231
|
-
# validate that the literal_string is a valid literal
|
|
232
|
-
|
|
233
|
-
field_type = eval(literal_string, {"Literal": Literal}) # noqa: S307
|
|
234
|
-
if hasattr(input_model, "is_list") and input_model.is_list:
|
|
235
|
-
field_type = list[field_type] # type: ignore[valid-type]
|
|
236
|
-
if input_model.name:
|
|
237
|
-
name = input_model.name.replace("_", " ").title()
|
|
238
|
-
elif input_model.display_name:
|
|
239
|
-
name = input_model.display_name
|
|
240
|
-
else:
|
|
241
|
-
msg = "Input name or display_name is required"
|
|
242
|
-
raise ValueError(msg)
|
|
243
|
-
field_dict = {
|
|
244
|
-
"title": name,
|
|
245
|
-
"description": input_model.info or "",
|
|
246
|
-
}
|
|
247
|
-
if input_model.required is False:
|
|
248
|
-
field_dict["default"] = input_model.value # type: ignore[assignment]
|
|
249
|
-
pydantic_field = Field(**field_dict)
|
|
250
|
-
|
|
251
|
-
fields[input_model.name] = (field_type, pydantic_field)
|
|
252
|
-
|
|
253
|
-
# Create and return the InputSchema model
|
|
254
|
-
model = create_model("InputSchema", **fields)
|
|
255
|
-
model.model_rebuild()
|
|
256
|
-
return model
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
def create_input_schema_from_dict(inputs: list[dotdict], param_key: str | None = None) -> type[BaseModel]:
|
|
260
|
-
if not isinstance(inputs, list):
|
|
261
|
-
msg = "inputs must be a list of Inputs"
|
|
262
|
-
raise TypeError(msg)
|
|
263
|
-
fields = {}
|
|
264
|
-
for input_model in inputs:
|
|
265
|
-
# Create a Pydantic Field for each input field
|
|
266
|
-
field_type = input_model.type
|
|
267
|
-
if hasattr(input_model, "options") and isinstance(input_model.options, list) and input_model.options:
|
|
268
|
-
literal_string = f"Literal{input_model.options}"
|
|
269
|
-
# validate that the literal_string is a valid literal
|
|
270
|
-
|
|
271
|
-
field_type = eval(literal_string, {"Literal": Literal}) # noqa: S307
|
|
272
|
-
if hasattr(input_model, "is_list") and input_model.is_list:
|
|
273
|
-
field_type = list[field_type] # type: ignore[valid-type]
|
|
274
|
-
if input_model.name:
|
|
275
|
-
name = input_model.name.replace("_", " ").title()
|
|
276
|
-
elif input_model.display_name:
|
|
277
|
-
name = input_model.display_name
|
|
278
|
-
else:
|
|
279
|
-
msg = "Input name or display_name is required"
|
|
280
|
-
raise ValueError(msg)
|
|
281
|
-
field_dict = {
|
|
282
|
-
"title": name,
|
|
283
|
-
"description": input_model.info or "",
|
|
284
|
-
}
|
|
285
|
-
if input_model.required is False:
|
|
286
|
-
field_dict["default"] = input_model.value # type: ignore[assignment]
|
|
287
|
-
pydantic_field = Field(**field_dict)
|
|
288
|
-
|
|
289
|
-
fields[input_model.name] = (field_type, pydantic_field)
|
|
290
|
-
|
|
291
|
-
# Wrap fields in a dictionary with the key as param_key
|
|
292
|
-
if param_key is not None:
|
|
293
|
-
# Create an inner model with the fields
|
|
294
|
-
inner_model = create_model("InnerModel", **fields)
|
|
295
|
-
|
|
296
|
-
# Ensure the model is wrapped correctly in a dictionary
|
|
297
|
-
# model = create_model("InputSchema", **{param_key: (inner_model, Field(default=..., description=description))})
|
|
298
|
-
model = create_model("InputSchema", **{param_key: (inner_model, ...)})
|
|
299
|
-
else:
|
|
300
|
-
# Create and return the InputSchema model
|
|
301
|
-
model = create_model("InputSchema", **fields)
|
|
302
7
|
|
|
303
|
-
|
|
304
|
-
|
|
8
|
+
__all__ = [
|
|
9
|
+
"create_input_schema",
|
|
10
|
+
"create_input_schema_from_dict",
|
|
11
|
+
"flatten_schema",
|
|
12
|
+
"schema_to_langflow_inputs",
|
|
13
|
+
]
|
langflow/load/__init__.py
CHANGED
|
@@ -1,5 +1,7 @@
|
|
|
1
|
-
from .load import aload_flow_from_json, arun_flow_from_json, load_flow_from_json, run_flow_from_json
|
|
2
|
-
from .utils import
|
|
1
|
+
from lfx.load.load import aload_flow_from_json, arun_flow_from_json, load_flow_from_json, run_flow_from_json
|
|
2
|
+
from lfx.load.utils import replace_tweaks_with_env, upload_file
|
|
3
|
+
|
|
4
|
+
from .utils import get_flow
|
|
3
5
|
|
|
4
6
|
__all__ = [
|
|
5
7
|
"aload_flow_from_json",
|
langflow/load/utils.py
CHANGED
|
@@ -1,80 +1,9 @@
|
|
|
1
|
-
from pathlib import Path
|
|
2
|
-
|
|
3
1
|
import httpx
|
|
2
|
+
from lfx.load.utils import UploadError, replace_tweaks_with_env, upload, upload_file
|
|
4
3
|
|
|
5
4
|
from langflow.services.database.models.flow.model import FlowBase
|
|
6
5
|
|
|
7
6
|
|
|
8
|
-
class UploadError(Exception):
|
|
9
|
-
"""Raised when an error occurs during the upload process."""
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
def upload(file_path: str, host: str, flow_id: str):
|
|
13
|
-
"""Upload a file to Langflow and return the file path.
|
|
14
|
-
|
|
15
|
-
Args:
|
|
16
|
-
file_path (str): The path to the file to be uploaded.
|
|
17
|
-
host (str): The host URL of Langflow.
|
|
18
|
-
flow_id (UUID): The ID of the flow to which the file belongs.
|
|
19
|
-
|
|
20
|
-
Returns:
|
|
21
|
-
dict: A dictionary containing the file path.
|
|
22
|
-
|
|
23
|
-
Raises:
|
|
24
|
-
UploadError: If an error occurs during the upload process.
|
|
25
|
-
"""
|
|
26
|
-
try:
|
|
27
|
-
url = f"{host}/api/v1/upload/{flow_id}"
|
|
28
|
-
with Path(file_path).open("rb") as file:
|
|
29
|
-
response = httpx.post(url, files={"file": file})
|
|
30
|
-
if response.status_code in {httpx.codes.OK, httpx.codes.CREATED}:
|
|
31
|
-
return response.json()
|
|
32
|
-
except Exception as e:
|
|
33
|
-
msg = f"Error uploading file: {e}"
|
|
34
|
-
raise UploadError(msg) from e
|
|
35
|
-
|
|
36
|
-
msg = f"Error uploading file: {response.status_code}"
|
|
37
|
-
raise UploadError(msg)
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
def upload_file(file_path: str, host: str, flow_id: str, components: list[str], tweaks: dict | None = None):
|
|
41
|
-
"""Upload a file to Langflow and return the file path.
|
|
42
|
-
|
|
43
|
-
Args:
|
|
44
|
-
file_path (str): The path to the file to be uploaded.
|
|
45
|
-
host (str): The host URL of Langflow.
|
|
46
|
-
port (int): The port number of Langflow.
|
|
47
|
-
flow_id (UUID): The ID of the flow to which the file belongs.
|
|
48
|
-
components (str): List of component IDs or names that need the file.
|
|
49
|
-
tweaks (dict): A dictionary of tweaks to be applied to the file.
|
|
50
|
-
|
|
51
|
-
Returns:
|
|
52
|
-
dict: A dictionary containing the file path and any tweaks that were applied.
|
|
53
|
-
|
|
54
|
-
Raises:
|
|
55
|
-
UploadError: If an error occurs during the upload process.
|
|
56
|
-
"""
|
|
57
|
-
try:
|
|
58
|
-
response = upload(file_path, host, flow_id)
|
|
59
|
-
except Exception as e:
|
|
60
|
-
msg = f"Error uploading file: {e}"
|
|
61
|
-
raise UploadError(msg) from e
|
|
62
|
-
|
|
63
|
-
if not tweaks:
|
|
64
|
-
tweaks = {}
|
|
65
|
-
if response["file_path"]:
|
|
66
|
-
for component in components:
|
|
67
|
-
if isinstance(component, str):
|
|
68
|
-
tweaks[component] = {"path": response["file_path"]}
|
|
69
|
-
else:
|
|
70
|
-
msg = f"Error uploading file: component ID or name must be a string. Got {type(component)}"
|
|
71
|
-
raise UploadError(msg)
|
|
72
|
-
return tweaks
|
|
73
|
-
|
|
74
|
-
msg = "Error uploading file"
|
|
75
|
-
raise UploadError(msg)
|
|
76
|
-
|
|
77
|
-
|
|
78
7
|
def get_flow(url: str, flow_id: str):
|
|
79
8
|
"""Get the details of a flow from Langflow.
|
|
80
9
|
|
|
@@ -100,27 +29,4 @@ def get_flow(url: str, flow_id: str):
|
|
|
100
29
|
raise UploadError(msg) from e
|
|
101
30
|
|
|
102
31
|
|
|
103
|
-
|
|
104
|
-
"""Replace keys in the tweaks dictionary with their corresponding environment variable values.
|
|
105
|
-
|
|
106
|
-
This function recursively traverses the tweaks dictionary and replaces any string keys
|
|
107
|
-
with their values from the provided environment variables. If a key's value is a dictionary,
|
|
108
|
-
the function will call itself to handle nested dictionaries.
|
|
109
|
-
|
|
110
|
-
Args:
|
|
111
|
-
tweaks (dict): A dictionary containing keys that may correspond to environment variable names.
|
|
112
|
-
env_vars (dict): A dictionary of environment variables where keys are variable names
|
|
113
|
-
and values are their corresponding values.
|
|
114
|
-
|
|
115
|
-
Returns:
|
|
116
|
-
dict: The updated tweaks dictionary with keys replaced by their environment variable values.
|
|
117
|
-
"""
|
|
118
|
-
for key, value in tweaks.items():
|
|
119
|
-
if isinstance(value, dict):
|
|
120
|
-
# Recursively replace in nested dictionaries
|
|
121
|
-
tweaks[key] = replace_tweaks_with_env(value, env_vars)
|
|
122
|
-
elif isinstance(value, str):
|
|
123
|
-
env_value = env_vars.get(value) # Get the value from the provided environment variables
|
|
124
|
-
if env_value is not None:
|
|
125
|
-
tweaks[key] = env_value
|
|
126
|
-
return tweaks
|
|
32
|
+
__all__ = ["UploadError", "get_flow", "replace_tweaks_with_env", "upload", "upload_file"]
|
langflow/logging/__init__.py
CHANGED
langflow/logging/setup.py
CHANGED
langflow/main.py
CHANGED
|
@@ -17,6 +17,8 @@ from fastapi.middleware.cors import CORSMiddleware
|
|
|
17
17
|
from fastapi.responses import FileResponse, JSONResponse
|
|
18
18
|
from fastapi.staticfiles import StaticFiles
|
|
19
19
|
from fastapi_pagination import add_pagination
|
|
20
|
+
from lfx.interface.utils import setup_llm_caching
|
|
21
|
+
from lfx.log.logger import configure, logger
|
|
20
22
|
from opentelemetry.instrumentation.fastapi import FastAPIInstrumentor
|
|
21
23
|
from pydantic import PydanticDeprecatedSince20
|
|
22
24
|
from pydantic_core import PydanticSerializationError
|
|
@@ -31,12 +33,9 @@ from langflow.initial_setup.setup import (
|
|
|
31
33
|
load_flows_from_directory,
|
|
32
34
|
sync_flows_from_fs,
|
|
33
35
|
)
|
|
34
|
-
from langflow.interface.components import get_and_cache_all_types_dict
|
|
35
|
-
from langflow.interface.utils import setup_llm_caching
|
|
36
|
-
from langflow.logging.logger import configure, logger
|
|
37
36
|
from langflow.middleware import ContentSizeLimitMiddleware
|
|
38
37
|
from langflow.services.deps import get_queue_service, get_settings_service, get_telemetry_service
|
|
39
|
-
from langflow.services.utils import initialize_services, teardown_services
|
|
38
|
+
from langflow.services.utils import initialize_services, initialize_settings_service, teardown_services
|
|
40
39
|
|
|
41
40
|
if TYPE_CHECKING:
|
|
42
41
|
from tempfile import TemporaryDirectory
|
|
@@ -115,9 +114,13 @@ async def load_bundles_with_error_handling():
|
|
|
115
114
|
|
|
116
115
|
|
|
117
116
|
def get_lifespan(*, fix_migration=False, version=None):
|
|
117
|
+
initialize_settings_service()
|
|
118
|
+
telemetry_service = get_telemetry_service()
|
|
119
|
+
|
|
118
120
|
@asynccontextmanager
|
|
119
121
|
async def lifespan(_app: FastAPI):
|
|
120
|
-
|
|
122
|
+
from lfx.interface.components import get_and_cache_all_types_dict
|
|
123
|
+
|
|
121
124
|
configure()
|
|
122
125
|
|
|
123
126
|
# Startup message
|
langflow/memory.py
CHANGED
|
@@ -5,15 +5,15 @@ from uuid import UUID
|
|
|
5
5
|
|
|
6
6
|
from langchain_core.chat_history import BaseChatMessageHistory
|
|
7
7
|
from langchain_core.messages import BaseMessage
|
|
8
|
+
from lfx.log.logger import logger
|
|
9
|
+
from lfx.utils.async_helpers import run_until_complete
|
|
8
10
|
from sqlalchemy import delete
|
|
9
11
|
from sqlmodel import col, select
|
|
10
12
|
from sqlmodel.ext.asyncio.session import AsyncSession
|
|
11
13
|
|
|
12
|
-
from langflow.logging.logger import logger
|
|
13
14
|
from langflow.schema.message import Message
|
|
14
15
|
from langflow.services.database.models.message.model import MessageRead, MessageTable
|
|
15
16
|
from langflow.services.deps import session_scope
|
|
16
|
-
from langflow.utils.async_helpers import run_until_complete
|
|
17
17
|
|
|
18
18
|
|
|
19
19
|
def _get_variable_query(
|
|
@@ -112,10 +112,16 @@ async def aadd_messages(messages: Message | list[Message], flow_id: str | UUID |
|
|
|
112
112
|
if not isinstance(messages, list):
|
|
113
113
|
messages = [messages]
|
|
114
114
|
|
|
115
|
-
if
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
115
|
+
# Check if all messages are Message instances (either from langflow or lfx)
|
|
116
|
+
for message in messages:
|
|
117
|
+
# Accept Message instances from both langflow and lfx packages
|
|
118
|
+
is_valid_message = isinstance(message, Message) or (
|
|
119
|
+
hasattr(message, "__class__") and message.__class__.__name__ in ["Message", "ErrorMessage"]
|
|
120
|
+
)
|
|
121
|
+
if not is_valid_message:
|
|
122
|
+
types = ", ".join([str(type(msg)) for msg in messages])
|
|
123
|
+
msg = f"The messages must be instances of Message. Found: {types}"
|
|
124
|
+
raise ValueError(msg)
|
|
119
125
|
|
|
120
126
|
try:
|
|
121
127
|
messages_models = [MessageTable.from_message(msg, flow_id=flow_id) for msg in messages]
|