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
@@ -1,17 +1,11 @@
1
1
  import os
2
2
 
3
- from loguru import logger
4
3
  from mem0 import Memory, MemoryClient
5
4
 
6
5
  from langflow.base.memory.model import LCChatMemoryComponent
7
- from langflow.inputs.inputs import (
8
- DictInput,
9
- HandleInput,
10
- MessageTextInput,
11
- NestedDictInput,
12
- SecretStrInput,
13
- )
6
+ from langflow.inputs.inputs import DictInput, HandleInput, MessageTextInput, NestedDictInput, SecretStrInput
14
7
  from langflow.io import Output
8
+ from langflow.logging.logger import logger
15
9
  from langflow.schema.data import Data
16
10
 
17
11
 
@@ -1,6 +1,5 @@
1
1
  from typing import Any
2
2
 
3
- from loguru import logger
4
3
  from requests.exceptions import ConnectionError # noqa: A004
5
4
  from urllib3.exceptions import MaxRetryError, NameResolutionError
6
5
 
@@ -8,6 +7,7 @@ from langflow.base.models.model import LCModelComponent
8
7
  from langflow.field_typing import LanguageModel
9
8
  from langflow.field_typing.range_spec import RangeSpec
10
9
  from langflow.inputs.inputs import BoolInput, DropdownInput, IntInput, MessageTextInput, SecretStrInput, SliderInput
10
+ from langflow.logging.logger import logger
11
11
  from langflow.schema.dotdict import dotdict
12
12
 
13
13
 
@@ -97,7 +97,7 @@ class NVIDIAModelComponent(LCModelComponent):
97
97
  ),
98
98
  ]
99
99
 
100
- def get_models(self, tool_model_enabled: bool | None = None) -> list[str]:
100
+ def get_models(self, *, tool_model_enabled: bool | None = None) -> list[str]:
101
101
  try:
102
102
  from langchain_nvidia_ai_endpoints import ChatNVIDIA
103
103
  except ImportError as e:
@@ -114,7 +114,7 @@ class NVIDIAModelComponent(LCModelComponent):
114
114
  def update_build_config(self, build_config: dotdict, _field_value: Any, field_name: str | None = None):
115
115
  if field_name in {"model_name", "tool_model_enabled", "base_url", "api_key"}:
116
116
  try:
117
- ids = self.get_models(self.tool_model_enabled)
117
+ ids = self.get_models(tool_model_enabled=self.tool_model_enabled)
118
118
  build_config["model_name"]["options"] = ids
119
119
 
120
120
  if "value" not in build_config["model_name"] or build_config["model_name"]["value"] is None:
@@ -1,10 +1,10 @@
1
1
  import json
2
2
 
3
3
  import httpx
4
- from loguru import logger
5
4
 
6
5
  from langflow.custom.custom_component.component import Component
7
6
  from langflow.io import MessageTextInput, Output
7
+ from langflow.logging.logger import logger
8
8
  from langflow.schema.data import Data
9
9
 
10
10
 
@@ -83,7 +83,7 @@ class OlivyaComponent(Component):
83
83
  "Content-Type": "application/json",
84
84
  }
85
85
 
86
- logger.info("Sending POST request with payload: %s", payload)
86
+ await logger.ainfo("Sending POST request with payload: %s", payload)
87
87
 
88
88
  # Send the POST request with a timeout
89
89
  async with httpx.AsyncClient() as client:
@@ -97,19 +97,19 @@ class OlivyaComponent(Component):
97
97
 
98
98
  # Parse and return the successful response
99
99
  response_data = response.json()
100
- logger.info("Request successful: %s", response_data)
100
+ await logger.ainfo("Request successful: %s", response_data)
101
101
 
102
102
  except httpx.HTTPStatusError as http_err:
103
- logger.exception("HTTP error occurred")
103
+ await logger.aexception("HTTP error occurred")
104
104
  response_data = {"error": f"HTTP error occurred: {http_err}", "response_text": response.text}
105
105
  except httpx.RequestError as req_err:
106
- logger.exception("Request failed")
106
+ await logger.aexception("Request failed")
107
107
  response_data = {"error": f"Request failed: {req_err}"}
108
108
  except json.JSONDecodeError as json_err:
109
- logger.exception("Response parsing failed")
109
+ await logger.aexception("Response parsing failed")
110
110
  response_data = {"error": f"Response parsing failed: {json_err}", "raw_response": response.text}
