langflow-base-nightly 0.5.0.dev37__py3-none-any.whl → 0.5.0.dev38__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.
Files changed (335) hide show
  1. langflow/__main__.py +1 -1
  2. langflow/alembic/versions/4e5980a44eaa_fix_date_times_again.py +24 -30
  3. langflow/alembic/versions/58b28437a398_modify_nullable.py +6 -6
  4. langflow/alembic/versions/79e675cb6752_change_datetime_type.py +24 -30
  5. langflow/alembic/versions/b2fa308044b5_add_unique_constraints.py +12 -13
  6. langflow/api/build.py +21 -26
  7. langflow/api/health_check_router.py +3 -3
  8. langflow/api/utils.py +3 -3
  9. langflow/api/v1/callback.py +2 -2
  10. langflow/api/v1/chat.py +19 -31
  11. langflow/api/v1/endpoints.py +10 -10
  12. langflow/api/v1/flows.py +1 -1
  13. langflow/api/v1/knowledge_bases.py +3 -3
  14. langflow/api/v1/mcp.py +12 -12
  15. langflow/api/v1/mcp_projects.py +45 -81
  16. langflow/api/v1/mcp_utils.py +8 -8
  17. langflow/api/v1/schemas.py +1 -5
  18. langflow/api/v1/store.py +1 -1
  19. langflow/api/v1/validate.py +2 -2
  20. langflow/api/v1/voice_mode.py +58 -62
  21. langflow/api/v2/files.py +2 -2
  22. langflow/api/v2/mcp.py +10 -9
  23. langflow/base/composio/composio_base.py +21 -2
  24. langflow/base/data/docling_utils.py +194 -0
  25. langflow/base/embeddings/aiml_embeddings.py +1 -1
  26. langflow/base/flow_processing/utils.py +1 -2
  27. langflow/base/io/__init__.py +0 -1
  28. langflow/base/langwatch/utils.py +2 -1
  29. langflow/base/mcp/util.py +49 -47
  30. langflow/base/prompts/api_utils.py +1 -1
  31. langflow/base/tools/flow_tool.py +2 -2
  32. langflow/base/tools/run_flow.py +2 -6
  33. langflow/components/Notion/add_content_to_page.py +2 -2
  34. langflow/components/Notion/list_database_properties.py +2 -2
  35. langflow/components/Notion/list_pages.py +2 -2
  36. langflow/components/Notion/page_content_viewer.py +2 -2
  37. langflow/components/Notion/update_page_property.py +1 -1
  38. langflow/components/agentql/agentql_api.py +2 -10
  39. langflow/components/agents/agent.py +3 -3
  40. langflow/components/agents/mcp_component.py +14 -14
  41. langflow/components/anthropic/anthropic.py +5 -4
  42. langflow/components/assemblyai/assemblyai_get_subtitles.py +2 -2
  43. langflow/components/assemblyai/assemblyai_lemur.py +2 -2
  44. langflow/components/assemblyai/assemblyai_list_transcripts.py +2 -2
  45. langflow/components/assemblyai/assemblyai_poll_transcript.py +2 -2
  46. langflow/components/assemblyai/assemblyai_start_transcript.py +2 -2
  47. langflow/components/data/file.py +575 -55
  48. langflow/components/data/url.py +1 -1
  49. langflow/components/datastax/astra_assistant_manager.py +3 -3
  50. langflow/components/datastax/create_assistant.py +1 -2
  51. langflow/components/deactivated/merge_data.py +1 -2
  52. langflow/components/deactivated/sub_flow.py +6 -7
  53. langflow/components/deactivated/vectara_self_query.py +3 -3
  54. langflow/components/docling/__init__.py +0 -198
  55. langflow/components/docling/docling_inline.py +1 -1
  56. langflow/components/embeddings/text_embedder.py +3 -3
  57. langflow/components/firecrawl/firecrawl_extract_api.py +2 -9
  58. langflow/components/google/gmail.py +1 -1
  59. langflow/components/google/google_generative_ai.py +5 -11
  60. langflow/components/groq/groq.py +4 -3
  61. langflow/components/helpers/current_date.py +2 -3
  62. langflow/components/helpers/memory.py +1 -1
  63. langflow/components/ibm/watsonx.py +1 -1
  64. langflow/components/ibm/watsonx_embeddings.py +1 -1
  65. langflow/components/langwatch/langwatch.py +3 -3
  66. langflow/components/logic/flow_tool.py +2 -2
  67. langflow/components/logic/notify.py +1 -1
  68. langflow/components/logic/run_flow.py +2 -3
  69. langflow/components/logic/sub_flow.py +4 -5
  70. langflow/components/mem0/mem0_chat_memory.py +2 -8
  71. langflow/components/nvidia/nvidia.py +3 -3
  72. langflow/components/olivya/olivya.py +7 -7
  73. langflow/components/ollama/ollama.py +8 -6
  74. langflow/components/processing/batch_run.py +8 -8
  75. langflow/components/processing/data_operations.py +2 -2
  76. langflow/components/processing/merge_data.py +1 -2
  77. langflow/components/processing/message_to_data.py +2 -3
  78. langflow/components/processing/parse_json_data.py +1 -1
  79. langflow/components/prototypes/python_function.py +2 -3
  80. langflow/components/serpapi/serp.py +1 -1
  81. langflow/components/tavily/tavily_extract.py +1 -1
  82. langflow/components/tavily/tavily_search.py +1 -1
  83. langflow/components/tools/calculator.py +2 -2
  84. langflow/components/tools/python_code_structured_tool.py +3 -10
  85. langflow/components/tools/python_repl.py +2 -2
  86. langflow/components/tools/searxng.py +3 -3
  87. langflow/components/tools/serp_api.py +2 -2
  88. langflow/components/tools/tavily_search_tool.py +2 -2
  89. langflow/components/tools/yahoo_finance.py +1 -1
  90. langflow/components/twelvelabs/video_embeddings.py +4 -4
  91. langflow/components/vectorstores/local_db.py +1 -1
  92. langflow/components/yahoosearch/yahoo.py +1 -1
  93. langflow/components/youtube/trending.py +3 -4
  94. langflow/custom/attributes.py +2 -1
  95. langflow/custom/code_parser/code_parser.py +1 -1
  96. langflow/custom/custom_component/base_component.py +1 -1
  97. langflow/custom/custom_component/component.py +16 -2
  98. langflow/custom/directory_reader/directory_reader.py +7 -7
  99. langflow/custom/directory_reader/utils.py +1 -2
  100. langflow/custom/utils.py +30 -30
  101. langflow/events/event_manager.py +1 -1
  102. langflow/frontend/assets/{SlackIcon-CnvyOamQ.js → SlackIcon-BhW6H3JR.js} +1 -1
  103. langflow/frontend/assets/{Wikipedia-nyTEXdr2.js → Wikipedia-Dx5jbiy3.js} +1 -1
  104. langflow/frontend/assets/{Wolfram-BYMQkNSq.js → Wolfram-CIyonzwo.js} +1 -1
  105. langflow/frontend/assets/{index-HK3bVMYA.js → index-0XQqYgdG.js} +1 -1
  106. langflow/frontend/assets/{index-BZgXW854.js → index-1Q3VBqKn.js} +1 -1
  107. langflow/frontend/assets/{index-BQ6NUdMY.js → index-35sspuLu.js} +1 -1
  108. langflow/frontend/assets/{index-DPCzHdsC.js → index-7hzXChQz.js} +1 -1
  109. langflow/frontend/assets/{index-CFDvOtKC.js → index-8cuhogZP.js} +1 -1
  110. langflow/frontend/assets/{index-CYDAYm-i.js → index-B0m53xKd.js} +1 -1
  111. langflow/frontend/assets/{index-Q9vDw0Xl.js → index-B1XqWJhG.js} +1 -1
  112. langflow/frontend/assets/{index-Gkrq-vzm.js → index-B3KCdQ91.js} +1 -1
  113. langflow/frontend/assets/{index-DytJENYD.js → index-B7uEuOPK.js} +1 -1
  114. langflow/frontend/assets/{index-DkXy1WFo.js → index-B8UR8v-Q.js} +1 -1
  115. langflow/frontend/assets/{index-BChjg6Az.js → index-BD7Io1hL.js} +6 -6
  116. langflow/frontend/assets/{index-CyPvTB63.js → index-BDQrd7Tj.js} +1 -1
  117. langflow/frontend/assets/{index-BbJjt5m4.js → index-BDuk0d7P.js} +1 -1
  118. langflow/frontend/assets/{index-BBxAPk1y.js → index-BFQ8KFK0.js} +1 -1
  119. langflow/frontend/assets/{index-BqPpO6KG.js → index-BFf0HTFI.js} +1 -1
  120. langflow/frontend/assets/{index-yCHsaqs8.js → index-BHhnpSkW.js} +1 -1
  121. langflow/frontend/assets/{index-Bd6WtbKA.js → index-BKKrUElc.js} +1 -1
  122. langflow/frontend/assets/{index-DHq8TQPB.js → index-BKeZt2hQ.js} +1 -1
  123. langflow/frontend/assets/{index-BCCGvqay.js → index-BKlQbl-6.js} +1 -1
  124. langflow/frontend/assets/{index-Boso-xEw.js → index-BLYw9MK2.js} +1 -1
  125. langflow/frontend/assets/{index-DmMDPoi0.js → index-BLsVo9iW.js} +1 -1
  126. langflow/frontend/assets/{index-Car-zdor.js → index-BNQIbda3.js} +1 -1
  127. langflow/frontend/assets/{index-Dg-63Si_.js → index-BPR2mEFC.js} +1 -1
  128. langflow/frontend/assets/{index-CTrt1Q_j.js → index-BPfdqCc_.js} +1 -1
  129. langflow/frontend/assets/{index-CVQmT7ZL.js → index-BQrVDjR1.js} +1 -1
  130. langflow/frontend/assets/{index-BB15_iOb.js → index-BRmSeoWR.js} +1 -1
  131. langflow/frontend/assets/{index-BX5D-USa.js → index-BUse-kxM.js} +1 -1
  132. langflow/frontend/assets/{index-CaQ_H9ww.js → index-BVFaF7HW.js} +1 -1
  133. langflow/frontend/assets/{index-C26RqKWL.js → index-BWgIWfv2.js} +1 -1
  134. langflow/frontend/assets/{index-DbMFlnHE.js → index-BWt5xGeA.js} +1 -1
  135. langflow/frontend/assets/{index-Db71w3lq.js → index-BYhcGLTV.js} +1 -1
  136. langflow/frontend/assets/{index-DzW2mfkK.js → index-BYjw7Gk3.js} +1 -1
  137. langflow/frontend/assets/{index-DJB12jIC.js → index-BZFljdMa.js} +1 -1
  138. langflow/frontend/assets/{index-nVwHLjuV.js → index-BcAgItH4.js} +1 -1
  139. langflow/frontend/assets/{index-DkelbYy7.js → index-Bct1s6__.js} +1 -1
  140. langflow/frontend/assets/{index-ChXJpBz4.js → index-Bhv79Zso.js} +1 -1
  141. langflow/frontend/assets/{index-BxEuHa76.js → index-Bj3lSwvZ.js} +1 -1
  142. langflow/frontend/assets/{index-BkPYpfgw.js → index-Bk4mTwnI.js} +1 -1
  143. langflow/frontend/assets/{index-BvT7L317.js → index-BmIx1cws.js} +1 -1
  144. langflow/frontend/assets/{index-DIDDfmlJ.js → index-BmYJJ5YS.js} +1 -1
  145. langflow/frontend/assets/{index-C7QWbnLK.js → index-BnAFhkSN.js} +1 -1
  146. langflow/frontend/assets/{index-CJo_cyWW.js → index-Bo-ww0Bb.js} +1 -1
  147. langflow/frontend/assets/{index-DjQETUy8.js → index-BpmqDOeZ.js} +1 -1
  148. langflow/frontend/assets/{index-ya2uXE8v.js → index-BrVhdPZb.js} +1 -1
  149. langflow/frontend/assets/{index-DCRk27Tp.js → index-BvGQfVBD.js} +1 -1
  150. langflow/frontend/assets/{index-BTrsh9LS.js → index-Bwi4flFg.js} +1 -1
  151. langflow/frontend/assets/{index-BRxvproo.js → index-BzoRPtTY.js} +1 -1
  152. langflow/frontend/assets/{index-BIQQCMvz.js → index-C--IDAyc.js} +1 -1
  153. langflow/frontend/assets/{index-DfngcQxO.js → index-C0E3_MIK.js} +1 -1
  154. langflow/frontend/assets/{index-Bvxg4_ux.js → index-C27Jj_26.js} +1 -1
  155. langflow/frontend/assets/{index-D8lOi1GI.js → index-C2eQmQsn.js} +1 -1
  156. langflow/frontend/assets/{index-rXV1G1aB.js → index-C8K0r39B.js} +1 -1
  157. langflow/frontend/assets/{index-B3Sur4Z3.js → index-CEJNWPhA.js} +1 -1
  158. langflow/frontend/assets/{index-BR0bkVqX.js → index-CFNTYfFK.js} +1 -1
  159. langflow/frontend/assets/{index-Bnqod3vk.js → index-CMHpjHZl.js} +1 -1
  160. langflow/frontend/assets/{index-BLGYN-9b.js → index-CSu8KHOi.js} +1 -1
  161. langflow/frontend/assets/{index-BOB_zsjl.js → index-CUKmGsI6.js} +1 -1
  162. langflow/frontend/assets/{index-BzEUlaw_.js → index-CWYiSeWV.js} +1 -1
  163. langflow/frontend/assets/{index-DVlceYFD.js → index-CY7_TBTC.js} +1 -1
  164. langflow/frontend/assets/{index-D3DDfngy.js → index-CbnWRlYY.js} +1 -1
  165. langflow/frontend/assets/{index-cvZdgWHQ.js → index-CfPBgkqg.js} +1 -1
  166. langflow/frontend/assets/{index-Ui4xUImO.js → index-Cg53lrYh.js} +1 -1
  167. langflow/frontend/assets/{index-C6jri9Wm.js → index-CgU7KF4I.js} +1 -1
  168. langflow/frontend/assets/{index-BVEZDXxS.js → index-CgwykVGh.js} +1 -1
  169. langflow/frontend/assets/{index-BOeo01QB.js → index-Ch5r0oW6.js} +1 -1
  170. langflow/frontend/assets/{index-D6PSjHxP.js → index-CjsommIr.js} +1 -1
  171. langflow/frontend/assets/{index-pCQ_yw8m.js → index-CkK25zZO.js} +1 -1
  172. langflow/frontend/assets/{index-BFp_O-c9.js → index-CkjwSTSM.js} +1 -1
  173. langflow/frontend/assets/{index-Du_18NCU.js → index-CmSFKgiD.js} +1 -1
  174. langflow/frontend/assets/{index-BvwZfF2i.js → index-Cr5v2ave.js} +1 -1
  175. langflow/frontend/assets/{index-FUxmznS-.js → index-CrAF-31Y.js} +1 -1
  176. langflow/frontend/assets/{index-C-2hghRJ.js → index-CsLQiWNf.js} +1 -1
  177. langflow/frontend/assets/{index-C_TdzfAn.js → index-CuCM7Wu7.js} +1 -1
  178. langflow/frontend/assets/{index-D5_DsUJc.js → index-Cxy9sEpy.js} +1 -1
  179. langflow/frontend/assets/{index-C_veJlEb.js → index-CyP3py8K.js} +1 -1
  180. langflow/frontend/assets/{index-OazXJdEl.js → index-CzHzeZuA.js} +1 -1
  181. langflow/frontend/assets/{index-CvcEzq4x.js → index-D1oynC8a.js} +1 -1
  182. langflow/frontend/assets/{index-CZQ9rXNa.js → index-D4tjMhfY.js} +1 -1
  183. langflow/frontend/assets/{index-B1YN7oMV.js → index-D6CSIrp1.js} +1 -1
  184. langflow/frontend/assets/{index-DfxYyS3M.js → index-D9kwEzPB.js} +1 -1
  185. langflow/frontend/assets/{index-BbRm7beF.js → index-DDXsm8tz.js} +1 -1
  186. langflow/frontend/assets/{index-xuIrH2Dq.js → index-DDhJVVel.js} +1 -1
  187. langflow/frontend/assets/{index-CmplyEaa.js → index-DH6o91_s.js} +1 -1
  188. langflow/frontend/assets/{index-DnEGCgih.js → index-DHngW1k8.js} +1 -1
  189. langflow/frontend/assets/{index-ajRge-Mg.js → index-DIKUsGLF.js} +1 -1
  190. langflow/frontend/assets/{index-DpClkXIV.js → index-DJESSNJi.js} +1 -1
  191. langflow/frontend/assets/{index-8WdfSTTz.js → index-DMCWDJOl.js} +1 -1
  192. langflow/frontend/assets/{index-DZTC5pdT.js → index-DOEvKC2X.js} +1 -1
  193. langflow/frontend/assets/{index-DysKpOuj.js → index-DOQDkSoK.js} +1 -1
  194. langflow/frontend/assets/{index-C82JjCPD.js → index-DXAfIEvs.js} +1 -1
  195. langflow/frontend/assets/{index-D8GJngXa.js → index-DZP_SaHb.js} +1 -1
  196. langflow/frontend/assets/{index-DIkNW9Cd.js → index-DZxUIhWh.js} +1 -1
  197. langflow/frontend/assets/{index-DK1Ptcc4.js → index-Dda2u_yz.js} +1 -1
  198. langflow/frontend/assets/{index-BWmPX4iQ.js → index-Dg8N3NSO.js} +1 -1
  199. langflow/frontend/assets/{index-CWdkbVsd.js → index-DkGhPNeA.js} +1 -1
  200. langflow/frontend/assets/{index-DF5VwgU6.js → index-Dka_Rk4-.js} +1 -1
  201. langflow/frontend/assets/{index-Bsa0xZyL.js → index-DljpLeCW.js} +1 -1
  202. langflow/frontend/assets/{index-CLPdN-q6.js → index-DnVYJtVO.js} +1 -1
  203. langflow/frontend/assets/{index-CxvP91st.js → index-DqbzUcI5.js} +1 -1
  204. langflow/frontend/assets/{index-BIzTEqFh.js → index-Dr6pVDPI.js} +1 -1
  205. langflow/frontend/assets/{index-tVYiABdp.js → index-DsoX2o1S.js} +1 -1
  206. langflow/frontend/assets/{index-CCePCqkT.js → index-DwfHWnX7.js} +1 -1
  207. langflow/frontend/assets/{index-BEMw2Np8.js → index-Dx-Z87KT.js} +1 -1
  208. langflow/frontend/assets/{index-BRYjyhAd.js → index-DyqITq51.js} +1 -1
  209. langflow/frontend/assets/{index-l7bzB8Ex.js → index-DzIv3RyR.js} +1 -1
  210. langflow/frontend/assets/{index-D-9TI74R.js → index-G4ro0MjT.js} +1 -1
  211. langflow/frontend/assets/{index-CCxGSSTT.js → index-H7J7w7fa.js} +1 -1
  212. langflow/frontend/assets/{index-_UcqeEjm.js → index-KWY77KfV.js} +1 -1
  213. langflow/frontend/assets/{index-Dqd4RjYA.js → index-U9GWm1eH.js} +1 -1
  214. langflow/frontend/assets/{index-Dq5ilsem.js → index-Un9pWxnP.js} +1 -1
  215. langflow/frontend/assets/{index-BzL_EoKd.js → index-Xi4TplbI.js} +1 -1
  216. langflow/frontend/assets/{index-LbYjHKkn.js → index-_cbGmjF4.js} +1 -1
  217. langflow/frontend/assets/{index-DGRMNe9n.js → index-cEXY6V06.js} +1 -1
  218. langflow/frontend/assets/{index-8yMsjVV2.js → index-dyXKnkMi.js} +1 -1
  219. langflow/frontend/assets/{index-DKHNourL.js → index-eUkS6iJM.js} +1 -1
  220. langflow/frontend/assets/{index-Bv8h2Z-q.js → index-ekfMOqrF.js} +1 -1
  221. langflow/frontend/assets/{index-B748uLP1.js → index-gdb7XMS8.js} +1 -1
  222. langflow/frontend/assets/{index-CpvYQ0ug.js → index-hZUcL0MZ.js} +1 -1
  223. langflow/frontend/assets/{index-BIXaW2aY.js → index-kkA-qHB_.js} +1 -1
  224. langflow/frontend/assets/{index-BhIOhlCH.js → index-mzl9ULw5.js} +1 -1
  225. langflow/frontend/assets/{index-CYe8Ipef.js → index-oxHBZk2v.js} +1 -1
  226. langflow/frontend/assets/{index-WPFivmdQ.js → index-p2kStSPe.js} +1 -1
  227. langflow/frontend/assets/{index-BmX5CoED.js → index-paQEWYGT.js} +1 -1
  228. langflow/frontend/assets/{index-CpcbQZIF.js → index-r_8gs4nL.js} +1 -1
  229. langflow/frontend/assets/{index-dcnYpT9N.js → index-uiKla4UR.js} +1 -1
  230. langflow/frontend/assets/{index-BTEW9e8P.js → index-vJOO5U8M.js} +1 -1
  231. langflow/frontend/assets/{index-CQMoqLAu.js → index-w72fDjpG.js} +1 -1
  232. langflow/frontend/assets/{index-Dsps-jKu.js → index-zV82kQ6k.js} +1 -1
  233. langflow/frontend/assets/lazyIconImports-DTNgvPE-.js +2 -0
  234. langflow/frontend/assets/{use-post-add-user-BrBYH9eR.js → use-post-add-user-CvtuazTg.js} +1 -1
  235. langflow/frontend/index.html +1 -1
  236. langflow/graph/edge/base.py +2 -3
  237. langflow/graph/graph/base.py +14 -12
  238. langflow/graph/graph/constants.py +3 -0
  239. langflow/graph/utils.py +6 -6
  240. langflow/graph/vertex/base.py +4 -5
  241. langflow/graph/vertex/param_handler.py +1 -1
  242. langflow/graph/vertex/vertex_types.py +2 -2
  243. langflow/helpers/flow.py +1 -1
  244. langflow/initial_setup/setup.py +32 -30
  245. langflow/initial_setup/starter_projects/Blog Writer.json +2 -2
  246. langflow/initial_setup/starter_projects/Custom Component Generator.json +2 -2
  247. langflow/initial_setup/starter_projects/Document Q&A.json +1 -1
  248. langflow/initial_setup/starter_projects/Instagram Copywriter.json +3 -3
  249. langflow/initial_setup/starter_projects/Invoice Summarizer.json +1 -1
  250. langflow/initial_setup/starter_projects/Knowledge Ingestion.json +2 -2
  251. langflow/initial_setup/starter_projects/Market Research.json +3 -3
  252. langflow/initial_setup/starter_projects/Meeting Summary.json +6 -6
  253. langflow/initial_setup/starter_projects/Memory Chatbot.json +2 -2
  254. langflow/initial_setup/starter_projects/News Aggregator.json +3 -3
  255. langflow/initial_setup/starter_projects/Nvidia Remix.json +3 -3
  256. langflow/initial_setup/starter_projects/Pok/303/251dex Agent.json" +1 -1
  257. langflow/initial_setup/starter_projects/Portfolio Website Code Generator.json +1 -1
  258. langflow/initial_setup/starter_projects/Price Deal Finder.json +5 -5
  259. langflow/initial_setup/starter_projects/Research Agent.json +3 -3
  260. langflow/initial_setup/starter_projects/SaaS Pricing.json +1 -1
  261. langflow/initial_setup/starter_projects/Search agent.json +1 -1
  262. langflow/initial_setup/starter_projects/Sequential Tasks Agents.json +7 -7
  263. langflow/initial_setup/starter_projects/Simple Agent.json +3 -3
  264. langflow/initial_setup/starter_projects/Social Media Agent.json +1 -1
  265. langflow/initial_setup/starter_projects/Text Sentiment Analysis.json +1 -1
  266. langflow/initial_setup/starter_projects/Travel Planning Agents.json +3 -3
  267. langflow/initial_setup/starter_projects/Vector Store RAG.json +1 -1
  268. langflow/initial_setup/starter_projects/Youtube Analysis.json +3 -3
  269. langflow/interface/components.py +23 -22
  270. langflow/interface/initialize/loading.py +5 -5
  271. langflow/interface/run.py +1 -1
  272. langflow/interface/utils.py +1 -1
  273. langflow/io/__init__.py +0 -1
  274. langflow/langflow_launcher.py +1 -1
  275. langflow/load/load.py +2 -7
  276. langflow/logging/__init__.py +0 -1
  277. langflow/logging/logger.py +191 -115
  278. langflow/logging/setup.py +1 -1
  279. langflow/main.py +37 -52
  280. langflow/memory.py +7 -7
  281. langflow/middleware.py +1 -1
  282. langflow/processing/process.py +3 -3
  283. langflow/schema/artifact.py +2 -2
  284. langflow/schema/data.py +10 -2
  285. langflow/schema/dataframe.py +1 -1
  286. langflow/schema/message.py +1 -1
  287. langflow/serialization/serialization.py +1 -1
  288. langflow/services/auth/utils.py +2 -2
  289. langflow/services/cache/disk.py +1 -1
  290. langflow/services/cache/service.py +3 -3
  291. langflow/services/database/models/flow/model.py +2 -7
  292. langflow/services/database/models/transactions/crud.py +2 -2
  293. langflow/services/database/models/user/crud.py +2 -2
  294. langflow/services/database/service.py +8 -8
  295. langflow/services/database/utils.py +6 -5
  296. langflow/services/deps.py +2 -3
  297. langflow/services/factory.py +1 -1
  298. langflow/services/flow/flow_runner.py +7 -12
  299. langflow/services/job_queue/service.py +16 -15
  300. langflow/services/manager.py +3 -4
  301. langflow/services/settings/auth.py +1 -1
  302. langflow/services/settings/base.py +3 -8
  303. langflow/services/settings/manager.py +1 -1
  304. langflow/services/settings/utils.py +1 -1
  305. langflow/services/socket/__init__.py +0 -1
  306. langflow/services/socket/service.py +3 -3
  307. langflow/services/socket/utils.py +4 -4
  308. langflow/services/state/service.py +1 -2
  309. langflow/services/storage/factory.py +1 -1
  310. langflow/services/storage/local.py +9 -8
  311. langflow/services/storage/s3.py +11 -10
  312. langflow/services/store/service.py +3 -3
  313. langflow/services/store/utils.py +3 -2
  314. langflow/services/task/temp_flow_cleanup.py +7 -7
  315. langflow/services/telemetry/service.py +10 -10
  316. langflow/services/tracing/arize_phoenix.py +2 -2
  317. langflow/services/tracing/langfuse.py +1 -1
  318. langflow/services/tracing/langsmith.py +1 -1
  319. langflow/services/tracing/langwatch.py +1 -1
  320. langflow/services/tracing/opik.py +1 -1
  321. langflow/services/tracing/service.py +25 -6
  322. langflow/services/tracing/traceloop.py +245 -0
  323. langflow/services/utils.py +7 -7
  324. langflow/services/variable/kubernetes.py +3 -3
  325. langflow/services/variable/kubernetes_secrets.py +2 -1
  326. langflow/services/variable/service.py +5 -5
  327. langflow/utils/component_utils.py +9 -6
  328. langflow/utils/util.py +5 -5
  329. langflow/utils/validate.py +3 -3
  330. langflow/utils/voice_utils.py +2 -2
  331. {langflow_base_nightly-0.5.0.dev37.dist-info → langflow_base_nightly-0.5.0.dev38.dist-info}/METADATA +2 -1
  332. {langflow_base_nightly-0.5.0.dev37.dist-info → langflow_base_nightly-0.5.0.dev38.dist-info}/RECORD +334 -333
  333. langflow/frontend/assets/lazyIconImports-t6wEndt1.js +0 -2
  334. {langflow_base_nightly-0.5.0.dev37.dist-info → langflow_base_nightly-0.5.0.dev38.dist-info}/WHEEL +0 -0
  335. {langflow_base_nightly-0.5.0.dev37.dist-info → langflow_base_nightly-0.5.0.dev38.dist-info}/entry_points.txt +0 -0
