langflow-base-nightly 0.5.0.dev36__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 (343) 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 +19 -12
  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 +5 -3
  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/data/kb_utils.py +33 -0
  26. langflow/base/embeddings/aiml_embeddings.py +1 -1
  27. langflow/base/flow_processing/utils.py +1 -2
  28. langflow/base/io/__init__.py +0 -1
  29. langflow/base/langwatch/utils.py +2 -1
  30. langflow/base/mcp/util.py +49 -47
  31. langflow/base/models/model.py +3 -3
  32. langflow/base/prompts/api_utils.py +1 -1
  33. langflow/base/tools/flow_tool.py +2 -2
  34. langflow/base/tools/run_flow.py +2 -6
  35. langflow/components/Notion/add_content_to_page.py +2 -2
  36. langflow/components/Notion/list_database_properties.py +2 -2
  37. langflow/components/Notion/list_pages.py +2 -2
  38. langflow/components/Notion/page_content_viewer.py +2 -2
  39. langflow/components/Notion/update_page_property.py +1 -1
  40. langflow/components/agentql/agentql_api.py +2 -10
  41. langflow/components/agents/agent.py +3 -3
  42. langflow/components/agents/mcp_component.py +54 -69
  43. langflow/components/anthropic/anthropic.py +5 -4
  44. langflow/components/assemblyai/assemblyai_get_subtitles.py +2 -2
  45. langflow/components/assemblyai/assemblyai_lemur.py +2 -2
  46. langflow/components/assemblyai/assemblyai_list_transcripts.py +2 -2
  47. langflow/components/assemblyai/assemblyai_poll_transcript.py +2 -2
  48. langflow/components/assemblyai/assemblyai_start_transcript.py +2 -2
  49. langflow/components/data/file.py +575 -55
  50. langflow/components/data/kb_ingest.py +116 -43
  51. langflow/components/data/kb_retrieval.py +24 -26
  52. langflow/components/data/url.py +1 -1
  53. langflow/components/datastax/astra_assistant_manager.py +3 -3
  54. langflow/components/datastax/create_assistant.py +1 -2
  55. langflow/components/deactivated/merge_data.py +1 -2
  56. langflow/components/deactivated/sub_flow.py +6 -7
  57. langflow/components/deactivated/vectara_self_query.py +3 -3
  58. langflow/components/docling/__init__.py +0 -198
  59. langflow/components/docling/docling_inline.py +1 -1
  60. langflow/components/embeddings/text_embedder.py +3 -3
  61. langflow/components/firecrawl/firecrawl_extract_api.py +2 -9
  62. langflow/components/google/gmail.py +1 -1
  63. langflow/components/google/google_generative_ai.py +5 -11
  64. langflow/components/groq/groq.py +4 -3
  65. langflow/components/helpers/current_date.py +2 -3
  66. langflow/components/helpers/memory.py +1 -1
  67. langflow/components/ibm/watsonx.py +1 -1
  68. langflow/components/ibm/watsonx_embeddings.py +1 -1
  69. langflow/components/langwatch/langwatch.py +3 -3
  70. langflow/components/logic/flow_tool.py +2 -2
  71. langflow/components/logic/notify.py +1 -1
  72. langflow/components/logic/run_flow.py +2 -3
  73. langflow/components/logic/sub_flow.py +4 -5
  74. langflow/components/mem0/mem0_chat_memory.py +2 -8
  75. langflow/components/nvidia/nvidia.py +3 -3
  76. langflow/components/olivya/olivya.py +7 -7
  77. langflow/components/ollama/ollama.py +8 -6
  78. langflow/components/processing/batch_run.py +8 -8
  79. langflow/components/processing/data_operations.py +2 -2
  80. langflow/components/processing/merge_data.py +1 -2
  81. langflow/components/processing/message_to_data.py +2 -3
  82. langflow/components/processing/parse_json_data.py +1 -1
  83. langflow/components/processing/save_file.py +6 -32
  84. langflow/components/prototypes/python_function.py +2 -3
  85. langflow/components/serpapi/serp.py +1 -1
  86. langflow/components/tavily/tavily_extract.py +1 -1
  87. langflow/components/tavily/tavily_search.py +1 -1
  88. langflow/components/tools/calculator.py +2 -2
  89. langflow/components/tools/python_code_structured_tool.py +3 -10
  90. langflow/components/tools/python_repl.py +2 -2
  91. langflow/components/tools/searxng.py +3 -3
  92. langflow/components/tools/serp_api.py +2 -2
  93. langflow/components/tools/tavily_search_tool.py +2 -2
  94. langflow/components/tools/yahoo_finance.py +1 -1
  95. langflow/components/twelvelabs/video_embeddings.py +4 -4
  96. langflow/components/vectorstores/astradb.py +30 -19
  97. langflow/components/vectorstores/local_db.py +1 -1
  98. langflow/components/yahoosearch/yahoo.py +1 -1
  99. langflow/components/youtube/trending.py +3 -4
  100. langflow/custom/attributes.py +2 -1
  101. langflow/custom/code_parser/code_parser.py +1 -1
  102. langflow/custom/custom_component/base_component.py +1 -1
  103. langflow/custom/custom_component/component.py +16 -2
  104. langflow/custom/directory_reader/directory_reader.py +7 -7
  105. langflow/custom/directory_reader/utils.py +1 -2
  106. langflow/custom/utils.py +30 -30
  107. langflow/events/event_manager.py +1 -1
  108. langflow/frontend/assets/{SlackIcon-B260Qg_R.js → SlackIcon-BhW6H3JR.js} +1 -1
  109. langflow/frontend/assets/{Wikipedia-BB2mbgyd.js → Wikipedia-Dx5jbiy3.js} +1 -1
  110. langflow/frontend/assets/{Wolfram-DytXC9hF.js → Wolfram-CIyonzwo.js} +1 -1
  111. langflow/frontend/assets/{index-DPX6X_bw.js → index-0XQqYgdG.js} +1 -1
  112. langflow/frontend/assets/{index-DtJyCbzF.js → index-1Q3VBqKn.js} +1 -1
  113. langflow/frontend/assets/{index-DztLFiip.js → index-35sspuLu.js} +1 -1
  114. langflow/frontend/assets/{index-BeNby7qF.js → index-7hzXChQz.js} +1 -1
  115. langflow/frontend/assets/{index-BOEf7-ty.js → index-8cuhogZP.js} +1 -1
  116. langflow/frontend/assets/{index-D0s9f6Re.js → index-B0m53xKd.js} +1 -1
  117. langflow/frontend/assets/{index-DpJiH-Rk.js → index-B1XqWJhG.js} +1 -1
  118. langflow/frontend/assets/{index-DuAeoC-H.js → index-B3KCdQ91.js} +1 -1
  119. langflow/frontend/assets/{index-Bxml6wXu.js → index-B7uEuOPK.js} +1 -1
  120. langflow/frontend/assets/{index-CDFLVFB4.js → index-B8UR8v-Q.js} +1 -1
  121. langflow/frontend/assets/{index-ci4XHjbJ.js → index-BD7Io1hL.js} +6 -6
  122. langflow/frontend/assets/{index-DasrI03Y.js → index-BDQrd7Tj.js} +1 -1
  123. langflow/frontend/assets/{index-CkQ-bJ4G.js → index-BDuk0d7P.js} +1 -1
  124. langflow/frontend/assets/{index-C_1RBTul.js → index-BFQ8KFK0.js} +1 -1
  125. langflow/frontend/assets/{index-DqSH4x-R.js → index-BFf0HTFI.js} +1 -1
  126. langflow/frontend/assets/{index-BXMhmvTj.js → index-BHhnpSkW.js} +1 -1
  127. langflow/frontend/assets/{index-Uq2ij_SS.js → index-BKKrUElc.js} +1 -1
  128. langflow/frontend/assets/{index-3TJWUdmx.js → index-BKeZt2hQ.js} +1 -1
  129. langflow/frontend/assets/{index-DHlEwAxb.js → index-BKlQbl-6.js} +1 -1
  130. langflow/frontend/assets/{index-Bisa4IQF.js → index-BLYw9MK2.js} +1 -1
  131. langflow/frontend/assets/{index-GODbXlHC.js → index-BLsVo9iW.js} +1 -1
  132. langflow/frontend/assets/{index-CHFO5O4g.js → index-BNQIbda3.js} +1 -1
  133. langflow/frontend/assets/{index-3uOAA_XX.js → index-BPR2mEFC.js} +1 -1
  134. langflow/frontend/assets/{index-3qMh9x6K.js → index-BPfdqCc_.js} +1 -1
  135. langflow/frontend/assets/{index-rcdQpNcU.js → index-BQrVDjR1.js} +1 -1
  136. langflow/frontend/assets/{index-4eRtaV45.js → index-BRmSeoWR.js} +1 -1
  137. langflow/frontend/assets/{index-Ct9_T9ox.js → index-BUse-kxM.js} +1 -1
  138. langflow/frontend/assets/{index-BdYgKk1d.js → index-BVFaF7HW.js} +1 -1
  139. langflow/frontend/assets/{index-CWWo2zOA.js → index-BWgIWfv2.js} +1 -1
  140. langflow/frontend/assets/{index-Du9aJK7m.js → index-BWt5xGeA.js} +1 -1
  141. langflow/frontend/assets/{index-Baka5dKE.js → index-BYhcGLTV.js} +1 -1
  142. langflow/frontend/assets/{index-BWq9GTzt.js → index-BYjw7Gk3.js} +1 -1
  143. langflow/frontend/assets/{index-r1LZg-PY.js → index-BZFljdMa.js} +1 -1
  144. langflow/frontend/assets/index-BcAgItH4.js +1 -0
  145. langflow/frontend/assets/{index-B8TlNgn-.js → index-Bct1s6__.js} +1 -1
  146. langflow/frontend/assets/{index-DZzbmg3J.js → index-Bhv79Zso.js} +1 -1
  147. langflow/frontend/assets/{index-CqDUqHfd.js → index-Bj3lSwvZ.js} +1 -1
  148. langflow/frontend/assets/{index-dkS0ek2S.js → index-Bk4mTwnI.js} +1 -1
  149. langflow/frontend/assets/{index-tOy_uloT.js → index-BmIx1cws.js} +1 -1
  150. langflow/frontend/assets/{index-BVtf6m9S.js → index-BmYJJ5YS.js} +1 -1
  151. langflow/frontend/assets/{index-mBjJYD9q.js → index-BnAFhkSN.js} +1 -1
  152. langflow/frontend/assets/{index-Ba3RTMXI.js → index-Bo-ww0Bb.js} +1 -1
  153. langflow/frontend/assets/{index-BsBWP-Dh.js → index-BpmqDOeZ.js} +1 -1
  154. langflow/frontend/assets/{index-BqUeOc7Y.js → index-BrVhdPZb.js} +1 -1
  155. langflow/frontend/assets/{index-DWkMJnbd.js → index-BvGQfVBD.js} +1 -1
  156. langflow/frontend/assets/{index-DdzVmJHE.js → index-Bwi4flFg.js} +1 -1
  157. langflow/frontend/assets/{index-Ccb5B8zG.js → index-BzoRPtTY.js} +1 -1
  158. langflow/frontend/assets/{index-Ym6gz0T6.js → index-C--IDAyc.js} +1 -1
  159. langflow/frontend/assets/{index-CvQ0w8Pj.js → index-C0E3_MIK.js} +1 -1
  160. langflow/frontend/assets/{index-DxIs8VSp.js → index-C27Jj_26.js} +1 -1
  161. langflow/frontend/assets/{index-BxWXWRmZ.js → index-C2eQmQsn.js} +1 -1
  162. langflow/frontend/assets/{index-B536IPXH.js → index-C8K0r39B.js} +1 -1
  163. langflow/frontend/assets/{index-BEDxAk3N.js → index-CEJNWPhA.js} +1 -1
  164. langflow/frontend/assets/{index-G_U_kPAd.js → index-CFNTYfFK.js} +1 -1
  165. langflow/frontend/assets/{index-CMGZGIx_.js → index-CMHpjHZl.js} +1 -1
  166. langflow/frontend/assets/{index-C76aBV_h.js → index-CSu8KHOi.js} +1 -1
  167. langflow/frontend/assets/{index-B-c82Fnu.js → index-CUKmGsI6.js} +1 -1
  168. langflow/frontend/assets/{index-DX7XsAcx.js → index-CWYiSeWV.js} +1 -1
  169. langflow/frontend/assets/{index-COL0eiWI.js → index-CY7_TBTC.js} +1 -1
  170. langflow/frontend/assets/{index-BlBl2tvQ.js → index-CbnWRlYY.js} +1 -1
  171. langflow/frontend/assets/{index-BQB-iDYl.js → index-CfPBgkqg.js} +1 -1
  172. langflow/frontend/assets/{index-DWr_zPkx.js → index-Cg53lrYh.js} +1 -1
  173. langflow/frontend/assets/{index-BcgB3rXH.js → index-CgU7KF4I.js} +1 -1
  174. langflow/frontend/assets/{index-CkSzjCqM.js → index-CgwykVGh.js} +1 -1
  175. langflow/frontend/assets/{index-BbsND1Qg.js → index-Ch5r0oW6.js} +1 -1
  176. langflow/frontend/assets/{index-AY5Dm2mG.js → index-CjsommIr.js} +1 -1
  177. langflow/frontend/assets/{index-BtJ2o21k.js → index-CkK25zZO.js} +1 -1
  178. langflow/frontend/assets/{index-BKvKC-12.js → index-CkjwSTSM.js} +1 -1
  179. langflow/frontend/assets/{index-BVHvIhT5.js → index-CmSFKgiD.js} +1 -1
  180. langflow/frontend/assets/{index-D-zkHcob.js → index-Cr5v2ave.js} +1 -1
  181. langflow/frontend/assets/{index-js8ceOaP.js → index-CrAF-31Y.js} +1 -1
  182. langflow/frontend/assets/{index-BNbWMmAV.js → index-CsLQiWNf.js} +1 -1
  183. langflow/frontend/assets/{index-VcXZzovW.js → index-CuCM7Wu7.js} +1 -1
  184. langflow/frontend/assets/{index-DzeIsaBm.js → index-Cxy9sEpy.js} +1 -1
  185. langflow/frontend/assets/{index-LrMzDsq9.js → index-CyP3py8K.js} +1 -1
  186. langflow/frontend/assets/{index-C8KD3LPb.js → index-CzHzeZuA.js} +1 -1
  187. langflow/frontend/assets/{index-DS1EgA10.js → index-D1oynC8a.js} +1 -1
  188. langflow/frontend/assets/{index-ByFXr9Iq.js → index-D4tjMhfY.js} +1 -1
  189. langflow/frontend/assets/{index-DyJDHm2D.js → index-D6CSIrp1.js} +1 -1
  190. langflow/frontend/assets/{index-DIqSyDVO.js → index-D9kwEzPB.js} +1 -1
  191. langflow/frontend/assets/{index-D5PeCofu.js → index-DDXsm8tz.js} +1 -1
  192. langflow/frontend/assets/{index-CJwYfDBz.js → index-DDhJVVel.js} +1 -1
  193. langflow/frontend/assets/{index-C7x9R_Yo.js → index-DH6o91_s.js} +1 -1
  194. langflow/frontend/assets/{index-DpQKtcXu.js → index-DHngW1k8.js} +1 -1
  195. langflow/frontend/assets/{index-VZnN0P6C.js → index-DIKUsGLF.js} +1 -1
  196. langflow/frontend/assets/{index-VHmUHUUU.js → index-DJESSNJi.js} +1 -1
  197. langflow/frontend/assets/{index-BdIWbCEL.js → index-DMCWDJOl.js} +1 -1
  198. langflow/frontend/assets/{index-DK8vNpXK.js → index-DOEvKC2X.js} +1 -1
  199. langflow/frontend/assets/{index-C7V5U9yH.js → index-DOQDkSoK.js} +1 -1
  200. langflow/frontend/assets/{index-D0HmkH0H.js → index-DXAfIEvs.js} +1 -1
  201. langflow/frontend/assets/{index-C9N80hP8.js → index-DZP_SaHb.js} +1 -1
  202. langflow/frontend/assets/{index-B2ggrBuR.js → index-DZxUIhWh.js} +1 -1
  203. langflow/frontend/assets/{index-DS9I4y48.js → index-Dda2u_yz.js} +1 -1
  204. langflow/frontend/assets/{index-BLROcaSz.js → index-Dg8N3NSO.js} +1 -1
  205. langflow/frontend/assets/{index-Dpz3oBf5.js → index-DkGhPNeA.js} +1 -1
  206. langflow/frontend/assets/{index-BnLT29qW.js → index-Dka_Rk4-.js} +1 -1
  207. langflow/frontend/assets/{index-B5ed-sAv.js → index-DljpLeCW.js} +1 -1
  208. langflow/frontend/assets/{index-Cx__T92e.js → index-DnVYJtVO.js} +1 -1
  209. langflow/frontend/assets/{index-hOkEW3JP.js → index-DqbzUcI5.js} +1 -1
  210. langflow/frontend/assets/{index-BxkZkBgQ.js → index-Dr6pVDPI.js} +1 -1
  211. langflow/frontend/assets/{index-BIkqesA-.js → index-DsoX2o1S.js} +1 -1
  212. langflow/frontend/assets/{index-Cpgkb0Q3.js → index-DwfHWnX7.js} +1 -1
  213. langflow/frontend/assets/{index-B9Mo3ndZ.js → index-Dx-Z87KT.js} +1 -1
  214. langflow/frontend/assets/{index-R7q8cAek.js → index-DyqITq51.js} +1 -1
  215. langflow/frontend/assets/{index-DKEXZFUO.js → index-DzIv3RyR.js} +1 -1
  216. langflow/frontend/assets/{index-BJrY2Fiu.js → index-G4ro0MjT.js} +1 -1
  217. langflow/frontend/assets/{index-IFGgPiye.js → index-H7J7w7fa.js} +1 -1
  218. langflow/frontend/assets/{index-lKEJpUsF.js → index-KWY77KfV.js} +1 -1
  219. langflow/frontend/assets/{index-DDNNv4C0.js → index-U9GWm1eH.js} +1 -1
  220. langflow/frontend/assets/{index-BRWNIt9F.js → index-Un9pWxnP.js} +1 -1
  221. langflow/frontend/assets/{index-BCK-ZyIh.js → index-Xi4TplbI.js} +1 -1
  222. langflow/frontend/assets/{index-BEKoRwsX.js → index-_cbGmjF4.js} +1 -1
  223. langflow/frontend/assets/{index-7xXgqu09.js → index-cEXY6V06.js} +1 -1
  224. langflow/frontend/assets/{index-D87Zw62M.js → index-dyXKnkMi.js} +1 -1
  225. langflow/frontend/assets/{index-CG7cp0nD.js → index-eUkS6iJM.js} +1 -1
  226. langflow/frontend/assets/{index-CoUlHbtg.js → index-ekfMOqrF.js} +1 -1
  227. langflow/frontend/assets/{index-DhzEUXfr.js → index-gdb7XMS8.js} +1 -1
  228. langflow/frontend/assets/{index-D9eflZfP.js → index-hZUcL0MZ.js} +1 -1
  229. langflow/frontend/assets/{index-CwIxqYlT.js → index-kkA-qHB_.js} +1 -1
  230. langflow/frontend/assets/{index-sS6XLk3j.js → index-mzl9ULw5.js} +1 -1
  231. langflow/frontend/assets/{index-BjENqyKe.js → index-oxHBZk2v.js} +1 -1
  232. langflow/frontend/assets/{index-BejHxU5W.js → index-p2kStSPe.js} +1 -1
  233. langflow/frontend/assets/{index-BOYTBrh9.js → index-paQEWYGT.js} +1 -1
  234. langflow/frontend/assets/{index-Cd5zuUUK.js → index-r_8gs4nL.js} +1 -1
  235. langflow/frontend/assets/{index-AlJ7td-D.js → index-uiKla4UR.js} +1 -1
  236. langflow/frontend/assets/{index-B8y58M9b.js → index-vJOO5U8M.js} +1 -1
  237. langflow/frontend/assets/{index-CF4dtI6S.js → index-w72fDjpG.js} +1 -1
  238. langflow/frontend/assets/{index-C2Xd7UkR.js → index-zV82kQ6k.js} +1 -1
  239. langflow/frontend/assets/lazyIconImports-DTNgvPE-.js +2 -0
  240. langflow/frontend/assets/{use-post-add-user-HN0rRnhv.js → use-post-add-user-CvtuazTg.js} +1 -1
  241. langflow/frontend/index.html +1 -1
  242. langflow/graph/edge/base.py +2 -3
  243. langflow/graph/graph/base.py +14 -12
  244. langflow/graph/graph/constants.py +3 -0
  245. langflow/graph/utils.py +6 -6
  246. langflow/graph/vertex/base.py +4 -5
  247. langflow/graph/vertex/param_handler.py +1 -1
  248. langflow/graph/vertex/vertex_types.py +2 -2
  249. langflow/helpers/flow.py +1 -1
  250. langflow/initial_setup/setup.py +32 -30
  251. langflow/initial_setup/starter_projects/Blog Writer.json +2 -2
  252. langflow/initial_setup/starter_projects/Custom Component Generator.json +2 -2
  253. langflow/initial_setup/starter_projects/Document Q&A.json +1 -1
  254. langflow/initial_setup/starter_projects/Hybrid Search RAG.json +2 -2
  255. langflow/initial_setup/starter_projects/Instagram Copywriter.json +3 -3
  256. langflow/initial_setup/starter_projects/Invoice Summarizer.json +1 -1
  257. langflow/initial_setup/starter_projects/Knowledge Ingestion.json +4 -4
  258. langflow/initial_setup/starter_projects/Knowledge Retrieval.json +2 -2
  259. langflow/initial_setup/starter_projects/Market Research.json +3 -3
  260. langflow/initial_setup/starter_projects/Meeting Summary.json +6 -6
  261. langflow/initial_setup/starter_projects/Memory Chatbot.json +2 -2
  262. langflow/initial_setup/starter_projects/News Aggregator.json +5 -22
  263. langflow/initial_setup/starter_projects/Nvidia Remix.json +3 -20
  264. langflow/initial_setup/starter_projects/Pok/303/251dex Agent.json" +1 -1
  265. langflow/initial_setup/starter_projects/Portfolio Website Code Generator.json +1 -1
  266. langflow/initial_setup/starter_projects/Price Deal Finder.json +5 -5
  267. langflow/initial_setup/starter_projects/Research Agent.json +3 -3
  268. langflow/initial_setup/starter_projects/SaaS Pricing.json +1 -1
  269. langflow/initial_setup/starter_projects/Search agent.json +1 -1
  270. langflow/initial_setup/starter_projects/Sequential Tasks Agents.json +7 -7
  271. langflow/initial_setup/starter_projects/Simple Agent.json +3 -3
  272. langflow/initial_setup/starter_projects/Social Media Agent.json +1 -1
  273. langflow/initial_setup/starter_projects/Text Sentiment Analysis.json +1 -1
  274. langflow/initial_setup/starter_projects/Travel Planning Agents.json +3 -3
  275. langflow/initial_setup/starter_projects/Vector Store RAG.json +5 -5
  276. langflow/initial_setup/starter_projects/Youtube Analysis.json +3 -3
  277. langflow/interface/components.py +23 -22
  278. langflow/interface/initialize/loading.py +5 -5
  279. langflow/interface/run.py +1 -1
  280. langflow/interface/utils.py +1 -1
  281. langflow/io/__init__.py +0 -1
  282. langflow/langflow_launcher.py +1 -1
  283. langflow/load/load.py +2 -7
  284. langflow/logging/__init__.py +0 -1
  285. langflow/logging/logger.py +191 -115
  286. langflow/logging/setup.py +1 -1
  287. langflow/main.py +37 -52
  288. langflow/memory.py +7 -7
  289. langflow/middleware.py +1 -1
  290. langflow/processing/process.py +4 -4
  291. langflow/schema/artifact.py +2 -2
  292. langflow/schema/data.py +10 -2
  293. langflow/schema/dataframe.py +1 -1
  294. langflow/schema/message.py +1 -1
  295. langflow/serialization/serialization.py +1 -1
  296. langflow/services/auth/utils.py +2 -2
  297. langflow/services/cache/disk.py +1 -1
  298. langflow/services/cache/service.py +3 -3
  299. langflow/services/database/models/flow/model.py +2 -7
  300. langflow/services/database/models/transactions/crud.py +2 -2
  301. langflow/services/database/models/user/crud.py +2 -2
  302. langflow/services/database/service.py +8 -8
  303. langflow/services/database/utils.py +6 -5
  304. langflow/services/deps.py +2 -3
  305. langflow/services/factory.py +1 -1
  306. langflow/services/flow/flow_runner.py +7 -12
  307. langflow/services/job_queue/service.py +16 -15
  308. langflow/services/manager.py +3 -4
  309. langflow/services/settings/auth.py +1 -1
  310. langflow/services/settings/base.py +3 -8
  311. langflow/services/settings/manager.py +1 -1
  312. langflow/services/settings/utils.py +1 -1
  313. langflow/services/socket/__init__.py +0 -1
  314. langflow/services/socket/service.py +3 -3
  315. langflow/services/socket/utils.py +4 -4
  316. langflow/services/state/service.py +1 -2
  317. langflow/services/storage/factory.py +1 -1
  318. langflow/services/storage/local.py +9 -8
  319. langflow/services/storage/s3.py +11 -10
  320. langflow/services/store/service.py +3 -3
  321. langflow/services/store/utils.py +3 -2
  322. langflow/services/task/temp_flow_cleanup.py +7 -7
  323. langflow/services/telemetry/service.py +10 -10
  324. langflow/services/tracing/arize_phoenix.py +2 -2
  325. langflow/services/tracing/langfuse.py +1 -1
  326. langflow/services/tracing/langsmith.py +1 -1
  327. langflow/services/tracing/langwatch.py +1 -1
  328. langflow/services/tracing/opik.py +1 -1
  329. langflow/services/tracing/service.py +25 -6
  330. langflow/services/tracing/traceloop.py +245 -0
  331. langflow/services/utils.py +7 -7
  332. langflow/services/variable/kubernetes.py +3 -3
  333. langflow/services/variable/kubernetes_secrets.py +2 -1
  334. langflow/services/variable/service.py +5 -5
  335. langflow/utils/component_utils.py +9 -6
  336. langflow/utils/util.py +5 -5
  337. langflow/utils/validate.py +3 -3
  338. langflow/utils/voice_utils.py +2 -2
  339. {langflow_base_nightly-0.5.0.dev36.dist-info → langflow_base_nightly-0.5.0.dev38.dist-info}/METADATA +2 -1
  340. {langflow_base_nightly-0.5.0.dev36.dist-info → langflow_base_nightly-0.5.0.dev38.dist-info}/RECORD +342 -340
  341. langflow/frontend/assets/lazyIconImports-Bh1TFfvH.js +0 -2
  342. {langflow_base_nightly-0.5.0.dev36.dist-info → langflow_base_nightly-0.5.0.dev38.dist-info}/WHEEL +0 -0
  343. {langflow_base_nightly-0.5.0.dev36.dist-info → langflow_base_nightly-0.5.0.dev38.dist-info}/entry_points.txt +0 -0