111
111
  except Exception as e: # noqa: BLE001
112
- logger.exception("An unexpected error occurred")
112
+ await logger.aexception("An unexpected error occurred")
113
113
  response_data = {"error": f"An unexpected error occurred: {e!s}"}
114
114
 
115
115
  # Return the response as part of the output
@@ -245,11 +245,13 @@ class ChatOllamaComponent(LCModelComponent):
245
245
  if field_name in {"model_name", "base_url", "tool_model_enabled"}:
246
246
  if await self.is_valid_ollama_url(self.base_url):
247
247
  tool_model_enabled = build_config["tool_model_enabled"].get("value", False) or self.tool_model_enabled
248
- build_config["model_name"]["options"] = await self.get_models(self.base_url, tool_model_enabled)
248
+ build_config["model_name"]["options"] = await self.get_models(
249
+ self.base_url, tool_model_enabled=tool_model_enabled
250
+ )
249
251
  elif await self.is_valid_ollama_url(build_config["base_url"].get("value", "")):
250
252
  tool_model_enabled = build_config["tool_model_enabled"].get("value", False) or self.tool_model_enabled
251
253
  build_config["model_name"]["options"] = await self.get_models(
252
- build_config["base_url"].get("value", ""), tool_model_enabled
254
+ build_config["base_url"].get("value", ""), tool_model_enabled=tool_model_enabled
253
255
  )
254
256
  else:
255
257
  build_config["model_name"]["options"] = []
@@ -265,7 +267,7 @@ class ChatOllamaComponent(LCModelComponent):
265
267
 
266
268
  return build_config
267
269
 
