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
@@ -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):
@@ -5,9 +5,9 @@ from pathlib import Path
5
5
 
6
6
  import anyio
7
7
  from aiofile import async_open
8
- from loguru import logger
9
8
 
10
9
  from langflow.custom.custom_component.component import Component
10
+ from langflow.logging.logger import logger
11
11
 
12
12
  MAX_DEPTH = 2
13
13
 
@@ -255,7 +255,7 @@ class DirectoryReader:
255
255
  try:
256
256
  output_types = self.get_output_types_from_code(result_content)
257
257
  except Exception: # noqa: BLE001
258
- logger.opt(exception=True).debug("Error while getting output types from code")
258
+ logger.debug("Error while getting output types from code", exc_info=True)
259
259
  output_types = [component_name_camelcase]
260
260
  else:
261
261
  output_types = [component_name_camelcase]
@@ -278,7 +278,7 @@ class DirectoryReader:
278
278
  try:
279
279
  file_content = await self.aread_file_content(file_path)
280
280
  except Exception: # noqa: BLE001
281
- logger.exception(f"Error while reading file {file_path}")
281
+ await logger.aexception(f"Error while reading file {file_path}")
282
282
  return False, f"Could not read {file_path}"
283
283
 
284
284
  if file_content is None:
@@ -300,7 +300,7 @@ class DirectoryReader:
300
300
 
301
301
  async def abuild_component_menu_list(self, file_paths):
302
302
  response = {"menu": []}
303
- logger.debug("-------------------- Async Building component menu list --------------------")
303
+ await logger.adebug("-------------------- Async Building component menu list --------------------")
304
304
 
305
305
  tasks = [self.process_file_async(file_path) for file_path in file_paths]
306
306
  results = await asyncio.gather(*tasks)
@@ -311,7 +311,7 @@ class DirectoryReader:
311
311
  filename = file_path_.name
312
312
 
313
313
  if not validation_result:
314
- logger.error(f"Error while processing file {file_path}")
314
+ await logger.aerror(f"Error while processing file {file_path}")
315
315
 