@@ -1,5 +1,7 @@
1
1
  from __future__ import annotations
2
2
 
3
+ import asyncio
4
+ import contextlib
3
5
  import hashlib
4
6
  import json
5
7
  import re
@@ -14,6 +16,7 @@ from cryptography.fernet import InvalidToken
14
16
  from langchain_chroma import Chroma
15
17
  from loguru import logger
16
18
 
19
+ from langflow.base.data.kb_utils import get_knowledge_bases
17
20
  from langflow.base.models.openai_constants import OPENAI_EMBEDDING_MODEL_NAMES
18
21
  from langflow.custom import Component
19
22
  from langflow.io import BoolInput, DataFrameInput, DropdownInput, IntInput, Output, SecretStrInput, StrInput, TableInput
@@ -21,7 +24,8 @@ from langflow.schema.data import Data
21
24
  from langflow.schema.dotdict import dotdict # noqa: TC001
22
25
  from langflow.schema.table import EditMode
23
26
  from langflow.services.auth.utils import decrypt_api_key, encrypt_api_key
24
- from langflow.services.deps import get_settings_service
27
+ from langflow.services.database.models.user.crud import get_user_by_id
28
+ from langflow.services.deps import get_settings_service, get_variable_service, session_scope
25
29
 
26
30
  HUGGINGFACE_MODEL_NAMES = ["sentence-transformers/all-MiniLM-L6-v2", "sentence-transformers/all-mpnet-base-v2"]