268
- async def get_models(self, base_url_value: str, tool_model_enabled: bool | None = None) -> list[str]:
270
+ async def get_models(self, base_url_value: str, *, tool_model_enabled: bool | None = None) -> list[str]:
269
271
  """Fetches a list of models from the Ollama API that do not have the "embedding" capability.
270
272
 
271
273
  Args:
@@ -298,13 +300,13 @@ class ChatOllamaComponent(LCModelComponent):
298
300
  models = tags_response.json()
299
301
  if asyncio.iscoroutine(models):
300
302
  models = await models
301
- logger.debug(f"Available models: {models}")
303
+ await logger.adebug(f"Available models: {models}")
302
304
 
303
305
  # Filter models that are NOT embedding models
304
306
  model_ids = []
305
307
  for model in models[self.JSON_MODELS_KEY]:
306
308
  model_name = model[self.JSON_NAME_KEY]
307
- logger.debug(f"Checking model: {model_name}")
309
+ await logger.adebug(f"Checking model: {model_name}")
308
310
 
309
311
  payload = {"model": model_name}
310
312
  show_response = await client.post(show_url, json=payload)
@@ -313,7 +315,7 @@ class ChatOllamaComponent(LCModelComponent):
313
315
  if asyncio.iscoroutine(json_data):
314
316
  json_data = await json_data
315
317
  capabilities = json_data.get(self.JSON_CAPABILITIES_KEY, [])
316
- logger.debug(f"Model: {model_name}, Capabilities: {capabilities}")
318
+ await logger.adebug(f"Model: {model_name}, Capabilities: {capabilities}")
317
319
 
318
320
  if self.DESIRED_CAPABILITY in capabilities and (
319
321
  not tool_model_enabled or self.TOOL_CALLING_CAPABILITY in capabilities
@@ -3,10 +3,10 @@ from __future__ import annotations
3
3
  from typing import TYPE_CHECKING, Any, cast
4
4
 
5
5
  import toml # type: ignore[import-untyped]
6
- from loguru import logger
7
6
 
8
7
  from langflow.custom.custom_component.component import Component
9
8
  from langflow.io import BoolInput, DataFrameInput, HandleInput, MessageTextInput, MultilineInput, Output
9
+ from langflow.logging.logger import logger
10
10
  from langflow.schema.dataframe import DataFrame
11
11
 
12
12
  if TYPE_CHECKING:
@@ -144,11 +144,11 @@ class BatchRunComponent(Component):
144
144
  user_texts = df[col_name].astype(str).tolist()
145
145
  else:
146
146
  user_texts = [
147
- self._format_row_as_toml(cast(dict[str, Any], row)) for row in df.to_dict(orient="records")
147
+ self._format_row_as_toml(cast("dict[str, Any]", row)) for row in df.to_dict(orient="records")
148
148
  ]
149
149
 
150
150
  total_rows = len(user_texts)
151
- logger.info(f"Processing {total_rows} rows with batch run")
151
+ await logger.ainfo(f"Processing {total_rows} rows with batch run")
152
152
 
153
153
  # Prepare the batch of conversations
154
154
  conversations = [
@@ -185,21 +185,21 @@ class BatchRunComponent(Component):
185
185
  ):
186
186
  response_text = response[1].content if hasattr(response[1], "content") else str(response[1])
187
187
  row = self._create_base_row(
188
- cast(dict[str, Any], original_row), model_response=response_text, batch_index=idx
188
+ cast("dict[str, Any]", original_row), model_response=response_text, batch_index=idx
189
189
  )
190
190
  self._add_metadata(row, success=True, system_msg=system_msg)
191
191
  rows.append(row)
192
192
 
193
193
  # Log progress
194
194
  if (idx + 1) % max(1, total_rows // 10) == 0:
195
- logger.info(f"Processed {idx + 1}/{total_rows} rows")
195
+ await logger.ainfo(f"Processed {idx + 1}/{total_rows} rows")
196
196
 
197
- logger.info("Batch processing completed successfully")
197
+ await logger.ainfo("Batch processing completed successfully")
198
198
  return DataFrame(rows)
199
199
 
200
200
  except (KeyError, AttributeError) as e:
201
201
  # Handle data structure and attribute access errors
202
- logger.error(f"Data processing error: {e!s}")
203
- error_row = self._create_base_row({col: "" for col in df.columns}, model_response="", batch_index=-1)
202
+ await logger.aerror(f"Data processing error: {e!s}")
203
+ error_row = self._create_base_row(dict.fromkeys(df.columns, ""), model_response="", batch_index=-1)
204
204
  self._add_metadata(error_row, success=False, error=str(e))
205
205
  return DataFrame([error_row])
@@ -181,7 +181,7 @@ class DataOperationsComponent(Component):
181
181
  raise ValueError(msg)
182
182
 
183
183
  # Data transformation operations
184
- def select_keys(self, evaluate: bool | None = None) -> Data:
184
+ def select_keys(self, *, evaluate: bool | None = None) -> Data:
185
185
  """Select specific keys from the data dictionary."""
186
186
  self.validate_single_data("Select Keys")
187
187
  data_dict = self.get_normalized_data()
@@ -266,7 +266,7 @@ class DataOperationsComponent(Component):
266
266
  logger.info("evaluating data")
267
267
  return Data(**self.recursive_eval(self.get_data_dict()))
268
268
 
269
- def combine_data(self, evaluate: bool | None = None) -> Data:
269
+ def combine_data(self, *, evaluate: bool | None = None) -> Data:
270
270
  """Combine multiple data objects into one."""
271
271
  logger.info("combining data")
272
272
  if not self.data_is_list():
@@ -1,10 +1,9 @@
1
1
  from enum import Enum
2
2
  from typing import cast
3
3
 
4
- from loguru import logger
5
-
6
4
  from langflow.custom.custom_component.component import Component
7
5
  from langflow.io import DataInput, DropdownInput, Output
6
+ from langflow.logging.logger import logger
8
7
  from langflow.schema.dataframe import DataFrame
9
8
 
10
9
 
@@ -1,7 +1,6 @@
1
- from loguru import logger
2
-
3
1
  from langflow.custom.custom_component.component import Component
4
2
  from langflow.io import MessageInput, Output
3
+ from langflow.logging.logger import logger
5
4
  from langflow.schema.data import Data
6
5
  from langflow.schema.message import Message
7
6
 
@@ -32,6 +31,6 @@ class MessageToDataComponent(Component):
32
31
  return Data(data=self.message.data)
33
32
 
34
33
  msg = "Error converting Message to Data: Input must be a Message object"
35
- logger.opt(exception=True).debug(msg)
34
+ logger.debug(msg, exc_info=True)
36
35
  self.status = msg
37
36
  return Data(data={"error": msg})
@@ -3,11 +3,11 @@ from json import JSONDecodeError
3
3
 
4
4
  import jq
5
5
  from json_repair import repair_json
6
- from loguru import logger
7
6
 
8
7
  from langflow.custom.custom_component.component import Component
9
8
  from langflow.inputs.inputs import HandleInput, MessageTextInput
10
9
  from langflow.io import Output
10
+ from langflow.logging.logger import logger
11
11
  from langflow.schema.data import Data
12
12
  from langflow.schema.message import Message
13
13
 
@@ -1,10 +1,9 @@
1
1
  from collections.abc import Callable
2
2
 
3
- from loguru import logger
4
-
5
3
  from langflow.custom.custom_component.component import Component
6
4
  from langflow.custom.utils import get_function
7
5
  from langflow.io import CodeInput, Output
6
+ from langflow.logging.logger import logger
8
7
  from langflow.schema.data import Data
9
8
  from langflow.schema.dotdict import dotdict
10
9
  from langflow.schema.message import Message
@@ -58,7 +57,7 @@ class PythonFunctionComponent(Component):
58
57
  func = get_function(function_code)
59
58
  return func()
60
59
  except Exception as e: # noqa: BLE001
61
- logger.opt(exception=True).debug("Error executing function")
60
+ logger.debug("Error executing function", exc_info=True)
62
61
  return f"Error executing function: {e}"
63
62
 
64
63
  def execute_function_data(self) -> list[Data]:
@@ -2,12 +2,12 @@ from typing import Any
2
2
 
3
3
  from langchain_community.utilities.serpapi import SerpAPIWrapper
4
4
  from langchain_core.tools import ToolException
5
- from loguru import logger
6
5
  from pydantic import BaseModel, Field
7
6
 
8
7
  from langflow.custom.custom_component.component import Component
9
8
  from langflow.inputs.inputs import DictInput, IntInput, MultilineInput, SecretStrInput
10
9
  from langflow.io import Output
10
+ from langflow.logging.logger import logger
11
11
  from langflow.schema.data import Data
12
12
  from langflow.schema.message import Message
13
13
 
@@ -1,8 +1,8 @@
1
1
  import httpx
2
- from loguru import logger
3
2
 
4
3
  from langflow.custom import Component
5
4
  from langflow.io import BoolInput, DropdownInput, MessageTextInput, Output, SecretStrInput
5
+ from langflow.logging.logger import logger
6
6
  from langflow.schema import Data
7
7
  from langflow.schema.dataframe import DataFrame
8
8
 
@@ -1,8 +1,8 @@
1
1
  import httpx
2
- from loguru import logger
3
2
 
4
3
  from langflow.custom.custom_component.component import Component
5
4
  from langflow.inputs.inputs import BoolInput, DropdownInput, IntInput, MessageTextInput, SecretStrInput
5
+ from langflow.logging.logger import logger
6
6
  from langflow.schema.data import Data
7
7
  from langflow.schema.dataframe import DataFrame
8
8
  from langflow.template.field.base import Output
@@ -3,12 +3,12 @@ import operator
3
3
 
4
4
  from langchain.tools import StructuredTool
5
5
  from langchain_core.tools import ToolException
6
- from loguru import logger
7
6
  from pydantic import BaseModel, Field
8
7
 
9
8
  from langflow.base.langchain_utilities.model import LCToolComponent
10
9
  from langflow.field_typing import Tool
11
10
  from langflow.inputs.inputs import MessageTextInput
11
+ from langflow.logging.logger import logger
12
12
  from langflow.schema.data import Data
13
13
 
14
14
 
@@ -87,7 +87,7 @@ class CalculatorToolComponent(LCToolComponent):
87
87
  self.status = error_message
88
88
  return [Data(data={"error": error_message, "input": expression})]
89
89
  except Exception as e: # noqa: BLE001
90
- logger.opt(exception=True).debug("Error evaluating expression")
90
+ logger.debug("Error evaluating expression", exc_info=True)
91
91
  error_message = f"Error: {e}"
92
92
  self.status = error_message
93
93
  return [Data(data={"error": error_message, "input": expression})]
@@ -4,21 +4,14 @@ from typing import Any
4
4
 
5
5
  from langchain.agents import Tool
6
6
  from langchain_core.tools import StructuredTool
7
- from loguru import logger
8
7
  from pydantic.v1 import Field, create_model
9
8
  from pydantic.v1.fields import Undefined
10
9
  from typing_extensions import override
11
10
 
12
11
  from langflow.base.langchain_utilities.model import LCToolComponent
13
- from langflow.inputs.inputs import (
14
- BoolInput,
15
- DropdownInput,
16
- FieldTypes,
17
- HandleInput,
18
- MessageTextInput,
19
- MultilineInput,
20
- )
12
+ from langflow.inputs.inputs import BoolInput, DropdownInput, FieldTypes, HandleInput, MessageTextInput, MultilineInput
21
13
  from langflow.io import Output
14
+ from langflow.logging.logger import logger
22
15
  from langflow.schema.data import Data
23
16
  from langflow.schema.dotdict import dotdict
24
17
 
@@ -139,7 +132,7 @@ class PythonCodeStructuredTool(LCToolComponent):
139
132
  build_config["tool_function"]["options"] = names
140
133
  except Exception as e: # noqa: BLE001
141
134
  self.status = f"Failed to extract names: {e}"
142
- logger.opt(exception=True).debug(self.status)
135
+ logger.debug(self.status, exc_info=True)
143
136
  build_config["tool_function"]["options"] = ["Failed to parse", str(e)]
144
137
  return build_config
145
138
 
@@ -3,12 +3,12 @@ import importlib
3
3
  from langchain.tools import StructuredTool
4
4
  from langchain_core.tools import ToolException
5
5
  from langchain_experimental.utilities import PythonREPL
6
- from loguru import logger
7
6
  from pydantic import BaseModel, Field
8
7
 
9
8
  from langflow.base.langchain_utilities.model import LCToolComponent
10
9
  from langflow.field_typing import Tool
11
10
  from langflow.inputs.inputs import StrInput
11
+ from langflow.logging.logger import logger
12
12
  from langflow.schema.data import Data
13
13
 
14
14
 
@@ -78,7 +78,7 @@ class PythonREPLToolComponent(LCToolComponent):
78
78
  try:
79
79
  return python_repl.run(code)
80
80
  except Exception as e:
81
- logger.opt(exception=True).debug("Error running Python code")
81
+ logger.debug("Error running Python code", exc_info=True)
82
82
  raise ToolException(str(e)) from e
83
83
 
84
84
  tool = StructuredTool.from_function(
@@ -5,12 +5,12 @@ from typing import Any
5
5
  import requests
6
6
  from langchain.agents import Tool
7
7
  from langchain_core.tools import StructuredTool
8
- from loguru import logger
9
8
  from pydantic.v1 import Field, create_model
10
9
 
11
10
  from langflow.base.langchain_utilities.model import LCToolComponent
12
11
  from langflow.inputs.inputs import DropdownInput, IntInput, MessageTextInput, MultiselectInput
13
12
  from langflow.io import Output
13
+ from langflow.logging.logger import logger
14
14
  from langflow.schema.dotdict import dotdict
15
15
 
16
16
 
@@ -76,7 +76,7 @@ class SearXNGToolComponent(LCToolComponent):
76
76
  build_config["language"]["options"] = languages.copy()
77
77
  except Exception as e: # noqa: BLE001
78
78
  self.status = f"Failed to extract names: {e}"
79
- logger.opt(exception=True).debug(self.status)
79
+ logger.debug(self.status, exc_info=True)
80
80
  build_config["categories"]["options"] = ["Failed to parse", str(e)]
81
81
  return build_config
82
82
 
@@ -112,7 +112,7 @@ class SearXNGToolComponent(LCToolComponent):
112
112
  num_results = min(SearxSearch._max_results, len(response["results"]))
113
113
  return [response["results"][i] for i in range(num_results)]
114
114
  except Exception as e: # noqa: BLE001
115
- logger.opt(exception=True).debug("Error running SearXNG Search")
115
+ logger.debug("Error running SearXNG Search", exc_info=True)
116
116
  return [f"Failed to search: {e}"]
117
117
 
118
118
  SearxSearch._url = self.url
@@ -3,12 +3,12 @@ from typing import Any
3
3
  from langchain.tools import StructuredTool
4
4
  from langchain_community.utilities.serpapi import SerpAPIWrapper
5
5
  from langchain_core.tools import ToolException
6
- from loguru import logger
7
6
  from pydantic import BaseModel, Field
8
7
 
9
8
  from langflow.base.langchain_utilities.model import LCToolComponent
10
9
  from langflow.field_typing import Tool
11
10
  from langflow.inputs.inputs import DictInput, IntInput, MultilineInput, SecretStrInput
11
+ from langflow.logging.logger import logger
12
12
  from langflow.schema.data import Data
13
13
 
14
14
 
@@ -111,7 +111,7 @@ class SerpAPIComponent(LCToolComponent):
111
111
  data_list = [Data(data=result, text=result.get("snippet", "")) for result in results]
112
112
 
113
113
  except Exception as e: # noqa: BLE001
114
- logger.opt(exception=True).debug("Error running SerpAPI")
114
+ logger.debug("Error running SerpAPI", exc_info=True)
115
115
  self.status = f"Error: {e}"
116
116
  return [Data(data={"error": str(e)}, text=str(e))]
117
117
 
@@ -3,12 +3,12 @@ from enum import Enum
3
3
  import httpx
4
4
  from langchain.tools import StructuredTool
5
5
  from langchain_core.tools import ToolException
6
- from loguru import logger
7
6
  from pydantic import BaseModel, Field
8
7
 
9
8
  from langflow.base.langchain_utilities.model import LCToolComponent
10
9
  from langflow.field_typing import Tool
11
10
  from langflow.inputs.inputs import BoolInput, DropdownInput, IntInput, MessageTextInput, SecretStrInput
11
+ from langflow.logging.logger import logger
12
12
  from langflow.schema.data import Data
13
13
 
14
14
  # Add at the top with other constants
@@ -338,7 +338,7 @@ Note: Check 'Advanced' for all options.
338
338
  raise ToolException(error_message) from e
339
339
  except Exception as e:
340
340
  error_message = f"Unexpected error: {e}"
341
- logger.opt(exception=True).debug("Error running Tavily Search")
341
+ logger.debug("Error running Tavily Search", exc_info=True)
342
342
  self.status = error_message
343
343
  raise ToolException(error_message) from e
344
344
  return data_results
@@ -5,12 +5,12 @@ from enum import Enum
5
5
  import yfinance as yf
6
6
  from langchain.tools import StructuredTool
7
7
  from langchain_core.tools import ToolException
8
- from loguru import logger
9
8
  from pydantic import BaseModel, Field
10
9
 
11
10
  from langflow.base.langchain_utilities.model import LCToolComponent
12
11
  from langflow.field_typing import Tool
13
12
  from langflow.inputs.inputs import DropdownInput, IntInput, MessageTextInput
13
+ from langflow.logging.logger import logger
14
14
  from langflow.schema.data import Data
15
15
 
16
16
 
@@ -29,9 +29,9 @@ class TwelveLabsVideoEmbeddings(Embeddings):
29
29
 
30
30
  # First try to use video embedding, then fall back to clip embedding if available
31
31
  if result["video_embedding"] is not None:
32
- embeddings.append(cast(list[float], result["video_embedding"]))
32
+ embeddings.append(cast("list[float]", result["video_embedding"]))
33
33
  elif result["clip_embeddings"] and len(result["clip_embeddings"]) > 0:
34
- embeddings.append(cast(list[float], result["clip_embeddings"][0]))
34
+ embeddings.append(cast("list[float]", result["clip_embeddings"][0]))
35
35
  else:
36
36
  # If neither is available, raise an error
37
37
  error_msg = "No embeddings were generated for the video"
@@ -45,9 +45,9 @@ class TwelveLabsVideoEmbeddings(Embeddings):
45
45
 
46
46
  # First try to use video embedding, then fall back to clip embedding if available
47
47
  if result["video_embedding"] is not None:
48
- return cast(list[float], result["video_embedding"])
48
+ return cast("list[float]", result["video_embedding"])
49
49
  if result["clip_embeddings"] and len(result["clip_embeddings"]) > 0:
50
- return cast(list[float], result["clip_embeddings"][0])
50
+ return cast("list[float]", result["clip_embeddings"][0])
51
51
  # If neither is available, raise an error
52
52
  error_msg = "No embeddings were generated for the video"
53
53
  raise ValueError(error_msg)
@@ -2,13 +2,13 @@ from copy import deepcopy
2
2
  from pathlib import Path
3
3
 
4
4
  from langchain_chroma import Chroma
5
- from loguru import logger
6
5
  from typing_extensions import override
7
6
 
8
7
  from langflow.base.vectorstores.model import LCVectorStoreComponent, check_cached_vector_store
9
8
  from langflow.base.vectorstores.utils import chroma_collection_to_data
10
9
  from langflow.inputs.inputs import MultilineInput
11
10
  from langflow.io import BoolInput, DropdownInput, HandleInput, IntInput, MessageTextInput, TabInput
11
+ from langflow.logging.logger import logger
12
12
  from langflow.schema.data import Data
13
13
  from langflow.schema.dataframe import DataFrame
14
14
  from langflow.template.field.base import Output
@@ -4,12 +4,12 @@ from enum import Enum
4
4
 
5
5
  import yfinance as yf
6
6
  from langchain_core.tools import ToolException
7
- from loguru import logger
8
7
  from pydantic import BaseModel, Field
9
8
 
10
9
  from langflow.custom.custom_component.component import Component
11
10
  from langflow.inputs.inputs import DropdownInput, IntInput, MessageTextInput
12
11
  from langflow.io import Output
12
+ from langflow.logging.logger import logger
13
13
  from langflow.schema.data import Data
14
14
  from langflow.schema.dataframe import DataFrame
15
15
 
@@ -6,6 +6,7 @@ from googleapiclient.errors import HttpError
6
6
 
7
7
  from langflow.custom.custom_component.component import Component
8
8
  from langflow.inputs.inputs import BoolInput, DropdownInput, IntInput, SecretStrInput
9
+ from langflow.logging.logger import logger
9
10
  from langflow.schema.dataframe import DataFrame
10
11
  from langflow.template.field.base import Output
11
12
 
@@ -279,8 +280,6 @@ class YouTubeTrendingComponent(Component):
279
280
 
280
281
  return DataFrame(pd.DataFrame({"error": [error_message]}))
281
282
 
282
- except Exception as e:
283
- import logging
284
-
285
- logging.exception("An unexpected error occurred:")
283
+ except Exception as e: # noqa: BLE001
284
+ logger.exception("An unexpected error occurred:")
286
285
  return DataFrame(pd.DataFrame({"error": [str(e)]}))
@@ -1,7 +1,8 @@
1
1
  from collections.abc import Callable
2
2
 
3
3
  import emoji
4
- from loguru import logger
4
+
5
+ from langflow.logging.logger import logger
5
6
 
6
7
 
7
8
  def validate_icon(value: str):
@@ -8,10 +8,10 @@ from typing import Any
8
8
 
9
9
  from cachetools import TTLCache, keys
10
10
  from fastapi import HTTPException
11
- from loguru import logger
12
11
 
13
12
  from langflow.custom.eval import eval_custom_component_code
14
13
  from langflow.custom.schema import CallableCodeDetails, ClassCodeDetails, MissingDefault
14
+ from langflow.logging.logger import logger
15
15
 
16
16
 
17
17
  class CodeSyntaxError(HTTPException):
@@ -5,11 +5,11 @@ from typing import TYPE_CHECKING, Any, ClassVar
5
5
 
6
6
  from cachetools import TTLCache, cachedmethod
7
7
  from fastapi import HTTPException
8
- from loguru import logger
9
8
 
10
9
  from langflow.custom.attributes import ATTR_FUNC_MAPPING
11
10
  from langflow.custom.code_parser.code_parser import CodeParser
12
11
  from langflow.custom.eval import eval_custom_component_code
12
+ from langflow.logging.logger import logger
13
13
  from langflow.utils import validate
14
14
 
15
15
  if TYPE_CHECKING:
@@ -3,6 +3,7 @@ from __future__ import annotations
3
3
  import ast
4
4
  import asyncio
5
5
  import inspect
6
+ import json
6
7
  from collections.abc import AsyncIterator, Iterator
7
8
  from copy import deepcopy
8
9
  from textwrap import dedent
@@ -1019,10 +1020,23 @@ class Component(CustomComponent):
1019
1020
  return {**predefined_inputs, **runtime_inputs}
1020
1021
 
1021
1022
  def get_trace_as_metadata(self):
1023
+ def safe_list_values(items):
1024
+ return [v if isinstance(v, str | int | float | bool) or v is None else str(v) for v in items]
1025
+
1026
+ def safe_value(val):
1027
+ if isinstance(val, str | int | float | bool) or val is None:
1028
+ return val
1029
+ if isinstance(val, list | tuple):
1030
+ return safe_list_values(val)
1031
+ try:
1032
+ return json.dumps(val)
1033
+ except (TypeError, ValueError):
1034
+ return str(val)
1035
+
1022
1036
  return {
1023
- input_.name: input_.value
1037
+ input_.name: safe_value(getattr(self, input_.name, input_.value))
1024
1038
  for input_ in self.inputs
1025
- if hasattr(input_, "trace_as_metadata") and input_.trace_as_metadata
1039
+ if getattr(input_, "trace_as_metadata", False)
1026
1040
  }
1027
1041
 
1028
1042
  async def _build_with_tracing(self):