langflow-base-nightly 0.5.1.dev3__py3-none-any.whl → 0.5.1.dev5__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- langflow/__init__.py +215 -0
- langflow/__main__.py +16 -2
- langflow/alembic/versions/006b3990db50_add_unique_constraints.py +4 -7
- langflow/alembic/versions/012fb73ac359_add_folder_table.py +4 -5
- langflow/alembic/versions/0ae3a2674f32_update_the_columns_that_need_to_change_.py +11 -20
- langflow/alembic/versions/0b8757876a7c_.py +4 -7
- langflow/alembic/versions/0d60fcbd4e8e_create_vertex_builds_table.py +4 -6
- langflow/alembic/versions/1a110b568907_replace_credential_table_with_variable.py +4 -5
- langflow/alembic/versions/1b8b740a6fa3_remove_fk_constraint_in_message_.py +32 -27
- langflow/alembic/versions/1c79524817ed_add_unique_constraints_per_user_in_.py +4 -5
- langflow/alembic/versions/1d90f8a0efe1_update_description_columns_type.py +4 -5
- langflow/alembic/versions/1eab2c3eb45e_event_error.py +14 -15
- langflow/alembic/versions/1ef9c4f3765d_.py +5 -10
- langflow/alembic/versions/1f4d6df60295_add_default_fields_column.py +4 -5
- langflow/alembic/versions/260dbcc8b680_adds_tables.py +4 -5
- langflow/alembic/versions/29fe8f1f806b_add_missing_index.py +4 -5
- langflow/alembic/versions/2ac71eb9c3ae_adds_credential_table.py +4 -7
- langflow/alembic/versions/3bb0ddf32dfb_add_unique_constraints_per_user_in_flow_.py +4 -5
- langflow/alembic/versions/4e5980a44eaa_fix_date_times_again.py +1 -2
- langflow/alembic/versions/58b28437a398_modify_nullable.py +1 -2
- langflow/alembic/versions/5ace73a7f223_new_remove_table_upgrade_op.py +6 -12
- langflow/alembic/versions/631faacf5da2_add_webhook_columns.py +4 -5
- langflow/alembic/versions/63b9c451fd30_add_icon_and_icon_bg_color_to_flow.py +4 -5
- langflow/alembic/versions/66f72f04a1de_add_mcp_support_with_project_settings_.py +21 -23
- langflow/alembic/versions/67cc006d50bf_add_profile_image_column.py +4 -5
- langflow/alembic/versions/6e7b581b5648_fix_nullable.py +4 -5
- langflow/alembic/versions/7843803a87b5_store_updates.py +4 -6
- langflow/alembic/versions/79e675cb6752_change_datetime_type.py +1 -2
- langflow/alembic/versions/7d2162acc8b2_adds_updated_at_and_folder_cols.py +4 -10
- langflow/alembic/versions/90be8e2ed91e_create_transactions_table.py +4 -6
- langflow/alembic/versions/93e2705fa8d6_add_column_save_path_to_flow.py +7 -9
- langflow/alembic/versions/a72f5cf9c2f9_add_endpoint_name_col.py +4 -5
- langflow/alembic/versions/b2fa308044b5_add_unique_constraints.py +1 -2
- langflow/alembic/versions/bc2f01c40e4a_new_fixes.py +4 -5
- langflow/alembic/versions/c153816fd85f_set_name_and_value_to_not_nullable.py +4 -5
- langflow/alembic/versions/d066bfd22890_add_message_table.py +4 -4
- langflow/alembic/versions/d2d475a1f7c0_add_tags_column_to_flow.py +12 -13
- langflow/alembic/versions/d3dbf656a499_add_gradient_column_in_flow.py +12 -12
- langflow/alembic/versions/d9a6ea21edcd_rename_default_folder.py +7 -10
- langflow/alembic/versions/dd9e0804ebd1_add_v2_file_table.py +8 -7
- langflow/alembic/versions/e3162c1804e6_add_persistent_locked_state.py +10 -10
- langflow/alembic/versions/e3bc869fa272_fix_nullable.py +4 -5
- langflow/alembic/versions/e56d87f8994a_add_optins_column_to_user.py +13 -14
- langflow/alembic/versions/e5a65ecff2cd_nullable_in_vertex_build.py +4 -5
- langflow/alembic/versions/eb5866d51fd2_change_columns_to_be_nullable.py +4 -5
- langflow/alembic/versions/eb5e72293a8e_add_error_and_edit_flags_to_message.py +4 -5
- langflow/alembic/versions/f3b2d1f1002d_add_column_access_type_to_flow.py +19 -15
- langflow/alembic/versions/f5ee9749d1a6_user_id_can_be_null_in_flow.py +4 -6
- langflow/alembic/versions/fd531f8868b1_fix_credential_table.py +5 -8
- langflow/api/build.py +5 -4
- langflow/api/health_check_router.py +1 -1
- langflow/api/limited_background_tasks.py +1 -1
- langflow/api/log_router.py +1 -2
- langflow/api/utils.py +2 -2
- langflow/api/v1/base.py +1 -2
- langflow/api/v1/callback.py +4 -9
- langflow/api/v1/chat.py +6 -7
- langflow/api/v1/endpoints.py +15 -15
- langflow/api/v1/files.py +1 -1
- langflow/api/v1/flows.py +1 -1
- langflow/api/v1/knowledge_bases.py +1 -1
- langflow/api/v1/mcp.py +1 -1
- langflow/api/v1/mcp_projects.py +14 -5
- langflow/api/v1/mcp_utils.py +3 -3
- langflow/api/v1/openai_responses.py +4 -4
- langflow/api/v1/schemas.py +3 -38
- langflow/api/v1/starter_projects.py +61 -3
- langflow/api/v1/store.py +1 -1
- langflow/api/v1/validate.py +3 -3
- langflow/api/v1/voice_mode.py +2 -2
- langflow/api/v2/files.py +1 -1
- langflow/api/v2/mcp.py +2 -2
- langflow/base/__init__.py +11 -0
- langflow/base/agents/__init__.py +3 -0
- langflow/base/data/__init__.py +2 -4
- langflow/base/data/utils.py +2 -197
- langflow/base/embeddings/__init__.py +3 -0
- langflow/base/io/__init__.py +7 -0
- langflow/base/io/chat.py +5 -18
- langflow/base/io/text.py +2 -21
- langflow/base/knowledge_bases/__init__.py +3 -0
- langflow/base/memory/__init__.py +3 -0
- langflow/base/models/__init__.py +2 -2
- langflow/base/models/openai_constants.py +6 -120
- langflow/base/prompts/__init__.py +3 -0
- langflow/base/prompts/api_utils.py +2 -223
- langflow/base/textsplitters/__init__.py +3 -0
- langflow/base/tools/__init__.py +3 -0
- langflow/base/vectorstores/__init__.py +3 -0
- langflow/components/__init__.py +7 -259
- langflow/components/agents.py +6 -0
- langflow/components/anthropic.py +6 -0
- langflow/components/data.py +6 -0
- langflow/components/helpers.py +6 -0
- langflow/components/knowledge_bases/ingestion.py +13 -14
- langflow/components/knowledge_bases/retrieval.py +8 -7
- langflow/components/openai.py +6 -0
- langflow/components/processing/__init__.py +1 -117
- langflow/components/processing/converter.py +3 -149
- langflow/custom/__init__.py +26 -3
- langflow/custom/custom_component/__init__.py +4 -0
- langflow/custom/custom_component/component.py +20 -1738
- langflow/custom/custom_component/component_with_cache.py +1 -8
- langflow/custom/custom_component/custom_component.py +1 -552
- langflow/custom/utils.py +1 -872
- langflow/custom/validate.py +1 -0
- langflow/events/event_manager.py +18 -108
- langflow/field_typing/__init__.py +6 -6
- langflow/field_typing/constants.py +87 -122
- langflow/field_typing/range_spec.py +2 -32
- langflow/frontend/assets/{SlackIcon-Cc7Qnzki.js → SlackIcon-v88osOTA.js} +1 -1
- langflow/frontend/assets/{Wikipedia-7ulMZY46.js → Wikipedia-DD_S2k00.js} +1 -1
- langflow/frontend/assets/{Wolfram-By9PGsHS.js → Wolfram-EO2C5noN.js} +1 -1
- langflow/frontend/assets/{index-DVLIDc2_.js → index-1Gv1mfvk.js} +1 -1
- langflow/frontend/assets/{index-MVW4HTEk.js → index-7v-bzlzf.js} +1 -1
- langflow/frontend/assets/{index-CUzlcce2.js → index-9CbMazbV.js} +1 -1
- langflow/frontend/assets/{index-CU16NJD7.js → index-B8ZHP8g2.js} +1 -1
- langflow/frontend/assets/{index-v8eXbWlM.js → index-B8y2e6vN.js} +1 -1
- langflow/frontend/assets/{index-BX_asvRB.js → index-BBRUGsyr.js} +1 -1
- langflow/frontend/assets/{index-9FL5xjkL.js → index-BGwqQwlh.js} +1 -1
- langflow/frontend/assets/{index-BAn-AzCS.js → index-BIq-k-FG.js} +1 -1
- langflow/frontend/assets/{index-D5c2nNvp.js → index-BSN73YP8.js} +1 -1
- langflow/frontend/assets/{index-DMCerPJM.js → index-BU8R8jRn.js} +1 -1
- langflow/frontend/assets/{index-CvSoff-8.js → index-BV6yx8ey.js} +1 -1
- langflow/frontend/assets/{index-BISPW-f6.js → index-BYIsg-Eh.js} +1 -1
- langflow/frontend/assets/{index-GzOGB_fo.js → index-B_ksDBSQ.js} +1 -1
- langflow/frontend/assets/{index-BIqEYjNT.js → index-Ba1UOZ9A.js} +1 -1
- langflow/frontend/assets/{index-ByxGmq5p.js → index-Ba9tKRQg.js} +1 -1
- langflow/frontend/assets/{index-BLEWsL1U.js → index-Bbfaw8ca.js} +1 -1
- langflow/frontend/assets/{index-C_MhBX6R.js → index-BbuGqvAx.js} +1 -1
- langflow/frontend/assets/{index-RH_I78z_.js → index-BeoXu1YX.js} +1 -1
- langflow/frontend/assets/{index-cYFKmtmg.js → index-BfjZmOnH.js} +1 -1
- langflow/frontend/assets/{index-Bm9i8F4W.js → index-Bjzy_HZB.js} +1 -1
- langflow/frontend/assets/{index-_szO7sta.js → index-BofEkpYB.js} +1 -1
- langflow/frontend/assets/{index-DP1oE6QB.js → index-Bp7Mty2H.js} +1 -1
- langflow/frontend/assets/{index-CeswGUz3.js → index-BqX1H6yK.js} +1 -1
- langflow/frontend/assets/{index-C8pI0lzi.js → index-BqtBAJAN.js} +1 -1
- langflow/frontend/assets/{index-BusCv3bR.js → index-Bsfraj7A.js} +1 -1
- langflow/frontend/assets/{index-BWnKMRFJ.js → index-BtFl7fER.js} +1 -1
- langflow/frontend/assets/{index-DnlVWWU8.js → index-BvX993Sv.js} +1 -1
- langflow/frontend/assets/{index-C676MS3I.js → index-BvgQ2vzM.js} +1 -1
- langflow/frontend/assets/{index-DJ6HD14g.js → index-BwY98u8n.js} +1 -1
- langflow/frontend/assets/{index-C51yNvIL.js → index-C-RIJAOS.js} +1 -1
- langflow/frontend/assets/{index-DiblXWmk.js → index-C1K6A38P.js} +1 -1
- langflow/frontend/assets/{index-Co__gFM1.js → index-C3Vwhx0t.js} +1 -1
- langflow/frontend/assets/{index-Coi86oqP.js → index-C5XUG_gr.js} +1 -1
- langflow/frontend/assets/{index-jwzN3Jd_.js → index-C6ouLG9o.js} +1 -1
- langflow/frontend/assets/{index-CQQ-4XMS.js → index-C7ZJ_Z6f.js} +1 -1
- langflow/frontend/assets/{index-Bl7RpmrB.js → index-CCOGIwGY.js} +1 -1
- langflow/frontend/assets/{index-CVkIdc6y.js → index-CCcye2rt.js} +1 -1
- langflow/frontend/assets/{index-bMhyLtgS.js → index-CFR4yJQB.js} +1 -1
- langflow/frontend/assets/{index-aAgSKWb3.js → index-CIGmPP0H.js} +1 -1
- langflow/frontend/assets/{index-BGt6jQ4x.js → index-CJmMEa6d.js} +1 -1
- langflow/frontend/assets/{index-DX7JcSMz.js → index-CJxD7lyU.js} +1 -1
- langflow/frontend/assets/{index-BZ-A4K98.js → index-CL_vu6ut.js} +1 -1
- langflow/frontend/assets/{index-BMpKFGhI.js → index-COf3UnBn.js} +1 -1
- langflow/frontend/assets/{index-xN8ogFdo.js → index-CV9650h_.js} +1 -1
- langflow/frontend/assets/{index-OsUvqIUr.js → index-CVDzych0.js} +1 -1
- langflow/frontend/assets/{index-BH7AyHxp.js → index-CWIHsC4D.js} +1 -1
- langflow/frontend/assets/{index-mjwtJmkP.js → index-CXCnFZ0L.js} +1 -1
- langflow/frontend/assets/{index-3jlSQi5Y.js → index-Ca_Pw_Dn.js} +1 -1
- langflow/frontend/assets/{index-D-SnFlhU.js → index-Cbb3bX9e.js} +1 -1
- langflow/frontend/assets/{index--e0oQqZh.js → index-CcJtOz-Z.js} +1 -1
- langflow/frontend/assets/{index-S-sc0Cm9.js → index-CfTbTHEv.js} +1 -1
- langflow/frontend/assets/{index-Deu8rlaZ.js → index-ChoxDAgX.js} +1 -1
- langflow/frontend/assets/{index-lnF9Eqr2.js → index-Cn4gw8aE.js} +1 -1
- langflow/frontend/assets/{index-C_NwzK6j.js → index-CnpLg4zX.js} +1 -1
- langflow/frontend/assets/{index-DznH7Jbq.js → index-Cpao2omG.js} +1 -1
- langflow/frontend/assets/{index-DpWrk8mA.js → index-CqoxM01j.js} +1 -1
- langflow/frontend/assets/{index-Bw-TIIC6.js → index-CrHf2Ic1.js} +1 -1
- langflow/frontend/assets/{index-DmYLDQag.js → index-CrV0uIjp.js} +1 -1
- langflow/frontend/assets/{index-Dp7ZQyL3.js → index-CssADaak.js} +1 -1
- langflow/frontend/assets/{index-CNh0rwur.js → index-CtJdNLy9.js} +1 -1
- langflow/frontend/assets/{index-Ca1b7Iag.js → index-CyeWD2dh.js} +1 -1
- langflow/frontend/assets/{index-DcApTyZ7.js → index-D1xzD7uc.js} +1 -1
- langflow/frontend/assets/{index-B3GvPjhD.js → index-D6MuXC4L.js} +1 -1
- langflow/frontend/assets/{index-Cw0UComa.js → index-D8w9zvIF.js} +1 -1
- langflow/frontend/assets/{index-C-2MRYoJ.js → index-D98Gn0A6.js} +1 -1
- langflow/frontend/assets/{index-aWnZIwHd.js → index-DBhjpWkf.js} +1 -1
- langflow/frontend/assets/{index-nw3WF9lY.js → index-DCCRJzcY.js} +1 -1
- langflow/frontend/assets/{index-RjeC0kaX.js → index-DCTRSkEW.js} +1 -1
- langflow/frontend/assets/{index-B_kBTgxV.js → index-DCUfitVj.js} +1 -1
- langflow/frontend/assets/{index-ChsGhZn3.js → index-DDdz-Xcl.js} +1 -1
- langflow/frontend/assets/{index-7yAHPRxv.js → index-DGdMwZjG.js} +1 -1
- langflow/frontend/assets/{index-DjQElpEg.js → index-DGtl2vMw.js} +1 -1
- langflow/frontend/assets/{index-BCXhKCOK.js → index-DHVdkrni.js} +1 -1
- langflow/frontend/assets/{index-S8uJXTOq.js → index-DJBWwjgl.js} +1 -1
- langflow/frontend/assets/{index-qiVTWUuf.js → index-DMAkJ_qX.js} +1 -1
- langflow/frontend/assets/{index-D-WStJI6.js → index-DMEvEQI5.js} +1 -1
- langflow/frontend/assets/{index-BhqVw9WQ.js → index-DNGRoOsp.js} +1 -1
- langflow/frontend/assets/{index-Cu7vC48Y.js → index-DNT_TUTa.js} +1 -1
- langflow/frontend/assets/{index-Bhcv5M0n.js → index-DQKOH_9K.js} +1 -1
- langflow/frontend/assets/{index-CLcaktde.js → index-DQhqqtqQ.js} +1 -1
- langflow/frontend/assets/{index-DZVgPCio.js → index-DRM7KKnG.js} +1 -1
- langflow/frontend/assets/{index-uybez8MR.js → index-DSCtl3a5.js} +1 -1
- langflow/frontend/assets/{index-CJ5A6STv.js → index-DSLNlm0Z.js} +1 -1
- langflow/frontend/assets/{index-Drg8me2a.js → index-DT-PspE-.js} +1 -1
- langflow/frontend/assets/{index-DsEZjOcp.js → index-DTpbH-p8.js} +1 -1
- langflow/frontend/assets/{index-DrXXKzpD.js → index-DWV6MsIq.js} +1 -1
- langflow/frontend/assets/{index-4JIEdyIM.js → index-DWeL4US_.js} +1 -1
- langflow/frontend/assets/{index-BlDsBQ_1.js → index-DYKZHhpU.js} +1 -1
- langflow/frontend/assets/{index-DFY8YFbC.js → index-DZyQHiMR.js} +1 -1
- langflow/frontend/assets/{index-CKPZpkQk.js → index-Dc6qVuSa.js} +1 -1
- langflow/frontend/assets/{index-yyAaYjLR.js → index-DkYuicnC.js} +1 -1
- langflow/frontend/assets/{index-DmVt5Jlx.js → index-Dlj_2mMs.js} +1 -1
- langflow/frontend/assets/{index-BvRIG6P5.js → index-DmGJUrEp.js} +1 -1
- langflow/frontend/assets/{index-BWFIrwW1.js → index-Dn6hpCAZ.js} +1 -1
- langflow/frontend/assets/{index-Cb5G9Ifd.js → index-DrJU8Fgb.js} +1 -1
- langflow/frontend/assets/{index-COoTCxvs.js → index-DsWfdCzp.js} +1 -1
- langflow/frontend/assets/{index-ZjeocHyu.js → index-DvCPWs2_.js} +1 -1
- langflow/frontend/assets/{index-B5LHnuQR.js → index-DvPVq7OP.js} +1 -1
- langflow/frontend/assets/{index-BnCnYnao.js → index-Dw71ufW4.js} +1 -1
- langflow/frontend/assets/{index-AALDfCyt.js → index-DxkJactf.js} +1 -1
- langflow/frontend/assets/{index-k9jP5chN.js → index-Dz2GTphU.js} +1 -1
- langflow/frontend/assets/{index-BdjfHsrf.js → index-Fvd524_c.js} +1 -1
- langflow/frontend/assets/{index-AKVkmT4S.js → index-GAQ0Mk2M.js} +1 -1
- langflow/frontend/assets/{index-BZSa2qz7.js → index-Hm5-4ItD.js} +1 -1
- langflow/frontend/assets/{index-DbfS_UH-.js → index-IT67FzsK.js} +1 -1
- langflow/frontend/assets/{index-BLXN681C.js → index-ItYiij1i.js} +1 -1
- langflow/frontend/assets/{index-CiklyQU3.js → index-IuR_FEdB.js} +1 -1
- langflow/frontend/assets/{index-xV6ystWy.js → index-Jj60FQkv.js} +1 -1
- langflow/frontend/assets/{index-C_157Mb-.js → index-LlvshmVz.js} +1 -1
- langflow/frontend/assets/{index-CDphUsa3.js → index-LwKh3I_W.js} +1 -1
- langflow/frontend/assets/{index-BrDz-PxE.js → index-N-xxmKKH.js} +1 -1
- langflow/frontend/assets/{index-BsdLyYMY.js → index-RwpaHIAH.js} +1 -1
- langflow/frontend/assets/{index-Cu2Xr6_j.js → index-TVvsp-xh.js} +1 -1
- langflow/frontend/assets/{index-CPiM2oyj.js → index-TdE2u9zP.js} +1 -1
- langflow/frontend/assets/{index-DOj_QWqG.js → index-_x-NkYeW.js} +1 -1
- langflow/frontend/assets/{index-YJsAl7vm.js → index-a-YclEbW.js} +1 -1
- langflow/frontend/assets/{index-5-CSw2-z.js → index-e9MFKUCo.js} +1 -1
- langflow/frontend/assets/{index-BSwBVwyF.js → index-krPr8f2F.js} +1 -1
- langflow/frontend/assets/{index-Df6psZEj.js → index-kveiUWuL.js} +1 -1
- langflow/frontend/assets/{index-CF4_Og1m.js → index-lE3oSjJi.js} +1 -1
- langflow/frontend/assets/{index-C6nzdeYx.js → index-lM3UYg7F.js} +1 -1
- langflow/frontend/assets/{index-C-wnbBBY.js → index-nsRk3qgA.js} +1 -1
- langflow/frontend/assets/{index-D234yKNJ.js → index-pBO0SZLD.js} +4 -4
- langflow/frontend/assets/{index-BMvp94tO.js → index-pbZHsbuE.js} +1 -1
- langflow/frontend/assets/{index-hg2y9OAt.js → index-sfX3aWyp.js} +1 -1
- langflow/frontend/assets/{index-DTCrijba.js → index-xQz-VJ0-.js} +1 -1
- langflow/frontend/assets/{index-SB4rw8D5.js → index-yfcsaHS6.js} +1 -1
- langflow/frontend/assets/{index-C-bjC2sz.js → index-zcGjo9fx.js} +1 -1
- langflow/frontend/assets/lazyIconImports-BjqDmNYG.js +2 -0
- langflow/frontend/assets/{use-post-add-user-JUeLDErC.js → use-post-add-user-w3vpKSOB.js} +1 -1
- langflow/frontend/index.html +1 -1
- langflow/graph/__init__.py +4 -4
- langflow/helpers/data.py +2 -2
- langflow/helpers/flow.py +9 -7
- langflow/helpers/user.py +2 -2
- langflow/initial_setup/setup.py +9 -9
- langflow/initial_setup/starter_projects/Basic Prompt Chaining.json +119 -41
- langflow/initial_setup/starter_projects/Basic Prompting.json +45 -19
- langflow/initial_setup/starter_projects/Blog Writer.json +53 -21
- langflow/initial_setup/starter_projects/Custom Component Generator.json +121 -97
- langflow/initial_setup/starter_projects/Document Q&A.json +46 -18
- langflow/initial_setup/starter_projects/Financial Report Parser.json +49 -17
- langflow/initial_setup/starter_projects/Hybrid Search RAG.json +89 -50
- langflow/initial_setup/starter_projects/Image Sentiment Analysis.json +86 -22
- langflow/initial_setup/starter_projects/Instagram Copywriter.json +210 -57
- langflow/initial_setup/starter_projects/Invoice Summarizer.json +132 -35
- langflow/initial_setup/starter_projects/Knowledge Ingestion.json +8 -8
- langflow/initial_setup/starter_projects/Knowledge Retrieval.json +8 -8
- langflow/initial_setup/starter_projects/Market Research.json +174 -48
- langflow/initial_setup/starter_projects/Meeting Summary.json +102 -38
- langflow/initial_setup/starter_projects/Memory Chatbot.json +49 -21
- langflow/initial_setup/starter_projects/News Aggregator.json +140 -39
- langflow/initial_setup/starter_projects/Nvidia Remix.json +153 -181
- langflow/initial_setup/starter_projects/Pok/303/251dex Agent.json" +132 -35
- langflow/initial_setup/starter_projects/Portfolio Website Code Generator.json +106 -43
- langflow/initial_setup/starter_projects/Price Deal Finder.json +136 -39
- langflow/initial_setup/starter_projects/Research Agent.json +206 -53
- langflow/initial_setup/starter_projects/Research Translation Loop.json +66 -34
- langflow/initial_setup/starter_projects/SEO Keyword Generator.json +41 -15
- langflow/initial_setup/starter_projects/SaaS Pricing.json +128 -31
- langflow/initial_setup/starter_projects/Search agent.json +132 -35
- langflow/initial_setup/starter_projects/Sequential Tasks Agents.json +422 -98
- langflow/initial_setup/starter_projects/Simple Agent.json +150 -42
- langflow/initial_setup/starter_projects/Social Media Agent.json +150 -42
- langflow/initial_setup/starter_projects/Text Sentiment Analysis.json +120 -24
- langflow/initial_setup/starter_projects/Travel Planning Agents.json +418 -94
- langflow/initial_setup/starter_projects/Twitter Thread Generator.json +69 -37
- langflow/initial_setup/starter_projects/Vector Store RAG.json +66 -38
- langflow/initial_setup/starter_projects/Youtube Analysis.json +191 -51
- langflow/initial_setup/starter_projects/basic_prompting.py +4 -4
- langflow/initial_setup/starter_projects/blog_writer.py +5 -5
- langflow/initial_setup/starter_projects/complex_agent.py +8 -8
- langflow/initial_setup/starter_projects/document_qa.py +5 -5
- langflow/initial_setup/starter_projects/hierarchical_tasks_agent.py +8 -8
- langflow/initial_setup/starter_projects/memory_chatbot.py +6 -6
- langflow/initial_setup/starter_projects/sequential_tasks_agent.py +7 -7
- langflow/initial_setup/starter_projects/vector_store_rag.py +8 -8
- langflow/inputs/__init__.py +3 -2
- langflow/inputs/constants.py +3 -2
- langflow/inputs/input_mixin.py +49 -310
- langflow/inputs/inputs.py +72 -703
- langflow/inputs/validators.py +2 -18
- langflow/interface/__init__.py +4 -0
- langflow/interface/components.py +3 -491
- langflow/interface/initialize/loading.py +7 -6
- langflow/interface/listing.py +3 -25
- langflow/interface/run.py +1 -1
- langflow/interface/utils.py +3 -111
- langflow/io/__init__.py +2 -2
- langflow/io/schema.py +11 -302
- langflow/load/__init__.py +4 -2
- langflow/load/utils.py +2 -96
- langflow/logging/__init__.py +2 -1
- langflow/logging/setup.py +1 -1
- langflow/main.py +8 -5
- langflow/memory.py +12 -6
- langflow/middleware.py +1 -1
- langflow/processing/process.py +7 -7
- langflow/schema/__init__.py +22 -5
- langflow/schema/artifact.py +1 -1
- langflow/schema/data.py +5 -303
- langflow/schema/dataframe.py +2 -205
- langflow/schema/graph.py +4 -45
- langflow/schema/image.py +2 -67
- langflow/schema/message.py +6 -470
- langflow/schema/playground_events.py +5 -6
- langflow/schema/schema.py +24 -117
- langflow/serialization/constants.py +3 -2
- langflow/serialization/serialization.py +1 -1
- langflow/server.py +1 -2
- langflow/services/__init__.py +1 -2
- langflow/services/auth/mcp_encryption.py +1 -1
- langflow/services/auth/service.py +1 -1
- langflow/services/auth/utils.py +5 -5
- langflow/services/cache/disk.py +2 -2
- langflow/services/cache/factory.py +2 -2
- langflow/services/cache/service.py +2 -2
- langflow/services/cache/utils.py +0 -11
- langflow/services/database/factory.py +1 -1
- langflow/services/database/models/flow/model.py +1 -1
- langflow/services/database/models/message/crud.py +2 -1
- langflow/services/database/models/transactions/crud.py +1 -1
- langflow/services/database/models/user/crud.py +1 -1
- langflow/services/database/service.py +2 -2
- langflow/services/database/utils.py +1 -2
- langflow/services/deps.py +12 -17
- langflow/services/enhanced_manager.py +71 -0
- langflow/services/factory.py +14 -7
- langflow/services/flow/flow_runner.py +4 -4
- langflow/services/job_queue/service.py +2 -1
- langflow/services/manager.py +14 -130
- langflow/services/schema.py +0 -1
- langflow/services/session/service.py +3 -2
- langflow/services/settings/__init__.py +0 -3
- langflow/services/settings/base.py +16 -549
- langflow/services/settings/factory.py +2 -21
- langflow/services/settings/feature_flags.py +2 -11
- langflow/services/settings/service.py +2 -31
- langflow/services/shared_component_cache/factory.py +1 -1
- langflow/services/socket/service.py +1 -1
- langflow/services/socket/utils.py +1 -8
- langflow/services/state/factory.py +1 -1
- langflow/services/state/service.py +3 -2
- langflow/services/storage/factory.py +2 -2
- langflow/services/storage/local.py +1 -2
- langflow/services/storage/s3.py +1 -2
- langflow/services/storage/service.py +2 -1
- langflow/services/store/factory.py +1 -1
- langflow/services/store/service.py +2 -2
- langflow/services/store/utils.py +1 -2
- langflow/services/task/service.py +2 -1
- langflow/services/task/temp_flow_cleanup.py +1 -1
- langflow/services/telemetry/factory.py +1 -1
- langflow/services/telemetry/service.py +2 -3
- langflow/services/tracing/arize_phoenix.py +3 -3
- langflow/services/tracing/base.py +1 -1
- langflow/services/tracing/factory.py +1 -1
- langflow/services/tracing/langfuse.py +2 -2
- langflow/services/tracing/langsmith.py +2 -2
- langflow/services/tracing/langwatch.py +4 -4
- langflow/services/tracing/opik.py +2 -2
- langflow/services/tracing/service.py +17 -11
- langflow/services/tracing/traceloop.py +2 -2
- langflow/services/tracing/utils.py +1 -1
- langflow/services/utils.py +54 -9
- langflow/services/variable/factory.py +1 -1
- langflow/services/variable/kubernetes.py +2 -3
- langflow/services/variable/kubernetes_secrets.py +1 -2
- langflow/services/variable/service.py +2 -3
- langflow/template/__init__.py +2 -9
- langflow/template/field/__init__.py +3 -0
- langflow/template/field/base.py +2 -256
- langflow/template/frontend_node.py +3 -0
- langflow/template/utils.py +2 -216
- langflow/utils/constants.py +28 -204
- langflow/utils/lazy_load.py +3 -14
- langflow/utils/schemas.py +2 -3
- langflow/utils/template_validation.py +2 -2
- langflow/utils/util.py +59 -479
- langflow/utils/validate.py +2 -488
- langflow/utils/voice_utils.py +1 -2
- langflow/worker.py +1 -1
- {langflow_base_nightly-0.5.1.dev3.dist-info → langflow_base_nightly-0.5.1.dev5.dist-info}/METADATA +2 -1
- langflow_base_nightly-0.5.1.dev5.dist-info/RECORD +633 -0
- langflow/base/agents/agent.py +0 -267
- langflow/base/agents/callback.py +0 -130
- langflow/base/agents/context.py +0 -109
- langflow/base/agents/crewai/__init__.py +0 -0
- langflow/base/agents/crewai/crew.py +0 -231
- langflow/base/agents/crewai/tasks.py +0 -12
- langflow/base/agents/default_prompts.py +0 -23
- langflow/base/agents/errors.py +0 -15
- langflow/base/agents/events.py +0 -346
- langflow/base/agents/utils.py +0 -205
- langflow/base/astra_assistants/__init__.py +0 -0
- langflow/base/astra_assistants/util.py +0 -171
- langflow/base/chains/__init__.py +0 -0
- langflow/base/chains/model.py +0 -19
- langflow/base/composio/__init__.py +0 -0
- langflow/base/composio/composio_base.py +0 -1297
- langflow/base/compressors/__init__.py +0 -0
- langflow/base/compressors/model.py +0 -60
- langflow/base/constants.py +0 -46
- langflow/base/curl/__init__.py +0 -0
- langflow/base/curl/parse.py +0 -188
- langflow/base/data/base_file.py +0 -685
- langflow/base/data/docling_utils.py +0 -245
- langflow/base/document_transformers/__init__.py +0 -0
- langflow/base/document_transformers/model.py +0 -43
- langflow/base/embeddings/aiml_embeddings.py +0 -62
- langflow/base/embeddings/model.py +0 -26
- langflow/base/flow_processing/__init__.py +0 -0
- langflow/base/flow_processing/utils.py +0 -86
- langflow/base/huggingface/__init__.py +0 -0
- langflow/base/huggingface/model_bridge.py +0 -133
- langflow/base/langchain_utilities/__init__.py +0 -0
- langflow/base/langchain_utilities/model.py +0 -35
- langflow/base/langchain_utilities/spider_constants.py +0 -1
- langflow/base/langwatch/__init__.py +0 -0
- langflow/base/langwatch/utils.py +0 -18
- langflow/base/mcp/__init__.py +0 -0
- langflow/base/mcp/constants.py +0 -2
- langflow/base/mcp/util.py +0 -1524
- langflow/base/memory/memory.py +0 -49
- langflow/base/memory/model.py +0 -38
- langflow/base/models/aiml_constants.py +0 -51
- langflow/base/models/anthropic_constants.py +0 -47
- langflow/base/models/aws_constants.py +0 -151
- langflow/base/models/chat_result.py +0 -76
- langflow/base/models/google_generative_ai_constants.py +0 -70
- langflow/base/models/groq_constants.py +0 -134
- langflow/base/models/model.py +0 -375
- langflow/base/models/model_input_constants.py +0 -299
- langflow/base/models/model_metadata.py +0 -41
- langflow/base/models/model_utils.py +0 -8
- langflow/base/models/novita_constants.py +0 -35
- langflow/base/models/ollama_constants.py +0 -49
- langflow/base/models/sambanova_constants.py +0 -18
- langflow/base/processing/__init__.py +0 -0
- langflow/base/prompts/utils.py +0 -61
- langflow/base/textsplitters/model.py +0 -28
- langflow/base/tools/base.py +0 -26
- langflow/base/tools/component_tool.py +0 -324
- langflow/base/tools/constants.py +0 -49
- langflow/base/tools/flow_tool.py +0 -131
- langflow/base/tools/run_flow.py +0 -227
- langflow/base/vectorstores/model.py +0 -193
- langflow/base/vectorstores/utils.py +0 -22
- langflow/base/vectorstores/vector_store_connection_decorator.py +0 -52
- langflow/components/FAISS/__init__.py +0 -34
- langflow/components/FAISS/faiss.py +0 -111
- langflow/components/Notion/__init__.py +0 -19
- langflow/components/Notion/add_content_to_page.py +0 -269
- langflow/components/Notion/create_page.py +0 -94
- langflow/components/Notion/list_database_properties.py +0 -68
- langflow/components/Notion/list_pages.py +0 -122
- langflow/components/Notion/list_users.py +0 -77
- langflow/components/Notion/page_content_viewer.py +0 -93
- langflow/components/Notion/search.py +0 -111
- langflow/components/Notion/update_page_property.py +0 -114
- langflow/components/_importing.py +0 -37
- langflow/components/agentql/__init__.py +0 -3
- langflow/components/agentql/agentql_api.py +0 -151
- langflow/components/agents/__init__.py +0 -4
- langflow/components/agents/agent.py +0 -554
- langflow/components/agents/mcp_component.py +0 -501
- langflow/components/aiml/__init__.py +0 -37
- langflow/components/aiml/aiml.py +0 -112
- langflow/components/aiml/aiml_embeddings.py +0 -37
- langflow/components/amazon/__init__.py +0 -36
- langflow/components/amazon/amazon_bedrock_embedding.py +0 -109
- langflow/components/amazon/amazon_bedrock_model.py +0 -124
- langflow/components/amazon/s3_bucket_uploader.py +0 -211
- langflow/components/anthropic/__init__.py +0 -34
- langflow/components/anthropic/anthropic.py +0 -187
- langflow/components/apify/__init__.py +0 -5
- langflow/components/apify/apify_actor.py +0 -325
- langflow/components/arxiv/__init__.py +0 -3
- langflow/components/arxiv/arxiv.py +0 -163
- langflow/components/assemblyai/__init__.py +0 -46
- langflow/components/assemblyai/assemblyai_get_subtitles.py +0 -83
- langflow/components/assemblyai/assemblyai_lemur.py +0 -183
- langflow/components/assemblyai/assemblyai_list_transcripts.py +0 -95
- langflow/components/assemblyai/assemblyai_poll_transcript.py +0 -72
- langflow/components/assemblyai/assemblyai_start_transcript.py +0 -188
- langflow/components/azure/__init__.py +0 -37
- langflow/components/azure/azure_openai.py +0 -95
- langflow/components/azure/azure_openai_embeddings.py +0 -83
- langflow/components/baidu/__init__.py +0 -32
- langflow/components/baidu/baidu_qianfan_chat.py +0 -113
- langflow/components/bing/__init__.py +0 -3
- langflow/components/bing/bing_search_api.py +0 -61
- langflow/components/cassandra/__init__.py +0 -40
- langflow/components/cassandra/cassandra.py +0 -264
- langflow/components/cassandra/cassandra_chat.py +0 -92
- langflow/components/cassandra/cassandra_graph.py +0 -238
- langflow/components/chains/__init__.py +0 -0
- langflow/components/chroma/__init__.py +0 -34
- langflow/components/chroma/chroma.py +0 -167
- langflow/components/cleanlab/__init__.py +0 -40
- langflow/components/cleanlab/cleanlab_evaluator.py +0 -157
- langflow/components/cleanlab/cleanlab_rag_evaluator.py +0 -254
- langflow/components/cleanlab/cleanlab_remediator.py +0 -131
- langflow/components/clickhouse/__init__.py +0 -34
- langflow/components/clickhouse/clickhouse.py +0 -135
- langflow/components/cloudflare/__init__.py +0 -32
- langflow/components/cloudflare/cloudflare.py +0 -81
- langflow/components/cohere/__init__.py +0 -40
- langflow/components/cohere/cohere_embeddings.py +0 -81
- langflow/components/cohere/cohere_models.py +0 -46
- langflow/components/cohere/cohere_rerank.py +0 -51
- langflow/components/composio/__init__.py +0 -73
- langflow/components/composio/composio_api.py +0 -268
- langflow/components/composio/dropbox_compnent.py +0 -11
- langflow/components/composio/github_composio.py +0 -11
- langflow/components/composio/gmail_composio.py +0 -38
- langflow/components/composio/googlecalendar_composio.py +0 -11
- langflow/components/composio/googlemeet_composio.py +0 -11
- langflow/components/composio/googletasks_composio.py +0 -8
- langflow/components/composio/linear_composio.py +0 -11
- langflow/components/composio/outlook_composio.py +0 -11
- langflow/components/composio/reddit_composio.py +0 -11
- langflow/components/composio/slack_composio.py +0 -11
- langflow/components/composio/slackbot_composio.py +0 -11
- langflow/components/composio/supabase_composio.py +0 -11
- langflow/components/composio/todoist_composio.py +0 -11
- langflow/components/composio/youtube_composio.py +0 -11
- langflow/components/confluence/__init__.py +0 -3
- langflow/components/confluence/confluence.py +0 -84
- langflow/components/couchbase/__init__.py +0 -34
- langflow/components/couchbase/couchbase.py +0 -102
- langflow/components/crewai/__init__.py +0 -49
- langflow/components/crewai/crewai.py +0 -107
- langflow/components/crewai/hierarchical_crew.py +0 -46
- langflow/components/crewai/hierarchical_task.py +0 -44
- langflow/components/crewai/sequential_crew.py +0 -52
- langflow/components/crewai/sequential_task.py +0 -73
- langflow/components/crewai/sequential_task_agent.py +0 -143
- langflow/components/custom_component/__init__.py +0 -34
- langflow/components/custom_component/custom_component.py +0 -31
- langflow/components/data/__init__.py +0 -25
- langflow/components/data/api_request.py +0 -545
- langflow/components/data/csv_to_data.py +0 -95
- langflow/components/data/directory.py +0 -113
- langflow/components/data/file.py +0 -586
- langflow/components/data/json_to_data.py +0 -98
- langflow/components/data/news_search.py +0 -164
- langflow/components/data/rss.py +0 -69
- langflow/components/data/sql_executor.py +0 -99
- langflow/components/data/url.py +0 -299
- langflow/components/data/web_search.py +0 -112
- langflow/components/data/webhook.py +0 -56
- langflow/components/datastax/__init__.py +0 -70
- langflow/components/datastax/astra_assistant_manager.py +0 -306
- langflow/components/datastax/astra_db.py +0 -69
- langflow/components/datastax/astra_vectorize.py +0 -124
- langflow/components/datastax/astradb_cql.py +0 -314
- langflow/components/datastax/astradb_graph.py +0 -319
- langflow/components/datastax/astradb_tool.py +0 -414
- langflow/components/datastax/astradb_vectorstore.py +0 -1285
- langflow/components/datastax/create_assistant.py +0 -58
- langflow/components/datastax/create_thread.py +0 -32
- langflow/components/datastax/dotenv.py +0 -35
- langflow/components/datastax/get_assistant.py +0 -37
- langflow/components/datastax/getenvvar.py +0 -30
- langflow/components/datastax/graph_rag.py +0 -141
- langflow/components/datastax/hcd.py +0 -314
- langflow/components/datastax/list_assistants.py +0 -25
- langflow/components/datastax/run.py +0 -89
- langflow/components/deactivated/__init__.py +0 -19
- langflow/components/deactivated/amazon_kendra.py +0 -66
- langflow/components/deactivated/chat_litellm_model.py +0 -158
- langflow/components/deactivated/code_block_extractor.py +0 -26
- langflow/components/deactivated/documents_to_data.py +0 -22
- langflow/components/deactivated/embed.py +0 -16
- langflow/components/deactivated/extract_key_from_data.py +0 -46
- langflow/components/deactivated/json_document_builder.py +0 -59
- langflow/components/deactivated/list_flows.py +0 -20
- langflow/components/deactivated/mcp_sse.py +0 -61
- langflow/components/deactivated/mcp_stdio.py +0 -62
- langflow/components/deactivated/merge_data.py +0 -93
- langflow/components/deactivated/message.py +0 -37
- langflow/components/deactivated/metal.py +0 -54
- langflow/components/deactivated/multi_query.py +0 -59
- langflow/components/deactivated/retriever.py +0 -43
- langflow/components/deactivated/selective_passthrough.py +0 -77
- langflow/components/deactivated/should_run_next.py +0 -40
- langflow/components/deactivated/split_text.py +0 -63
- langflow/components/deactivated/store_message.py +0 -24
- langflow/components/deactivated/sub_flow.py +0 -124
- langflow/components/deactivated/vectara_self_query.py +0 -76
- langflow/components/deactivated/vector_store.py +0 -24
- langflow/components/deepseek/__init__.py +0 -34
- langflow/components/deepseek/deepseek.py +0 -136
- langflow/components/docling/__init__.py +0 -43
- langflow/components/docling/chunk_docling_document.py +0 -186
- langflow/components/docling/docling_inline.py +0 -235
- langflow/components/docling/docling_remote.py +0 -193
- langflow/components/docling/export_docling_document.py +0 -117
- langflow/components/documentloaders/__init__.py +0 -0
- langflow/components/duckduckgo/__init__.py +0 -3
- langflow/components/duckduckgo/duck_duck_go_search_run.py +0 -92
- langflow/components/elastic/__init__.py +0 -37
- langflow/components/elastic/elasticsearch.py +0 -267
- langflow/components/elastic/opensearch.py +0 -243
- langflow/components/embeddings/__init__.py +0 -37
- langflow/components/embeddings/similarity.py +0 -76
- langflow/components/embeddings/text_embedder.py +0 -64
- langflow/components/exa/__init__.py +0 -3
- langflow/components/exa/exa_search.py +0 -68
- langflow/components/firecrawl/__init__.py +0 -43
- langflow/components/firecrawl/firecrawl_crawl_api.py +0 -88
- langflow/components/firecrawl/firecrawl_extract_api.py +0 -136
- langflow/components/firecrawl/firecrawl_map_api.py +0 -89
- langflow/components/firecrawl/firecrawl_scrape_api.py +0 -73
- langflow/components/git/__init__.py +0 -4
- langflow/components/git/git.py +0 -262
- langflow/components/git/gitextractor.py +0 -196
- langflow/components/glean/__init__.py +0 -3
- langflow/components/glean/glean_search_api.py +0 -173
- langflow/components/google/__init__.py +0 -17
- langflow/components/google/gmail.py +0 -192
- langflow/components/google/google_bq_sql_executor.py +0 -157
- langflow/components/google/google_drive.py +0 -92
- langflow/components/google/google_drive_search.py +0 -152
- langflow/components/google/google_generative_ai.py +0 -147
- langflow/components/google/google_generative_ai_embeddings.py +0 -141
- langflow/components/google/google_oauth_token.py +0 -89
- langflow/components/google/google_search_api_core.py +0 -68
- langflow/components/google/google_serper_api_core.py +0 -74
- langflow/components/groq/__init__.py +0 -34
- langflow/components/groq/groq.py +0 -140
- langflow/components/helpers/__init__.py +0 -52
- langflow/components/helpers/calculator_core.py +0 -89
- langflow/components/helpers/create_list.py +0 -40
- langflow/components/helpers/current_date.py +0 -42
- langflow/components/helpers/id_generator.py +0 -42
- langflow/components/helpers/memory.py +0 -251
- langflow/components/helpers/output_parser.py +0 -45
- langflow/components/helpers/store_message.py +0 -90
- langflow/components/homeassistant/__init__.py +0 -7
- langflow/components/homeassistant/home_assistant_control.py +0 -152
- langflow/components/homeassistant/list_home_assistant_states.py +0 -137
- langflow/components/huggingface/__init__.py +0 -37
- langflow/components/huggingface/huggingface.py +0 -197
- langflow/components/huggingface/huggingface_inference_api.py +0 -106
- langflow/components/ibm/__init__.py +0 -34
- langflow/components/ibm/watsonx.py +0 -203
- langflow/components/ibm/watsonx_embeddings.py +0 -135
- langflow/components/icosacomputing/__init__.py +0 -5
- langflow/components/icosacomputing/combinatorial_reasoner.py +0 -84
- langflow/components/input_output/__init__.py +0 -38
- langflow/components/input_output/chat.py +0 -120
- langflow/components/input_output/chat_output.py +0 -200
- langflow/components/input_output/text.py +0 -27
- langflow/components/input_output/text_output.py +0 -29
- langflow/components/jigsawstack/__init__.py +0 -23
- langflow/components/jigsawstack/ai_scrape.py +0 -126
- langflow/components/jigsawstack/ai_web_search.py +0 -136
- langflow/components/jigsawstack/file_read.py +0 -115
- langflow/components/jigsawstack/file_upload.py +0 -94
- langflow/components/jigsawstack/image_generation.py +0 -205
- langflow/components/jigsawstack/nsfw.py +0 -60
- langflow/components/jigsawstack/object_detection.py +0 -124
- langflow/components/jigsawstack/sentiment.py +0 -112
- langflow/components/jigsawstack/text_to_sql.py +0 -90
- langflow/components/jigsawstack/text_translate.py +0 -77
- langflow/components/jigsawstack/vocr.py +0 -107
- langflow/components/langchain_utilities/__init__.py +0 -109
- langflow/components/langchain_utilities/character.py +0 -53
- langflow/components/langchain_utilities/conversation.py +0 -52
- langflow/components/langchain_utilities/csv_agent.py +0 -107
- langflow/components/langchain_utilities/fake_embeddings.py +0 -26
- langflow/components/langchain_utilities/html_link_extractor.py +0 -35
- langflow/components/langchain_utilities/json_agent.py +0 -45
- langflow/components/langchain_utilities/langchain_hub.py +0 -126
- langflow/components/langchain_utilities/language_recursive.py +0 -49
- langflow/components/langchain_utilities/language_semantic.py +0 -138
- langflow/components/langchain_utilities/llm_checker.py +0 -39
- langflow/components/langchain_utilities/llm_math.py +0 -42
- langflow/components/langchain_utilities/natural_language.py +0 -61
- langflow/components/langchain_utilities/openai_tools.py +0 -53
- langflow/components/langchain_utilities/openapi.py +0 -48
- langflow/components/langchain_utilities/recursive_character.py +0 -60
- langflow/components/langchain_utilities/retrieval_qa.py +0 -83
- langflow/components/langchain_utilities/runnable_executor.py +0 -137
- langflow/components/langchain_utilities/self_query.py +0 -80
- langflow/components/langchain_utilities/spider.py +0 -142
- langflow/components/langchain_utilities/sql.py +0 -40
- langflow/components/langchain_utilities/sql_database.py +0 -35
- langflow/components/langchain_utilities/sql_generator.py +0 -78
- langflow/components/langchain_utilities/tool_calling.py +0 -59
- langflow/components/langchain_utilities/vector_store_info.py +0 -49
- langflow/components/langchain_utilities/vector_store_router.py +0 -33
- langflow/components/langchain_utilities/xml_agent.py +0 -71
- langflow/components/langwatch/__init__.py +0 -3
- langflow/components/langwatch/langwatch.py +0 -278
- langflow/components/link_extractors/__init__.py +0 -0
- langflow/components/lmstudio/__init__.py +0 -34
- langflow/components/lmstudio/lmstudioembeddings.py +0 -89
- langflow/components/lmstudio/lmstudiomodel.py +0 -129
- langflow/components/logic/__init__.py +0 -52
- langflow/components/logic/conditional_router.py +0 -171
- langflow/components/logic/data_conditional_router.py +0 -125
- langflow/components/logic/flow_tool.py +0 -110
- langflow/components/logic/listen.py +0 -29
- langflow/components/logic/loop.py +0 -125
- langflow/components/logic/notify.py +0 -88
- langflow/components/logic/pass_message.py +0 -35
- langflow/components/logic/run_flow.py +0 -71
- langflow/components/logic/sub_flow.py +0 -114
- langflow/components/maritalk/__init__.py +0 -32
- langflow/components/maritalk/maritalk.py +0 -52
- langflow/components/mem0/__init__.py +0 -3
- langflow/components/mem0/mem0_chat_memory.py +0 -136
- langflow/components/milvus/__init__.py +0 -34
- langflow/components/milvus/milvus.py +0 -115
- langflow/components/mistral/__init__.py +0 -37
- langflow/components/mistral/mistral.py +0 -114
- langflow/components/mistral/mistral_embeddings.py +0 -58
- langflow/components/models/__init__.py +0 -34
- langflow/components/models/embedding_model.py +0 -114
- langflow/components/models/language_model.py +0 -144
- langflow/components/mongodb/__init__.py +0 -34
- langflow/components/mongodb/mongodb_atlas.py +0 -213
- langflow/components/needle/__init__.py +0 -3
- langflow/components/needle/needle.py +0 -104
- langflow/components/notdiamond/__init__.py +0 -36
- langflow/components/notdiamond/notdiamond.py +0 -228
- langflow/components/novita/__init__.py +0 -32
- langflow/components/novita/novita.py +0 -130
- langflow/components/nvidia/__init__.py +0 -57
- langflow/components/nvidia/nvidia.py +0 -157
- langflow/components/nvidia/nvidia_embedding.py +0 -77
- langflow/components/nvidia/nvidia_ingest.py +0 -317
- langflow/components/nvidia/nvidia_rerank.py +0 -63
- langflow/components/nvidia/system_assist.py +0 -65
- langflow/components/olivya/__init__.py +0 -3
- langflow/components/olivya/olivya.py +0 -116
- langflow/components/ollama/__init__.py +0 -37
- langflow/components/ollama/ollama.py +0 -330
- langflow/components/ollama/ollama_embeddings.py +0 -106
- langflow/components/openai/__init__.py +0 -37
- langflow/components/openai/openai.py +0 -100
- langflow/components/openai/openai_chat_model.py +0 -158
- langflow/components/openrouter/__init__.py +0 -32
- langflow/components/openrouter/openrouter.py +0 -202
- langflow/components/output_parsers/__init__.py +0 -0
- langflow/components/perplexity/__init__.py +0 -34
- langflow/components/perplexity/perplexity.py +0 -75
- langflow/components/pgvector/__init__.py +0 -34
- langflow/components/pgvector/pgvector.py +0 -72
- langflow/components/pinecone/__init__.py +0 -34
- langflow/components/pinecone/pinecone.py +0 -134
- langflow/components/processing/alter_metadata.py +0 -108
- langflow/components/processing/batch_run.py +0 -205
- langflow/components/processing/combine_text.py +0 -39
- langflow/components/processing/create_data.py +0 -110
- langflow/components/processing/data_operations.py +0 -438
- langflow/components/processing/data_to_dataframe.py +0 -70
- langflow/components/processing/dataframe_operations.py +0 -321
- langflow/components/processing/extract_key.py +0 -53
- langflow/components/processing/filter_data.py +0 -42
- langflow/components/processing/filter_data_values.py +0 -88
- langflow/components/processing/json_cleaner.py +0 -103
- langflow/components/processing/lambda_filter.py +0 -154
- langflow/components/processing/llm_router.py +0 -499
- langflow/components/processing/merge_data.py +0 -90
- langflow/components/processing/message_to_data.py +0 -36
- langflow/components/processing/parse_data.py +0 -70
- langflow/components/processing/parse_dataframe.py +0 -68
- langflow/components/processing/parse_json_data.py +0 -90
- langflow/components/processing/parser.py +0 -143
- langflow/components/processing/prompt.py +0 -67
- langflow/components/processing/python_repl_core.py +0 -98
- langflow/components/processing/regex.py +0 -82
- langflow/components/processing/save_file.py +0 -208
- langflow/components/processing/select_data.py +0 -48
- langflow/components/processing/split_text.py +0 -141
- langflow/components/processing/structured_output.py +0 -202
- langflow/components/processing/update_data.py +0 -160
- langflow/components/prototypes/__init__.py +0 -34
- langflow/components/prototypes/python_function.py +0 -73
- langflow/components/qdrant/__init__.py +0 -34
- langflow/components/qdrant/qdrant.py +0 -109
- langflow/components/redis/__init__.py +0 -37
- langflow/components/redis/redis.py +0 -89
- langflow/components/redis/redis_chat.py +0 -43
- langflow/components/sambanova/__init__.py +0 -32
- langflow/components/sambanova/sambanova.py +0 -84
- langflow/components/scrapegraph/__init__.py +0 -40
- langflow/components/scrapegraph/scrapegraph_markdownify_api.py +0 -64
- langflow/components/scrapegraph/scrapegraph_search_api.py +0 -64
- langflow/components/scrapegraph/scrapegraph_smart_scraper_api.py +0 -71
- langflow/components/searchapi/__init__.py +0 -36
- langflow/components/searchapi/search.py +0 -79
- langflow/components/serpapi/__init__.py +0 -3
- langflow/components/serpapi/serp.py +0 -115
- langflow/components/serper/__init__.py +0 -3
- langflow/components/serper/google_serper_api_core.py +0 -74
- langflow/components/supabase/__init__.py +0 -37
- langflow/components/supabase/supabase.py +0 -76
- langflow/components/tavily/__init__.py +0 -4
- langflow/components/tavily/tavily_extract.py +0 -117
- langflow/components/tavily/tavily_search.py +0 -212
- langflow/components/textsplitters/__init__.py +0 -0
- langflow/components/toolkits/__init__.py +0 -0
- langflow/components/tools/__init__.py +0 -72
- langflow/components/tools/calculator.py +0 -103
- langflow/components/tools/google_search_api.py +0 -45
- langflow/components/tools/google_serper_api.py +0 -115
- langflow/components/tools/python_code_structured_tool.py +0 -327
- langflow/components/tools/python_repl.py +0 -97
- langflow/components/tools/search_api.py +0 -87
- langflow/components/tools/searxng.py +0 -145
- langflow/components/tools/serp_api.py +0 -119
- langflow/components/tools/tavily_search_tool.py +0 -344
- langflow/components/tools/wikidata_api.py +0 -102
- langflow/components/tools/wikipedia_api.py +0 -49
- langflow/components/tools/yahoo_finance.py +0 -124
- langflow/components/twelvelabs/__init__.py +0 -52
- langflow/components/twelvelabs/convert_astra_results.py +0 -84
- langflow/components/twelvelabs/pegasus_index.py +0 -311
- langflow/components/twelvelabs/split_video.py +0 -291
- langflow/components/twelvelabs/text_embeddings.py +0 -57
- langflow/components/twelvelabs/twelvelabs_pegasus.py +0 -408
- langflow/components/twelvelabs/video_embeddings.py +0 -100
- langflow/components/twelvelabs/video_file.py +0 -179
- langflow/components/unstructured/__init__.py +0 -3
- langflow/components/unstructured/unstructured.py +0 -121
- langflow/components/upstash/__init__.py +0 -34
- langflow/components/upstash/upstash.py +0 -124
- langflow/components/vectara/__init__.py +0 -37
- langflow/components/vectara/vectara.py +0 -97
- langflow/components/vectara/vectara_rag.py +0 -164
- langflow/components/vectorstores/__init__.py +0 -34
- langflow/components/vectorstores/local_db.py +0 -261
- langflow/components/vertexai/__init__.py +0 -37
- langflow/components/vertexai/vertexai.py +0 -71
- langflow/components/vertexai/vertexai_embeddings.py +0 -67
- langflow/components/weaviate/__init__.py +0 -34
- langflow/components/weaviate/weaviate.py +0 -89
- langflow/components/wikipedia/__init__.py +0 -4
- langflow/components/wikipedia/wikidata.py +0 -86
- langflow/components/wikipedia/wikipedia.py +0 -53
- langflow/components/wolframalpha/__init__.py +0 -3
- langflow/components/wolframalpha/wolfram_alpha_api.py +0 -54
- langflow/components/xai/__init__.py +0 -32
- langflow/components/xai/xai.py +0 -167
- langflow/components/yahoosearch/__init__.py +0 -3
- langflow/components/yahoosearch/yahoo.py +0 -137
- langflow/components/youtube/__init__.py +0 -52
- langflow/components/youtube/channel.py +0 -227
- langflow/components/youtube/comments.py +0 -231
- langflow/components/youtube/playlist.py +0 -33
- langflow/components/youtube/search.py +0 -120
- langflow/components/youtube/trending.py +0 -285
- langflow/components/youtube/video_details.py +0 -263
- langflow/components/youtube/youtube_transcripts.py +0 -118
- langflow/components/zep/__init__.py +0 -3
- langflow/components/zep/zep.py +0 -44
- langflow/custom/attributes.py +0 -86
- langflow/custom/code_parser/__init__.py +0 -3
- langflow/custom/code_parser/code_parser.py +0 -361
- langflow/custom/custom_component/base_component.py +0 -118
- langflow/custom/dependency_analyzer.py +0 -165
- langflow/custom/directory_reader/__init__.py +0 -3
- langflow/custom/directory_reader/directory_reader.py +0 -359
- langflow/custom/directory_reader/utils.py +0 -171
- langflow/custom/eval.py +0 -12
- langflow/custom/schema.py +0 -32
- langflow/custom/tree_visitor.py +0 -21
- langflow/frontend/assets/lazyIconImports-Ci-S9xBA.js +0 -2
- langflow/graph/edge/__init__.py +0 -0
- langflow/graph/edge/base.py +0 -277
- langflow/graph/edge/schema.py +0 -119
- langflow/graph/edge/utils.py +0 -0
- langflow/graph/graph/__init__.py +0 -0
- langflow/graph/graph/ascii.py +0 -202
- langflow/graph/graph/base.py +0 -2185
- langflow/graph/graph/constants.py +0 -58
- langflow/graph/graph/runnable_vertices_manager.py +0 -133
- langflow/graph/graph/schema.py +0 -53
- langflow/graph/graph/state_model.py +0 -66
- langflow/graph/graph/utils.py +0 -1024
- langflow/graph/schema.py +0 -75
- langflow/graph/state/__init__.py +0 -0
- langflow/graph/state/model.py +0 -237
- langflow/graph/utils.py +0 -229
- langflow/graph/vertex/__init__.py +0 -0
- langflow/graph/vertex/base.py +0 -811
- langflow/graph/vertex/constants.py +0 -0
- langflow/graph/vertex/exceptions.py +0 -4
- langflow/graph/vertex/param_handler.py +0 -255
- langflow/graph/vertex/schema.py +0 -26
- langflow/graph/vertex/utils.py +0 -19
- langflow/graph/vertex/vertex_types.py +0 -489
- langflow/legacy_custom/__init__.py +0 -0
- langflow/legacy_custom/customs.py +0 -16
- langflow/load/load.py +0 -250
- langflow/logging/logger.py +0 -369
- langflow/processing/utils.py +0 -25
- langflow/schema/openai_responses_schemas.py +0 -74
- langflow/schema/serialize.py +0 -13
- langflow/services/chat/config.py +0 -2
- langflow/services/settings/auth.py +0 -130
- langflow/services/settings/constants.py +0 -31
- langflow/services/settings/manager.py +0 -49
- langflow/services/settings/utils.py +0 -40
- langflow/template/field/prompt.py +0 -2
- langflow/template/frontend_node/__init__.py +0 -6
- langflow/template/frontend_node/base.py +0 -212
- langflow/template/frontend_node/constants.py +0 -65
- langflow/template/frontend_node/custom_components.py +0 -97
- langflow/template/template/__init__.py +0 -0
- langflow/template/template/base.py +0 -99
- langflow/utils/async_helpers.py +0 -42
- langflow/utils/concurrency.py +0 -60
- langflow/utils/util_strings.py +0 -56
- langflow_base_nightly-0.5.1.dev3.dist-info/RECORD +0 -1159
- {langflow_base_nightly-0.5.1.dev3.dist-info → langflow_base_nightly-0.5.1.dev5.dist-info}/WHEEL +0 -0
- {langflow_base_nightly-0.5.1.dev3.dist-info → langflow_base_nightly-0.5.1.dev5.dist-info}/entry_points.txt +0 -0
|
@@ -1,82 +0,0 @@
|
|
|
1
|
-
import re
|
|
2
|
-
|
|
3
|
-
from langflow.custom.custom_component.component import Component
|
|
4
|
-
from langflow.io import MessageTextInput, Output
|
|
5
|
-
from langflow.schema.data import Data
|
|
6
|
-
from langflow.schema.message import Message
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
class RegexExtractorComponent(Component):
|
|
10
|
-
display_name = "Regex Extractor"
|
|
11
|
-
description = "Extract patterns from text using regular expressions."
|
|
12
|
-
icon = "regex"
|
|
13
|
-
legacy = True
|
|
14
|
-
|
|
15
|
-
inputs = [
|
|
16
|
-
MessageTextInput(
|
|
17
|
-
name="input_text",
|
|
18
|
-
display_name="Input Text",
|
|
19
|
-
info="The text to analyze",
|
|
20
|
-
required=True,
|
|
21
|
-
),
|
|
22
|
-
MessageTextInput(
|
|
23
|
-
name="pattern",
|
|
24
|
-
display_name="Regex Pattern",
|
|
25
|
-
info="The regular expression pattern to match",
|
|
26
|
-
value=r"",
|
|
27
|
-
required=True,
|
|
28
|
-
tool_mode=True,
|
|
29
|
-
),
|
|
30
|
-
]
|
|
31
|
-
|
|
32
|
-
outputs = [
|
|
33
|
-
Output(display_name="Data", name="data", method="extract_matches"),
|
|
34
|
-
Output(display_name="Message", name="text", method="get_matches_text"),
|
|
35
|
-
]
|
|
36
|
-
|
|
37
|
-
def extract_matches(self) -> list[Data]:
|
|
38
|
-
if not self.pattern or not self.input_text:
|
|
39
|
-
self.status = []
|
|
40
|
-
return []
|
|
41
|
-
|
|
42
|
-
try:
|
|
43
|
-
# Compile regex pattern
|
|
44
|
-
pattern = re.compile(self.pattern)
|
|
45
|
-
|
|
46
|
-
# Find all matches in the input text
|
|
47
|
-
matches = pattern.findall(self.input_text)
|
|
48
|
-
|
|
49
|
-
# Filter out empty matches
|
|
50
|
-
filtered_matches = [match for match in matches if match] # Remove empty matches
|
|
51
|
-
|
|
52
|
-
# Return empty list for no matches, or list of matches if found
|
|
53
|
-
result: list = [] if not filtered_matches else [Data(data={"match": match}) for match in filtered_matches]
|
|
54
|
-
|
|
55
|
-
except re.error as e:
|
|
56
|
-
error_message = f"Invalid regex pattern: {e!s}"
|
|
57
|
-
result = [Data(data={"error": error_message})]
|
|
58
|
-
except ValueError as e:
|
|
59
|
-
error_message = f"Error extracting matches: {e!s}"
|
|
60
|
-
result = [Data(data={"error": error_message})]
|
|
61
|
-
|
|
62
|
-
self.status = result
|
|
63
|
-
return result
|
|
64
|
-
|
|
65
|
-
def get_matches_text(self) -> Message:
|
|
66
|
-
"""Get matches as a formatted text message."""
|
|
67
|
-
matches = self.extract_matches()
|
|
68
|
-
|
|
69
|
-
if not matches:
|
|
70
|
-
message = Message(text="No matches found")
|
|
71
|
-
self.status = message
|
|
72
|
-
return message
|
|
73
|
-
|
|
74
|
-
if "error" in matches[0].data:
|
|
75
|
-
message = Message(text=matches[0].data["error"])
|
|
76
|
-
self.status = message
|
|
77
|
-
return message
|
|
78
|
-
|
|
79
|
-
result = "\n".join(match.data["match"] for match in matches)
|
|
80
|
-
message = Message(text=result)
|
|
81
|
-
self.status = message
|
|
82
|
-
return message
|
|
@@ -1,208 +0,0 @@
|
|
|
1
|
-
import json
|
|
2
|
-
from collections.abc import AsyncIterator, Iterator
|
|
3
|
-
from pathlib import Path
|
|
4
|
-
|
|
5
|
-
import orjson
|
|
6
|
-
import pandas as pd
|
|
7
|
-
from fastapi import UploadFile
|
|
8
|
-
from fastapi.encoders import jsonable_encoder
|
|
9
|
-
|
|
10
|
-
from langflow.api.v2.files import upload_user_file
|
|
11
|
-
from langflow.custom import Component
|
|
12
|
-
from langflow.io import DropdownInput, HandleInput, StrInput
|
|
13
|
-
from langflow.schema import Data, DataFrame, Message
|
|
14
|
-
from langflow.services.database.models.user.crud import get_user_by_id
|
|
15
|
-
from langflow.services.deps import get_settings_service, get_storage_service, session_scope
|
|
16
|
-
from langflow.template.field.base import Output
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
class SaveToFileComponent(Component):
|
|
20
|
-
display_name = "Save File"
|
|
21
|
-
description = "Save data to a local file in the selected format."
|
|
22
|
-
documentation: str = "https://docs.langflow.org/components-processing#save-file"
|
|
23
|
-
icon = "save"
|
|
24
|
-
name = "SaveToFile"
|
|
25
|
-
|
|
26
|
-
# File format options for different types
|
|
27
|
-
DATA_FORMAT_CHOICES = ["csv", "excel", "json", "markdown"]
|
|
28
|
-
MESSAGE_FORMAT_CHOICES = ["txt", "json", "markdown"]
|
|
29
|
-
|
|
30
|
-
inputs = [
|
|
31
|
-
HandleInput(
|
|
32
|
-
name="input",
|
|
33
|
-
display_name="Input",
|
|
34
|
-
info="The input to save.",
|
|
35
|
-
dynamic=True,
|
|
36
|
-
input_types=["Data", "DataFrame", "Message"],
|
|
37
|
-
required=True,
|
|
38
|
-
),
|
|
39
|
-
StrInput(
|
|
40
|
-
name="file_name",
|
|
41
|
-
display_name="File Name",
|
|
42
|
-
info="Name file will be saved as (without extension).",
|
|
43
|
-
required=True,
|
|
44
|
-
),
|
|
45
|
-
DropdownInput(
|
|
46
|
-
name="file_format",
|
|
47
|
-
display_name="File Format",
|
|
48
|
-
options=list(dict.fromkeys(DATA_FORMAT_CHOICES + MESSAGE_FORMAT_CHOICES)),
|
|
49
|
-
info="Select the file format to save the input. If not provided, the default format will be used.",
|
|
50
|
-
value="",
|
|
51
|
-
advanced=True,
|
|
52
|
-
),
|
|
53
|
-
]
|
|
54
|
-
|
|
55
|
-
outputs = [Output(display_name="File Path", name="message", method="save_to_file")]
|
|
56
|
-
|
|
57
|
-
async def save_to_file(self) -> Message:
|
|
58
|
-
"""Save the input to a file and upload it, returning a confirmation message."""
|
|
59
|
-
# Validate inputs
|
|
60
|
-
if not self.file_name:
|
|
61
|
-
msg = "File name must be provided."
|
|
62
|
-
raise ValueError(msg)
|
|
63
|
-
if not self._get_input_type():
|
|
64
|
-
msg = "Input type is not set."
|
|
65
|
-
raise ValueError(msg)
|
|
66
|
-
|
|
67
|
-
# Validate file format based on input type
|
|
68
|
-
file_format = self.file_format or self._get_default_format()
|
|
69
|
-
allowed_formats = (
|
|
70
|
-
self.MESSAGE_FORMAT_CHOICES if self._get_input_type() == "Message" else self.DATA_FORMAT_CHOICES
|
|
71
|
-
)
|
|
72
|
-
if file_format not in allowed_formats:
|
|
73
|
-
msg = f"Invalid file format '{file_format}' for {self._get_input_type()}. Allowed: {allowed_formats}"
|
|
74
|
-
raise ValueError(msg)
|
|
75
|
-
|
|
76
|
-
# Prepare file path
|
|
77
|
-
file_path = Path(self.file_name).expanduser()
|
|
78
|
-
if not file_path.parent.exists():
|
|
79
|
-
file_path.parent.mkdir(parents=True, exist_ok=True)
|
|
80
|
-
file_path = self._adjust_file_path_with_format(file_path, file_format)
|
|
81
|
-
|
|
82
|
-
# Save the input to file based on type
|
|
83
|
-
if self._get_input_type() == "DataFrame":
|
|
84
|
-
confirmation = self._save_dataframe(self.input, file_path, file_format)
|
|
85
|
-
elif self._get_input_type() == "Data":
|
|
86
|
-
confirmation = self._save_data(self.input, file_path, file_format)
|
|
87
|
-
elif self._get_input_type() == "Message":
|
|
88
|
-
confirmation = await self._save_message(self.input, file_path, file_format)
|
|
89
|
-
else:
|
|
90
|
-
msg = f"Unsupported input type: {self._get_input_type()}"
|
|
91
|
-
raise ValueError(msg)
|
|
92
|
-
|
|
93
|
-
# Upload the saved file
|
|
94
|
-
await self._upload_file(file_path)
|
|
95
|
-
|
|
96
|
-
# Return the final file path and confirmation message
|
|
97
|
-
final_path = Path.cwd() / file_path if not file_path.is_absolute() else file_path
|
|
98
|
-
|
|
99
|
-
return Message(text=f"{confirmation} at {final_path}")
|
|
100
|
-
|
|
101
|
-
def _get_input_type(self) -> str:
|
|
102
|
-
"""Determine the input type based on the provided input."""
|
|
103
|
-
# Use exact type checking (type() is) instead of isinstance() to avoid inheritance issues.
|
|
104
|
-
# Since Message inherits from Data, isinstance(message, Data) would return True for Message objects,
|
|
105
|
-
# causing Message inputs to be incorrectly identified as Data type.
|
|
106
|
-
if type(self.input) is DataFrame:
|
|
107
|
-
return "DataFrame"
|
|
108
|
-
if type(self.input) is Message:
|
|
109
|
-
return "Message"
|
|
110
|
-
if type(self.input) is Data:
|
|
111
|
-
return "Data"
|
|
112
|
-
msg = f"Unsupported input type: {type(self.input)}"
|
|
113
|
-
raise ValueError(msg)
|
|
114
|
-
|
|
115
|
-
def _get_default_format(self) -> str:
|
|
116
|
-
"""Return the default file format based on input type."""
|
|
117
|
-
if self._get_input_type() == "DataFrame":
|
|
118
|
-
return "csv"
|
|
119
|
-
if self._get_input_type() == "Data":
|
|
120
|
-
return "json"
|
|
121
|
-
if self._get_input_type() == "Message":
|
|
122
|
-
return "json"
|
|
123
|
-
return "json" # Fallback
|
|
124
|
-
|
|
125
|
-
def _adjust_file_path_with_format(self, path: Path, fmt: str) -> Path:
|
|
126
|
-
"""Adjust the file path to include the correct extension."""
|
|
127
|
-
file_extension = path.suffix.lower().lstrip(".")
|
|
128
|
-
if fmt == "excel":
|
|
129
|
-
return Path(f"{path}.xlsx").expanduser() if file_extension not in ["xlsx", "xls"] else path
|
|
130
|
-
return Path(f"{path}.{fmt}").expanduser() if file_extension != fmt else path
|
|
131
|
-
|
|
132
|
-
async def _upload_file(self, file_path: Path) -> None:
|
|
133
|
-
"""Upload the saved file using the upload_user_file service."""
|
|
134
|
-
if not file_path.exists():
|
|
135
|
-
msg = f"File not found: {file_path}"
|
|
136
|
-
raise FileNotFoundError(msg)
|
|
137
|
-
|
|
138
|
-
with file_path.open("rb") as f:
|
|
139
|
-
async with session_scope() as db:
|
|
140
|
-
if not self.user_id:
|
|
141
|
-
msg = "User ID is required for file saving."
|
|
142
|
-
raise ValueError(msg)
|
|
143
|
-
current_user = await get_user_by_id(db, self.user_id)
|
|
144
|
-
|
|
145
|
-
await upload_user_file(
|
|
146
|
-
file=UploadFile(filename=file_path.name, file=f, size=file_path.stat().st_size),
|
|
147
|
-
session=db,
|
|
148
|
-
current_user=current_user,
|
|
149
|
-
storage_service=get_storage_service(),
|
|
150
|
-
settings_service=get_settings_service(),
|
|
151
|
-
)
|
|
152
|
-
|
|
153
|
-
def _save_dataframe(self, dataframe: DataFrame, path: Path, fmt: str) -> str:
|
|
154
|
-
"""Save a DataFrame to the specified file format."""
|
|
155
|
-
if fmt == "csv":
|
|
156
|
-
dataframe.to_csv(path, index=False)
|
|
157
|
-
elif fmt == "excel":
|
|
158
|
-
dataframe.to_excel(path, index=False, engine="openpyxl")
|
|
159
|
-
elif fmt == "json":
|
|
160
|
-
dataframe.to_json(path, orient="records", indent=2)
|
|
161
|
-
elif fmt == "markdown":
|
|
162
|
-
path.write_text(dataframe.to_markdown(index=False), encoding="utf-8")
|
|
163
|
-
else:
|
|
164
|
-
msg = f"Unsupported DataFrame format: {fmt}"
|
|
165
|
-
raise ValueError(msg)
|
|
166
|
-
return f"DataFrame saved successfully as '{path}'"
|
|
167
|
-
|
|
168
|
-
def _save_data(self, data: Data, path: Path, fmt: str) -> str:
|
|
169
|
-
"""Save a Data object to the specified file format."""
|
|
170
|
-
if fmt == "csv":
|
|
171
|
-
pd.DataFrame(data.data).to_csv(path, index=False)
|
|
172
|
-
elif fmt == "excel":
|
|
173
|
-
pd.DataFrame(data.data).to_excel(path, index=False, engine="openpyxl")
|
|
174
|
-
elif fmt == "json":
|
|
175
|
-
path.write_text(
|
|
176
|
-
orjson.dumps(jsonable_encoder(data.data), option=orjson.OPT_INDENT_2).decode("utf-8"), encoding="utf-8"
|
|
177
|
-
)
|
|
178
|
-
elif fmt == "markdown":
|
|
179
|
-
path.write_text(pd.DataFrame(data.data).to_markdown(index=False), encoding="utf-8")
|
|
180
|
-
else:
|
|
181
|
-
msg = f"Unsupported Data format: {fmt}"
|
|
182
|
-
raise ValueError(msg)
|
|
183
|
-
return f"Data saved successfully as '{path}'"
|
|
184
|
-
|
|
185
|
-
async def _save_message(self, message: Message, path: Path, fmt: str) -> str:
|
|
186
|
-
"""Save a Message to the specified file format, handling async iterators."""
|
|
187
|
-
content = ""
|
|
188
|
-
if message.text is None:
|
|
189
|
-
content = ""
|
|
190
|
-
elif isinstance(message.text, AsyncIterator):
|
|
191
|
-
async for item in message.text:
|
|
192
|
-
content += str(item) + " "
|
|
193
|
-
content = content.strip()
|
|
194
|
-
elif isinstance(message.text, Iterator):
|
|
195
|
-
content = " ".join(str(item) for item in message.text)
|
|
196
|
-
else:
|
|
197
|
-
content = str(message.text)
|
|
198
|
-
|
|
199
|
-
if fmt == "txt":
|
|
200
|
-
path.write_text(content, encoding="utf-8")
|
|
201
|
-
elif fmt == "json":
|
|
202
|
-
path.write_text(json.dumps({"message": content}, indent=2), encoding="utf-8")
|
|
203
|
-
elif fmt == "markdown":
|
|
204
|
-
path.write_text(f"**Message:**\n\n{content}", encoding="utf-8")
|
|
205
|
-
else:
|
|
206
|
-
msg = f"Unsupported Message format: {fmt}"
|
|
207
|
-
raise ValueError(msg)
|
|
208
|
-
return f"Message saved successfully as '{path}'"
|
|
@@ -1,48 +0,0 @@
|
|
|
1
|
-
from langflow.custom.custom_component.component import Component
|
|
2
|
-
from langflow.field_typing.range_spec import RangeSpec
|
|
3
|
-
from langflow.inputs.inputs import DataInput, IntInput
|
|
4
|
-
from langflow.io import Output
|
|
5
|
-
from langflow.schema.data import Data
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
class SelectDataComponent(Component):
|
|
9
|
-
display_name: str = "Select Data"
|
|
10
|
-
description: str = "Select a single data from a list of data."
|
|
11
|
-
name: str = "SelectData"
|
|
12
|
-
icon = "prototypes"
|
|
13
|
-
legacy = True
|
|
14
|
-
|
|
15
|
-
inputs = [
|
|
16
|
-
DataInput(
|
|
17
|
-
name="data_list",
|
|
18
|
-
display_name="Data List",
|
|
19
|
-
info="List of data to select from.",
|
|
20
|
-
is_list=True, # Specify that this input takes a list of Data objects
|
|
21
|
-
),
|
|
22
|
-
IntInput(
|
|
23
|
-
name="data_index",
|
|
24
|
-
display_name="Data Index",
|
|
25
|
-
info="Index of the data to select.",
|
|
26
|
-
value=0, # Will be populated dynamically based on the length of data_list
|
|
27
|
-
range_spec=RangeSpec(min=0, max=15, step=1, step_type="int"),
|
|
28
|
-
),
|
|
29
|
-
]
|
|
30
|
-
|
|
31
|
-
outputs = [
|
|
32
|
-
Output(display_name="Selected Data", name="selected_data", method="select_data"),
|
|
33
|
-
]
|
|
34
|
-
|
|
35
|
-
async def select_data(self) -> Data:
|
|
36
|
-
# Retrieve the selected index from the dropdown
|
|
37
|
-
selected_index = int(self.data_index)
|
|
38
|
-
# Get the data list
|
|
39
|
-
|
|
40
|
-
# Validate that the selected index is within bounds
|
|
41
|
-
if selected_index < 0 or selected_index >= len(self.data_list):
|
|
42
|
-
msg = f"Selected index {selected_index} is out of range."
|
|
43
|
-
raise ValueError(msg)
|
|
44
|
-
|
|
45
|
-
# Return the selected Data object
|
|
46
|
-
selected_data = self.data_list[selected_index]
|
|
47
|
-
self.status = selected_data # Update the component status to reflect the selected data
|
|
48
|
-
return selected_data
|
|
@@ -1,141 +0,0 @@
|
|
|
1
|
-
from langchain_text_splitters import CharacterTextSplitter
|
|
2
|
-
|
|
3
|
-
from langflow.custom.custom_component.component import Component
|
|
4
|
-
from langflow.io import DropdownInput, HandleInput, IntInput, MessageTextInput, Output
|
|
5
|
-
from langflow.schema.data import Data
|
|
6
|
-
from langflow.schema.dataframe import DataFrame
|
|
7
|
-
from langflow.schema.message import Message
|
|
8
|
-
from langflow.utils.util import unescape_string
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
class SplitTextComponent(Component):
|
|
12
|
-
display_name: str = "Split Text"
|
|
13
|
-
description: str = "Split text into chunks based on specified criteria."
|
|
14
|
-
documentation: str = "https://docs.langflow.org/components-processing#split-text"
|
|
15
|
-
icon = "scissors-line-dashed"
|
|
16
|
-
name = "SplitText"
|
|
17
|
-
|
|
18
|
-
inputs = [
|
|
19
|
-
HandleInput(
|
|
20
|
-
name="data_inputs",
|
|
21
|
-
display_name="Input",
|
|
22
|
-
info="The data with texts to split in chunks.",
|
|
23
|
-
input_types=["Data", "DataFrame", "Message"],
|
|
24
|
-
required=True,
|
|
25
|
-
),
|
|
26
|
-
IntInput(
|
|
27
|
-
name="chunk_overlap",
|
|
28
|
-
display_name="Chunk Overlap",
|
|
29
|
-
info="Number of characters to overlap between chunks.",
|
|
30
|
-
value=200,
|
|
31
|
-
),
|
|
32
|
-
IntInput(
|
|
33
|
-
name="chunk_size",
|
|
34
|
-
display_name="Chunk Size",
|
|
35
|
-
info=(
|
|
36
|
-
"The maximum length of each chunk. Text is first split by separator, "
|
|
37
|
-
"then chunks are merged up to this size. "
|
|
38
|
-
"Individual splits larger than this won't be further divided."
|
|
39
|
-
),
|
|
40
|
-
value=1000,
|
|
41
|
-
),
|
|
42
|
-
MessageTextInput(
|
|
43
|
-
name="separator",
|
|
44
|
-
display_name="Separator",
|
|
45
|
-
info=(
|
|
46
|
-
"The character to split on. Use \\n for newline. "
|
|
47
|
-
"Examples: \\n\\n for paragraphs, \\n for lines, . for sentences"
|
|
48
|
-
),
|
|
49
|
-
value="\n",
|
|
50
|
-
),
|
|
51
|
-
MessageTextInput(
|
|
52
|
-
name="text_key",
|
|
53
|
-
display_name="Text Key",
|
|
54
|
-
info="The key to use for the text column.",
|
|
55
|
-
value="text",
|
|
56
|
-
advanced=True,
|
|
57
|
-
),
|
|
58
|
-
DropdownInput(
|
|
59
|
-
name="keep_separator",
|
|
60
|
-
display_name="Keep Separator",
|
|
61
|
-
info="Whether to keep the separator in the output chunks and where to place it.",
|
|
62
|
-
options=["False", "True", "Start", "End"],
|
|
63
|
-
value="False",
|
|
64
|
-
advanced=True,
|
|
65
|
-
),
|
|
66
|
-
]
|
|
67
|
-
|
|
68
|
-
outputs = [
|
|
69
|
-
Output(display_name="Chunks", name="dataframe", method="split_text"),
|
|
70
|
-
]
|
|
71
|
-
|
|
72
|
-
def _docs_to_data(self, docs) -> list[Data]:
|
|
73
|
-
return [Data(text=doc.page_content, data=doc.metadata) for doc in docs]
|
|
74
|
-
|
|
75
|
-
def _fix_separator(self, separator: str) -> str:
|
|
76
|
-
"""Fix common separator issues and convert to proper format."""
|
|
77
|
-
if separator == "/n":
|
|
78
|
-
return "\n"
|
|
79
|
-
if separator == "/t":
|
|
80
|
-
return "\t"
|
|
81
|
-
return separator
|
|
82
|
-
|
|
83
|
-
def split_text_base(self):
|
|
84
|
-
separator = self._fix_separator(self.separator)
|
|
85
|
-
separator = unescape_string(separator)
|
|
86
|
-
|
|
87
|
-
if isinstance(self.data_inputs, DataFrame):
|
|
88
|
-
if not len(self.data_inputs):
|
|
89
|
-
msg = "DataFrame is empty"
|
|
90
|
-
raise TypeError(msg)
|
|
91
|
-
|
|
92
|
-
self.data_inputs.text_key = self.text_key
|
|
93
|
-
try:
|
|
94
|
-
documents = self.data_inputs.to_lc_documents()
|
|
95
|
-
except Exception as e:
|
|
96
|
-
msg = f"Error converting DataFrame to documents: {e}"
|
|
97
|
-
raise TypeError(msg) from e
|
|
98
|
-
elif isinstance(self.data_inputs, Message):
|
|
99
|
-
self.data_inputs = [self.data_inputs.to_data()]
|
|
100
|
-
return self.split_text_base()
|
|
101
|
-
else:
|
|
102
|
-
if not self.data_inputs:
|
|
103
|
-
msg = "No data inputs provided"
|
|
104
|
-
raise TypeError(msg)
|
|
105
|
-
|
|
106
|
-
documents = []
|
|
107
|
-
if isinstance(self.data_inputs, Data):
|
|
108
|
-
self.data_inputs.text_key = self.text_key
|
|
109
|
-
documents = [self.data_inputs.to_lc_document()]
|
|
110
|
-
else:
|
|
111
|
-
try:
|
|
112
|
-
documents = [input_.to_lc_document() for input_ in self.data_inputs if isinstance(input_, Data)]
|
|
113
|
-
if not documents:
|
|
114
|
-
msg = f"No valid Data inputs found in {type(self.data_inputs)}"
|
|
115
|
-
raise TypeError(msg)
|
|
116
|
-
except AttributeError as e:
|
|
117
|
-
msg = f"Invalid input type in collection: {e}"
|
|
118
|
-
raise TypeError(msg) from e
|
|
119
|
-
try:
|
|
120
|
-
# Convert string 'False'/'True' to boolean
|
|
121
|
-
keep_sep = self.keep_separator
|
|
122
|
-
if isinstance(keep_sep, str):
|
|
123
|
-
if keep_sep.lower() == "false":
|
|
124
|
-
keep_sep = False
|
|
125
|
-
elif keep_sep.lower() == "true":
|
|
126
|
-
keep_sep = True
|
|
127
|
-
# 'start' and 'end' are kept as strings
|
|
128
|
-
|
|
129
|
-
splitter = CharacterTextSplitter(
|
|
130
|
-
chunk_overlap=self.chunk_overlap,
|
|
131
|
-
chunk_size=self.chunk_size,
|
|
132
|
-
separator=separator,
|
|
133
|
-
keep_separator=keep_sep,
|
|
134
|
-
)
|
|
135
|
-
return splitter.split_documents(documents)
|
|
136
|
-
except Exception as e:
|
|
137
|
-
msg = f"Error splitting text: {e}"
|
|
138
|
-
raise TypeError(msg) from e
|
|
139
|
-
|
|
140
|
-
def split_text(self) -> DataFrame:
|
|
141
|
-
return DataFrame(self._docs_to_data(self.split_text_base()))
|
|
@@ -1,202 +0,0 @@
|
|
|
1
|
-
from pydantic import BaseModel, Field, create_model
|
|
2
|
-
from trustcall import create_extractor
|
|
3
|
-
|
|
4
|
-
from langflow.base.models.chat_result import get_chat_result
|
|
5
|
-
from langflow.custom.custom_component.component import Component
|
|
6
|
-
from langflow.helpers.base_model import build_model_from_schema
|
|
7
|
-
from langflow.io import (
|
|
8
|
-
HandleInput,
|
|
9
|
-
MessageTextInput,
|
|
10
|
-
MultilineInput,
|
|
11
|
-
Output,
|
|
12
|
-
TableInput,
|
|
13
|
-
)
|
|
14
|
-
from langflow.schema.data import Data
|
|
15
|
-
from langflow.schema.dataframe import DataFrame
|
|
16
|
-
from langflow.schema.table import EditMode
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
class StructuredOutputComponent(Component):
|
|
20
|
-
display_name = "Structured Output"
|
|
21
|
-
description = "Uses an LLM to generate structured data. Ideal for extraction and consistency."
|
|
22
|
-
documentation: str = "https://docs.langflow.org/components-processing#structured-output"
|
|
23
|
-
name = "StructuredOutput"
|
|
24
|
-
icon = "braces"
|
|
25
|
-
|
|
26
|
-
inputs = [
|
|
27
|
-
HandleInput(
|
|
28
|
-
name="llm",
|
|
29
|
-
display_name="Language Model",
|
|
30
|
-
info="The language model to use to generate the structured output.",
|
|
31
|
-
input_types=["LanguageModel"],
|
|
32
|
-
required=True,
|
|
33
|
-
),
|
|
34
|
-
MultilineInput(
|
|
35
|
-
name="input_value",
|
|
36
|
-
display_name="Input Message",
|
|
37
|
-
info="The input message to the language model.",
|
|
38
|
-
tool_mode=True,
|
|
39
|
-
required=True,
|
|
40
|
-
),
|
|
41
|
-
MultilineInput(
|
|
42
|
-
name="system_prompt",
|
|
43
|
-
display_name="Format Instructions",
|
|
44
|
-
info="The instructions to the language model for formatting the output.",
|
|
45
|
-
value=(
|
|
46
|
-
"You are an AI that extracts structured JSON objects from unstructured text. "
|
|
47
|
-
"Use a predefined schema with expected types (str, int, float, bool, dict). "
|
|
48
|
-
"Extract ALL relevant instances that match the schema - if multiple patterns exist, capture them all. "
|
|
49
|
-
"Fill missing or ambiguous values with defaults: null for missing values. "
|
|
50
|
-
"Remove exact duplicates but keep variations that have different field values. "
|
|
51
|
-
"Always return valid JSON in the expected format, never throw errors. "
|
|
52
|
-
"If multiple objects can be extracted, return them all in the structured format."
|
|
53
|
-
),
|
|
54
|
-
required=True,
|
|
55
|
-
advanced=True,
|
|
56
|
-
),
|
|
57
|
-
MessageTextInput(
|
|
58
|
-
name="schema_name",
|
|
59
|
-
display_name="Schema Name",
|
|
60
|
-
info="Provide a name for the output data schema.",
|
|
61
|
-
advanced=True,
|
|
62
|
-
),
|
|
63
|
-
TableInput(
|
|
64
|
-
name="output_schema",
|
|
65
|
-
display_name="Output Schema",
|
|
66
|
-
info="Define the structure and data types for the model's output.",
|
|
67
|
-
required=True,
|
|
68
|
-
# TODO: remove deault value
|
|
69
|
-
table_schema=[
|
|
70
|
-
{
|
|
71
|
-
"name": "name",
|
|
72
|
-
"display_name": "Name",
|
|
73
|
-
"type": "str",
|
|
74
|
-
"description": "Specify the name of the output field.",
|
|
75
|
-
"default": "field",
|
|
76
|
-
"edit_mode": EditMode.INLINE,
|
|
77
|
-
},
|
|
78
|
-
{
|
|
79
|
-
"name": "description",
|
|
80
|
-
"display_name": "Description",
|
|
81
|
-
"type": "str",
|
|
82
|
-
"description": "Describe the purpose of the output field.",
|
|
83
|
-
"default": "description of field",
|
|
84
|
-
"edit_mode": EditMode.POPOVER,
|
|
85
|
-
},
|
|
86
|
-
{
|
|
87
|
-
"name": "type",
|
|
88
|
-
"display_name": "Type",
|
|
89
|
-
"type": "str",
|
|
90
|
-
"edit_mode": EditMode.INLINE,
|
|
91
|
-
"description": ("Indicate the data type of the output field (e.g., str, int, float, bool, dict)."),
|
|
92
|
-
"options": ["str", "int", "float", "bool", "dict"],
|
|
93
|
-
"default": "str",
|
|
94
|
-
},
|
|
95
|
-
{
|
|
96
|
-
"name": "multiple",
|
|
97
|
-
"display_name": "As List",
|
|
98
|
-
"type": "boolean",
|
|
99
|
-
"description": "Set to True if this output field should be a list of the specified type.",
|
|
100
|
-
"default": "False",
|
|
101
|
-
"edit_mode": EditMode.INLINE,
|
|
102
|
-
},
|
|
103
|
-
],
|
|
104
|
-
value=[
|
|
105
|
-
{
|
|
106
|
-
"name": "field",
|
|
107
|
-
"description": "description of field",
|
|
108
|
-
"type": "str",
|
|
109
|
-
"multiple": "False",
|
|
110
|
-
}
|
|
111
|
-
],
|
|
112
|
-
),
|
|
113
|
-
]
|
|
114
|
-
|
|
115
|
-
outputs = [
|
|
116
|
-
Output(
|
|
117
|
-
name="structured_output",
|
|
118
|
-
display_name="Structured Output",
|
|
119
|
-
method="build_structured_output",
|
|
120
|
-
),
|
|
121
|
-
Output(
|
|
122
|
-
name="dataframe_output",
|
|
123
|
-
display_name="Structured Output",
|
|
124
|
-
method="build_structured_dataframe",
|
|
125
|
-
),
|
|
126
|
-
]
|
|
127
|
-
|
|
128
|
-
def build_structured_output_base(self):
|
|
129
|
-
schema_name = self.schema_name or "OutputModel"
|
|
130
|
-
|
|
131
|
-
if not hasattr(self.llm, "with_structured_output"):
|
|
132
|
-
msg = "Language model does not support structured output."
|
|
133
|
-
raise TypeError(msg)
|
|
134
|
-
if not self.output_schema:
|
|
135
|
-
msg = "Output schema cannot be empty"
|
|
136
|
-
raise ValueError(msg)
|
|
137
|
-
|
|
138
|
-
output_model_ = build_model_from_schema(self.output_schema)
|
|
139
|
-
|
|
140
|
-
output_model = create_model(
|
|
141
|
-
schema_name,
|
|
142
|
-
__doc__=f"A list of {schema_name}.",
|
|
143
|
-
objects=(list[output_model_], Field(description=f"A list of {schema_name}.")), # type: ignore[valid-type]
|
|
144
|
-
)
|
|
145
|
-
|
|
146
|
-
try:
|
|
147
|
-
llm_with_structured_output = create_extractor(self.llm, tools=[output_model])
|
|
148
|
-
except NotImplementedError as exc:
|
|
149
|
-
msg = f"{self.llm.__class__.__name__} does not support structured output."
|
|
150
|
-
raise TypeError(msg) from exc
|
|
151
|
-
|
|
152
|
-
config_dict = {
|
|
153
|
-
"run_name": self.display_name,
|
|
154
|
-
"project_name": self.get_project_name(),
|
|
155
|
-
"callbacks": self.get_langchain_callbacks(),
|
|
156
|
-
}
|
|
157
|
-
result = get_chat_result(
|
|
158
|
-
runnable=llm_with_structured_output,
|
|
159
|
-
system_message=self.system_prompt,
|
|
160
|
-
input_value=self.input_value,
|
|
161
|
-
config=config_dict,
|
|
162
|
-
)
|
|
163
|
-
|
|
164
|
-
# OPTIMIZATION NOTE: Simplified processing based on trustcall response structure
|
|
165
|
-
# Handle non-dict responses (shouldn't happen with trustcall, but defensive)
|
|
166
|
-
if not isinstance(result, dict):
|
|
167
|
-
return result
|
|
168
|
-
|
|
169
|
-
# Extract first response and convert BaseModel to dict
|
|
170
|
-
responses = result.get("responses", [])
|
|
171
|
-
if not responses:
|
|
172
|
-
return result
|
|
173
|
-
|
|
174
|
-
# Convert BaseModel to dict (creates the "objects" key)
|
|
175
|
-
first_response = responses[0]
|
|
176
|
-
structured_data = first_response.model_dump() if isinstance(first_response, BaseModel) else first_response
|
|
177
|
-
|
|
178
|
-
# Extract the objects array (guaranteed to exist due to our Pydantic model structure)
|
|
179
|
-
return structured_data.get("objects", structured_data)
|
|
180
|
-
|
|
181
|
-
def build_structured_output(self) -> Data:
|
|
182
|
-
output = self.build_structured_output_base()
|
|
183
|
-
if not isinstance(output, list) or not output:
|
|
184
|
-
# handle empty or unexpected type case
|
|
185
|
-
msg = "No structured output returned"
|
|
186
|
-
raise ValueError(msg)
|
|
187
|
-
if len(output) == 1:
|
|
188
|
-
return Data(data=output[0])
|
|
189
|
-
if len(output) > 1:
|
|
190
|
-
# Multiple outputs - wrap them in a results container
|
|
191
|
-
return Data(data={"results": output})
|
|
192
|
-
return Data()
|
|
193
|
-
|
|
194
|
-
def build_structured_dataframe(self) -> DataFrame:
|
|
195
|
-
output = self.build_structured_output_base()
|
|
196
|
-
if not isinstance(output, list) or not output:
|
|
197
|
-
# handle empty or unexpected type case
|
|
198
|
-
msg = "No structured output returned"
|
|
199
|
-
raise ValueError(msg)
|
|
200
|
-
data_list = [Data(data=output[0])] if len(output) == 1 else [Data(data=item) for item in output]
|
|
201
|
-
|
|
202
|
-
return DataFrame(data_list)
|