27
31
  COHERE_MODEL_NAMES = ["embed-english-v3.0", "embed-multilingual-v3.0"]
@@ -43,6 +47,10 @@ class KBIngestionComponent(Component):
43
47
  icon = "database"
44
48
  name = "KBIngestion"
45
49
 
50
+ def __init__(self, *args, **kwargs) -> None:
51
+ super().__init__(*args, **kwargs)
52
+ self._cached_kb_path: Path | None = None
53
+
46
54
  @dataclass
47
55
  class NewKnowledgeBaseInput:
48
56
  functionality: str = "create"
@@ -76,7 +84,7 @@ class KBIngestionComponent(Component):
76
84
  display_name="API Key",
77
85
  info="Provider API key for embedding model",
78
86
  required=True,
79
- load_from_db=True,
87
+ load_from_db=False,
80
88
  ),
81
89
  },
82
90
  },
@@ -91,11 +99,7 @@ class KBIngestionComponent(Component):
91
99
  display_name="Knowledge",
92
100
  info="Select the knowledge to load data from.",
93
101
  required=True,
94
- options=[
95
- str(d.name) for d in KNOWLEDGE_BASES_ROOT_PATH.iterdir() if not d.name.startswith(".") and d.is_dir()
96
- ]
97
- if KNOWLEDGE_BASES_ROOT_PATH.exists()
98
- else [],
102
+ options=[],
99
103
  refresh_button=True,
