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
langflow/processing/process.py
CHANGED
|
@@ -2,20 +2,20 @@ from __future__ import annotations
|
|
|
2
2
|
|
|
3
3
|
from typing import TYPE_CHECKING, Any, cast
|
|
4
4
|
|
|
5
|
+
from lfx.graph.vertex.base import Vertex
|
|
6
|
+
from lfx.log.logger import logger
|
|
7
|
+
from lfx.processing.utils import validate_and_repair_json
|
|
5
8
|
from pydantic import BaseModel
|
|
6
9
|
|
|
7
|
-
from langflow.graph.vertex.base import Vertex
|
|
8
|
-
from langflow.logging.logger import logger
|
|
9
|
-
from langflow.processing.utils import validate_and_repair_json
|
|
10
10
|
from langflow.schema.graph import InputValue, Tweaks
|
|
11
11
|
from langflow.schema.schema import INPUT_FIELD_NAME
|
|
12
12
|
from langflow.services.deps import get_settings_service
|
|
13
13
|
|
|
14
14
|
if TYPE_CHECKING:
|
|
15
|
-
from
|
|
16
|
-
from
|
|
17
|
-
from
|
|
18
|
-
from
|
|
15
|
+
from lfx.events.event_manager import EventManager
|
|
16
|
+
from lfx.graph.graph.base import Graph
|
|
17
|
+
from lfx.graph.schema import RunOutputs
|
|
18
|
+
from lfx.schema.schema import InputValueRequest
|
|
19
19
|
|
|
20
20
|
|
|
21
21
|
class Result(BaseModel):
|
langflow/schema/__init__.py
CHANGED
|
@@ -1,6 +1,23 @@
|
|
|
1
|
-
from .data import Data
|
|
2
|
-
from .dataframe import DataFrame
|
|
3
|
-
from .dotdict import dotdict
|
|
4
|
-
from .message import Message
|
|
1
|
+
from lfx.schema.data import Data
|
|
2
|
+
from lfx.schema.dataframe import DataFrame
|
|
3
|
+
from lfx.schema.dotdict import dotdict
|
|
4
|
+
from lfx.schema.message import Message
|
|
5
|
+
from lfx.schema.openai_responses_schemas import (
|
|
6
|
+
OpenAIErrorResponse,
|
|
7
|
+
OpenAIResponsesRequest,
|
|
8
|
+
OpenAIResponsesResponse,
|
|
9
|
+
OpenAIResponsesStreamChunk,
|
|
10
|
+
)
|
|
11
|
+
from lfx.schema.serialize import UUIDstr
|
|
5
12
|
|
|
6
|
-
__all__ = [
|
|
13
|
+
__all__ = [
|
|
14
|
+
"Data",
|
|
15
|
+
"DataFrame",
|
|
16
|
+
"Message",
|
|
17
|
+
"OpenAIErrorResponse",
|
|
18
|
+
"OpenAIResponsesRequest",
|
|
19
|
+
"OpenAIResponsesResponse",
|
|
20
|
+
"OpenAIResponsesStreamChunk",
|
|
21
|
+
"UUIDstr",
|
|
22
|
+
"dotdict",
|
|
23
|
+
]
|
langflow/schema/artifact.py
CHANGED
|
@@ -2,9 +2,9 @@ from collections.abc import Generator
|
|
|
2
2
|
from enum import Enum
|
|
3
3
|
|
|
4
4
|
from fastapi.encoders import jsonable_encoder
|
|
5
|
+
from lfx.log.logger import logger
|
|
5
6
|
from pydantic import BaseModel
|
|
6
7
|
|
|
7
|
-
from langflow.logging.logger import logger
|
|
8
8
|
from langflow.schema.data import Data
|
|
9
9
|
from langflow.schema.dataframe import DataFrame
|
|
10
10
|
from langflow.schema.encoders import CUSTOM_ENCODERS
|
langflow/schema/data.py
CHANGED
|
@@ -1,306 +1,8 @@
|
|
|
1
|
-
|
|
1
|
+
"""Data class for langflow - imports from lfx.
|
|
2
2
|
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
from datetime import datetime, timezone
|
|
6
|
-
from decimal import Decimal
|
|
7
|
-
from typing import TYPE_CHECKING, cast
|
|
8
|
-
from uuid import UUID
|
|
3
|
+
This maintains backward compatibility while using the lfx implementation.
|
|
4
|
+
"""
|
|
9
5
|
|
|
10
|
-
from
|
|
11
|
-
from langchain_core.messages import AIMessage, BaseMessage, HumanMessage
|
|
12
|
-
from pydantic import BaseModel, ConfigDict, model_serializer, model_validator
|
|
6
|
+
from lfx.schema.data import Data, custom_serializer, serialize_data
|
|
13
7
|
|
|
14
|
-
|
|
15
|
-
from langflow.utils.constants import MESSAGE_SENDER_AI, MESSAGE_SENDER_USER
|
|
16
|
-
from langflow.utils.image import create_image_content_dict
|
|
17
|
-
|
|
18
|
-
if TYPE_CHECKING:
|
|
19
|
-
from langflow.schema.dataframe import DataFrame
|
|
20
|
-
from langflow.schema.message import Message
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
class Data(BaseModel):
|
|
24
|
-
"""Represents a record with text and optional data.
|
|
25
|
-
|
|
26
|
-
Attributes:
|
|
27
|
-
data (dict, optional): Additional data associated with the record.
|
|
28
|
-
"""
|
|
29
|
-
|
|
30
|
-
model_config = ConfigDict(validate_assignment=True)
|
|
31
|
-
|
|
32
|
-
text_key: str = "text"
|
|
33
|
-
data: dict = {}
|
|
34
|
-
default_value: str | None = ""
|
|
35
|
-
|
|
36
|
-
@model_validator(mode="before")
|
|
37
|
-
@classmethod
|
|
38
|
-
def validate_data(cls, values):
|
|
39
|
-
if not isinstance(values, dict):
|
|
40
|
-
msg = "Data must be a dictionary"
|
|
41
|
-
raise ValueError(msg) # noqa: TRY004
|
|
42
|
-
if "data" not in values or values["data"] is None:
|
|
43
|
-
values["data"] = {}
|
|
44
|
-
if not isinstance(values["data"], dict):
|
|
45
|
-
msg = (
|
|
46
|
-
f"Invalid data format: expected dictionary but got {type(values).__name__}."
|
|
47
|
-
" This will raise an error in version langflow==1.3.0."
|
|
48
|
-
)
|
|
49
|
-
logger.warning(msg)
|
|
50
|
-
# Any other keyword should be added to the data dictionary
|
|
51
|
-
for key in values:
|
|
52
|
-
if key not in values["data"] and key not in {"text_key", "data", "default_value"}:
|
|
53
|
-
values["data"][key] = values[key]
|
|
54
|
-
return values
|
|
55
|
-
|
|
56
|
-
@model_serializer(mode="plain", when_used="json")
|
|
57
|
-
def serialize_model(self):
|
|
58
|
-
return {k: v.to_json() if hasattr(v, "to_json") else v for k, v in self.data.items()}
|
|
59
|
-
|
|
60
|
-
def get_text(self):
|
|
61
|
-
"""Retrieves the text value from the data dictionary.
|
|
62
|
-
|
|
63
|
-
If the text key is present in the data dictionary, the corresponding value is returned.
|
|
64
|
-
Otherwise, the default value is returned.
|
|
65
|
-
|
|
66
|
-
Returns:
|
|
67
|
-
The text value from the data dictionary or the default value.
|
|
68
|
-
"""
|
|
69
|
-
return self.data.get(self.text_key, self.default_value)
|
|
70
|
-
|
|
71
|
-
def set_text(self, text: str | None) -> str:
|
|
72
|
-
r"""Sets the text value in the data dictionary.
|
|
73
|
-
|
|
74
|
-
The object's `text` value is set to `text parameter as given, with the following modifications:
|
|
75
|
-
|
|
76
|
-
- `text` value of `None` is converted to an empty string.
|
|
77
|
-
- `text` value is converted to `str` type.
|
|
78
|
-
|
|
79
|
-
Args:
|
|
80
|
-
text (str): The text to be set in the data dictionary.
|
|
81
|
-
|
|
82
|
-
Returns:
|
|
83
|
-
str: The text value that was set in the data dictionary.
|
|
84
|
-
"""
|
|
85
|
-
new_text = "" if text is None else str(text)
|
|
86
|
-
self.data[self.text_key] = new_text
|
|
87
|
-
return new_text
|
|
88
|
-
|
|
89
|
-
@classmethod
|
|
90
|
-
def from_document(cls, document: Document) -> Data:
|
|
91
|
-
"""Converts a Document to a Data.
|
|
92
|
-
|
|
93
|
-
Args:
|
|
94
|
-
document (Document): The Document to convert.
|
|
95
|
-
|
|
96
|
-
Returns:
|
|
97
|
-
Data: The converted Data.
|
|
98
|
-
"""
|
|
99
|
-
data = document.metadata
|
|
100
|
-
data["text"] = document.page_content
|
|
101
|
-
return cls(data=data, text_key="text")
|
|
102
|
-
|
|
103
|
-
@classmethod
|
|
104
|
-
def from_lc_message(cls, message: BaseMessage) -> Data:
|
|
105
|
-
"""Converts a BaseMessage to a Data.
|
|
106
|
-
|
|
107
|
-
Args:
|
|
108
|
-
message (BaseMessage): The BaseMessage to convert.
|
|
109
|
-
|
|
110
|
-
Returns:
|
|
111
|
-
Data: The converted Data.
|
|
112
|
-
"""
|
|
113
|
-
data: dict = {"text": message.content}
|
|
114
|
-
data["metadata"] = cast("dict", message.to_json())
|
|
115
|
-
return cls(data=data, text_key="text")
|
|
116
|
-
|
|
117
|
-
def __add__(self, other: Data) -> Data:
|
|
118
|
-
"""Combines the data of two data by attempting to add values for overlapping keys.
|
|
119
|
-
|
|
120
|
-
Combines the data of two data by attempting to add values for overlapping keys
|
|
121
|
-
for all types that support the addition operation. Falls back to the value from 'other'
|
|
122
|
-
record when addition is not supported.
|
|
123
|
-
"""
|
|
124
|
-
combined_data = self.data.copy()
|
|
125
|
-
for key, value in other.data.items():
|
|
126
|
-
# If the key exists in both data and both values support the addition operation
|
|
127
|
-
if key in combined_data:
|
|
128
|
-
try:
|
|
129
|
-
combined_data[key] += value
|
|
130
|
-
except TypeError:
|
|
131
|
-
# Fallback: Use the value from 'other' record if addition is not supported
|
|
132
|
-
combined_data[key] = value
|
|
133
|
-
else:
|
|
134
|
-
# If the key is not in the first record, simply add it
|
|
135
|
-
combined_data[key] = value
|
|
136
|
-
|
|
137
|
-
return Data(data=combined_data)
|
|
138
|
-
|
|
139
|
-
def to_lc_document(self) -> Document:
|
|
140
|
-
"""Converts the Data to a Document.
|
|
141
|
-
|
|
142
|
-
Returns:
|
|
143
|
-
Document: The converted Document.
|
|
144
|
-
"""
|
|
145
|
-
data_copy = self.data.copy()
|
|
146
|
-
text = data_copy.pop(self.text_key, self.default_value)
|
|
147
|
-
if isinstance(text, str):
|
|
148
|
-
return Document(page_content=text, metadata=data_copy)
|
|
149
|
-
return Document(page_content=str(text), metadata=data_copy)
|
|
150
|
-
|
|
151
|
-
def to_lc_message(
|
|
152
|
-
self,
|
|
153
|
-
) -> BaseMessage:
|
|
154
|
-
"""Converts the Data to a BaseMessage.
|
|
155
|
-
|
|
156
|
-
Returns:
|
|
157
|
-
BaseMessage: The converted BaseMessage.
|
|
158
|
-
"""
|
|
159
|
-
# The idea of this function is to be a helper to convert a Data to a BaseMessage
|
|
160
|
-
# It will use the "sender" key to determine if the message is Human or AI
|
|
161
|
-
# If the key is not present, it will default to AI
|
|
162
|
-
# But first we check if all required keys are present in the data dictionary
|
|
163
|
-
# they are: "text", "sender"
|
|
164
|
-
if not all(key in self.data for key in ["text", "sender"]):
|
|
165
|
-
msg = f"Missing required keys ('text', 'sender') in Data: {self.data}"
|
|
166
|
-
raise ValueError(msg)
|
|
167
|
-
sender = self.data.get("sender", MESSAGE_SENDER_AI)
|
|
168
|
-
text = self.data.get("text", "")
|
|
169
|
-
files = self.data.get("files", [])
|
|
170
|
-
if sender == MESSAGE_SENDER_USER:
|
|
171
|
-
if files:
|
|
172
|
-
from langflow.schema.image import get_file_paths
|
|
173
|
-
|
|
174
|
-
resolved_file_paths = get_file_paths(files)
|
|
175
|
-
contents = [create_image_content_dict(file_path) for file_path in resolved_file_paths]
|
|
176
|
-
# add to the beginning of the list
|
|
177
|
-
contents.insert(0, {"type": "text", "text": text})
|
|
178
|
-
human_message = HumanMessage(content=contents)
|
|
179
|
-
else:
|
|
180
|
-
human_message = HumanMessage(
|
|
181
|
-
content=[{"type": "text", "text": text}],
|
|
182
|
-
)
|
|
183
|
-
|
|
184
|
-
return human_message
|
|
185
|
-
|
|
186
|
-
return AIMessage(content=text)
|
|
187
|
-
|
|
188
|
-
def __getattr__(self, key):
|
|
189
|
-
"""Allows attribute-like access to the data dictionary."""
|
|
190
|
-
try:
|
|
191
|
-
if key.startswith("__"):
|
|
192
|
-
return self.__getattribute__(key)
|
|
193
|
-
if key in {"data", "text_key"} or key.startswith("_"):
|
|
194
|
-
return super().__getattr__(key)
|
|
195
|
-
return self.data[key]
|
|
196
|
-
except KeyError as e:
|
|
197
|
-
# Fallback to default behavior to raise AttributeError for undefined attributes
|
|
198
|
-
msg = f"'{type(self).__name__}' object has no attribute '{key}'"
|
|
199
|
-
raise AttributeError(msg) from e
|
|
200
|
-
|
|
201
|
-
def __setattr__(self, key, value) -> None:
|
|
202
|
-
"""Set attribute-like values in the data dictionary.
|
|
203
|
-
|
|
204
|
-
Allows attribute-like setting of values in the data dictionary.
|
|
205
|
-
while still allowing direct assignment to class attributes.
|
|
206
|
-
"""
|
|
207
|
-
if key in {"data", "text_key"} or key.startswith("_"):
|
|
208
|
-
super().__setattr__(key, value)
|
|
209
|
-
elif key in self.model_fields:
|
|
210
|
-
self.data[key] = value
|
|
211
|
-
super().__setattr__(key, value)
|
|
212
|
-
else:
|
|
213
|
-
self.data[key] = value
|
|
214
|
-
|
|
215
|
-
def __delattr__(self, key) -> None:
|
|
216
|
-
"""Allows attribute-like deletion from the data dictionary."""
|
|
217
|
-
if key in {"data", "text_key"} or key.startswith("_"):
|
|
218
|
-
super().__delattr__(key)
|
|
219
|
-
else:
|
|
220
|
-
del self.data[key]
|
|
221
|
-
|
|
222
|
-
def __deepcopy__(self, memo):
|
|
223
|
-
"""Custom deepcopy implementation to handle copying of the Data object."""
|
|
224
|
-
# Create a new Data object with a deep copy of the data dictionary
|
|
225
|
-
return Data(data=copy.deepcopy(self.data, memo), text_key=self.text_key, default_value=self.default_value)
|
|
226
|
-
|
|
227
|
-
# check which attributes the Data has by checking the keys in the data dictionary
|
|
228
|
-
def __dir__(self):
|
|
229
|
-
return super().__dir__() + list(self.data.keys())
|
|
230
|
-
|
|
231
|
-
def __str__(self) -> str:
|
|
232
|
-
# return a JSON string representation of the Data atributes
|
|
233
|
-
try:
|
|
234
|
-
data = {k: v.to_json() if hasattr(v, "to_json") else v for k, v in self.data.items()}
|
|
235
|
-
return serialize_data(data) # use the custom serializer
|
|
236
|
-
except Exception: # noqa: BLE001
|
|
237
|
-
logger.debug("Error converting Data to JSON", exc_info=True)
|
|
238
|
-
return str(self.data)
|
|
239
|
-
|
|
240
|
-
def __contains__(self, key) -> bool:
|
|
241
|
-
return key in self.data
|
|
242
|
-
|
|
243
|
-
def __eq__(self, /, other):
|
|
244
|
-
return isinstance(other, Data) and self.data == other.data
|
|
245
|
-
|
|
246
|
-
def filter_data(self, filter_str: str) -> Data:
|
|
247
|
-
"""Filters the data dictionary based on the filter string.
|
|
248
|
-
|
|
249
|
-
Args:
|
|
250
|
-
filter_str (str): The filter string to apply to the data dictionary.
|
|
251
|
-
|
|
252
|
-
Returns:
|
|
253
|
-
Data: The filtered Data.
|
|
254
|
-
"""
|
|
255
|
-
from langflow.template.utils import apply_json_filter
|
|
256
|
-
|
|
257
|
-
return apply_json_filter(self.data, filter_str)
|
|
258
|
-
|
|
259
|
-
def to_message(self) -> Message:
|
|
260
|
-
from langflow.schema.message import Message # Local import to avoid circular import
|
|
261
|
-
|
|
262
|
-
if self.text_key in self.data:
|
|
263
|
-
return Message(text=self.get_text())
|
|
264
|
-
return Message(text=str(self.data))
|
|
265
|
-
|
|
266
|
-
def to_dataframe(self) -> DataFrame:
|
|
267
|
-
from langflow.schema.dataframe import DataFrame # Local import to avoid circular import
|
|
268
|
-
|
|
269
|
-
data_dict = self.data
|
|
270
|
-
# If data contains only one key and the value is a list of dictionaries, convert to DataFrame
|
|
271
|
-
if (
|
|
272
|
-
len(data_dict) == 1
|
|
273
|
-
and isinstance(next(iter(data_dict.values())), list)
|
|
274
|
-
and all(isinstance(item, dict) for item in next(iter(data_dict.values())))
|
|
275
|
-
):
|
|
276
|
-
return DataFrame(data=next(iter(data_dict.values())))
|
|
277
|
-
return DataFrame(data=[self])
|
|
278
|
-
|
|
279
|
-
def __repr__(self) -> str:
|
|
280
|
-
"""Return string representation of the Data object."""
|
|
281
|
-
return f"Data(text_key={self.text_key!r}, data={self.data!r}, default_value={self.default_value!r})"
|
|
282
|
-
|
|
283
|
-
def __hash__(self) -> int:
|
|
284
|
-
"""Return hash of the Data object based on its string representation."""
|
|
285
|
-
return hash(self.__repr__())
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
def custom_serializer(obj):
|
|
289
|
-
if isinstance(obj, datetime):
|
|
290
|
-
utc_date = obj.replace(tzinfo=timezone.utc)
|
|
291
|
-
return utc_date.strftime("%Y-%m-%d %H:%M:%S %Z")
|
|
292
|
-
if isinstance(obj, Decimal):
|
|
293
|
-
return float(obj)
|
|
294
|
-
if isinstance(obj, UUID):
|
|
295
|
-
return str(obj)
|
|
296
|
-
if isinstance(obj, BaseModel):
|
|
297
|
-
return obj.model_dump()
|
|
298
|
-
if isinstance(obj, bytes):
|
|
299
|
-
return obj.decode("utf-8", errors="replace")
|
|
300
|
-
# Add more custom serialization rules as needed
|
|
301
|
-
msg = f"Type {type(obj)} not serializable"
|
|
302
|
-
raise TypeError(msg)
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
def serialize_data(data):
|
|
306
|
-
return json.dumps(data, indent=4, default=custom_serializer)
|
|
8
|
+
__all__ = ["Data", "custom_serializer", "serialize_data"]
|
langflow/schema/dataframe.py
CHANGED
|
@@ -1,206 +1,3 @@
|
|
|
1
|
-
|
|
1
|
+
"""Backwards compatibility module for langflow.schema.dataframe."""
|
|
2
2
|
|
|
3
|
-
import
|
|
4
|
-
from langchain_core.documents import Document
|
|
5
|
-
from pandas import DataFrame as pandas_DataFrame
|
|
6
|
-
|
|
7
|
-
from langflow.schema.data import Data
|
|
8
|
-
from langflow.schema.message import Message
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
class DataFrame(pandas_DataFrame): # noqa: PLW1641
|
|
12
|
-
"""A pandas DataFrame subclass specialized for handling collections of Data objects.
|
|
13
|
-
|
|
14
|
-
This class extends pandas.DataFrame to provide seamless integration between
|
|
15
|
-
Langflow's Data objects and pandas' powerful data manipulation capabilities.
|
|
16
|
-
|
|
17
|
-
Args:
|
|
18
|
-
data: Input data in various formats:
|
|
19
|
-
- List[Data]: List of Data objects
|
|
20
|
-
- List[Dict]: List of dictionaries
|
|
21
|
-
- Dict: Dictionary of arrays/lists
|
|
22
|
-
- pandas.DataFrame: Existing DataFrame
|
|
23
|
-
- Any format supported by pandas.DataFrame
|
|
24
|
-
**kwargs: Additional arguments passed to pandas.DataFrame constructor
|
|
25
|
-
|
|
26
|
-
Examples:
|
|
27
|
-
>>> # From Data objects
|
|
28
|
-
>>> dataset = DataFrame([Data(data={"name": "John"}), Data(data={"name": "Jane"})])
|
|
29
|
-
|
|
30
|
-
>>> # From dictionaries
|
|
31
|
-
>>> dataset = DataFrame([{"name": "John"}, {"name": "Jane"}])
|
|
32
|
-
|
|
33
|
-
>>> # From dictionary of lists
|
|
34
|
-
>>> dataset = DataFrame({"name": ["John", "Jane"], "age": [30, 25]})
|
|
35
|
-
"""
|
|
36
|
-
|
|
37
|
-
def __init__(
|
|
38
|
-
self,
|
|
39
|
-
data: list[dict] | list[Data] | pd.DataFrame | None = None,
|
|
40
|
-
text_key: str = "text",
|
|
41
|
-
default_value: str = "",
|
|
42
|
-
**kwargs,
|
|
43
|
-
):
|
|
44
|
-
# Initialize pandas DataFrame first without data
|
|
45
|
-
super().__init__(**kwargs) # Removed data parameter
|
|
46
|
-
|
|
47
|
-
# Store attributes as private members to avoid conflicts with pandas
|
|
48
|
-
self._text_key = text_key
|
|
49
|
-
self._default_value = default_value
|
|
50
|
-
|
|
51
|
-
if data is None:
|
|
52
|
-
return
|
|
53
|
-
|
|
54
|
-
if isinstance(data, list):
|
|
55
|
-
if all(isinstance(x, Data) for x in data):
|
|
56
|
-
data = [d.data for d in data if hasattr(d, "data")]
|
|
57
|
-
elif not all(isinstance(x, dict) for x in data):
|
|
58
|
-
msg = "List items must be either all Data objects or all dictionaries"
|
|
59
|
-
raise ValueError(msg)
|
|
60
|
-
self._update(data, **kwargs)
|
|
61
|
-
elif isinstance(data, dict | pd.DataFrame): # Fixed type check syntax
|
|
62
|
-
self._update(data, **kwargs)
|
|
63
|
-
|
|
64
|
-
def _update(self, data, **kwargs):
|
|
65
|
-
"""Helper method to update DataFrame with new data."""
|
|
66
|
-
new_df = pd.DataFrame(data, **kwargs)
|
|
67
|
-
self._update_inplace(new_df)
|
|
68
|
-
|
|
69
|
-
# Update property accessors
|
|
70
|
-
@property
|
|
71
|
-
def text_key(self) -> str:
|
|
72
|
-
return self._text_key
|
|
73
|
-
|
|
74
|
-
@text_key.setter
|
|
75
|
-
def text_key(self, value: str) -> None:
|
|
76
|
-
if value not in self.columns:
|
|
77
|
-
msg = f"Text key '{value}' not found in DataFrame columns"
|
|
78
|
-
raise ValueError(msg)
|
|
79
|
-
self._text_key = value
|
|
80
|
-
|
|
81
|
-
@property
|
|
82
|
-
def default_value(self) -> str:
|
|
83
|
-
return self._default_value
|
|
84
|
-
|
|
85
|
-
@default_value.setter
|
|
86
|
-
def default_value(self, value: str) -> None:
|
|
87
|
-
self._default_value = value
|
|
88
|
-
|
|
89
|
-
def to_data_list(self) -> list[Data]:
|
|
90
|
-
"""Converts the DataFrame back to a list of Data objects."""
|
|
91
|
-
list_of_dicts = self.to_dict(orient="records")
|
|
92
|
-
# suggested change: [Data(**row) for row in list_of_dicts]
|
|
93
|
-
return [Data(data=row) for row in list_of_dicts]
|
|
94
|
-
|
|
95
|
-
def add_row(self, data: dict | Data) -> "DataFrame":
|
|
96
|
-
"""Adds a single row to the dataset.
|
|
97
|
-
|
|
98
|
-
Args:
|
|
99
|
-
data: Either a Data object or a dictionary to add as a new row
|
|
100
|
-
|
|
101
|
-
Returns:
|
|
102
|
-
DataFrame: A new DataFrame with the added row
|
|
103
|
-
|
|
104
|
-
Example:
|
|
105
|
-
>>> dataset = DataFrame([{"name": "John"}])
|
|
106
|
-
>>> dataset = dataset.add_row({"name": "Jane"})
|
|
107
|
-
"""
|
|
108
|
-
if isinstance(data, Data):
|
|
109
|
-
data = data.data
|
|
110
|
-
new_df = self._constructor([data])
|
|
111
|
-
return cast("DataFrame", pd.concat([self, new_df], ignore_index=True))
|
|
112
|
-
|
|
113
|
-
def add_rows(self, data: list[dict | Data]) -> "DataFrame":
|
|
114
|
-
"""Adds multiple rows to the dataset.
|
|
115
|
-
|
|
116
|
-
Args:
|
|
117
|
-
data: List of Data objects or dictionaries to add as new rows
|
|
118
|
-
|
|
119
|
-
Returns:
|
|
120
|
-
DataFrame: A new DataFrame with the added rows
|
|
121
|
-
"""
|
|
122
|
-
processed_data = []
|
|
123
|
-
for item in data:
|
|
124
|
-
if isinstance(item, Data):
|
|
125
|
-
processed_data.append(item.data)
|
|
126
|
-
else:
|
|
127
|
-
processed_data.append(item)
|
|
128
|
-
new_df = self._constructor(processed_data)
|
|
129
|
-
return cast("DataFrame", pd.concat([self, new_df], ignore_index=True))
|
|
130
|
-
|
|
131
|
-
@property
|
|
132
|
-
def _constructor(self):
|
|
133
|
-
def _c(*args, **kwargs):
|
|
134
|
-
return DataFrame(*args, **kwargs).__finalize__(self)
|
|
135
|
-
|
|
136
|
-
return _c
|
|
137
|
-
|
|
138
|
-
def __bool__(self):
|
|
139
|
-
"""Truth value testing for the DataFrame.
|
|
140
|
-
|
|
141
|
-
Returns True if the DataFrame has at least one row, False otherwise.
|
|
142
|
-
"""
|
|
143
|
-
return not self.empty
|
|
144
|
-
|
|
145
|
-
def to_lc_documents(self) -> list[Document]:
|
|
146
|
-
"""Converts the DataFrame to a list of Documents.
|
|
147
|
-
|
|
148
|
-
Returns:
|
|
149
|
-
list[Document]: The converted list of Documents.
|
|
150
|
-
"""
|
|
151
|
-
list_of_dicts = self.to_dict(orient="records")
|
|
152
|
-
documents = []
|
|
153
|
-
for row in list_of_dicts:
|
|
154
|
-
data_copy = row.copy()
|
|
155
|
-
text = data_copy.pop(self._text_key, self._default_value)
|
|
156
|
-
if isinstance(text, str):
|
|
157
|
-
documents.append(Document(page_content=text, metadata=data_copy))
|
|
158
|
-
else:
|
|
159
|
-
documents.append(Document(page_content=str(text), metadata=data_copy))
|
|
160
|
-
return documents
|
|
161
|
-
|
|
162
|
-
def _docs_to_dataframe(self, docs):
|
|
163
|
-
"""Converts a list of Documents to a DataFrame.
|
|
164
|
-
|
|
165
|
-
Args:
|
|
166
|
-
docs: List of Document objects
|
|
167
|
-
|
|
168
|
-
Returns:
|
|
169
|
-
DataFrame: A new DataFrame with the converted Documents
|
|
170
|
-
"""
|
|
171
|
-
return DataFrame(docs)
|
|
172
|
-
|
|
173
|
-
def __eq__(self, other):
|
|
174
|
-
"""Override equality to handle comparison with empty DataFrames and non-DataFrame objects."""
|
|
175
|
-
if self.empty:
|
|
176
|
-
return False
|
|
177
|
-
if isinstance(other, list) and not other: # Empty list case
|
|
178
|
-
return False
|
|
179
|
-
if not isinstance(other, DataFrame | pd.DataFrame): # Non-DataFrame case
|
|
180
|
-
return False
|
|
181
|
-
return super().__eq__(other)
|
|
182
|
-
|
|
183
|
-
def to_data(self) -> Data:
|
|
184
|
-
"""Convert this DataFrame to a Data object.
|
|
185
|
-
|
|
186
|
-
Returns:
|
|
187
|
-
Data: A Data object containing the DataFrame records under 'results' key.
|
|
188
|
-
"""
|
|
189
|
-
dict_list = self.to_dict(orient="records")
|
|
190
|
-
return Data(data={"results": dict_list})
|
|
191
|
-
|
|
192
|
-
def to_message(self) -> Message:
|
|
193
|
-
from langflow.schema.message import Message # Local import to avoid circular import
|
|
194
|
-
|
|
195
|
-
# Process DataFrame similar to the _safe_convert method
|
|
196
|
-
# Remove empty rows
|
|
197
|
-
processed_df = self.dropna(how="all")
|
|
198
|
-
# Remove empty lines in each cell
|
|
199
|
-
processed_df = processed_df.replace(r"^\s*$", "", regex=True)
|
|
200
|
-
# Replace multiple newlines with a single newline
|
|
201
|
-
processed_df = processed_df.replace(r"\n+", "\n", regex=True)
|
|
202
|
-
# Replace pipe characters to avoid markdown table issues
|
|
203
|
-
processed_df = processed_df.replace(r"\|", r"\\|", regex=True)
|
|
204
|
-
processed_df = processed_df.map(lambda x: str(x).replace("\n", "<br/>") if isinstance(x, str) else x)
|
|
205
|
-
# Convert to markdown and wrap in a Message
|
|
206
|
-
return Message(text=processed_df.to_markdown(index=False))
|
|
3
|
+
from lfx.schema.dataframe import DataFrame # noqa: F401
|
langflow/schema/graph.py
CHANGED
|
@@ -1,47 +1,6 @@
|
|
|
1
|
-
|
|
1
|
+
# Backwards compatibility module for langflow.schema.graph
|
|
2
|
+
# This module redirects imports to the new lfx.schema.graph module
|
|
2
3
|
|
|
3
|
-
from
|
|
4
|
+
from lfx.schema.graph import InputValue, Tweaks
|
|
4
5
|
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
class InputValue(BaseModel):
|
|
9
|
-
components: list[str] | None = []
|
|
10
|
-
input_value: str | None = None
|
|
11
|
-
type: InputType | None = Field(
|
|
12
|
-
"any",
|
|
13
|
-
description="Defines on which components the input value should be applied. "
|
|
14
|
-
"'any' applies to all input components.",
|
|
15
|
-
)
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
class Tweaks(RootModel):
|
|
19
|
-
root: dict[str, str | dict[str, Any]] = Field(
|
|
20
|
-
description="A dictionary of tweaks to adjust the flow's execution. "
|
|
21
|
-
"Allows customizing flow behavior dynamically. "
|
|
22
|
-
"All tweaks are overridden by the input values.",
|
|
23
|
-
)
|
|
24
|
-
model_config = {
|
|
25
|
-
"json_schema_extra": {
|
|
26
|
-
"examples": [
|
|
27
|
-
{
|
|
28
|
-
"parameter_name": "value",
|
|
29
|
-
"Component Name": {"parameter_name": "value"},
|
|
30
|
-
"component_id": {"parameter_name": "value"},
|
|
31
|
-
}
|
|
32
|
-
]
|
|
33
|
-
}
|
|
34
|
-
}
|
|
35
|
-
|
|
36
|
-
# This should behave like a dict
|
|
37
|
-
def __getitem__(self, key):
|
|
38
|
-
return self.root[key]
|
|
39
|
-
|
|
40
|
-
def __setitem__(self, key, value) -> None:
|
|
41
|
-
self.root[key] = value
|
|
42
|
-
|
|
43
|
-
def __delitem__(self, key) -> None:
|
|
44
|
-
del self.root[key]
|
|
45
|
-
|
|
46
|
-
def items(self):
|
|
47
|
-
return self.root.items()
|
|
6
|
+
__all__ = ["InputValue", "Tweaks"]
|