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
|
@@ -1,134 +0,0 @@
|
|
|
1
|
-
import numpy as np
|
|
2
|
-
from langchain_core.vectorstores import VectorStore
|
|
3
|
-
|
|
4
|
-
from langflow.base.vectorstores.model import LCVectorStoreComponent, check_cached_vector_store
|
|
5
|
-
from langflow.helpers.data import docs_to_data
|
|
6
|
-
from langflow.io import DropdownInput, HandleInput, IntInput, SecretStrInput, StrInput
|
|
7
|
-
from langflow.schema.data import Data
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
class PineconeVectorStoreComponent(LCVectorStoreComponent):
|
|
11
|
-
display_name = "Pinecone"
|
|
12
|
-
description = "Pinecone Vector Store with search capabilities"
|
|
13
|
-
name = "Pinecone"
|
|
14
|
-
icon = "Pinecone"
|
|
15
|
-
inputs = [
|
|
16
|
-
StrInput(name="index_name", display_name="Index Name", required=True),
|
|
17
|
-
StrInput(name="namespace", display_name="Namespace", info="Namespace for the index."),
|
|
18
|
-
DropdownInput(
|
|
19
|
-
name="distance_strategy",
|
|
20
|
-
display_name="Distance Strategy",
|
|
21
|
-
options=["Cosine", "Euclidean", "Dot Product"],
|
|
22
|
-
value="Cosine",
|
|
23
|
-
advanced=True,
|
|
24
|
-
),
|
|
25
|
-
SecretStrInput(name="pinecone_api_key", display_name="Pinecone API Key", required=True),
|
|
26
|
-
StrInput(
|
|
27
|
-
name="text_key",
|
|
28
|
-
display_name="Text Key",
|
|
29
|
-
info="Key in the record to use as text.",
|
|
30
|
-
value="text",
|
|
31
|
-
advanced=True,
|
|
32
|
-
),
|
|
33
|
-
*LCVectorStoreComponent.inputs,
|
|
34
|
-
HandleInput(name="embedding", display_name="Embedding", input_types=["Embeddings"]),
|
|
35
|
-
IntInput(
|
|
36
|
-
name="number_of_results",
|
|
37
|
-
display_name="Number of Results",
|
|
38
|
-
info="Number of results to return.",
|
|
39
|
-
value=4,
|
|
40
|
-
advanced=True,
|
|
41
|
-
),
|
|
42
|
-
]
|
|
43
|
-
|
|
44
|
-
@check_cached_vector_store
|
|
45
|
-
def build_vector_store(self) -> VectorStore:
|
|
46
|
-
"""Build and return a Pinecone vector store instance."""
|
|
47
|
-
try:
|
|
48
|
-
from langchain_pinecone import PineconeVectorStore
|
|
49
|
-
except ImportError as e:
|
|
50
|
-
msg = "langchain-pinecone is not installed. Please install it with `pip install langchain-pinecone`."
|
|
51
|
-
raise ValueError(msg) from e
|
|
52
|
-
|
|
53
|
-
try:
|
|
54
|
-
from langchain_pinecone._utilities import DistanceStrategy
|
|
55
|
-
|
|
56
|
-
# Wrap the embedding model to ensure float32 output
|
|
57
|
-
wrapped_embeddings = Float32Embeddings(self.embedding)
|
|
58
|
-
|
|
59
|
-
# Convert distance strategy
|
|
60
|
-
distance_strategy = self.distance_strategy.replace(" ", "_").upper()
|
|
61
|
-
distance_strategy = DistanceStrategy[distance_strategy]
|
|
62
|
-
|
|
63
|
-
# Initialize Pinecone instance with wrapped embeddings
|
|
64
|
-
pinecone = PineconeVectorStore(
|
|
65
|
-
index_name=self.index_name,
|
|
66
|
-
embedding=wrapped_embeddings, # Use wrapped embeddings
|
|
67
|
-
text_key=self.text_key,
|
|
68
|
-
namespace=self.namespace,
|
|
69
|
-
distance_strategy=distance_strategy,
|
|
70
|
-
pinecone_api_key=self.pinecone_api_key,
|
|
71
|
-
)
|
|
72
|
-
except Exception as e:
|
|
73
|
-
error_msg = "Error building Pinecone vector store"
|
|
74
|
-
raise ValueError(error_msg) from e
|
|
75
|
-
else:
|
|
76
|
-
self.ingest_data = self._prepare_ingest_data()
|
|
77
|
-
|
|
78
|
-
# Process documents if any
|
|
79
|
-
documents = []
|
|
80
|
-
if self.ingest_data:
|
|
81
|
-
# Convert DataFrame to Data if needed using parent's method
|
|
82
|
-
|
|
83
|
-
for doc in self.ingest_data:
|
|
84
|
-
if isinstance(doc, Data):
|
|
85
|
-
documents.append(doc.to_lc_document())
|
|
86
|
-
else:
|
|
87
|
-
documents.append(doc)
|
|
88
|
-
|
|
89
|
-
if documents:
|
|
90
|
-
pinecone.add_documents(documents)
|
|
91
|
-
|
|
92
|
-
return pinecone
|
|
93
|
-
|
|
94
|
-
def search_documents(self) -> list[Data]:
|
|
95
|
-
"""Search documents in the vector store."""
|
|
96
|
-
try:
|
|
97
|
-
if not self.search_query or not isinstance(self.search_query, str) or not self.search_query.strip():
|
|
98
|
-
return []
|
|
99
|
-
|
|
100
|
-
vector_store = self.build_vector_store()
|
|
101
|
-
docs = vector_store.similarity_search(
|
|
102
|
-
query=self.search_query,
|
|
103
|
-
k=self.number_of_results,
|
|
104
|
-
)
|
|
105
|
-
except Exception as e:
|
|
106
|
-
error_msg = "Error searching documents"
|
|
107
|
-
raise ValueError(error_msg) from e
|
|
108
|
-
else:
|
|
109
|
-
data = docs_to_data(docs)
|
|
110
|
-
self.status = data
|
|
111
|
-
return data
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
class Float32Embeddings:
|
|
115
|
-
"""Wrapper class to ensure float32 embeddings."""
|
|
116
|
-
|
|
117
|
-
def __init__(self, base_embeddings):
|
|
118
|
-
self.base_embeddings = base_embeddings
|
|
119
|
-
|
|
120
|
-
def embed_documents(self, texts):
|
|
121
|
-
embeddings = self.base_embeddings.embed_documents(texts)
|
|
122
|
-
if isinstance(embeddings, np.ndarray):
|
|
123
|
-
return [[self._force_float32(x) for x in vec] for vec in embeddings]
|
|
124
|
-
return [[self._force_float32(x) for x in vec] for vec in embeddings]
|
|
125
|
-
|
|
126
|
-
def embed_query(self, text):
|
|
127
|
-
embedding = self.base_embeddings.embed_query(text)
|
|
128
|
-
if isinstance(embedding, np.ndarray):
|
|
129
|
-
return [self._force_float32(x) for x in embedding]
|
|
130
|
-
return [self._force_float32(x) for x in embedding]
|
|
131
|
-
|
|
132
|
-
def _force_float32(self, value):
|
|
133
|
-
"""Convert any numeric type to Python float."""
|
|
134
|
-
return float(np.float32(value))
|
|
@@ -1,108 +0,0 @@
|
|
|
1
|
-
from langflow.custom.custom_component.component import Component
|
|
2
|
-
from langflow.inputs.inputs import MessageTextInput
|
|
3
|
-
from langflow.io import HandleInput, NestedDictInput, Output, StrInput
|
|
4
|
-
from langflow.schema.data import Data
|
|
5
|
-
from langflow.schema.dataframe import DataFrame
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
class AlterMetadataComponent(Component):
|
|
9
|
-
display_name = "Alter Metadata"
|
|
10
|
-
description = "Adds/Removes Metadata Dictionary on inputs"
|
|
11
|
-
icon = "merge"
|
|
12
|
-
name = "AlterMetadata"
|
|
13
|
-
legacy = True
|
|
14
|
-
|
|
15
|
-
inputs = [
|
|
16
|
-
HandleInput(
|
|
17
|
-
name="input_value",
|
|
18
|
-
display_name="Input",
|
|
19
|
-
info="Object(s) to which Metadata should be added",
|
|
20
|
-
required=False,
|
|
21
|
-
input_types=["Message", "Data"],
|
|
22
|
-
is_list=True,
|
|
23
|
-
),
|
|
24
|
-
StrInput(
|
|
25
|
-
name="text_in",
|
|
26
|
-
display_name="User Text",
|
|
27
|
-
info="Text input; value will be in 'text' attribute of Data object. Empty text entries are ignored.",
|
|
28
|
-
required=False,
|
|
29
|
-
),
|
|
30
|
-
NestedDictInput(
|
|
31
|
-
name="metadata",
|
|
32
|
-
display_name="Metadata",
|
|
33
|
-
info="Metadata to add to each object",
|
|
34
|
-
input_types=["Data"],
|
|
35
|
-
required=True,
|
|
36
|
-
),
|
|
37
|
-
MessageTextInput(
|
|
38
|
-
name="remove_fields",
|
|
39
|
-
display_name="Fields to Remove",
|
|
40
|
-
info="Metadata Fields to Remove",
|
|
41
|
-
required=False,
|
|
42
|
-
is_list=True,
|
|
43
|
-
),
|
|
44
|
-
]
|
|
45
|
-
|
|
46
|
-
outputs = [
|
|
47
|
-
Output(
|
|
48
|
-
name="data",
|
|
49
|
-
display_name="Data",
|
|
50
|
-
info="List of Input objects each with added Metadata",
|
|
51
|
-
method="process_output",
|
|
52
|
-
),
|
|
53
|
-
Output(
|
|
54
|
-
display_name="DataFrame",
|
|
55
|
-
name="dataframe",
|
|
56
|
-
info="Data objects as a DataFrame, with metadata as columns",
|
|
57
|
-
method="as_dataframe",
|
|
58
|
-
),
|
|
59
|
-
]
|
|
60
|
-
|
|
61
|
-
def _as_clean_dict(self, obj):
|
|
62
|
-
"""Convert a Data object or a standard dictionary to a standard dictionary."""
|
|
63
|
-
if isinstance(obj, dict):
|
|
64
|
-
as_dict = obj
|
|
65
|
-
elif isinstance(obj, Data):
|
|
66
|
-
as_dict = obj.data
|
|
67
|
-
else:
|
|
68
|
-
msg = f"Expected a Data object or a dictionary but got {type(obj)}."
|
|
69
|
-
raise TypeError(msg)
|
|
70
|
-
|
|
71
|
-
return {k: v for k, v in (as_dict or {}).items() if k and k.strip()}
|
|
72
|
-
|
|
73
|
-
def process_output(self) -> list[Data]:
|
|
74
|
-
# Ensure metadata is a dictionary, filtering out any empty keys
|
|
75
|
-
metadata = self._as_clean_dict(self.metadata)
|
|
76
|
-
|
|
77
|
-
# Convert text_in to a Data object if it exists, and initialize our list of Data objects
|
|
78
|
-
data_objects = [Data(text=self.text_in)] if self.text_in else []
|
|
79
|
-
|
|
80
|
-
# Append existing Data objects from input_value, if any
|
|
81
|
-
if self.input_value:
|
|
82
|
-
data_objects.extend(self.input_value)
|
|
83
|
-
|
|
84
|
-
# Update each Data object with the new metadata, preserving existing fields
|
|
85
|
-
for data in data_objects:
|
|
86
|
-
data.data.update(metadata)
|
|
87
|
-
|
|
88
|
-
# Handle removal of fields specified in remove_fields
|
|
89
|
-
if self.remove_fields:
|
|
90
|
-
fields_to_remove = {field.strip() for field in self.remove_fields if field.strip()}
|
|
91
|
-
|
|
92
|
-
# Remove specified fields from each Data object's metadata
|
|
93
|
-
for data in data_objects:
|
|
94
|
-
data.data = {k: v for k, v in data.data.items() if k not in fields_to_remove}
|
|
95
|
-
|
|
96
|
-
# Set the status for tracking/debugging purposes
|
|
97
|
-
self.status = data_objects
|
|
98
|
-
return data_objects
|
|
99
|
-
|
|
100
|
-
def as_dataframe(self) -> DataFrame:
|
|
101
|
-
"""Convert the processed data objects into a DataFrame.
|
|
102
|
-
|
|
103
|
-
Returns:
|
|
104
|
-
DataFrame: A DataFrame where each row corresponds to a Data object,
|
|
105
|
-
with metadata fields as columns.
|
|
106
|
-
"""
|
|
107
|
-
data_list = self.process_output()
|
|
108
|
-
return DataFrame(data_list)
|
|
@@ -1,205 +0,0 @@
|
|
|
1
|
-
from __future__ import annotations
|
|
2
|
-
|
|
3
|
-
from typing import TYPE_CHECKING, Any, cast
|
|
4
|
-
|
|
5
|
-
import toml # type: ignore[import-untyped]
|
|
6
|
-
|
|
7
|
-
from langflow.custom.custom_component.component import Component
|
|
8
|
-
from langflow.io import BoolInput, DataFrameInput, HandleInput, MessageTextInput, MultilineInput, Output
|
|
9
|
-
from langflow.logging.logger import logger
|
|
10
|
-
from langflow.schema.dataframe import DataFrame
|
|
11
|
-
|
|
12
|
-
if TYPE_CHECKING:
|
|
13
|
-
from langchain_core.runnables import Runnable
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
class BatchRunComponent(Component):
|
|
17
|
-
display_name = "Batch Run"
|
|
18
|
-
description = "Runs an LLM on each row of a DataFrame column. If no column is specified, all columns are used."
|
|
19
|
-
documentation: str = "https://docs.langflow.org/components-processing#batch-run"
|
|
20
|
-
icon = "List"
|
|
21
|
-
|
|
22
|
-
inputs = [
|
|
23
|
-
HandleInput(
|
|
24
|
-
name="model",
|
|
25
|
-
display_name="Language Model",
|
|
26
|
-
info="Connect the 'Language Model' output from your LLM component here.",
|
|
27
|
-
input_types=["LanguageModel"],
|
|
28
|
-
required=True,
|
|
29
|
-
),
|
|
30
|
-
MultilineInput(
|
|
31
|
-
name="system_message",
|
|
32
|
-
display_name="Instructions",
|
|
33
|
-
info="Multi-line system instruction for all rows in the DataFrame.",
|
|
34
|
-
required=False,
|
|
35
|
-
),
|
|
36
|
-
DataFrameInput(
|
|
37
|
-
name="df",
|
|
38
|
-
display_name="DataFrame",
|
|
39
|
-
info="The DataFrame whose column (specified by 'column_name') we'll treat as text messages.",
|
|
40
|
-
required=True,
|
|
41
|
-
),
|
|
42
|
-
MessageTextInput(
|
|
43
|
-
name="column_name",
|
|
44
|
-
display_name="Column Name",
|
|
45
|
-
info=(
|
|
46
|
-
"The name of the DataFrame column to treat as text messages. "
|
|
47
|
-
"If empty, all columns will be formatted in TOML."
|
|
48
|
-
),
|
|
49
|
-
required=False,
|
|
50
|
-
advanced=False,
|
|
51
|
-
),
|
|
52
|
-
MessageTextInput(
|
|
53
|
-
name="output_column_name",
|
|
54
|
-
display_name="Output Column Name",
|
|
55
|
-
info="Name of the column where the model's response will be stored.",
|
|
56
|
-
value="model_response",
|
|
57
|
-
required=False,
|
|
58
|
-
advanced=True,
|
|
59
|
-
),
|
|
60
|
-
BoolInput(
|
|
61
|
-
name="enable_metadata",
|
|
62
|
-
display_name="Enable Metadata",
|
|
63
|
-
info="If True, add metadata to the output DataFrame.",
|
|
64
|
-
value=False,
|
|
65
|
-
required=False,
|
|
66
|
-
advanced=True,
|
|
67
|
-
),
|
|
68
|
-
]
|
|
69
|
-
|
|
70
|
-
outputs = [
|
|
71
|
-
Output(
|
|
72
|
-
display_name="LLM Results",
|
|
73
|
-
name="batch_results",
|
|
74
|
-
method="run_batch",
|
|
75
|
-
info="A DataFrame with all original columns plus the model's response column.",
|
|
76
|
-
),
|
|
77
|
-
]
|
|
78
|
-
|
|
79
|
-
def _format_row_as_toml(self, row: dict[str, Any]) -> str:
|
|
80
|
-
"""Convert a dictionary (row) into a TOML-formatted string."""
|
|
81
|
-
formatted_dict = {str(col): {"value": str(val)} for col, val in row.items()}
|
|
82
|
-
return toml.dumps(formatted_dict)
|
|
83
|
-
|
|
84
|
-
def _create_base_row(
|
|
85
|
-
self, original_row: dict[str, Any], model_response: str = "", batch_index: int = -1
|
|
86
|
-
) -> dict[str, Any]:
|
|
87
|
-
"""Create a base row with original columns and additional metadata."""
|
|
88
|
-
row = original_row.copy()
|
|
89
|
-
row[self.output_column_name] = model_response
|
|
90
|
-
row["batch_index"] = batch_index
|
|
91
|
-
return row
|
|
92
|
-
|
|
93
|
-
def _add_metadata(
|
|
94
|
-
self, row: dict[str, Any], *, success: bool = True, system_msg: str = "", error: str | None = None
|
|
95
|
-
) -> None:
|
|
96
|
-
"""Add metadata to a row if enabled."""
|
|
97
|
-
if not self.enable_metadata:
|
|
98
|
-
return
|
|
99
|
-
|
|
100
|
-
if success:
|
|
101
|
-
row["metadata"] = {
|
|
102
|
-
"has_system_message": bool(system_msg),
|
|
103
|
-
"input_length": len(row.get("text_input", "")),
|
|
104
|
-
"response_length": len(row[self.output_column_name]),
|
|
105
|
-
"processing_status": "success",
|
|
106
|
-
}
|
|
107
|
-
else:
|
|
108
|
-
row["metadata"] = {
|
|
109
|
-
"error": error,
|
|
110
|
-
"processing_status": "failed",
|
|
111
|
-
}
|
|
112
|
-
|
|
113
|
-
async def run_batch(self) -> DataFrame:
|
|
114
|
-
"""Process each row in df[column_name] with the language model asynchronously.
|
|
115
|
-
|
|
116
|
-
Returns:
|
|
117
|
-
DataFrame: A new DataFrame containing:
|
|
118
|
-
- All original columns
|
|
119
|
-
- The model's response column (customizable name)
|
|
120
|
-
- 'batch_index' column for processing order
|
|
121
|
-
- 'metadata' (optional)
|
|
122
|
-
|
|
123
|
-
Raises:
|
|
124
|
-
ValueError: If the specified column is not found in the DataFrame
|
|
125
|
-
TypeError: If the model is not compatible or input types are wrong
|
|
126
|
-
"""
|
|
127
|
-
model: Runnable = self.model
|
|
128
|
-
system_msg = self.system_message or ""
|
|
129
|
-
df: DataFrame = self.df
|
|
130
|
-
col_name = self.column_name or ""
|
|
131
|
-
|
|
132
|
-
# Validate inputs first
|
|
133
|
-
if not isinstance(df, DataFrame):
|
|
134
|
-
msg = f"Expected DataFrame input, got {type(df)}"
|
|
135
|
-
raise TypeError(msg)
|
|
136
|
-
|
|
137
|
-
if col_name and col_name not in df.columns:
|
|
138
|
-
msg = f"Column '{col_name}' not found in the DataFrame. Available columns: {', '.join(df.columns)}"
|
|
139
|
-
raise ValueError(msg)
|
|
140
|
-
|
|
141
|
-
try:
|
|
142
|
-
# Determine text input for each row
|
|
143
|
-
if col_name:
|
|
144
|
-
user_texts = df[col_name].astype(str).tolist()
|
|
145
|
-
else:
|
|
146
|
-
user_texts = [
|
|
147
|
-
self._format_row_as_toml(cast("dict[str, Any]", row)) for row in df.to_dict(orient="records")
|
|
148
|
-
]
|
|
149
|
-
|
|
150
|
-
total_rows = len(user_texts)
|
|
151
|
-
await logger.ainfo(f"Processing {total_rows} rows with batch run")
|
|
152
|
-
|
|
153
|
-
# Prepare the batch of conversations
|
|
154
|
-
conversations = [
|
|
155
|
-
[{"role": "system", "content": system_msg}, {"role": "user", "content": text}]
|
|
156
|
-
if system_msg
|
|
157
|
-
else [{"role": "user", "content": text}]
|
|
158
|
-
for text in user_texts
|
|
159
|
-
]
|
|
160
|
-
|
|
161
|
-
# Configure the model with project info and callbacks
|
|
162
|
-
model = model.with_config(
|
|
163
|
-
{
|
|
164
|
-
"run_name": self.display_name,
|
|
165
|
-
"project_name": self.get_project_name(),
|
|
166
|
-
"callbacks": self.get_langchain_callbacks(),
|
|
167
|
-
}
|
|
168
|
-
)
|
|
169
|
-
# Process batches and track progress
|
|
170
|
-
responses_with_idx = list(
|
|
171
|
-
zip(
|
|
172
|
-
range(len(conversations)),
|
|
173
|
-
await model.abatch(list(conversations)),
|
|
174
|
-
strict=True,
|
|
175
|
-
)
|
|
176
|
-
)
|
|
177
|
-
|
|
178
|
-
# Sort by index to maintain order
|
|
179
|
-
responses_with_idx.sort(key=lambda x: x[0])
|
|
180
|
-
|
|
181
|
-
# Build the final data with enhanced metadata
|
|
182
|
-
rows: list[dict[str, Any]] = []
|
|
183
|
-
for idx, (original_row, response) in enumerate(
|
|
184
|
-
zip(df.to_dict(orient="records"), responses_with_idx, strict=False)
|
|
185
|
-
):
|
|
186
|
-
response_text = response[1].content if hasattr(response[1], "content") else str(response[1])
|
|
187
|
-
row = self._create_base_row(
|
|
188
|
-
cast("dict[str, Any]", original_row), model_response=response_text, batch_index=idx
|
|
189
|
-
)
|
|
190
|
-
self._add_metadata(row, success=True, system_msg=system_msg)
|
|
191
|
-
rows.append(row)
|
|
192
|
-
|
|
193
|
-
# Log progress
|
|
194
|
-
if (idx + 1) % max(1, total_rows // 10) == 0:
|
|
195
|
-
await logger.ainfo(f"Processed {idx + 1}/{total_rows} rows")
|
|
196
|
-
|
|
197
|
-
await logger.ainfo("Batch processing completed successfully")
|
|
198
|
-
return DataFrame(rows)
|
|
199
|
-
|
|
200
|
-
except (KeyError, AttributeError) as e:
|
|
201
|
-
# Handle data structure and attribute access errors
|
|
202
|
-
await logger.aerror(f"Data processing error: {e!s}")
|
|
203
|
-
error_row = self._create_base_row(dict.fromkeys(df.columns, ""), model_response="", batch_index=-1)
|
|
204
|
-
self._add_metadata(error_row, success=False, error=str(e))
|
|
205
|
-
return DataFrame([error_row])
|
|
@@ -1,39 +0,0 @@
|
|
|
1
|
-
from langflow.custom.custom_component.component import Component
|
|
2
|
-
from langflow.io import MessageTextInput, Output
|
|
3
|
-
from langflow.schema.message import Message
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
class CombineTextComponent(Component):
|
|
7
|
-
display_name = "Combine Text"
|
|
8
|
-
description = "Concatenate two text sources into a single text chunk using a specified delimiter."
|
|
9
|
-
icon = "merge"
|
|
10
|
-
name = "CombineText"
|
|
11
|
-
legacy: bool = True
|
|
12
|
-
|
|
13
|
-
inputs = [
|
|
14
|
-
MessageTextInput(
|
|
15
|
-
name="text1",
|
|
16
|
-
display_name="First Text",
|
|
17
|
-
info="The first text input to concatenate.",
|
|
18
|
-
),
|
|
19
|
-
MessageTextInput(
|
|
20
|
-
name="text2",
|
|
21
|
-
display_name="Second Text",
|
|
22
|
-
info="The second text input to concatenate.",
|
|
23
|
-
),
|
|
24
|
-
MessageTextInput(
|
|
25
|
-
name="delimiter",
|
|
26
|
-
display_name="Delimiter",
|
|
27
|
-
info="A string used to separate the two text inputs. Defaults to a whitespace.",
|
|
28
|
-
value=" ",
|
|
29
|
-
),
|
|
30
|
-
]
|
|
31
|
-
|
|
32
|
-
outputs = [
|
|
33
|
-
Output(display_name="Combined Text", name="combined_text", method="combine_texts"),
|
|
34
|
-
]
|
|
35
|
-
|
|
36
|
-
def combine_texts(self) -> Message:
|
|
37
|
-
combined = self.delimiter.join([self.text1, self.text2])
|
|
38
|
-
self.status = combined
|
|
39
|
-
return Message(text=combined)
|
|
@@ -1,110 +0,0 @@
|
|
|
1
|
-
from typing import Any
|
|
2
|
-
|
|
3
|
-
from langflow.custom.custom_component.component import Component
|
|
4
|
-
from langflow.field_typing.range_spec import RangeSpec
|
|
5
|
-
from langflow.inputs.inputs import BoolInput, DictInput, IntInput, MessageTextInput
|
|
6
|
-
from langflow.io import Output
|
|
7
|
-
from langflow.schema.data import Data
|
|
8
|
-
from langflow.schema.dotdict import dotdict
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
class CreateDataComponent(Component):
|
|
12
|
-
display_name: str = "Create Data"
|
|
13
|
-
description: str = "Dynamically create a Data with a specified number of fields."
|
|
14
|
-
name: str = "CreateData"
|
|
15
|
-
MAX_FIELDS = 15 # Define a constant for maximum number of fields
|
|
16
|
-
legacy = True
|
|
17
|
-
icon = "ListFilter"
|
|
18
|
-
|
|
19
|
-
inputs = [
|
|
20
|
-
IntInput(
|
|
21
|
-
name="number_of_fields",
|
|
22
|
-
display_name="Number of Fields",
|
|
23
|
-
info="Number of fields to be added to the record.",
|
|
24
|
-
real_time_refresh=True,
|
|
25
|
-
value=1,
|
|
26
|
-
range_spec=RangeSpec(min=1, max=MAX_FIELDS, step=1, step_type="int"),
|
|
27
|
-
),
|
|
28
|
-
MessageTextInput(
|
|
29
|
-
name="text_key",
|
|
30
|
-
display_name="Text Key",
|
|
31
|
-
info="Key that identifies the field to be used as the text content.",
|
|
32
|
-
advanced=True,
|
|
33
|
-
),
|
|
34
|
-
BoolInput(
|
|
35
|
-
name="text_key_validator",
|
|
36
|
-
display_name="Text Key Validator",
|
|
37
|
-
advanced=True,
|
|
38
|
-
info="If enabled, checks if the given 'Text Key' is present in the given 'Data'.",
|
|
39
|
-
),
|
|
40
|
-
]
|
|
41
|
-
|
|
42
|
-
outputs = [
|
|
43
|
-
Output(display_name="Data", name="data", method="build_data"),
|
|
44
|
-
]
|
|
45
|
-
|
|
46
|
-
def update_build_config(self, build_config: dotdict, field_value: Any, field_name: str | None = None):
|
|
47
|
-
if field_name == "number_of_fields":
|
|
48
|
-
default_keys = ["code", "_type", "number_of_fields", "text_key", "text_key_validator"]
|
|
49
|
-
try:
|
|
50
|
-
field_value_int = int(field_value)
|
|
51
|
-
except ValueError:
|
|
52
|
-
return build_config
|
|
53
|
-
existing_fields = {}
|
|
54
|
-
if field_value_int > self.MAX_FIELDS:
|
|
55
|
-
build_config["number_of_fields"]["value"] = self.MAX_FIELDS
|
|
56
|
-
msg = (
|
|
57
|
-
f"Number of fields cannot exceed {self.MAX_FIELDS}. "
|
|
58
|
-
"Please adjust the number of fields to be within the allowed limit."
|
|
59
|
-
)
|
|
60
|
-
raise ValueError(msg)
|
|
61
|
-
if len(build_config) > len(default_keys):
|
|
62
|
-
# back up the existing template fields
|
|
63
|
-
for key in build_config.copy():
|
|
64
|
-
if key not in default_keys:
|
|
65
|
-
existing_fields[key] = build_config.pop(key)
|
|
66
|
-
|
|
67
|
-
for i in range(1, field_value_int + 1):
|
|
68
|
-
key = f"field_{i}_key"
|
|
69
|
-
if key in existing_fields:
|
|
70
|
-
field = existing_fields[key]
|
|
71
|
-
build_config[key] = field
|
|
72
|
-
else:
|
|
73
|
-
field = DictInput(
|
|
74
|
-
display_name=f"Field {i}",
|
|
75
|
-
name=key,
|
|
76
|
-
info=f"Key for field {i}.",
|
|
77
|
-
input_types=["Message", "Data"],
|
|
78
|
-
)
|
|
79
|
-
build_config[field.name] = field.to_dict()
|
|
80
|
-
|
|
81
|
-
build_config["number_of_fields"]["value"] = field_value_int
|
|
82
|
-
return build_config
|
|
83
|
-
|
|
84
|
-
async def build_data(self) -> Data:
|
|
85
|
-
data = self.get_data()
|
|
86
|
-
return_data = Data(data=data, text_key=self.text_key)
|
|
87
|
-
self.status = return_data
|
|
88
|
-
if self.text_key_validator:
|
|
89
|
-
self.validate_text_key()
|
|
90
|
-
return return_data
|
|
91
|
-
|
|
92
|
-
def get_data(self):
|
|
93
|
-
"""Function to get the Data from the attributes."""
|
|
94
|
-
data = {}
|
|
95
|
-
for value_dict in self._attributes.values():
|
|
96
|
-
if isinstance(value_dict, dict):
|
|
97
|
-
# Check if the value of the value_dict is a Data
|
|
98
|
-
value_dict_ = {
|
|
99
|
-
key: value.get_text() if isinstance(value, Data) else value for key, value in value_dict.items()
|
|
100
|
-
}
|
|
101
|
-
data.update(value_dict_)
|
|
102
|
-
return data
|
|
103
|
-
|
|
104
|
-
def validate_text_key(self) -> None:
|
|
105
|
-
"""This function validates that the Text Key is one of the keys in the Data."""
|
|
106
|
-
data_keys = self.get_data().keys()
|
|
107
|
-
if self.text_key not in data_keys and self.text_key != "":
|
|
108
|
-
formatted_data_keys = ", ".join(data_keys)
|
|
109
|
-
msg = f"Text Key: '{self.text_key}' not found in the Data keys: '{formatted_data_keys}'"
|
|
110
|
-
raise ValueError(msg)
|