100
104
  dialog_inputs=asdict(NewKnowledgeBaseInput()),
101
105
  ),
@@ -329,22 +333,23 @@ class KBIngestionComponent(Component):
329
333
 
330
334
  return metadata
331
335
 
332
- def _create_vector_store(
336
+ async def _create_vector_store(
333
337
  self, df_source: pd.DataFrame, config_list: list[dict[str, Any]], embedding_model: str, api_key: str
334
338
  ) -> None:
335
339
  """Create vector store following Local DB component pattern."""
336
340
  try:
337
341
  # Set up vector store directory
338
- base_dir = self._get_kb_root()
339
-
340
- vector_store_dir = base_dir / self.knowledge_base
342
+ vector_store_dir = await self._kb_path()
343
+ if not vector_store_dir:
344
+ msg = "Knowledge base path is not set. Please create a new knowledge base first."
345
+ raise ValueError(msg)
341
346
  vector_store_dir.mkdir(parents=True, exist_ok=True)
342
347
 
343
348
  # Create embeddings model
344
349
  embedding_function = self._build_embeddings(embedding_model, api_key)
345
350
 
346
351
  # Convert DataFrame to Data objects (following Local DB pattern)
347
- data_objects = self._convert_df_to_data_objects(df_source, config_list)
352
+ data_objects = await self._convert_df_to_data_objects(df_source, config_list)
348
353
 
349
354
  # Create vector store
350
355
  chroma = Chroma(
@@ -367,16 +372,18 @@ class KBIngestionComponent(Component):
367
372
  except (OSError, ValueError, RuntimeError) as e:
368
373
  self.log(f"Error creating vector store: {e}")
369
374
 
370
- def _convert_df_to_data_objects(self, df_source: pd.DataFrame, config_list: list[dict[str, Any]]) -> list[Data]:
375
+ async def _convert_df_to_data_objects(
376
+ self, df_source: pd.DataFrame, config_list: list[dict[str, Any]]
377
+ ) -> list[Data]:
371
378
  """Convert DataFrame to Data objects for vector store."""
372
379
  data_objects: list[Data] = []
373
380
 
374
381
  # Set up vector store directory
375
- base_dir = self._get_kb_root()
382
+ kb_path = await self._kb_path()
376
383
 
377
384
  # If we don't allow duplicates, we need to get the existing hashes
378
385
  chroma = Chroma(
379
- persist_directory=str(base_dir / self.knowledge_base),
386
+ persist_directory=str(kb_path),
380
387
  collection_name=self.knowledge_base,
381
388
  )
382
389
 
@@ -466,10 +473,34 @@ class KBIngestionComponent(Component):
466
473
  # Check allowed characters (condition 3)
467
474
  return re.match(r"^[a-zA-Z0-9_-]+$", name) is not None
468
475
 
476
+ async def _kb_path(self) -> Path | None:
477
+ # Check if we already have the path cached
478
+ cached_path = getattr(self, "_cached_kb_path", None)
479
+ if cached_path is not None:
480
+ return cached_path
481
+
482
+ # If not cached, compute it
483
+ async with session_scope() as db:
484
+ if not self.user_id:
485
+ msg = "User ID is required for fetching knowledge base path."
486
+ raise ValueError(msg)
487
+ current_user = await get_user_by_id(db, self.user_id)
488
+ if not current_user:
489
+ msg = f"User with ID {self.user_id} not found."
490
+ raise ValueError(msg)
491
+ kb_user = current_user.username
492
+
493
+ kb_root = self._get_kb_root()
494
+
495
+ # Cache the result
496
+ self._cached_kb_path = kb_root / kb_user / self.knowledge_base
497
+
498
+ return self._cached_kb_path
499
+
469
500
  # ---------------------------------------------------------------------
470
501
  # OUTPUT METHODS
471
502
  # ---------------------------------------------------------------------
472
- def build_kb_info(self) -> Data:
503
+ async def build_kb_info(self) -> Data:
473
504
  """Main ingestion routine → returns a dict with KB metadata."""
474
505
  try:
475
506
  # Get source DataFrame
@@ -479,11 +510,11 @@ class KBIngestionComponent(Component):
479
510
  config_list = self._validate_column_config(df_source)
480
511
  column_metadata = self._build_column_metadata(config_list, df_source)
481
512
 
482
- # Prepare KB folder (using File Component patterns)
483
- kb_root = self._get_kb_root()
484
- kb_path = kb_root / self.knowledge_base
485
-
486
513
  # Read the embedding info from the knowledge base folder
514
+ kb_path = await self._kb_path()
515
+ if not kb_path:
516
+ msg = "Knowledge base path is not set. Please create a new knowledge base first."
517
+ raise ValueError(msg)
487
518
  metadata_path = kb_path / "embedding_metadata.json"
488
519
 
489
520
  # If the API key is not provided, try to read it from the metadata file
@@ -506,7 +537,7 @@ class KBIngestionComponent(Component):
506
537
  )
507
538
 
508
539
  # Create vector store following Local DB component pattern
509
- self._create_vector_store(df_source, config_list, embedding_model=embedding_model, api_key=api_key)
540
+ await self._create_vector_store(df_source, config_list, embedding_model=embedding_model, api_key=api_key)
510
541
 
511
542
  # Save KB files (using File Component storage patterns)
512
543
  self._save_kb_files(kb_path, config_list)
@@ -532,40 +563,77 @@ class KBIngestionComponent(Component):
532
563
  self.status = f"❌ KB ingestion failed: {e}"
533
564
  return Data(data={"error": str(e), "kb_name": self.knowledge_base})
534
565
 
535
- def _get_knowledge_bases(self) -> list[str]:
536
- """Retrieve a list of available knowledge bases.
537
-
538
- Returns:
539
- A list of knowledge base names.
540
- """
541
- # Return the list of directories in the knowledge base root path
542
- kb_root_path = self._get_kb_root()
543
-
544
- if not kb_root_path.exists():
545
- return []
546
-
547
- return [str(d.name) for d in kb_root_path.iterdir() if not d.name.startswith(".") and d.is_dir()]
566
+ async def _get_api_key_variable(self, field_value: dict[str, Any]):
567
+ async with session_scope() as db:
568
+ if not self.user_id:
569
+ msg = "User ID is required for fetching global variables."
570
+ raise ValueError(msg)
571
+ current_user = await get_user_by_id(db, self.user_id)
572
+ if not current_user:
573
+ msg = f"User with ID {self.user_id} not found."
574
+ raise ValueError(msg)
575
+ variable_service = get_variable_service()
576
+
577
+ # Process the api_key field variable
578
+ return await variable_service.get_variable(
579
+ user_id=current_user.id,
580
+ name=field_value["03_api_key"],
581
+ field="",
582
+ session=db,
583
+ )
548
584
 
549
- def update_build_config(self, build_config: dotdict, field_value: Any, field_name: str | None = None) -> dotdict:
585
+ async def update_build_config(
586
+ self,
587
+ build_config: dotdict,
588
+ field_value: Any,
589
+ field_name: str | None = None,
590
+ ) -> dotdict:
550
591
  """Update build configuration based on provider selection."""
551
592
  # Create a new knowledge base
552
593
  if field_name == "knowledge_base":
594
+ async with session_scope() as db:
595
+ if not self.user_id:
596
+ msg = "User ID is required for fetching knowledge base list."
597
+ raise ValueError(msg)
598
+ current_user = await get_user_by_id(db, self.user_id)
599
+ if not current_user:
600
+ msg = f"User with ID {self.user_id} not found."
601
+ raise ValueError(msg)
602
+ kb_user = current_user.username
553
603
  if isinstance(field_value, dict) and "01_new_kb_name" in field_value:
554
604
  # Validate the knowledge base name - Make sure it follows these rules:
555
605
  if not self.is_valid_collection_name(field_value["01_new_kb_name"]):
556
606
  msg = f"Invalid knowledge base name: {field_value['01_new_kb_name']}"
557
607
  raise ValueError(msg)
558
608
 
609
+ api_key = field_value.get("03_api_key", None)
610
+ with contextlib.suppress(Exception):
611
+ # If the API key is a variable, resolve it
612
+ api_key = await self._get_api_key_variable(field_value)
613
+
614
+ # Make sure api_key is a string
615
+ if not isinstance(api_key, str):
616
+ msg = "API key must be a string."
617
+ raise ValueError(msg)
618
+
559
619
  # We need to test the API Key one time against the embedding model
560
- embed_model = self._build_embeddings(
561
- embedding_model=field_value["02_embedding_model"], api_key=field_value["03_api_key"]
562
- )
620
+ embed_model = self._build_embeddings(embedding_model=field_value["02_embedding_model"], api_key=api_key)
563
621
 
564
- # Try to generate a dummy embedding to validate the API key
565
- embed_model.embed_query("test")
622
+ # Try to generate a dummy embedding to validate the API key without blocking the event loop
623
+ try:
624
+ await asyncio.wait_for(
625
+ asyncio.to_thread(embed_model.embed_query, "test"),
626
+ timeout=10,
627
+ )
628
+ except TimeoutError as e:
629
+ msg = "Embedding validation timed out. Please verify network connectivity and key."
630
+ raise ValueError(msg) from e
631
+ except Exception as e:
632
+ msg = f"Embedding validation failed: {e!s}"
633
+ raise ValueError(msg) from e
566
634
 
567
635
  # Create the new knowledge base directory
568
- kb_path = KNOWLEDGE_BASES_ROOT_PATH / field_value["01_new_kb_name"]
636
+ kb_path = KNOWLEDGE_BASES_ROOT_PATH / kb_user / field_value["01_new_kb_name"]
569
637
  kb_path.mkdir(parents=True, exist_ok=True)
570
638
 
571
639
  # Save the embedding metadata
@@ -573,11 +641,16 @@ class KBIngestionComponent(Component):
573
641
  self._save_embedding_metadata(
574
642
  kb_path=kb_path,
575
643
  embedding_model=field_value["02_embedding_model"],
576
- api_key=field_value["03_api_key"],
644
+ api_key=api_key,
577
645
  )
578
646
 
579
647
  # Update the knowledge base options dynamically
580
- build_config["knowledge_base"]["options"] = self._get_knowledge_bases()
648
+ build_config["knowledge_base"]["options"] = await get_knowledge_bases(
649
+ KNOWLEDGE_BASES_ROOT_PATH,
650
+ user_id=self.user_id,
651
+ )
652
+
653
+ # If the selected knowledge base is not available, reset it
581
654
  if build_config["knowledge_base"]["value"] not in build_config["knowledge_base"]["options"]:
582
655
  build_config["knowledge_base"]["value"] = None
583
656
 
@@ -5,13 +5,16 @@ from typing import Any
5
5
  from cryptography.fernet import InvalidToken
6
6
  from langchain_chroma import Chroma
7
7
  from loguru import logger
8
+ from pydantic import SecretStr
8
9
 
10
+ from langflow.base.data.kb_utils import get_knowledge_bases
9
11
  from langflow.custom import Component
10
12
  from langflow.io import BoolInput, DropdownInput, IntInput, MessageTextInput, Output, SecretStrInput
11
13
  from langflow.schema.data import Data
12
14
  from langflow.schema.dataframe import DataFrame
13
15
  from langflow.services.auth.utils import decrypt_api_key
14
- from langflow.services.deps import get_settings_service
16
+ from langflow.services.database.models.user.crud import get_user_by_id
17
+ from langflow.services.deps import get_settings_service, session_scope
15
18
 
16
19
  settings = get_settings_service().settings
17
20
  knowledge_directory = settings.knowledge_bases_dir
@@ -33,11 +36,7 @@ class KBRetrievalComponent(Component):
33
36
  display_name="Knowledge",
34
37
  info="Select the knowledge to load data from.",
35
38
  required=True,
36
- options=[
37
- str(d.name) for d in KNOWLEDGE_BASES_ROOT_PATH.iterdir() if not d.name.startswith(".") and d.is_dir()
38
- ]
39
- if KNOWLEDGE_BASES_ROOT_PATH.exists()
40
- else [],
39
+ options=[],
41
40
  refresh_button=True,
42
41
  real_time_refresh=True,
43
42
  ),