316
316
  menu_result = self.find_menu(response, menu_name) or {
317
317
  "name": menu_name,
@@ -329,7 +329,7 @@ class DirectoryReader:
329
329
  try:
330
330
  output_types = await asyncio.to_thread(self.get_output_types_from_code, result_content)
331
331
  except Exception: # noqa: BLE001
332
- logger.exception("Error while getting output types from code")
332
+ await logger.aexception("Error while getting output types from code")
333
333
  output_types = [component_name_camelcase]
334
334
  else:
335
335
  output_types = [component_name_camelcase]
@@ -346,7 +346,7 @@ class DirectoryReader:
346
346
  if menu_result not in response["menu"]:
347
347
  response["menu"].append(menu_result)
348
348
 
349
- logger.debug("-------------------- Component menu list built --------------------")
349
+ await logger.adebug("-------------------- Component menu list built --------------------")
350
350
  return response
351
351
 
352
352
  @staticmethod
@@ -1,8 +1,7 @@
1
1
  import asyncio
2
2
 
3
- from loguru import logger
4
-
5
3
  from langflow.custom.directory_reader.directory_reader import DirectoryReader
4
+ from langflow.logging.logger import logger
6
5
  from langflow.template.frontend_node.custom_components import CustomComponentFrontendNode
7
6
 
8
7
 
langflow/custom/utils.py CHANGED
@@ -11,7 +11,6 @@ from typing import Any
11
11
  from uuid import UUID
12
12
 
13
13
  from fastapi import HTTPException
14
- from loguru import logger
15
14
  from pydantic import BaseModel
16
15
 
17
16
  from langflow.custom.custom_component.component import Component
@@ -25,6 +24,7 @@ from langflow.custom.eval import eval_custom_component_code
25
24
  from langflow.custom.schema import MissingDefault
26
25
  from langflow.field_typing.range_spec import RangeSpec
27
26
  from langflow.helpers.custom import format_type
27
+ from langflow.logging.logger import logger
28
28
  from langflow.schema.dotdict import dotdict
29
29
  from langflow.template.field.base import Input
30
30
  from langflow.template.frontend_node.custom_components import ComponentFrontendNode, CustomComponentFrontendNode
@@ -500,7 +500,7 @@ def build_custom_component_template_from_inputs(
500
500
  if code_hash:
501
501
  frontend_node.metadata["code_hash"] = code_hash
502
502
  except Exception as exc: # noqa: BLE001
503
- logger.opt(exception=exc).debug(f"Error generating code hash for {custom_component.__class__.__name__}")
503
+ logger.debug(f"Error generating code hash for {custom_component.__class__.__name__}", exc_info=exc)
504
504
 
505
505
  return frontend_node.to_dict(keep_name=False), cc_instance
506
506
 
@@ -573,7 +573,7 @@ def build_custom_component_template(
573
573
  if code_hash:
574
574
  frontend_node.metadata["code_hash"] = code_hash
575
575
  except Exception as exc: # noqa: BLE001
576
- logger.opt(exception=exc).debug(f"Error generating code hash for {custom_component.__class__.__name__}")
576
+ logger.debug(f"Error generating code hash for {custom_component.__class__.__name__}", exc_info=exc)
577
577
 
578
578
  return frontend_node.to_dict(keep_name=False), custom_instance
579
579
  except Exception as exc:
@@ -646,7 +646,7 @@ async def abuild_custom_components(components_paths: list[str]):
646
646
  if not components_paths:
647
647
  return {}
648
648
 
649
- logger.debug(f"Building custom components from {components_paths}")
649
+ await logger.adebug(f"Building custom components from {components_paths}")
650
650
  custom_components_from_file: dict = {}
651
651
  processed_paths = set()
652
652
  for path in components_paths:
@@ -657,7 +657,7 @@ async def abuild_custom_components(components_paths: list[str]):
657
657
  custom_component_dict = await abuild_custom_component_list_from_path(path_str)
658
658
  if custom_component_dict:
659
659
  category = next(iter(custom_component_dict))
660
- logger.debug(f"Loading {len(custom_component_dict[category])} component(s) from category {category}")
660
+ await logger.adebug(f"Loading {len(custom_component_dict[category])} component(s) from category {category}")
661
661
  custom_components_from_file = merge_nested_dicts_with_renaming(
662
662
  custom_components_from_file, custom_component_dict
663
663
  )
@@ -745,18 +745,18 @@ async def get_single_component_dict(component_type: str, component_name: str, co
745
745
  if hasattr(module, "template"):
746
746
  return module.template
747
747
  except ImportError as e:
748
- logger.error(f"Import error loading component {module_path}: {e!s}")
748
+ await logger.aerror(f"Import error loading component {module_path}: {e!s}")
749
749
  except AttributeError as e:
750
- logger.error(f"Attribute error loading component {module_path}: {e!s}")
750
+ await logger.aerror(f"Attribute error loading component {module_path}: {e!s}")
751
751
  except ValueError as e:
752
- logger.error(f"Value error loading component {module_path}: {e!s}")
752
+ await logger.aerror(f"Value error loading component {module_path}: {e!s}")
753
753
  except (KeyError, IndexError) as e:
754
- logger.error(f"Data structure error loading component {module_path}: {e!s}")
754
+ await logger.aerror(f"Data structure error loading component {module_path}: {e!s}")
755
755
  except RuntimeError as e:
756
- logger.error(f"Runtime error loading component {module_path}: {e!s}")
757
- logger.debug("Full traceback for runtime error", exc_info=True)
756
+ await logger.aerror(f"Runtime error loading component {module_path}: {e!s}")
757
+ await logger.adebug("Full traceback for runtime error", exc_info=True)
758
758
  except OSError as e:
759
- logger.error(f"OS error loading component {module_path}: {e!s}")
759
+ await logger.aerror(f"OS error loading component {module_path}: {e!s}")
760
760
 
761
761
  # If we get here, the component wasn't found or couldn't be loaded
762
762
  return None
@@ -811,43 +811,43 @@ async def load_custom_component(component_name: str, components_paths: list[str]
811
811
  if hasattr(module, "get_template"):
812
812
  return module.get_template()
813
813
  except ImportError as e:
814
- logger.error(f"Import error loading component {component_file}: {e!s}")
815
- logger.debug("Import error traceback", exc_info=True)
814
+ await logger.aerror(f"Import error loading component {component_file}: {e!s}")
815
+ await logger.adebug("Import error traceback", exc_info=True)
816
816
  except AttributeError as e:
817
- logger.error(f"Attribute error loading component {component_file}: {e!s}")
818
- logger.debug("Attribute error traceback", exc_info=True)
817
+ await logger.aerror(f"Attribute error loading component {component_file}: {e!s}")
818
+ await logger.adebug("Attribute error traceback", exc_info=True)
819
819
  except (ValueError, TypeError) as e:
820
- logger.error(f"Value/Type error loading component {component_file}: {e!s}")
821
- logger.debug("Value/Type error traceback", exc_info=True)
820
+ await logger.aerror(f"Value/Type error loading component {component_file}: {e!s}")
821
+ await logger.adebug("Value/Type error traceback", exc_info=True)
822
822
  except (KeyError, IndexError) as e:
823
- logger.error(f"Data structure error loading component {component_file}: {e!s}")
824
- logger.debug("Data structure error traceback", exc_info=True)
823
+ await logger.aerror(f"Data structure error loading component {component_file}: {e!s}")
824
+ await logger.adebug("Data structure error traceback", exc_info=True)
825
825
  except RuntimeError as e:
826
- logger.error(f"Runtime error loading component {component_file}: {e!s}")
827
- logger.debug("Runtime error traceback", exc_info=True)
826
+ await logger.aerror(f"Runtime error loading component {component_file}: {e!s}")
827
+ await logger.adebug("Runtime error traceback", exc_info=True)
828
828
  except OSError as e:
829
- logger.error(f"OS error loading component {component_file}: {e!s}")
830
- logger.debug("OS error traceback", exc_info=True)
829
+ await logger.aerror(f"OS error loading component {component_file}: {e!s}")
830
+ await logger.adebug("OS error traceback", exc_info=True)
831
831
 
832
832
  except ImportError as e:
833
- logger.error(f"Import error loading custom component {component_name}: {e!s}")
833
+ await logger.aerror(f"Import error loading custom component {component_name}: {e!s}")
834
834
  return None
835
835
  except AttributeError as e:
836
- logger.error(f"Attribute error loading custom component {component_name}: {e!s}")
836
+ await logger.aerror(f"Attribute error loading custom component {component_name}: {e!s}")
837
837
  return None
838
838
  except ValueError as e:
839
- logger.error(f"Value error loading custom component {component_name}: {e!s}")
839
+ await logger.aerror(f"Value error loading custom component {component_name}: {e!s}")
840
840
  return None
841
841
  except (KeyError, IndexError) as e:
842
- logger.error(f"Data structure error loading custom component {component_name}: {e!s}")
842
+ await logger.aerror(f"Data structure error loading custom component {component_name}: {e!s}")
843
843
  return None
844
844
  except RuntimeError as e:
845
- logger.error(f"Runtime error loading custom component {component_name}: {e!s}")
845
+ await logger.aerror(f"Runtime error loading custom component {component_name}: {e!s}")
846
846
  logger.debug("Full traceback for runtime error", exc_info=True)
847
847
  return None
848
848
 
849
849
  # If we get here, the component wasn't found in any of the paths
850
- logger.warning(f"Component {component_name} not found in any of the provided paths")
850
+ await logger.awarning(f"Component {component_name} not found in any of the provided paths")
851
851
  return None
852
852
 
853
853
 
@@ -8,9 +8,9 @@ from functools import partial
8
8
  from typing import TYPE_CHECKING
9
9
 
10
10
  from fastapi.encoders import jsonable_encoder
11
- from loguru import logger
12
11
  from typing_extensions import Protocol
13
12
 
13
+ from langflow.logging.logger import logger
14
14
  from langflow.schema.playground_events import create_event_by_type
15
15
 
16
16
  if TYPE_CHECKING:
@@ -1 +1 @@
1
- import{j as a}from"./index-ci4XHjbJ.js";const s=l=>a.jsx("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 54 54",width:"1em",height:"1em",...l,children:a.jsxs("g",{fill:"none",fillRule:"evenodd",children:[a.jsx("path",{fill:"#36C5F0",d:"M19.712.133a5.381 5.381 0 0 0-5.376 5.387 5.381 5.381 0 0 0 5.376 5.386h5.376V5.52A5.381 5.381 0 0 0 19.712.133m0 14.365H5.376A5.381 5.381 0 0 0 0 19.884a5.381 5.381 0 0 0 5.376 5.387h14.336a5.381 5.381 0 0 0 5.376-5.387 5.381 5.381 0 0 0-5.376-5.386"}),a.jsx("path",{fill:"#2EB67D",d:"M53.76 19.884a5.381 5.381 0 0 0-5.376-5.386 5.381 5.381 0 0 0-5.376 5.386v5.387h5.376a5.381 5.381 0 0 0 5.376-5.387m-14.336 0V5.52A5.381 5.381 0 0 0 34.048.133a5.381 5.381 0 0 0-5.376 5.387v14.364a5.381 5.381 0 0 0 5.376 5.387 5.381 5.381 0 0 0 5.376-5.387"}),a.jsx("path",{fill:"#ECB22E",d:"M34.048 54a5.381 5.381 0 0 0 5.376-5.387 5.381 5.381 0 0 0-5.376-5.386h-5.376v5.386A5.381 5.381 0 0 0 34.048 54m0-14.365h14.336a5.381 5.381 0 0 0 5.376-5.386 5.381 5.381 0 0 0-5.376-5.387H34.048a5.381 5.381 0 0 0-5.376 5.387 5.381 5.381 0 0 0 5.376 5.386"}),a.jsx("path",{fill:"#E01E5A",d:"M0 34.249a5.381 5.381 0 0 0 5.376 5.386 5.381 5.381 0 0 0 5.376-5.386v-5.387H5.376A5.381 5.381 0 0 0 0 34.25m14.336-.001v14.364A5.381 5.381 0 0 0 19.712 54a5.381 5.381 0 0 0 5.376-5.387V34.25a5.381 5.381 0 0 0-5.376-5.387 5.381 5.381 0 0 0-5.376 5.387"})]})});export{s as default};
1
+ import{j as a}from"./index-BD7Io1hL.js";const s=l=>a.jsx("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 54 54",width:"1em",height:"1em",...l,children:a.jsxs("g",{fill:"none",fillRule:"evenodd",children:[a.jsx("path",{fill:"#36C5F0",d:"M19.712.133a5.381 5.381 0 0 0-5.376 5.387 5.381 5.381 0 0 0 5.376 5.386h5.376V5.52A5.381 5.381 0 0 0 19.712.133m0 14.365H5.376A5.381 5.381 0 0 0 0 19.884a5.381 5.381 0 0 0 5.376 5.387h14.336a5.381 5.381 0 0 0 5.376-5.387 5.381 5.381 0 0 0-5.376-5.386"}),a.jsx("path",{fill:"#2EB67D",d:"M53.76 19.884a5.381 5.381 0 0 0-5.376-5.386 5.381 5.381 0 0 0-5.376 5.386v5.387h5.376a5.381 5.381 0 0 0 5.376-5.387m-14.336 0V5.52A5.381 5.381 0 0 0 34.048.133a5.381 5.381 0 0 0-5.376 5.387v14.364a5.381 5.381 0 0 0 5.376 5.387 5.381 5.381 0 0 0 5.376-5.387"}),a.jsx("path",{fill:"#ECB22E",d:"M34.048 54a5.381 5.381 0 0 0 5.376-5.387 5.381 5.381 0 0 0-5.376-5.386h-5.376v5.386A5.381 5.381 0 0 0 34.048 54m0-14.365h14.336a5.381 5.381 0 0 0 5.376-5.386 5.381 5.381 0 0 0-5.376-5.387H34.048a5.381 5.381 0 0 0-5.376 5.387 5.381 5.381 0 0 0 5.376 5.386"}),a.jsx("path",{fill:"#E01E5A",d:"M0 34.249a5.381 5.381 0 0 0 5.376 5.386 5.381 5.381 0 0 0 5.376-5.386v-5.387H5.376A5.381 5.381 0 0 0 0 34.25m14.336-.001v14.364A5.381 5.381 0 0 0 19.712 54a5.381 5.381 0 0 0 5.376-5.387V34.25a5.381 5.381 0 0 0-5.376-5.387 5.381 5.381 0 0 0-5.376 5.387"})]})});export{s as default};