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
@@ -33,11 +33,7 @@ from langflow.services.database.models.flow.model import Flow
33
33
  from langflow.services.database.models.message.model import MessageTable
34
34
  from langflow.services.database.models.user.model import User
35
35
  from langflow.services.deps import get_variable_service, session_scope
36
- from langflow.utils.voice_utils import (
37
- BYTES_PER_24K_FRAME,
38
- VAD_SAMPLE_RATE_16K,
39
- resample_24k_to_16k,
40
- )
36
+ from langflow.utils.voice_utils import BYTES_PER_24K_FRAME, VAD_SAMPLE_RATE_16K, resample_24k_to_16k
41
37
 
42
38
  router = APIRouter(prefix="/voice", tags=["Voice"])
43
39
 
@@ -121,8 +117,8 @@ async def authenticate_and_get_openai_key(session: DbSession, user: User, websoc
121
117
  )
122
118
  return None, None
123
119
  except Exception as e: # noqa: BLE001
124
- logger.error(f"Error with API key: {e}")
125
- logger.error(traceback.format_exc())
120
+ await logger.aerror(f"Error with API key: {e}")
121
+ await logger.aerror(traceback.format_exc())
126
122
  return None, None
127
123
  return user, openai_key
128
124
 
@@ -185,13 +181,13 @@ class ElevenLabsClientManager:
185
181
  session=session,
186
182
  )
187
183
  except (InvalidToken, ValueError) as e:
188
- logger.error(f"Error with ElevenLabs API key: {e}")
184
+ await logger.aerror(f"Error with ElevenLabs API key: {e}")
189
185
  cls._api_key = os.getenv("ELEVENLABS_API_KEY", "")
190
186
  if not cls._api_key:
191
- logger.error("ElevenLabs API key not found")
187
+ await logger.aerror("ElevenLabs API key not found")
192
188
  return None
193
189
  except (KeyError, AttributeError, sqlalchemy.exc.SQLAlchemyError) as e:
194
- logger.error(f"Exception getting ElevenLabs API key: {e}")
190
+ await logger.aerror(f"Exception getting ElevenLabs API key: {e}")
195
191
  return None
196
192
 
197
193
  if cls._api_key:
@@ -310,25 +306,25 @@ async def process_message_queue(queue_key, session):
310
306
 
311
307
  try:
312
308
  await aadd_messagetables([message], session)
313
- logger.debug(f"Added message to DB: {message.text[:30]}...")
309
+ await logger.adebug(f"Added message to DB: {message.text[:30]}...")
314
310
  except ValueError as e:
315
- logger.error(f"Error saving message to database (ValueError): {e}")
316
- logger.error(traceback.format_exc())
311
+ await logger.aerror(f"Error saving message to database (ValueError): {e}")
312
+ await logger.aerror(traceback.format_exc())
317
313
  except sqlalchemy.exc.SQLAlchemyError as e:
318
- logger.error(f"Error saving message to database (SQLAlchemyError): {e}")
319
- logger.error(traceback.format_exc())
314
+ await logger.aerror(f"Error saving message to database (SQLAlchemyError): {e}")
315
+ await logger.aerror(traceback.format_exc())
320
316
  except (KeyError, AttributeError, TypeError) as e:
321
317
  # More specific exceptions instead of blind Exception
322
- logger.error(f"Error saving message to database: {e}")
323
- logger.error(traceback.format_exc())
318
+ await logger.aerror(f"Error saving message to database: {e}")
319
+ await logger.aerror(traceback.format_exc())
324
320
  finally:
325
321
  message_queues[queue_key].task_done()
326
322
 
327
323
  if message_queues[queue_key].empty():
328
324
  break
329
325
  except Exception as e: # noqa: BLE001
330
- logger.debug(f"Message queue processor for {queue_key} was cancelled: {e}")
331
- logger.error(traceback.format_exc())
326
+ await logger.adebug(f"Message queue processor for {queue_key} was cancelled: {e}")
327
+ await logger.aerror(traceback.format_exc())
332
328
 
333
329
 
334
330
  class SendQueues:
@@ -369,7 +365,7 @@ class SendQueues:
369
365
  logger.trace("OPENAI BLOCKING")
370
366
  # log_event(msg, DIRECTION_TO_OPENAI)
371
367
  except Exception: # noqa: BLE001
372
- logger.error(traceback.format_exc())
368
+ await logger.aerror(traceback.format_exc())
373
369
 