@@ -79,21 +78,13 @@ class KBRetrievalComponent(Component):
79
78
  ),
80
79
  ]
81
80
 
82
- def _get_knowledge_bases(self) -> list[str]:
83
- """Retrieve a list of available knowledge bases.
84
-
85
- Returns:
86
- A list of knowledge base names.
87
- """
88
- if not KNOWLEDGE_BASES_ROOT_PATH.exists():
89
- return []
90
-
91
- return [str(d.name) for d in KNOWLEDGE_BASES_ROOT_PATH.iterdir() if not d.name.startswith(".") and d.is_dir()]
92
-
93
- def update_build_config(self, build_config, field_value, field_name=None): # noqa: ARG002
81
+ async def update_build_config(self, build_config, field_value, field_name=None): # noqa: ARG002
94
82
  if field_name == "knowledge_base":
95
83
  # Update the knowledge base options dynamically
96
- build_config["knowledge_base"]["options"] = self._get_knowledge_bases()
84
+ build_config["knowledge_base"]["options"] = await get_knowledge_bases(
85
+ KNOWLEDGE_BASES_ROOT_PATH,
86
+ user_id=self.user_id, # Use the user_id from the component context
87
+ )
97
88
 
98
89
  # If the selected knowledge base is not available, reset it
99
90
  if build_config["knowledge_base"]["value"] not in build_config["knowledge_base"]["options"]:
@@ -129,15 +120,12 @@ class KBRetrievalComponent(Component):
129
120
 
130
121
  def _build_embeddings(self, metadata: dict):
131
122
  """Build embedding model from metadata."""
123
+ runtime_api_key = self.api_key.get_secret_value() if isinstance(self.api_key, SecretStr) else self.api_key
132
124
  provider = metadata.get("embedding_provider")
133
125
  model = metadata.get("embedding_model")
134
- api_key = metadata.get("api_key")
126
+ api_key = runtime_api_key or metadata.get("api_key")
135
127
  chunk_size = metadata.get("chunk_size")
136
128
 
137
- # If user provided a key in the input, it overrides the stored one.
138
- if self.api_key and self.api_key.get_secret_value():
139
- api_key = self.api_key.get_secret_value()
140
-
141
129
  # Handle various providers
142
130
  if provider == "OpenAI":
143
131
  from langchain_openai import OpenAIEmbeddings
@@ -174,13 +162,23 @@ class KBRetrievalComponent(Component):
174
162
  msg = f"Embedding provider '{provider}' is not supported for retrieval."
175
163
  raise NotImplementedError(msg)
176
164
 
177
- def get_chroma_kb_data(self) -> DataFrame:
165
+ async def get_chroma_kb_data(self) -> DataFrame:
178
166
  """Retrieve data from the selected knowledge base by reading the Chroma collection.
179
167
 
180
168
  Returns:
181
169
  A DataFrame containing the data rows from the knowledge base.
182
170
  """