langflow/api/v1/chat.py CHANGED
@@ -6,23 +6,10 @@ import traceback
6
6
  import uuid
7
7
  from typing import TYPE_CHECKING, Annotated
8
8
 
9
- from fastapi import (
10
- APIRouter,
11
- BackgroundTasks,
12
- Body,
13
- Depends,
14
- HTTPException,
15
- Request,
16
- status,
17
- )
9
+ from fastapi import APIRouter, BackgroundTasks, Body, Depends, HTTPException, Request, status
18
10
  from fastapi.responses import StreamingResponse
19
- from loguru import logger
20
11
 
21
- from langflow.api.build import (
22
- cancel_flow_build,
23
- get_flow_events_response,
24
- start_flow_build,
25
- )
12
+ from langflow.api.build import cancel_flow_build, get_flow_events_response, start_flow_build
26
13
  from langflow.api.limited_background_tasks import LimitVertexBuildBackgroundTasks
27
14
  from langflow.api.utils import (
28
15
  CurrentActiveUser,
@@ -48,6 +35,7 @@ from langflow.api.v1.schemas import (
48
35
  from langflow.exceptions.component import ComponentBuildError
49
36
  from langflow.graph.graph.base import Graph
50
37
  from langflow.graph.utils import log_vertex_build
38
+ from langflow.logging.logger import logger
51
39
  from langflow.schema.schema import OutputValue
52
40
  from langflow.services.cache.utils import CacheMiss
53
41
  from langflow.services.chat.service import ChatService
@@ -135,7 +123,7 @@ async def retrieve_vertices_order(
135
123
  )
136
124
  if "stream or streaming set to True" in str(exc):
137
125
  raise HTTPException(status_code=400, detail=str(exc)) from exc
138
- logger.exception("Error checking build status")
126
+ await logger.aexception("Error checking build status")
139
127
  raise HTTPException(status_code=500, detail=str(exc)) from exc
140
128
 
141
129
 
@@ -239,17 +227,17 @@ async def cancel_build(
239
227
  return CancelFlowResponse(success=False, message="Failed to cancel flow build")
240
228
  except asyncio.CancelledError:
241
229
  # If CancelledError reaches here, it means the task was not successfully cancelled
242
- logger.error(f"Failed to cancel flow build for job_id {job_id} (CancelledError caught)")
230
+ await logger.aerror(f"Failed to cancel flow build for job_id {job_id} (CancelledError caught)")
243
231
  return CancelFlowResponse(success=False, message="Failed to cancel flow build")
244
232
  except ValueError as exc:
245
233
  # Job not found
246
234
  raise HTTPException(status_code=status.HTTP_404_NOT_FOUND, detail=str(exc)) from exc
247
235
  except JobQueueNotFoundError as exc:
248
- logger.error(f"Job not found: {job_id}. Error: {exc!s}")
236
+ await logger.aerror(f"Job not found: {job_id}. Error: {exc!s}")
249
237
  raise HTTPException(status_code=status.HTTP_404_NOT_FOUND, detail=f"Job not found: {exc!s}") from exc
250
238
  except Exception as exc:
251
239
  # Any other unexpected error
252
- logger.exception(f"Error cancelling flow build for job_id {job_id}: {exc}")
240
+ await logger.aexception(f"Error cancelling flow build for job_id {job_id}: {exc}")
253
241
  raise HTTPException(status_code=status.HTTP_500_INTERNAL_SERVER_ERROR, detail=str(exc)) from exc
254
242
 
255
243
 
@@ -297,7 +285,7 @@ async def build_vertex(
297
285
  cache = await chat_service.get_cache(flow_id_str)
298
286
  if isinstance(cache, CacheMiss):
299
287
  # If there's no cache
300
- logger.warning(f"No cache found for {flow_id_str}. Building graph starting at {vertex_id}")
288
+ await logger.awarning(f"No cache found for {flow_id_str}. Building graph starting at {vertex_id}")
301
289
  graph = await build_graph_from_db(
302
290
  flow_id=flow_id,
303
291
  session=await anext(get_session()),
@@ -331,7 +319,7 @@ async def build_vertex(
331
319
  tb = exc.formatted_traceback
332
320
  else:
333
321
  tb = traceback.format_exc()
334
- logger.exception("Error building Component")
322
+ await logger.aexception("Error building Component")
335
323
  params = format_exception_message(exc)
336
324
  message = {"errorMessage": params, "stackTrace": tb}
337
325
  valid = False
@@ -408,7 +396,7 @@ async def build_vertex(
408
396
  component_error_message=str(exc),
409
397
  ),
410
398
  )
411
- logger.exception("Error building Component")
399
+ await logger.aexception("Error building Component")
412
400
  message = parse_exception(exc)
413
401
  raise HTTPException(status_code=500, detail=message) from exc
414
402
 
@@ -421,14 +409,14 @@ async def _stream_vertex(flow_id: str, vertex_id: str, chat_service: ChatService
421
409
  try:
422
410
  cache = await chat_service.get_cache(flow_id)
423
411
  except Exception as exc: # noqa: BLE001
424
- logger.exception("Error building Component")
412
+ await logger.aexception("Error building Component")
425
413
  yield str(StreamData(event="error", data={"error": str(exc)}))
426
414
  return
427
415
 
428
416
  if isinstance(cache, CacheMiss):
429
417
  # If there's no cache
430
418
  msg = f"No cache found for {flow_id}."
431
- logger.error(msg)
419
+ await logger.aerror(msg)
432
420
  yield str(StreamData(event="error", data={"error": msg}))
433
421
  return
434
422
  else:
@@ -437,13 +425,13 @@ async def _stream_vertex(flow_id: str, vertex_id: str, chat_service: ChatService
437
425
  try:
438
426
  vertex: InterfaceVertex = graph.get_vertex(vertex_id)
439
427
  except Exception as exc: # noqa: BLE001
440
- logger.exception("Error building Component")
428
+ await logger.aexception("Error building Component")
441
429
  yield str(StreamData(event="error", data={"error": str(exc)}))
442
430
  return
443
431
 
444
432
  if not hasattr(vertex, "stream"):
445
433
  msg = f"Vertex {vertex_id} does not support streaming"
446
- logger.error(msg)
434
+ await logger.aerror(msg)
447
435
  yield str(StreamData(event="error", data={"error": msg}))
448
436
  return
449
437
 
@@ -460,7 +448,7 @@ async def _stream_vertex(flow_id: str, vertex_id: str, chat_service: ChatService
460
448
  yield str(stream_data)
461
449
 
462
450
  elif not vertex.frozen or not vertex.built:
463
- logger.debug(f"Streaming vertex {vertex_id}")
451
+ await logger.adebug(f"Streaming vertex {vertex_id}")
464
452
  stream_data = StreamData(
465
453
  event="message",
466
454
  data={"message": f"Streaming vertex {vertex_id}"},
@@ -474,7 +462,7 @@ async def _stream_vertex(flow_id: str, vertex_id: str, chat_service: ChatService
474
462
  )
475
463
  yield str(stream_data)
476
464
  except Exception as exc: # noqa: BLE001
477
- logger.exception("Error building Component")
465
+ await logger.aexception("Error building Component")
478
466
  exc_message = parse_exception(exc)
479
467
  if exc_message == "The message must be an iterator or an async iterator.":
480
468
  exc_message = "This stream has already been closed."
@@ -487,11 +475,11 @@ async def _stream_vertex(flow_id: str, vertex_id: str, chat_service: ChatService
487
475
  yield str(stream_data)
488
476
  else:
489
477
  msg = f"No result found for vertex {vertex_id}"
490
- logger.error(msg)
478
+ await logger.aerror(msg)
491
479
  yield str(StreamData(event="error", data={"error": msg}))
492
480
  return
493
481
  finally:
494
- logger.debug("Closing stream")
482
+ await logger.adebug("Closing stream")
495
483
  if graph:
496
484
  await chat_service.set_cache(flow_id, graph)
497
485
  yield str(StreamData(event="close", data={"message": "Stream closed"}))
@@ -625,7 +613,7 @@ async def build_public_tmp(
625
613
  flow_name=flow_name or f"{client_id}_{flow_id}",
626
614
  )
627
615
  except Exception as exc:
628
- logger.exception("Error building public flow")
616
+ await logger.aexception("Error building public flow")
629
617
  if isinstance(exc, HTTPException):
630
618
  raise
631
619
  raise HTTPException(status_code=500, detail=str(exc)) from exc
@@ -11,7 +11,6 @@ import sqlalchemy as sa
11
11
  from fastapi import APIRouter, BackgroundTasks, Body, Depends, HTTPException, Request, UploadFile, status
12
12
  from fastapi.encoders import jsonable_encoder
13
13
  from fastapi.responses import StreamingResponse
14
- from loguru import logger
15
14
  from sqlmodel import select
16
15
 
17
16
  from langflow.api.utils import CurrentActiveUser, DbSession, parse_value
@@ -41,6 +40,7 @@ from langflow.graph.schema import RunOutputs
41
40
  from langflow.helpers.flow import get_flow_by_id_or_endpoint_name
42
41
  from langflow.helpers.user import get_user_by_flow_id_or_endpoint_name
43
42
  from langflow.interface.initialize.loading import update_params_with_load_from_db_fields
43
+ from langflow.logging.logger import logger
44
44
  from langflow.processing.process import process_tweaks, run_graph_internal
45
45
  from langflow.schema.graph import Tweaks
46
46
  from langflow.services.auth.utils import api_key_security, get_current_active_user
@@ -184,7 +184,7 @@ async def simple_run_flow_task(
184
184
  )
185
185
 
186
186
  except Exception: # noqa: BLE001
187
- logger.exception(f"Error running flow {flow.id} task")
187
+ await logger.aexception(f"Error running flow {flow.id} task")
188
188
 
189
189
 
190
190
  async def consume_and_yield(queue: asyncio.Queue, client_consumed_queue: asyncio.Queue) -> AsyncGenerator:
@@ -215,7 +215,7 @@ async def consume_and_yield(queue: asyncio.Queue, client_consumed_queue: asyncio
215
215
  yield value
216
216
  get_time_yield = time.time()
217
217
  client_consumed_queue.put_nowait(event_id)
218
- logger.debug(
218
+ await logger.adebug(
219
219
  f"consumed event {event_id} "
220
220
  f"(time in queue, {get_time - put_time:.4f}, "
221
221
  f"client {get_time_yield - get_time:.4f})"
@@ -264,7 +264,7 @@ async def run_flow_generator(
264
264
  event_manager.on_end(data={"result": result.model_dump()})
265
265
  await client_consumed_queue.get()
266
266
  except (ValueError, InvalidChatInputError, SerializationError) as e:
267
- logger.error(f"Error running flow: {e}")
267
+ await logger.aerror(f"Error running flow: {e}")
268
268
  event_manager.on_error(data={"error": str(e)})
269
269
  finally:
270
270
  await event_manager.queue.put((None, None, time.time))
@@ -331,7 +331,7 @@ async def simplified_run_flow(
331
331
  )
332
332
 
333
333
  async def on_disconnect() -> None:
334
- logger.debug("Client disconnected, closing tasks")
334
+ await logger.adebug("Client disconnected, closing tasks")
335
335
  main_task.cancel()
336
336
 
337
337
  return StreamingResponse(
@@ -414,7 +414,7 @@ async def webhook_run_flow(
414
414
  """
415
415
  telemetry_service = get_telemetry_service()
416
416
  start_time = time.perf_counter()
417
- logger.debug("Received webhook request")
417
+ await logger.adebug("Received webhook request")
418
418
  error_msg = ""
419
419
  try:
420
420
  try:
@@ -442,7 +442,7 @@ async def webhook_run_flow(
442
442
  session_id=None,
443
443
  )
444
444
 
445
- logger.debug("Starting background task")
445
+ await logger.adebug("Starting background task")
446
446
  background_tasks.add_task(
447
447
  simple_run_flow_task,
448
448
  flow=flow,
@@ -553,7 +553,7 @@ async def experimental_run_flow(
553
553
  except sa.exc.StatementError as exc:
554
554
  # StatementError('(builtins.ValueError) badly formed hexadecimal UUID string')
555
555
  if "badly formed hexadecimal UUID string" in str(exc):
556
- logger.error(f"Flow ID {flow_id_str} is not a valid UUID")
556
+ await logger.aerror(f"Flow ID {flow_id_str} is not a valid UUID")
557
557
  # This means the Flow ID is not a valid UUID which means it can't find the flow
558
558
  raise HTTPException(status_code=status.HTTP_404_NOT_FOUND, detail=str(exc)) from exc
559
559
  raise HTTPException(status_code=status.HTTP_500_INTERNAL_SERVER_ERROR, detail=str(exc)) from exc
@@ -600,7 +600,7 @@ async def experimental_run_flow(
600
600
  async def process(_flow_id) -> None:
601
601
  """Endpoint to process an input with a given flow_id."""
602
602
  # Raise a depreciation warning
603
- logger.warning(
603
+ await logger.awarning(
604
604
  "The /process endpoint is deprecated and will be removed in a future version. Please use /run instead."
605
605
  )
606
606
  raise HTTPException(
@@ -643,7 +643,7 @@ async def create_upload_file(
643
643
  file_path=file_path,
644
644
  )
645
645
  except Exception as exc:
646
- logger.exception("Error saving file")
646
+ await logger.aexception("Error saving file")
647
647
  raise HTTPException(status_code=500, detail=str(exc)) from exc
648
648
 
649
649
 
langflow/api/v1/flows.py CHANGED
@@ -55,7 +55,7 @@ async def _save_flow_to_fs(flow: Flow) -> None:
55
55
  try:
56
56
  await f.write(flow.model_dump_json())
57
57
  except OSError:
58
- logger.exception("Failed to write flow %s to path %s", flow.name, flow.fs_path)
58
+ await logger.aexception("Failed to write flow %s to path %s", flow.name, flow.fs_path)
59
59
 
60
60
 
61
61
  async def _new_flow(
@@ -6,10 +6,10 @@ from pathlib import Path
6
6
  import pandas as pd
7
7
  from fastapi import APIRouter, HTTPException
8
8
  from langchain_chroma import Chroma
9
- from loguru import logger
10
9
  from pydantic import BaseModel
11
10
 
12
11
  from langflow.api.utils import CurrentActiveUser
12
+ from langflow.logging import logger
13
13
  from langflow.services.deps import get_settings_service
14
14
 
15
15
  router = APIRouter(tags=["Knowledge Bases"], prefix="/knowledge_bases")
@@ -330,7 +330,7 @@ async def list_knowledge_bases(current_user: CurrentActiveUser) -> list[Knowledg
330
330
 
331
331
  except OSError as _:
332
332
  # Log the exception and skip directories that can't be read
333
- logger.exception("Error reading knowledge base directory '%s'", kb_dir)
333
+ await logger.aexception("Error reading knowledge base directory '%s'", kb_dir)
334
334
  continue
335
335
 
336
336
  # Sort by name alphabetically
@@ -422,7 +422,7 @@ async def delete_knowledge_bases_bulk(request: BulkDeleteRequest, current_user:
422
422
  shutil.rmtree(kb_path)
423
423
  deleted_count += 1
424
424
  except (OSError, PermissionError) as e:
425
- logger.exception("Error deleting knowledge base '%s': %s", kb_name, e)
425
+ await logger.aexception("Error deleting knowledge base '%s': %s", kb_name, e)
426
426
  # Continue with other deletions even if one fails
427
427
 
428
428
  if not_found_kbs and deleted_count == 0:
langflow/api/v1/mcp.py CHANGED
@@ -4,7 +4,6 @@ import pydantic
4
4
  from anyio import BrokenResourceError
5
5
  from fastapi import APIRouter, HTTPException, Request, Response
6
6
  from fastapi.responses import HTMLResponse, StreamingResponse
7
- from loguru import logger
8
7
  from mcp import types
9
8
  from mcp.server import NotificationOptions, Server
10
9
  from mcp.server.sse import SseServerTransport
@@ -18,6 +17,7 @@ from langflow.api.v1.mcp_utils import (
18
17
  handle_mcp_errors,
19
18
  handle_read_resource,
20
19
  )
20
+ from langflow.logging.logger import logger
21
21
  from langflow.services.deps import get_settings_service
22
22
 
23
23
  router = APIRouter(prefix="/mcp", tags=["mcp"])
@@ -83,22 +83,22 @@ async def im_alive():
83
83
  @router.get("/sse", response_class=StreamingResponse)
84
84
  async def handle_sse(request: Request, current_user: CurrentActiveMCPUser):
85
85
  msg = f"Starting SSE connection, server name: {server.name}"
86
- logger.info(msg)
86
+ await logger.ainfo(msg)
87
87
  token = current_user_ctx.set(current_user)
88
88
  try:
89
89
  async with sse.connect_sse(request.scope, request.receive, request._send) as streams:
90
90
  try:
91
91
  msg = "Starting SSE connection"
92
- logger.debug(msg)
92
+ await logger.adebug(msg)
93
93
  msg = f"Stream types: read={type(streams[0])}, write={type(streams[1])}"
94
- logger.debug(msg)
94
+ await logger.adebug(msg)
95
95
 
96
96
  notification_options = NotificationOptions(
97
97
  prompts_changed=True, resources_changed=True, tools_changed=True
98
98
  )
99
99
  init_options = server.create_initialization_options(notification_options)
100
100
  msg = f"Initialization options: {init_options}"
101
- logger.debug(msg)
101
+ await logger.adebug(msg)
102
102
 
103
103
  try:
104
104
  await server.run(streams[0], streams[1], init_options)
@@ -106,20 +106,20 @@ async def handle_sse(request: Request, current_user: CurrentActiveMCPUser):
106
106
  validation_error = find_validation_error(exc)
107
107
  if validation_error:
108
108
  msg = "Validation error in MCP:" + str(validation_error)
109
- logger.debug(msg)
109
+ await logger.adebug(msg)
110
110
  else:
111
111
  msg = f"Error in MCP: {exc!s}"
112
- logger.debug(msg)
112
+ await logger.adebug(msg)
113
113
  return
114
114
  except BrokenResourceError:
115
115
  # Handle gracefully when client disconnects
116
- logger.info("Client disconnected from SSE connection")
116
+ await logger.ainfo("Client disconnected from SSE connection")
117
117
  except asyncio.CancelledError:
118
- logger.info("SSE connection was cancelled")
118
+ await logger.ainfo("SSE connection was cancelled")
119
119
  raise
120
120
  except Exception as e:
121
121
  msg = f"Error in MCP: {e!s}"
122
- logger.exception(msg)
122
+ await logger.aexception(msg)
123
123
  raise
124
124
  finally:
125
125
  current_user_ctx.reset(token)
@@ -130,8 +130,8 @@ async def handle_messages(request: Request):
130
130
  try:
131
131
  await sse.handle_post_message(request.scope, request.receive, request._send)
132
132
  except (BrokenResourceError, BrokenPipeError) as e:
133
- logger.info("MCP Server disconnected")
133
+ await logger.ainfo("MCP Server disconnected")
134
134
  raise HTTPException(status_code=404, detail=f"MCP Server disconnected, error: {e}") from e
135
135
  except Exception as e:
136
- logger.error(f"Internal server error: {e}")
136
+ await logger.aerror(f"Internal server error: {e}")
137
137
  raise HTTPException(status_code=500, detail=f"Internal server error: {e}") from e