374
370
  def client_send(self, payload):
375
371
  try:
@@ -387,7 +383,7 @@ class SendQueues:
387
383
  self.log_event(msg, LF_TO_CLIENT)
388
384
  await self.client_ws.send_text(json.dumps(msg))
389
385
  except Exception: # noqa: BLE001
390
- logger.error(traceback.format_exc())
386
+ await logger.aerror(traceback.format_exc())
391
387
 
392
388
  async def close(self):
393
389
  self.openai_send_q.put_nowait(None)
@@ -462,7 +458,7 @@ async def handle_function_call(
462
458
  create_response()
463
459
  except json.JSONDecodeError as e:
464
460
  trace = traceback.format_exc()
465
- logger.error(f"JSON decode error: {e!s}\ntrace: {trace}")
461
+ await logger.aerror(f"JSON decode error: {e!s}\ntrace: {trace}")
466
462
  function_output = {
467
463
  "type": "conversation.item.create",
468
464
  "item": {
@@ -474,7 +470,7 @@ async def handle_function_call(
474
470
  msg_handler.openai_send(function_output)
475
471
  except ValueError as e:
476
472
  trace = traceback.format_exc()
477
- logger.error(f"Value error: {e!s}\ntrace: {trace}")
473
+ await logger.aerror(f"Value error: {e!s}\ntrace: {trace}")
478
474
  function_output = {
479
475
  "type": "conversation.item.create",
480
476
  "item": {
@@ -486,7 +482,7 @@ async def handle_function_call(
486
482
  msg_handler.openai_send(function_output)
487
483
  except (ConnectionError, websockets.exceptions.WebSocketException) as e:
488
484
  trace = traceback.format_exc()
489
- logger.error(f"Connection error: {e!s}\ntrace: {trace}")
485
+ await logger.aerror(f"Connection error: {e!s}\ntrace: {trace}")
490
486
  function_output = {
491
487
  "type": "conversation.item.create",
492
488
  "item": {
@@ -497,8 +493,8 @@ async def handle_function_call(
497
493
  }
498
494
  msg_handler.openai_send(function_output)
499
495
  except (KeyError, AttributeError, TypeError) as e:
500
- logger.error(f"Error executing flow: {e}")
501
- logger.error(traceback.format_exc())
496
+ await logger.aerror(f"Error executing flow: {e}")
497
+ await logger.aerror(traceback.format_exc())
502
498
  function_output = {
503
499
  "type": "conversation.item.create",
504
500
  "item": {
@@ -751,7 +747,7 @@ async def flow_as_tool_websocket(
751
747
  except Exception as e: # noqa: BLE001
752
748
  err_msg = {"error": f"Failed to load flow: {e!s}"}
753
749
  await client_websocket.send_json(err_msg)
754
- logger.error(f"Failed to load flow: {e}")
750
+ await logger.aerror(f"Failed to load flow: {e}")
755
751
  return
756
752
 
757
753
  url = "wss://api.openai.com/v1/realtime?model=gpt-4o-mini-realtime-preview"
@@ -800,7 +796,7 @@ async def flow_as_tool_websocket(
800
796
  msg_handler.openai_send({"type": "response.cancel"})
801
797
  bot_speaking_flag[0] = False
802
798
  except Exception as e: # noqa: BLE001
803
- logger.error(f"[ERROR] VAD processing failed (ValueError): {e}")
799
+ await logger.aerror(f"[ERROR] VAD processing failed (ValueError): {e}")
804
800
  continue
805
801
  if has_speech:
806
802
  last_speech_time = datetime.now(tz=timezone.utc)
@@ -856,7 +852,7 @@ async def flow_as_tool_websocket(
856
852
  return new_session
857
853
 
858
854
  class Response:
859
- def __init__(self, response_id: str, use_elevenlabs: bool | None = None):
855
+ def __init__(self, response_id: str, *, use_elevenlabs: bool | None = None):
860
856
  if use_elevenlabs is None:
861
857
  use_elevenlabs = False
862
858
  self.response_id = response_id
@@ -925,7 +921,7 @@ async def flow_as_tool_websocket(
925
921
  # client_send_event_from_thread(event, main_loop)
926
922
  msg_handler.client_send(event)
927
923
  except Exception: # noqa: BLE001
928
- logger.error(traceback.format_exc())
924
+ await logger.aerror(traceback.format_exc())
929
925
 
930
926
  async def forward_to_openai() -> None:
931
927
  nonlocal openai_realtime_session
@@ -954,10 +950,10 @@ async def flow_as_tool_websocket(
954
950
  msg_handler.openai_send(msg)
955
951
  num_audio_samples = 0
956
952
  elif msg.get("type") == "langflow.voice_mode.config":
957
- logger.info(f"langflow.voice_mode.config {msg}")
953
+ await logger.ainfo(f"langflow.voice_mode.config {msg}")
958
954
  voice_config.progress_enabled = msg.get("progress_enabled", True)
959
955
  elif msg.get("type") == "langflow.elevenlabs.config":
960
- logger.info(f"langflow.elevenlabs.config {msg}")
956
+ await logger.ainfo(f"langflow.elevenlabs.config {msg}")
961
957
  voice_config.use_elevenlabs = msg["enabled"]
962
958
  voice_config.elevenlabs_voice = msg.get("voice_id", voice_config.elevenlabs_voice)
963
959
 
@@ -997,7 +993,7 @@ async def flow_as_tool_websocket(
997
993
  if do_forward:
998
994
  msg_handler.client_send(event)
999
995
  if event_type == "response.created":
1000
- responses[response_id] = Response(response_id, voice_config.use_elevenlabs)
996
+ responses[response_id] = Response(response_id, use_elevenlabs=voice_config.use_elevenlabs)
1001
997
  if function_call:
1002
998
  if function_call.is_prog_enabled and not function_call.prog_rsp_id:
1003
999
  function_call.prog_rsp_id = response_id
@@ -1021,12 +1017,12 @@ async def flow_as_tool_websocket(
1021
1017
  message_text = event.get("text", "")
1022
1018
  await add_message_to_db(message_text, session, flow_id, session_id, "Machine", "AI")
1023
1019
  except ValueError as err:
1024
- logger.error(f"Error saving message to database (ValueError): {err}")
1025
- logger.error(traceback.format_exc())
1020
+ await logger.aerror(f"Error saving message to database (ValueError): {err}")
1021
+ await logger.aerror(traceback.format_exc())
1026
1022
  except (KeyError, AttributeError, TypeError) as err:
1027
1023
  # Replace blind Exception with specific exceptions
1028
- logger.error(f"Error saving message to database: {err}")
1029
- logger.error(traceback.format_exc())
1024
+ await logger.aerror(f"Error saving message to database: {err}")
1025
+ await logger.aerror(traceback.format_exc())
1030
1026
 
1031
1027
  elif event_type == "response.output_item.added":
1032
1028
  bot_speaking_flag[0] = True
@@ -1050,12 +1046,12 @@ async def flow_as_tool_websocket(
1050
1046
  if transcript and transcript.strip():
1051
1047
  await add_message_to_db(transcript, session, flow_id, session_id, "Machine", "AI")
1052
1048
  except ValueError as err:
1053
- logger.error(f"Error saving message to database (ValueError): {err}")
1054
- logger.error(traceback.format_exc())
1049
+ await logger.aerror(f"Error saving message to database (ValueError): {err}")
1050
+ await logger.aerror(traceback.format_exc())
1055
1051
  except (KeyError, AttributeError, TypeError) as err:
1056
1052
  # Replace blind Exception with specific exceptions
1057
- logger.error(f"Error saving message to database: {err}")
1058
- logger.error(traceback.format_exc())
1053
+ await logger.aerror(f"Error saving message to database: {err}")
1054
+ await logger.aerror(traceback.format_exc())
1059
1055
  bot_speaking_flag[0] = False
1060
1056
  elif event_type == "response.done":
1061
1057
  msg_handler.openai_unblock()
@@ -1080,12 +1076,12 @@ async def flow_as_tool_websocket(
1080
1076
  if message_text and message_text.strip():
1081
1077
  await add_message_to_db(message_text, session, flow_id, session_id, "User", "User")
1082
1078
  except ValueError as e:
1083
- logger.error(f"Error saving message to database (ValueError): {e}")
1084
- logger.error(traceback.format_exc())
1079
+ await logger.aerror(f"Error saving message to database (ValueError): {e}")
1080
+ await logger.aerror(traceback.format_exc())
1085
1081
  except (KeyError, AttributeError, TypeError) as e:
1086
1082
  # Replace blind Exception with specific exceptions
1087
- logger.error(f"Error saving message to database: {e}")
1088
- logger.error(traceback.format_exc())
1083
+ await logger.aerror(f"Error saving message to database: {e}")
1084
+ await logger.aerror(traceback.format_exc())
1089
1085
  elif event_type == "error":
1090
1086
  pass
1091
1087
 
@@ -1104,12 +1100,12 @@ async def flow_as_tool_websocket(
1104
1100
  # Check for exceptions in results
1105
1101
  for result in results:
1106
1102
  if isinstance(result, Exception):
1107
- logger.error("WS loop failed:", exc_info=result)
1108
- logger.error(traceback.format_exc())
1103
+ await logger.aerror("WS loop failed:", exc_info=result)
1104
+ await logger.aerror(traceback.format_exc())
1109
1105
  except Exception as e: # noqa: BLE001
1110
1106
  # Handle any other exceptions
1111
- logger.error(f"WS loop failed: {e}")
1112
- logger.error(traceback.format_exc())
1107
+ await logger.aerror(f"WS loop failed: {e}")
1108
+ await logger.aerror(traceback.format_exc())
1113
1109
  finally:
1114
1110
  # shared cleanup for writers & sockets
1115
1111
  async def close():
@@ -1119,8 +1115,8 @@ async def flow_as_tool_websocket(
1119
1115
 
1120
1116
  await close()
1121
1117
  except Exception as e: # noqa: BLE001
1122
- logger.error(f"Unexpected error: {e}")
1123
- logger.error(traceback.format_exc())
1118
+ await logger.aerror(f"Unexpected error: {e}")
1119
+ await logger.aerror(traceback.format_exc())
1124
1120
  finally:
1125
1121
  # Make sure to clean up the task
1126
1122
  if vad_task and not vad_task.done():
@@ -1232,16 +1228,16 @@ async def flow_tts_websocket(
1232
1228
  elif event.get("type") == "input_audio_buffer.commit":
1233
1229
  openai_send(event)
1234
1230
  elif event.get("type") == "langflow.elevenlabs.config":
1235
- logger.info(f"langflow.elevenlabs.config {event}")
1231
+ await logger.ainfo(f"langflow.elevenlabs.config {event}")
1236
1232
  tts_config.use_elevenlabs = event["enabled"]
1237
1233
  tts_config.elevenlabs_voice = event.get("voice_id", tts_config.elevenlabs_voice)
1238
1234
  elif event.get("type") == "voice.settings":
1239
1235
  # Store the voice setting
1240
1236
  if event.get("voice"):
1241
1237
  tts_config.openai_voice = event.get("voice")
1242
- logger.info(f"Updated OpenAI voice to: {tts_config.openai_voice}")
1238
+ await logger.ainfo(f"Updated OpenAI voice to: {tts_config.openai_voice}")
1243
1239
  except Exception as e: # noqa: BLE001
1244
- logger.error(f"Error in WebSocket communication: {e}")
1240
+ await logger.aerror(f"Error in WebSocket communication: {e}")
1245
1241
 
1246
1242
  async def forward_to_client() -> None:
1247
1243
  try:
@@ -1312,7 +1308,7 @@ async def flow_tts_websocket(
1312
1308
  audio_event = {"type": "response.audio.delta", "delta": base64_audio}
1313
1309
  client_send(audio_event)
1314
1310
  except Exception as e: # noqa: BLE001
1315
- logger.error(f"Error in WebSocket communication: {e}")
1311
+ await logger.aerror(f"Error in WebSocket communication: {e}")
1316
1312
 
1317
1313
  try:
1318
1314
  # Create tasks and gather them for concurrent execution
@@ -1321,13 +1317,13 @@ async def flow_tts_websocket(
1321
1317
  await asyncio.gather(task1, task2)
1322
1318
  except Exception as exc: # noqa: BLE001
1323
1319
  # handle any exceptions from any task
1324
- logger.error("WS loop failed:", exc_info=exc)
1320
+ await logger.aerror("WS loop failed:", exc_info=exc)
1325
1321
  finally:
1326
1322
  # shared cleanup for writers & sockets
1327
1323
  await close()
1328
1324
  except Exception as e: # noqa: BLE001
1329
- logger.error(f"Unexpected error: {e}")
1330
- logger.error(traceback.format_exc())
1325
+ await logger.aerror(f"Unexpected error: {e}")
1326
+ await logger.aerror(traceback.format_exc())
1331
1327
 
1332
1328
 
1333
1329
  def extract_transcript(json_data):
@@ -1367,13 +1363,13 @@ async def get_elevenlabs_voice_ids(
1367
1363
  for voice in voices
1368
1364
  ]
1369
1365
  except ValueError as e:
1370
- logger.error(f"Error fetching ElevenLabs voices (ValueError): {e}")
1366
+ await logger.aerror(f"Error fetching ElevenLabs voices (ValueError): {e}")
1371
1367
  return {"error": str(e)}
1372
1368
  except requests.RequestException as e:
1373
- logger.error(f"Error fetching ElevenLabs voices (RequestException): {e}")
1369
+ await logger.aerror(f"Error fetching ElevenLabs voices (RequestException): {e}")
1374
1370
  return {"error": str(e)}
1375
1371
  except (KeyError, AttributeError, TypeError) as e:
1376
1372
  # More specific exceptions instead of blind Exception
1377
- logger.error(f"Error fetching ElevenLabs voices: {e}")
1378
- logger.error(traceback.format_exc())
1373
+ await logger.aerror(f"Error fetching ElevenLabs voices: {e}")
1374
+ await logger.aerror(traceback.format_exc())
1379
1375
  return {"error": str(e)}
langflow/api/v2/files.py CHANGED
@@ -11,11 +11,11 @@ from zoneinfo import ZoneInfo
11
11
 
12
12
  from fastapi import APIRouter, Depends, File, HTTPException, UploadFile
13
13
  from fastapi.responses import StreamingResponse
14
- from loguru import logger
15
14
  from sqlmodel import col, select
16
15
 
17
16
  from langflow.api.schemas import UploadFileResponse
18
17
  from langflow.api.utils import CurrentActiveUser, DbSession
18
+ from langflow.logging.logger import logger
19
19
  from langflow.services.database.models.file.model import File as UserFile
20
20
  from langflow.services.deps import get_settings_service, get_storage_service
21
21
  from langflow.services.storage.service import StorageService
@@ -488,7 +488,7 @@ async def delete_file(
488
488
  raise
489
489
  except Exception as e:
490
490
  # Log and return a generic server error
491
- logger.error("Error deleting file %s: %s", file_id, e)
491
+ await logger.aerror("Error deleting file %s: %s", file_id, e)
492
492
  raise HTTPException(status_code=500, detail=f"Error deleting file: {e}") from e
493
493
  return {"detail": f"File {file_to_delete.name} deleted successfully"}
494
494
 
langflow/api/v2/mcp.py CHANGED
@@ -115,6 +115,7 @@ async def get_servers(
115
115
  session: DbSession,
116
116
  storage_service=Depends(get_storage_service),
117
117
  settings_service=Depends(get_settings_service),
118
+ *,
118
119
  action_count: bool | None = None,
119
120
  ):
120
121
  """Get the list of available servers."""
@@ -140,27 +141,27 @@ async def get_servers(
140
141
  server_info["error"] = "No tools found"
141
142
  except ValueError as e:
142
143
  # Configuration validation errors, invalid URLs, etc.
143
- logger.error(f"Configuration error for server {server_name}: {e}")
144
+ await logger.aerror(f"Configuration error for server {server_name}: {e}")
144
145
  server_info["error"] = f"Configuration error: {e}"
145
146
  except ConnectionError as e:
146
147
  # Network connection and timeout issues
147
- logger.error(f"Connection error for server {server_name}: {e}")
148
+ await logger.aerror(f"Connection error for server {server_name}: {e}")
148
149
  server_info["error"] = f"Connection failed: {e}"
149
150
  except (TimeoutError, asyncio.TimeoutError) as e:
150
151
  # Timeout errors
151
- logger.error(f"Timeout error for server {server_name}: {e}")
152
+ await logger.aerror(f"Timeout error for server {server_name}: {e}")
152
153
  server_info["error"] = "Timeout when checking server tools"
153
154
  except OSError as e:
154
155
  # System-level errors (process execution, file access)
155
- logger.error(f"System error for server {server_name}: {e}")
156
+ await logger.aerror(f"System error for server {server_name}: {e}")
156
157
  server_info["error"] = f"System error: {e}"
157
158
  except (KeyError, TypeError) as e:
158
159
  # Data parsing and access errors
159
- logger.error(f"Data error for server {server_name}: {e}")
160
+ await logger.aerror(f"Data error for server {server_name}: {e}")
160
161
  server_info["error"] = f"Configuration data error: {e}"
161
162
  except (RuntimeError, ProcessLookupError, PermissionError) as e:
162
163
  # Runtime and process-related errors
163
- logger.error(f"Runtime error for server {server_name}: {e}")
164
+ await logger.aerror(f"Runtime error for server {server_name}: {e}")
164
165
  server_info["error"] = f"Runtime error: {e}"
165
166
  except Exception as e: # noqa: BLE001
166
167
  # Generic catch-all for other exceptions (including ExceptionGroup)
@@ -168,15 +169,15 @@ async def get_servers(
168
169
  # Extract the first underlying exception for a more meaningful error message
169
170
  underlying_error = e.exceptions[0]
170
171
  if hasattr(underlying_error, "exceptions"):
171
- logger.error(
172
+ await logger.aerror(
172
173
  f"Error checking server {server_name}: {underlying_error}, {underlying_error.exceptions}"
173
174
  )
174
175
  underlying_error = underlying_error.exceptions[0]
175
176
  else:
176
- logger.exception(f"Error checking server {server_name}: {underlying_error}")
177
+ await logger.aexception(f"Error checking server {server_name}: {underlying_error}")
177
178
  server_info["error"] = f"Error loading server: {underlying_error}"
178
179
  else:
179
- logger.exception(f"Error checking server {server_name}: {e}")
180
+ await logger.aexception(f"Error checking server {server_name}: {e}")
180
181
  server_info["error"] = f"Error loading server: {e}"
181
182
  return server_info
182
183
 
@@ -135,7 +135,15 @@ class ComposioBaseComponent(Component):
135
135
 
136
136
  if isinstance(result, dict):
137
137
  result = [result]
138
- return DataFrame(result)
138
+ # Build DataFrame and avoid exposing a 'data' attribute via column access,
139
+ result_dataframe = DataFrame(result)
140
+ if hasattr(result_dataframe, "columns"):
141
+ try:
142
+ if "data" in result_dataframe.columns:
143
+ result_dataframe = result_dataframe.rename(columns={"data": "_data"})
144
+ except (AttributeError, TypeError, ValueError, KeyError) as e:
145
+ logger.debug(f"Failed to rename 'data' column: {e}")
146
+ return result_dataframe
139
147
 
140
148
  def as_data(self) -> Data:
141
149
  result = self.execute_action()
@@ -379,6 +387,8 @@ class ComposioBaseComponent(Component):
379
387
  # Handle conflicting field names - rename user_id to avoid conflicts with entity_id
380
388
  if clean_field == "user_id":
381
389
  clean_field = f"{self.app_name}_user_id"
390
+ elif clean_field == "status":
391
+ clean_field = f"{self.app_name}_status"
382
392
 
383
393
  action_fields.append(clean_field)
384
394
 
@@ -526,11 +536,18 @@ class ComposioBaseComponent(Component):
526
536
  # Handle conflicting field names - rename user_id to avoid conflicts with entity_id
527
537
  if clean_field_name == "user_id":
528
538
  clean_field_name = f"{self.app_name}_user_id"
529
- # Update the field schema description to reflect the name change
539
+ # Update
530
540
  field_schema_copy = field_schema.copy()
531
541
  field_schema_copy["description"] = (
532
542
  f"User ID for {self.app_name.title()}: " + field_schema["description"]
533
543
  )
544
+ elif clean_field_name == "status":
545
+ clean_field_name = f"{self.app_name}_status"
546
+ # Update
547
+ field_schema_copy = field_schema.copy()
548
+ field_schema_copy["description"] = (
549
+ f"Status for {self.app_name.title()}: " + field_schema["description"]
550
+ )
534
551
  else:
535
552
  # Use the original field schema for all other fields
536
553
  field_schema_copy = field_schema
@@ -1240,6 +1257,8 @@ class ComposioBaseComponent(Component):
1240
1257
  final_field_name = field
1241
1258
  if field.endswith("_user_id") and field.startswith(self.app_name):
1242
1259
  final_field_name = "user_id"
1260
+ elif field.endswith("_status") and field.startswith(self.app_name):
1261
+ final_field_name = "status"
1243
1262
 
1244
1263
  arguments[final_field_name] = value
1245
1264