183
- kb_path = KNOWLEDGE_BASES_ROOT_PATH / self.knowledge_base
171
+ # Get the current user
172
+ async with session_scope() as db:
173
+ if not self.user_id:
174
+ msg = "User ID is required for fetching Knowledge Base data."
175
+ raise ValueError(msg)
176
+ current_user = await get_user_by_id(db, self.user_id)
177
+ if not current_user:
178
+ msg = f"User with ID {self.user_id} not found."
179
+ raise ValueError(msg)
180
+ kb_user = current_user.username
181
+ kb_path = KNOWLEDGE_BASES_ROOT_PATH / kb_user / self.knowledge_base
184
182
 
185
183
  metadata = self._get_kb_metadata(kb_path)
186
184
  if not metadata:
@@ -3,12 +3,12 @@ import re
3
3
  import requests
4
4
  from bs4 import BeautifulSoup
5
5
  from langchain_community.document_loaders import RecursiveUrlLoader
6
- from loguru import logger
7
6
 
8
7
  from langflow.custom.custom_component.component import Component
9
8
  from langflow.field_typing.range_spec import RangeSpec
10
9
  from langflow.helpers.data import safe_convert
11
10
  from langflow.io import BoolInput, DropdownInput, IntInput, MessageTextInput, Output, SliderInput, TableInput
