langflow-base-nightly 0.5.1.dev2__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.dev2.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.dev2.dist-info/RECORD +0 -1159
- {langflow_base_nightly-0.5.1.dev2.dist-info → langflow_base_nightly-0.5.1.dev4.dist-info}/WHEEL +0 -0
- {langflow_base_nightly-0.5.1.dev2.dist-info → langflow_base_nightly-0.5.1.dev4.dist-info}/entry_points.txt +0 -0
|
@@ -1,192 +0,0 @@
|
|
|
1
|
-
import base64
|
|
2
|
-
import json
|
|
3
|
-
import re
|
|
4
|
-
from collections.abc import Iterator
|
|
5
|
-
from json.decoder import JSONDecodeError
|
|
6
|
-
from typing import Any
|
|
7
|
-
|
|
8
|
-
from google.auth.exceptions import RefreshError
|
|
9
|
-
from google.oauth2.credentials import Credentials
|
|
10
|
-
from googleapiclient.discovery import build
|
|
11
|
-
from langchain_core.chat_sessions import ChatSession
|
|
12
|
-
from langchain_core.messages import HumanMessage
|
|
13
|
-
from langchain_google_community.gmail.loader import GMailLoader
|
|
14
|
-
|
|
15
|
-
from langflow.custom.custom_component.component import Component
|
|
16
|
-
from langflow.inputs.inputs import MessageTextInput
|
|
17
|
-
from langflow.io import SecretStrInput
|
|
18
|
-
from langflow.logging.logger import logger
|
|
19
|
-
from langflow.schema.data import Data
|
|
20
|
-
from langflow.template.field.base import Output
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
class GmailLoaderComponent(Component):
|
|
24
|
-
display_name = "Gmail Loader"
|
|
25
|
-
description = "Loads emails from Gmail using provided credentials."
|
|
26
|
-
icon = "Google"
|
|
27
|
-
legacy: bool = True
|
|
28
|
-
|
|
29
|
-
inputs = [
|
|
30
|
-
SecretStrInput(
|
|
31
|
-
name="json_string",
|
|
32
|
-
display_name="JSON String of the Service Account Token",
|
|
33
|
-
info="JSON string containing OAuth 2.0 access token information for service account access",
|
|
34
|
-
required=True,
|
|
35
|
-
value="""{
|
|
36
|
-
"account": "",
|
|
37
|
-
"client_id": "",
|
|
38
|
-
"client_secret": "",
|
|
39
|
-
"expiry": "",
|
|
40
|
-
"refresh_token": "",
|
|
41
|
-
"scopes": [
|
|
42
|
-
"https://www.googleapis.com/auth/gmail.readonly",
|
|
43
|
-
],
|
|
44
|
-
"token": "",
|
|
45
|
-
"token_uri": "https://oauth2.googleapis.com/token",
|
|
46
|
-
"universe_domain": "googleapis.com"
|
|
47
|
-
}""",
|
|
48
|
-
),
|
|
49
|
-
MessageTextInput(
|
|
50
|
-
name="label_ids",
|
|
51
|
-
display_name="Label IDs",
|
|
52
|
-
info="Comma-separated list of label IDs to filter emails.",
|
|
53
|
-
required=True,
|
|
54
|
-
value="INBOX,SENT,UNREAD,IMPORTANT",
|
|
55
|
-
),
|
|
56
|
-
MessageTextInput(
|
|
57
|
-
name="max_results",
|
|
58
|
-
display_name="Max Results",
|
|
59
|
-
info="Maximum number of emails to load.",
|
|
60
|
-
required=True,
|
|
61
|
-
value="10",
|
|
62
|
-
),
|
|
63
|
-
]
|
|
64
|
-
|
|
65
|
-
outputs = [
|
|
66
|
-
Output(display_name="Data", name="data", method="load_emails"),
|
|
67
|
-
]
|
|
68
|
-
|
|
69
|
-
def load_emails(self) -> Data:
|
|
70
|
-
class CustomGMailLoader(GMailLoader):
|
|
71
|
-
def __init__(
|
|
72
|
-
self, creds: Any, *, n: int = 100, label_ids: list[str] | None = None, raise_error: bool = False
|
|
73
|
-
) -> None:
|
|
74
|
-
super().__init__(creds, n, raise_error)
|
|
75
|
-
self.label_ids = label_ids if label_ids is not None else ["SENT"]
|
|
76
|
-
|
|
77
|
-
def clean_message_content(self, message):
|
|
78
|
-
# Remove URLs
|
|
79
|
-
message = re.sub(r"http\S+|www\S+|https\S+", "", message, flags=re.MULTILINE)
|
|
80
|
-
|
|
81
|
-
# Remove email addresses
|
|
82
|
-
message = re.sub(r"\S+@\S+", "", message)
|
|
83
|
-
|
|
84
|
-
# Remove special characters and excessive whitespace
|
|
85
|
-
message = re.sub(r"[^A-Za-z0-9\s]+", " ", message)
|
|
86
|
-
message = re.sub(r"\s{2,}", " ", message)
|
|
87
|
-
|
|
88
|
-
# Trim leading and trailing whitespace
|
|
89
|
-
return message.strip()
|
|
90
|
-
|
|
91
|
-
def _extract_email_content(self, msg: Any) -> HumanMessage:
|
|
92
|
-
from_email = None
|
|
93
|
-
for values in msg["payload"]["headers"]:
|
|
94
|
-
name = values["name"]
|
|
95
|
-
if name == "From":
|
|
96
|
-
from_email = values["value"]
|
|
97
|
-
if from_email is None:
|
|
98
|
-
msg = "From email not found."
|
|
99
|
-
raise ValueError(msg)
|
|
100
|
-
|
|
101
|
-
parts = msg["payload"]["parts"] if "parts" in msg["payload"] else [msg["payload"]]
|
|
102
|
-
|
|
103
|
-
for part in parts:
|
|
104
|
-
if part["mimeType"] == "text/plain":
|
|
105
|
-
data = part["body"]["data"]
|
|
106
|
-
data = base64.urlsafe_b64decode(data).decode("utf-8")
|
|
107
|
-
pattern = re.compile(r"\r\nOn .+(\r\n)*wrote:\r\n")
|
|
108
|
-
newest_response = re.split(pattern, data)[0]
|
|
109
|
-
return HumanMessage(
|
|
110
|
-
content=self.clean_message_content(newest_response),
|
|
111
|
-
additional_kwargs={"sender": from_email},
|
|
112
|
-
)
|
|
113
|
-
msg = "No plain text part found in the email."
|
|
114
|
-
raise ValueError(msg)
|
|
115
|
-
|
|
116
|
-
def _get_message_data(self, service: Any, message: Any) -> ChatSession:
|
|
117
|
-
msg = service.users().messages().get(userId="me", id=message["id"]).execute()
|
|
118
|
-
message_content = self._extract_email_content(msg)
|
|
119
|
-
|
|
120
|
-
in_reply_to = None
|
|
121
|
-
email_data = msg["payload"]["headers"]
|
|
122
|
-
for values in email_data:
|
|
123
|
-
name = values["name"]
|
|
124
|
-
if name == "In-Reply-To":
|
|
125
|
-
in_reply_to = values["value"]
|
|
126
|
-
|
|
127
|
-
thread_id = msg["threadId"]
|
|
128
|
-
|
|
129
|
-
if in_reply_to:
|
|
130
|
-
thread = service.users().threads().get(userId="me", id=thread_id).execute()
|
|
131
|
-
messages = thread["messages"]
|
|
132
|
-
|
|
133
|
-
response_email = None
|
|
134
|
-
for _message in messages:
|
|
135
|
-
email_data = _message["payload"]["headers"]
|
|
136
|
-
for values in email_data:
|
|
137
|
-
if values["name"] == "Message-ID":
|
|
138
|
-
message_id = values["value"]
|
|
139
|
-
if message_id == in_reply_to:
|
|
140
|
-
response_email = _message
|
|
141
|
-
if response_email is None:
|
|
142
|
-
msg = "Response email not found in the thread."
|
|
143
|
-
raise ValueError(msg)
|
|
144
|
-
starter_content = self._extract_email_content(response_email)
|
|
145
|
-
return ChatSession(messages=[starter_content, message_content])
|
|
146
|
-
return ChatSession(messages=[message_content])
|
|
147
|
-
|
|
148
|
-
def lazy_load(self) -> Iterator[ChatSession]:
|
|
149
|
-
service = build("gmail", "v1", credentials=self.creds)
|
|
150
|
-
results = (
|
|
151
|
-
service.users().messages().list(userId="me", labelIds=self.label_ids, maxResults=self.n).execute()
|
|
152
|
-
)
|
|
153
|
-
messages = results.get("messages", [])
|
|
154
|
-
if not messages:
|
|
155
|
-
logger.warning("No messages found with the specified labels.")
|
|
156
|
-
for message in messages:
|
|
157
|
-
try:
|
|
158
|
-
yield self._get_message_data(service, message)
|
|
159
|
-
except Exception:
|
|
160
|
-
if self.raise_error:
|
|
161
|
-
raise
|
|
162
|
-
else:
|
|
163
|
-
logger.exception(f"Error processing message {message['id']}")
|
|
164
|
-
|
|
165
|
-
json_string = self.json_string
|
|
166
|
-
label_ids = self.label_ids.split(",") if self.label_ids else ["INBOX"]
|
|
167
|
-
max_results = int(self.max_results) if self.max_results else 100
|
|
168
|
-
|
|
169
|
-
# Load the token information from the JSON string
|
|
170
|
-
try:
|
|
171
|
-
token_info = json.loads(json_string)
|
|
172
|
-
except JSONDecodeError as e:
|
|
173
|
-
msg = "Invalid JSON string"
|
|
174
|
-
raise ValueError(msg) from e
|
|
175
|
-
|
|
176
|
-
creds = Credentials.from_authorized_user_info(token_info)
|
|
177
|
-
|
|
178
|
-
# Initialize the custom loader with the provided credentials
|
|
179
|
-
loader = CustomGMailLoader(creds=creds, n=max_results, label_ids=label_ids)
|
|
180
|
-
|
|
181
|
-
try:
|
|
182
|
-
docs = loader.load()
|
|
183
|
-
except RefreshError as e:
|
|
184
|
-
msg = "Authentication error: Unable to refresh authentication token. Please try to reauthenticate."
|
|
185
|
-
raise ValueError(msg) from e
|
|
186
|
-
except Exception as e:
|
|
187
|
-
msg = f"Error loading documents: {e}"
|
|
188
|
-
raise ValueError(msg) from e
|
|
189
|
-
|
|
190
|
-
# Return the loaded documents
|
|
191
|
-
self.status = docs
|
|
192
|
-
return Data(data={"text": docs})
|
|
@@ -1,157 +0,0 @@
|
|
|
1
|
-
import json
|
|
2
|
-
import re
|
|
3
|
-
from pathlib import Path
|
|
4
|
-
|
|
5
|
-
from google.auth.exceptions import RefreshError
|
|
6
|
-
from google.cloud import bigquery
|
|
7
|
-
from google.oauth2.service_account import Credentials
|
|
8
|
-
|
|
9
|
-
from langflow.custom import Component
|
|
10
|
-
from langflow.io import BoolInput, FileInput, MessageTextInput, Output
|
|
11
|
-
from langflow.schema.dataframe import DataFrame
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
class BigQueryExecutorComponent(Component):
|
|
15
|
-
display_name = "BigQuery"
|
|
16
|
-
description = "Execute SQL queries on Google BigQuery."
|
|
17
|
-
name = "BigQueryExecutor"
|
|
18
|
-
icon = "Google"
|
|
19
|
-
beta: bool = True
|
|
20
|
-
|
|
21
|
-
inputs = [
|
|
22
|
-
FileInput(
|
|
23
|
-
name="service_account_json_file",
|
|
24
|
-
display_name="Upload Service Account JSON",
|
|
25
|
-
info="Upload the JSON file containing Google Cloud service account credentials.",
|
|
26
|
-
file_types=["json"],
|
|
27
|
-
required=True,
|
|
28
|
-
),
|
|
29
|
-
MessageTextInput(
|
|
30
|
-
name="query",
|
|
31
|
-
display_name="SQL Query",
|
|
32
|
-
info="The SQL query to execute on BigQuery.",
|
|
33
|
-
required=True,
|
|
34
|
-
tool_mode=True,
|
|
35
|
-
),
|
|
36
|
-
BoolInput(
|
|
37
|
-
name="clean_query",
|
|
38
|
-
display_name="Clean Query",
|
|
39
|
-
info="When enabled, this will automatically clean up your SQL query.",
|
|
40
|
-
value=False,
|
|
41
|
-
advanced=True,
|
|
42
|
-
),
|
|
43
|
-
]
|
|
44
|
-
|
|
45
|
-
outputs = [
|
|
46
|
-
Output(display_name="Query Results", name="query_results", method="execute_sql"),
|
|
47
|
-
]
|
|
48
|
-
|
|
49
|
-
def _clean_sql_query(self, query: str) -> str:
|
|
50
|
-
"""Clean SQL query by removing surrounding quotes and whitespace.
|
|
51
|
-
|
|
52
|
-
Also extracts SQL statements from text that might contain other content.
|
|
53
|
-
|
|
54
|
-
Args:
|
|
55
|
-
query: The SQL query to clean
|
|
56
|
-
|
|
57
|
-
Returns:
|
|
58
|
-
The cleaned SQL query
|
|
59
|
-
"""
|
|
60
|
-
# First, try to extract SQL from code blocks
|
|
61
|
-
sql_pattern = r"```(?:sql)?\s*([\s\S]*?)\s*```"
|
|
62
|
-
sql_matches = re.findall(sql_pattern, query, re.IGNORECASE)
|
|
63
|
-
|
|
64
|
-
if sql_matches:
|
|
65
|
-
# If we found SQL in code blocks, use the first match
|
|
66
|
-
query = sql_matches[0]
|
|
67
|
-
else:
|
|
68
|
-
# If no code block, try to find SQL statements
|
|
69
|
-
# Look for common SQL keywords at the start of lines
|
|
70
|
-
sql_keywords = r"(?i)(SELECT|INSERT|UPDATE|DELETE|CREATE|ALTER|DROP|WITH|MERGE)"
|
|
71
|
-
lines = query.split("\n")
|
|
72
|
-
sql_lines = []
|
|
73
|
-
in_sql = False
|
|
74
|
-
|
|
75
|
-
for _line in lines:
|
|
76
|
-
line = _line.strip()
|
|
77
|
-
if re.match(sql_keywords, line):
|
|
78
|
-
in_sql = True
|
|
79
|
-
if in_sql:
|
|
80
|
-
sql_lines.append(line)
|
|
81
|
-
if line.endswith(";"):
|
|
82
|
-
in_sql = False
|
|
83
|
-
|
|
84
|
-
if sql_lines:
|
|
85
|
-
query = "\n".join(sql_lines)
|
|
86
|
-
|
|
87
|
-
# Remove any backticks that might be at the start or end
|
|
88
|
-
query = query.strip("`")
|
|
89
|
-
|
|
90
|
-
# Then remove surrounding quotes (single or double) if they exist
|
|
91
|
-
query = query.strip()
|
|
92
|
-
if (query.startswith('"') and query.endswith('"')) or (query.startswith("'") and query.endswith("'")):
|
|
93
|
-
query = query[1:-1]
|
|
94
|
-
|
|
95
|
-
# Finally, clean up any remaining whitespace and ensure no backticks remain
|
|
96
|
-
query = query.strip()
|
|
97
|
-
# Remove any remaining backticks, but preserve them if they're part of a table/column name
|
|
98
|
-
# This regex will remove backticks that are not part of a valid identifier
|
|
99
|
-
return re.sub(r"`(?![a-zA-Z0-9_])|(?<![a-zA-Z0-9_])`", "", query)
|
|
100
|
-
|
|
101
|
-
def execute_sql(self) -> DataFrame:
|
|
102
|
-
try:
|
|
103
|
-
# First try to read the file
|
|
104
|
-
try:
|
|
105
|
-
service_account_path = Path(self.service_account_json_file)
|
|
106
|
-
with service_account_path.open() as f:
|
|
107
|
-
credentials_json = json.load(f)
|
|
108
|
-
project_id = credentials_json.get("project_id")
|
|
109
|
-
if not project_id:
|
|
110
|
-
msg = "No project_id found in service account credentials file."
|
|
111
|
-
raise ValueError(msg)
|
|
112
|
-
except FileNotFoundError as e:
|
|
113
|
-
msg = f"Service account file not found: {e}"
|
|
114
|
-
raise ValueError(msg) from e
|
|
115
|
-
except json.JSONDecodeError as e:
|
|
116
|
-
msg = "Invalid JSON string for service account credentials"
|
|
117
|
-
raise ValueError(msg) from e
|
|
118
|
-
|
|
119
|
-
# Then try to load credentials
|
|
120
|
-
try:
|
|
121
|
-
credentials = Credentials.from_service_account_file(self.service_account_json_file)
|
|
122
|
-
except Exception as e:
|
|
123
|
-
msg = f"Error loading service account credentials: {e}"
|
|
124
|
-
raise ValueError(msg) from e
|
|
125
|
-
|
|
126
|
-
except ValueError:
|
|
127
|
-
raise
|
|
128
|
-
except Exception as e:
|
|
129
|
-
msg = f"Error executing BigQuery SQL query: {e}"
|
|
130
|
-
raise ValueError(msg) from e
|
|
131
|
-
|
|
132
|
-
try:
|
|
133
|
-
client = bigquery.Client(credentials=credentials, project=project_id)
|
|
134
|
-
|
|
135
|
-
# Check for empty or whitespace-only query before cleaning
|
|
136
|
-
if not str(self.query).strip():
|
|
137
|
-
msg = "No valid SQL query found in input text."
|
|
138
|
-
raise ValueError(msg)
|
|
139
|
-
|
|
140
|
-
# Always clean the query if it contains code block markers, quotes, or if clean_query is enabled
|
|
141
|
-
if "```" in str(self.query) or '"' in str(self.query) or "'" in str(self.query) or self.clean_query:
|
|
142
|
-
sql_query = self._clean_sql_query(str(self.query))
|
|
143
|
-
else:
|
|
144
|
-
sql_query = str(self.query).strip() # At minimum, strip whitespace
|
|
145
|
-
|
|
146
|
-
query_job = client.query(sql_query)
|
|
147
|
-
results = query_job.result()
|
|
148
|
-
output_dict = [dict(row) for row in results]
|
|
149
|
-
|
|
150
|
-
except RefreshError as e:
|
|
151
|
-
msg = "Authentication error: Unable to refresh authentication token. Please try to reauthenticate."
|
|
152
|
-
raise ValueError(msg) from e
|
|
153
|
-
except Exception as e:
|
|
154
|
-
msg = f"Error executing BigQuery SQL query: {e}"
|
|
155
|
-
raise ValueError(msg) from e
|
|
156
|
-
|
|
157
|
-
return DataFrame(output_dict)
|
|
@@ -1,92 +0,0 @@
|
|
|
1
|
-
import json
|
|
2
|
-
from json.decoder import JSONDecodeError
|
|
3
|
-
|
|
4
|
-
from google.auth.exceptions import RefreshError
|
|
5
|
-
from google.oauth2.credentials import Credentials
|
|
6
|
-
from langchain_google_community import GoogleDriveLoader
|
|
7
|
-
|
|
8
|
-
from langflow.custom.custom_component.component import Component
|
|
9
|
-
from langflow.helpers.data import docs_to_data
|
|
10
|
-
from langflow.inputs.inputs import MessageTextInput
|
|
11
|
-
from langflow.io import SecretStrInput
|
|
12
|
-
from langflow.schema.data import Data
|
|
13
|
-
from langflow.template.field.base import Output
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
class GoogleDriveComponent(Component):
|
|
17
|
-
display_name = "Google Drive Loader"
|
|
18
|
-
description = "Loads documents from Google Drive using provided credentials."
|
|
19
|
-
icon = "Google"
|
|
20
|
-
legacy: bool = True
|
|
21
|
-
|
|
22
|
-
inputs = [
|
|
23
|
-
SecretStrInput(
|
|
24
|
-
name="json_string",
|
|
25
|
-
display_name="JSON String of the Service Account Token",
|
|
26
|
-
info="JSON string containing OAuth 2.0 access token information for service account access",
|
|
27
|
-
required=True,
|
|
28
|
-
),
|
|
29
|
-
MessageTextInput(
|
|
30
|
-
name="document_id", display_name="Document ID", info="Single Google Drive document ID", required=True
|
|
31
|
-
),
|
|
32
|
-
]
|
|
33
|
-
|
|
34
|
-
outputs = [
|
|
35
|
-
Output(display_name="Loaded Documents", name="docs", method="load_documents"),
|
|
36
|
-
]
|
|
37
|
-
|
|
38
|
-
def load_documents(self) -> Data:
|
|
39
|
-
class CustomGoogleDriveLoader(GoogleDriveLoader):
|
|
40
|
-
creds: Credentials | None = None
|
|
41
|
-
"""Credentials object to be passed directly."""
|
|
42
|
-
|
|
43
|
-
def _load_credentials(self):
|
|
44
|
-
"""Load credentials from the provided creds attribute or fallback to the original method."""
|
|
45
|
-
if self.creds:
|
|
46
|
-
return self.creds
|
|
47
|
-
msg = "No credentials provided."
|
|
48
|
-
raise ValueError(msg)
|
|
49
|
-
|
|
50
|
-
class Config:
|
|
51
|
-
arbitrary_types_allowed = True
|
|
52
|
-
|
|
53
|
-
json_string = self.json_string
|
|
54
|
-
|
|
55
|
-
document_ids = [self.document_id]
|
|
56
|
-
if len(document_ids) != 1:
|
|
57
|
-
msg = "Expected a single document ID"
|
|
58
|
-
raise ValueError(msg)
|
|
59
|
-
|
|
60
|
-
# TODO: Add validation to check if the document ID is valid
|
|
61
|
-
|
|
62
|
-
# Load the token information from the JSON string
|
|
63
|
-
try:
|
|
64
|
-
token_info = json.loads(json_string)
|
|
65
|
-
except JSONDecodeError as e:
|
|
66
|
-
msg = "Invalid JSON string"
|
|
67
|
-
raise ValueError(msg) from e
|
|
68
|
-
|
|
69
|
-
# Initialize the custom loader with the provided credentials and document IDs
|
|
70
|
-
loader = CustomGoogleDriveLoader(
|
|
71
|
-
creds=Credentials.from_authorized_user_info(token_info), document_ids=document_ids
|
|
72
|
-
)
|
|
73
|
-
|
|
74
|
-
# Load the documents
|
|
75
|
-
try:
|
|
76
|
-
docs = loader.load()
|
|
77
|
-
# catch google.auth.exceptions.RefreshError
|
|
78
|
-
except RefreshError as e:
|
|
79
|
-
msg = "Authentication error: Unable to refresh authentication token. Please try to reauthenticate."
|
|
80
|
-
raise ValueError(msg) from e
|
|
81
|
-
except Exception as e:
|
|
82
|
-
msg = f"Error loading documents: {e}"
|
|
83
|
-
raise ValueError(msg) from e
|
|
84
|
-
|
|
85
|
-
if len(docs) != 1:
|
|
86
|
-
msg = "Expected a single document to be loaded."
|
|
87
|
-
raise ValueError(msg)
|
|
88
|
-
|
|
89
|
-
data = docs_to_data(docs)
|
|
90
|
-
# Return the loaded documents
|
|
91
|
-
self.status = data
|
|
92
|
-
return Data(data={"text": data})
|
|
@@ -1,152 +0,0 @@
|
|
|
1
|
-
import json
|
|
2
|
-
|
|
3
|
-
from google.oauth2.credentials import Credentials
|
|
4
|
-
from googleapiclient.discovery import build
|
|
5
|
-
|
|
6
|
-
from langflow.custom.custom_component.component import Component
|
|
7
|
-
from langflow.inputs.inputs import DropdownInput, MessageTextInput
|
|
8
|
-
from langflow.io import SecretStrInput
|
|
9
|
-
from langflow.schema.data import Data
|
|
10
|
-
from langflow.template.field.base import Output
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
class GoogleDriveSearchComponent(Component):
|
|
14
|
-
display_name = "Google Drive Search"
|
|
15
|
-
description = "Searches Google Drive files using provided credentials and query parameters."
|
|
16
|
-
icon = "Google"
|
|
17
|
-
legacy: bool = True
|
|
18
|
-
|
|
19
|
-
inputs = [
|
|
20
|
-
SecretStrInput(
|
|
21
|
-
name="token_string",
|
|
22
|
-
display_name="Token String",
|
|
23
|
-
info="JSON string containing OAuth 2.0 access token information for service account access",
|
|
24
|
-
required=True,
|
|
25
|
-
),
|
|
26
|
-
DropdownInput(
|
|
27
|
-
name="query_item",
|
|
28
|
-
display_name="Query Item",
|
|
29
|
-
options=[
|
|
30
|
-
"name",
|
|
31
|
-
"fullText",
|
|
32
|
-
"mimeType",
|
|
33
|
-
"modifiedTime",
|
|
34
|
-
"viewedByMeTime",
|
|
35
|
-
"trashed",
|
|
36
|
-
"starred",
|
|
37
|
-
"parents",
|
|
38
|
-
"owners",
|
|
39
|
-
"writers",
|
|
40
|
-
"readers",
|
|
41
|
-
"sharedWithMe",
|
|
42
|
-
"createdTime",
|
|
43
|
-
"properties",
|
|
44
|
-
"appProperties",
|
|
45
|
-
"visibility",
|
|
46
|
-
"shortcutDetails.targetId",
|
|
47
|
-
],
|
|
48
|
-
info="The field to query.",
|
|
49
|
-
required=True,
|
|
50
|
-
),
|
|
51
|
-
DropdownInput(
|
|
52
|
-
name="valid_operator",
|
|
53
|
-
display_name="Valid Operator",
|
|
54
|
-
options=["contains", "=", "!=", "<=", "<", ">", ">=", "in", "has"],
|
|
55
|
-
info="Operator to use in the query.",
|
|
56
|
-
required=True,
|
|
57
|
-
),
|
|
58
|
-
MessageTextInput(
|
|
59
|
-
name="search_term",
|
|
60
|
-
display_name="Search Term",
|
|
61
|
-
info="The value to search for in the specified query item.",
|
|
62
|
-
required=True,
|
|
63
|
-
),
|
|
64
|
-
MessageTextInput(
|
|
65
|
-
name="query_string",
|
|
66
|
-
display_name="Query String",
|
|
67
|
-
info="The query string used for searching. You can edit this manually.",
|
|
68
|
-
value="", # This will be updated with the generated query string
|
|
69
|
-
),
|
|
70
|
-
]
|
|
71
|
-
|
|
72
|
-
outputs = [
|
|
73
|
-
Output(display_name="Document URLs", name="doc_urls", method="search_doc_urls"),
|
|
74
|
-
Output(display_name="Document IDs", name="doc_ids", method="search_doc_ids"),
|
|
75
|
-
Output(display_name="Document Titles", name="doc_titles", method="search_doc_titles"),
|
|
76
|
-
Output(display_name="Data", name="Data", method="search_data"),
|
|
77
|
-
]
|
|
78
|
-
|
|
79
|
-
def generate_query_string(self) -> str:
|
|
80
|
-
query_item = self.query_item
|
|
81
|
-
valid_operator = self.valid_operator
|
|
82
|
-
search_term = self.search_term
|
|
83
|
-
|
|
84
|
-
# Construct the query string
|
|
85
|
-
query = f"{query_item} {valid_operator} '{search_term}'"
|
|
86
|
-
|
|
87
|
-
# Update the editable query string input with the generated query
|
|
88
|
-
self.query_string = query
|
|
89
|
-
|
|
90
|
-
return query
|
|
91
|
-
|
|
92
|
-
def on_inputs_changed(self) -> None:
|
|
93
|
-
# Automatically regenerate the query string when inputs change
|
|
94
|
-
self.generate_query_string()
|
|
95
|
-
|
|
96
|
-
def generate_file_url(self, file_id: str, mime_type: str) -> str:
|
|
97
|
-
"""Generates the appropriate Google Drive URL for a file based on its MIME type."""
|
|
98
|
-
return {
|
|
99
|
-
"application/vnd.google-apps.document": f"https://docs.google.com/document/d/{file_id}/edit",
|
|
100
|
-
"application/vnd.google-apps.spreadsheet": f"https://docs.google.com/spreadsheets/d/{file_id}/edit",
|
|
101
|
-
"application/vnd.google-apps.presentation": f"https://docs.google.com/presentation/d/{file_id}/edit",
|
|
102
|
-
"application/vnd.google-apps.drawing": f"https://docs.google.com/drawings/d/{file_id}/edit",
|
|
103
|
-
"application/pdf": f"https://drive.google.com/file/d/{file_id}/view?usp=drivesdk",
|
|
104
|
-
}.get(mime_type, f"https://drive.google.com/file/d/{file_id}/view?usp=drivesdk")
|
|
105
|
-
|
|
106
|
-
def search_files(self) -> dict:
|
|
107
|
-
# Load the token information from the JSON string
|
|
108
|
-
token_info = json.loads(self.token_string)
|
|
109
|
-
creds = Credentials.from_authorized_user_info(token_info)
|
|
110
|
-
|
|
111
|
-
# Use the query string from the input (which might have been edited by the user)
|
|
112
|
-
query = self.query_string or self.generate_query_string()
|
|
113
|
-
|
|
114
|
-
# Initialize the Google Drive API service
|
|
115
|
-
service = build("drive", "v3", credentials=creds)
|
|
116
|
-
|
|
117
|
-
# Perform the search
|
|
118
|
-
results = service.files().list(q=query, pageSize=5, fields="nextPageToken, files(id, name, mimeType)").execute()
|
|
119
|
-
items = results.get("files", [])
|
|
120
|
-
|
|
121
|
-
doc_urls = []
|
|
122
|
-
doc_ids = []
|
|
123
|
-
doc_titles_urls = []
|
|
124
|
-
doc_titles = []
|
|
125
|
-
|
|
126
|
-
if items:
|
|
127
|
-
for item in items:
|
|
128
|
-
# Directly use the file ID, title, and MIME type to generate the URL
|
|
129
|
-
file_id = item["id"]
|
|
130
|
-
file_title = item["name"]
|
|
131
|
-
mime_type = item["mimeType"]
|
|
132
|
-
file_url = self.generate_file_url(file_id, mime_type)
|
|
133
|
-
|
|
134
|
-
# Store the URL, ID, and title+URL in their respective lists
|
|
135
|
-
doc_urls.append(file_url)
|
|
136
|
-
doc_ids.append(file_id)
|
|
137
|
-
doc_titles.append(file_title)
|
|
138
|
-
doc_titles_urls.append({"title": file_title, "url": file_url})
|
|
139
|
-
|
|
140
|
-
return {"doc_urls": doc_urls, "doc_ids": doc_ids, "doc_titles_urls": doc_titles_urls, "doc_titles": doc_titles}
|
|
141
|
-
|
|
142
|
-
def search_doc_ids(self) -> list[str]:
|
|
143
|
-
return self.search_files()["doc_ids"]
|
|
144
|
-
|
|
145
|
-
def search_doc_urls(self) -> list[str]:
|
|
146
|
-
return self.search_files()["doc_urls"]
|
|
147
|
-
|
|
148
|
-
def search_doc_titles(self) -> list[str]:
|
|
149
|
-
return self.search_files()["doc_titles"]
|
|
150
|
-
|
|
151
|
-
def search_data(self) -> Data:
|
|
152
|
-
return Data(data={"text": self.search_files()["doc_titles_urls"]})
|