11
+ from langflow.logging.logger import logger
12
12
  from langflow.schema.dataframe import DataFrame
13
13
  from langflow.schema.message import Message
14
14
  from langflow.services.deps import get_settings_service
@@ -4,7 +4,6 @@ from typing import TYPE_CHECKING, Any, cast
4
4
 
5
5
  from astra_assistants.astra_assistants_manager import AssistantManager
6
6
  from langchain_core.agents import AgentFinish
7
- from loguru import logger
8
7
 
9
8
  from langflow.base.agents.events import ExceptionWithMessageError, process_agent_events
10
9
  from langflow.base.astra_assistants.util import (
@@ -15,6 +14,7 @@ from langflow.base.astra_assistants.util import (
15
14
  )
16
15
  from langflow.custom.custom_component.component_with_cache import ComponentWithCache
17
16
  from langflow.inputs.inputs import DropdownInput, FileInput, HandleInput, MultilineInput
17
+ from langflow.logging.logger import logger
18
18
  from langflow.memory import delete_message
19
19
  from langflow.schema.content_block import ContentBlock
20
20
  from langflow.schema.message import Message
@@ -186,8 +186,8 @@ class AstraAssistantManager(ComponentWithCache):
186
186
  self.initialized = True
187
187
 
188
188
  async def process_inputs(self) -> None:
189
- logger.info(f"env_set is {self.env_set}")
190
- logger.info(self.input_tools)
189
+ await logger.ainfo(f"env_set is {self.env_set}")
190
+ await logger.ainfo(self.input_tools)
191
191
  tools = []
192
192
  tool_obj = None
193
193
  if self.input_tools is None:
@@ -1,8 +1,7 @@
1
- from loguru import logger
2
-
3
1
  from langflow.base.astra_assistants.util import get_patched_openai_client
4
2
  from langflow.custom.custom_component.component_with_cache import ComponentWithCache
5
3
  from langflow.inputs.inputs import MultilineInput, StrInput
4
+ from langflow.logging.logger import logger
6
5
  from langflow.schema.message import Message
7
6
  from langflow.template.field.base import Output
8
7
 
@@ -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 DataInput, Output
3
+ from langflow.logging.logger import logger
5
4
  from langflow.schema.data import Data
6
5
 
7
6
 
@@ -1,12 +1,11 @@
1
1
  from typing import TYPE_CHECKING, Any
2
2
 
3
- from loguru import logger
4
-
5
3
  from langflow.base.flow_processing.utils import build_data_from_result_data
6
4
  from langflow.custom.custom_component.custom_component import CustomComponent
7
5
  from langflow.graph.graph.base import Graph
8
6
  from langflow.graph.vertex.base import Vertex
9
7
  from langflow.helpers.flow import get_flow_inputs
8
+ from langflow.logging.logger import logger
10
9
  from langflow.schema.data import Data
11
10
  from langflow.schema.dotdict import dotdict
12
11
  from langflow.template.field.base import Input
@@ -36,7 +35,7 @@ class SubFlowComponent(CustomComponent):
36
35
  return None
37
36
 
38
37
  async def update_build_config(self, build_config: dotdict, field_value: Any, field_name: str | None = None):
39
- logger.debug(f"Updating build config with field value {field_value} and field name {field_name}")
38
+ await logger.adebug(f"Updating build config with field value {field_value} and field name {field_name}")
40
39
  if field_name == "flow_name":
41
40
  build_config["flow_name"]["options"] = await self.get_flow_names()
42
41
  # Clean up the build config
@@ -47,11 +46,11 @@ class SubFlowComponent(CustomComponent):
47
46
  try:
48
47
  flow_data = await self.get_flow(field_value)
49
48
  except Exception: # noqa: BLE001
50
- logger.exception(f"Error getting flow {field_value}")
49
+ await logger.aexception(f"Error getting flow {field_value}")
51
50
  else:
52
51
  if not flow_data:
53
52
  msg = f"Flow {field_value} not found."
54
- logger.error(msg)
53
+ await logger.aerror(msg)
55
54
  else:
56
55
  try:
57
56
  graph = Graph.from_payload(flow_data.data["data"])
@@ -60,7 +59,7 @@ class SubFlowComponent(CustomComponent):
60
59
  # Add inputs to the build config
61
60
  build_config = self.add_inputs_to_build_config(inputs, build_config)
62
61
  except Exception: # noqa: BLE001
63
- logger.exception(f"Error building graph for flow {field_value}")
62
+ await logger.aexception(f"Error building graph for flow {field_value}")
64
63
 
65
64
  return build_config
66
65
 
@@ -121,5 +120,5 @@ class SubFlowComponent(CustomComponent):
121
120
  data.extend(build_data_from_result_data(output))
122
121
 
123
122
  self.status = data
124
- logger.debug(data)
123
+ await logger.adebug(data)
125
124
  return data
@@ -68,9 +68,9 @@ class VectaraSelfQueryRetriverComponent(CustomComponent):
68
68
  metadata_field_obj.append(attribute_info)
69
69
 
70
70
  return SelfQueryRetriever.from_llm(
71
- self.llm, # noqa: ignore[attr-defined]
72
- self.vectorstore, # noqa: ignore[attr-defined]
73
- self.document_content_description, # noqa: ignore[attr-defined]
71
+ self.llm, # type: ignore[attr-defined]
72
+ self.vectorstore, # type: ignore[attr-defined]
73
+ self.document_content_description, # type: ignore[attr-defined]
74
74
  metadata_field_obj,
75
75
  verbose=True,
76
76
  )