langflow-base-nightly 1.7.0.dev27__py3-none-any.whl → 1.7.0.dev29__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.
- langflow/api/v1/files.py +23 -6
- langflow/frontend/assets/SlackIcon-C5JvGHVT.js +1 -0
- langflow/frontend/assets/Wikipedia-DhKJmqxt.js +1 -0
- langflow/frontend/assets/Wolfram-Ci6pq0HI.js +1 -0
- langflow/frontend/assets/a-arrow-down-Du8_5Nq3.js +6 -0
- langflow/frontend/assets/a-arrow-up-Cmt2ewMi.js +6 -0
- langflow/frontend/assets/a-large-small-CuMOS1Hy.js +6 -0
- langflow/frontend/assets/accessibility-Ok0Zzd65.js +6 -0
- langflow/frontend/assets/activity-BzzKKkI6.js +6 -0
- langflow/frontend/assets/air-vent-DJ9Diuvq.js +6 -0
- langflow/frontend/assets/airplay-LzLvMpW8.js +6 -0
- langflow/frontend/assets/alarm-clock-B9qV3ZO0.js +6 -0
- langflow/frontend/assets/alarm-clock-check-BOS0Kp-K.js +6 -0
- langflow/frontend/assets/alarm-clock-minus-DWJE9I8m.js +6 -0
- langflow/frontend/assets/alarm-clock-off-D9WfjeNk.js +6 -0
- langflow/frontend/assets/alarm-clock-plus-CIcgSxpZ.js +6 -0
- langflow/frontend/assets/alarm-smoke-CvF5wd-R.js +6 -0
- langflow/frontend/assets/album-DVLdDxQm.js +6 -0
- langflow/frontend/assets/align-center-a32Y5vnk.js +6 -0
- langflow/frontend/assets/align-center-horizontal-C0yCE10j.js +6 -0
- langflow/frontend/assets/align-center-vertical-bGVCK623.js +6 -0
- langflow/frontend/assets/align-end-horizontal-hLNql2RY.js +6 -0
- langflow/frontend/assets/align-end-vertical-BhScYUsV.js +6 -0
- langflow/frontend/assets/align-horizontal-distribute-center-DYWohtvQ.js +6 -0
- langflow/frontend/assets/align-horizontal-distribute-end-CQ3vEZVo.js +6 -0
- langflow/frontend/assets/align-horizontal-distribute-start-DEtHOKjr.js +6 -0
- langflow/frontend/assets/align-horizontal-justify-center-CGaRXuCq.js +6 -0
- langflow/frontend/assets/align-horizontal-justify-end-CCrqicrN.js +6 -0
- langflow/frontend/assets/align-horizontal-justify-start-DxUmCXeH.js +6 -0
- langflow/frontend/assets/align-horizontal-space-around-D2ZQQiqd.js +6 -0
- langflow/frontend/assets/align-horizontal-space-between-D8R3WtK4.js +6 -0
- langflow/frontend/assets/align-justify-BxzyTFMq.js +6 -0
- langflow/frontend/assets/align-left-CkOVOFyl.js +6 -0
- langflow/frontend/assets/align-right-DRftRii3.js +6 -0
- langflow/frontend/assets/align-start-horizontal-X_xtkThw.js +6 -0
- langflow/frontend/assets/align-start-vertical-BO2Js-52.js +6 -0
- langflow/frontend/assets/align-vertical-distribute-center-trT0c_zP.js +6 -0
- langflow/frontend/assets/align-vertical-distribute-end-XDHgCJ-M.js +6 -0
- langflow/frontend/assets/align-vertical-distribute-start-NjUb-Fzg.js +6 -0
- langflow/frontend/assets/align-vertical-justify-center-CinRAp6n.js +6 -0
- langflow/frontend/assets/align-vertical-justify-end-Ckz2lQ1q.js +6 -0
- langflow/frontend/assets/align-vertical-justify-start-F7HQhC9B.js +6 -0
- langflow/frontend/assets/align-vertical-space-around-DRlkpwuD.js +6 -0
- langflow/frontend/assets/align-vertical-space-between-CV8d9MNR.js +6 -0
- langflow/frontend/assets/ambulance-DnSDkSD4.js +6 -0
- langflow/frontend/assets/ampersand-O273QUaz.js +6 -0
- langflow/frontend/assets/ampersands-BsGcLzQO.js +6 -0
- langflow/frontend/assets/amphora-CqqSFpOL.js +6 -0
- langflow/frontend/assets/anchor-DWepoGIQ.js +6 -0
- langflow/frontend/assets/angry-QAkP1k6Y.js +6 -0
- langflow/frontend/assets/annoyed-CmsgrzBW.js +6 -0
- langflow/frontend/assets/antenna-C2eLvF7I.js +6 -0
- langflow/frontend/assets/anvil-Dj7hK4U4.js +6 -0
- langflow/frontend/assets/aperture-CTOA24F7.js +6 -0
- langflow/frontend/assets/app-window-mac-BQOO_Q35.js +6 -0
- langflow/frontend/assets/app-window-rhNZCZN-.js +6 -0
- langflow/frontend/assets/apple-BCM0HWIW.js +6 -0
- langflow/frontend/assets/archive-BSYN2Rny.js +6 -0
- langflow/frontend/assets/archive-restore-CmQip0Na.js +6 -0
- langflow/frontend/assets/archive-x-COvwKGSj.js +6 -0
- langflow/frontend/assets/armchair-DmXKB1Dj.js +6 -0
- langflow/frontend/assets/arrow-big-down-LXobAu6t.js +6 -0
- langflow/frontend/assets/arrow-big-down-dash-BFPAnEiw.js +6 -0
- langflow/frontend/assets/arrow-big-left-Dzmbm_B4.js +6 -0
- langflow/frontend/assets/arrow-big-left-dash-C37kOxyP.js +6 -0
- langflow/frontend/assets/arrow-big-right-DsSTjaeI.js +6 -0
- langflow/frontend/assets/arrow-big-right-dash-DpFxZojT.js +6 -0
- langflow/frontend/assets/arrow-big-up-8lH_qaFA.js +6 -0
- langflow/frontend/assets/arrow-big-up-dash-B888Weim.js +6 -0
- langflow/frontend/assets/arrow-down-0-1-BhyNs43R.js +6 -0
- langflow/frontend/assets/arrow-down-1-0-Dt8k8u5l.js +6 -0
- langflow/frontend/assets/arrow-down-Dzz0gYlE.js +6 -0
- langflow/frontend/assets/arrow-down-a-z-BCWDeHTu.js +6 -0
- langflow/frontend/assets/arrow-down-from-line-1jEkyL-V.js +6 -0
- langflow/frontend/assets/arrow-down-left-C2T_3RUC.js +6 -0
- langflow/frontend/assets/arrow-down-narrow-wide-Cq28gjVt.js +6 -0
- langflow/frontend/assets/arrow-down-right-DQ74elfL.js +6 -0
- langflow/frontend/assets/arrow-down-to-dot-DeuiU429.js +6 -0
- langflow/frontend/assets/arrow-down-to-line-Ba8REMHd.js +6 -0
- langflow/frontend/assets/arrow-down-up-B1BtKZqz.js +6 -0
- langflow/frontend/assets/arrow-down-wide-narrow-BcKPyuXy.js +6 -0
- langflow/frontend/assets/arrow-down-z-a-Bfb7uAgt.js +6 -0
- langflow/frontend/assets/arrow-left-7XE9iZZk.js +6 -0
- langflow/frontend/assets/arrow-left-from-line-HfiUQUsz.js +6 -0
- langflow/frontend/assets/arrow-left-right-CBgAJlpG.js +6 -0
- langflow/frontend/assets/arrow-left-to-line-BOOf7m9-.js +6 -0
- langflow/frontend/assets/arrow-right-Cn8JsHgI.js +6 -0
- langflow/frontend/assets/arrow-right-from-line-CZaCt3RG.js +6 -0
- langflow/frontend/assets/arrow-right-left-IcCTnouO.js +6 -0
- langflow/frontend/assets/arrow-right-to-line-D9_NkMmd.js +6 -0
- langflow/frontend/assets/arrow-up-0-1-BztUvTGy.js +6 -0
- langflow/frontend/assets/arrow-up-1-0-CKmA86kP.js +6 -0
- langflow/frontend/assets/arrow-up-BVCdlClj.js +6 -0
- langflow/frontend/assets/arrow-up-a-z-iqf2axpX.js +6 -0
- langflow/frontend/assets/arrow-up-down-BTIZXr28.js +6 -0
- langflow/frontend/assets/arrow-up-from-dot-Dje5fEMc.js +6 -0
- langflow/frontend/assets/arrow-up-from-line-Bk9eg--_.js +6 -0
- langflow/frontend/assets/arrow-up-left-C_eDh8Gd.js +6 -0
- langflow/frontend/assets/arrow-up-narrow-wide-ekFFZl9s.js +6 -0
- langflow/frontend/assets/arrow-up-right-DQKyBaOB.js +6 -0
- langflow/frontend/assets/arrow-up-to-line-DonALs99.js +6 -0
- langflow/frontend/assets/arrow-up-wide-narrow-Dk584Rxi.js +6 -0
- langflow/frontend/assets/arrow-up-z-a-BT6cnODp.js +6 -0
- langflow/frontend/assets/arrows-up-from-line-B0IIDd25.js +6 -0
- langflow/frontend/assets/asterisk-D8NV9OVw.js +6 -0
- langflow/frontend/assets/at-sign-B9JK8c6e.js +6 -0
- langflow/frontend/assets/atom-DFAlSqy7.js +6 -0
- langflow/frontend/assets/audio-lines-CF9t6j1_.js +6 -0
- langflow/frontend/assets/audio-waveform-CDSrYQF4.js +6 -0
- langflow/frontend/assets/award-XSGYgYEY.js +6 -0
- langflow/frontend/assets/axe-CD7wpLeD.js +6 -0
- langflow/frontend/assets/axis-3d-rQSBgV7X.js +6 -0
- langflow/frontend/assets/baby-VT9FhoVu.js +6 -0
- langflow/frontend/assets/backpack-CyNpNcsS.js +6 -0
- langflow/frontend/assets/badge-CRrxpM3o.js +6 -0
- langflow/frontend/assets/badge-alert-fjZxPoRs.js +6 -0
- langflow/frontend/assets/badge-cent-CJwSWPGj.js +6 -0
- langflow/frontend/assets/badge-check-DWzScxXe.js +6 -0
- langflow/frontend/assets/badge-dollar-sign-6QUvFJuG.js +6 -0
- langflow/frontend/assets/badge-euro-CvdA0cdY.js +6 -0
- langflow/frontend/assets/badge-help-3GRzGMj8.js +6 -0
- langflow/frontend/assets/badge-indian-rupee-Ce1tx_hw.js +6 -0
- langflow/frontend/assets/badge-info-CiHFpZzo.js +6 -0
- langflow/frontend/assets/badge-japanese-yen-Cwve69MZ.js +6 -0
- langflow/frontend/assets/badge-minus-DQsiJXXX.js +6 -0
- langflow/frontend/assets/badge-percent-DegDkRYI.js +6 -0
- langflow/frontend/assets/badge-plus-Ca1KKC00.js +6 -0
- langflow/frontend/assets/badge-pound-sterling-B_wrgMp8.js +6 -0
- langflow/frontend/assets/badge-russian-ruble-CUB_ML_L.js +6 -0
- langflow/frontend/assets/badge-swiss-franc-Cmlk48_5.js +6 -0
- langflow/frontend/assets/badge-x-DLkZ9YxH.js +6 -0
- langflow/frontend/assets/baggage-claim-zemv0SSQ.js +6 -0
- langflow/frontend/assets/ban-GV-Wsqk4.js +6 -0
- langflow/frontend/assets/banana-Cx7ex-_f.js +6 -0
- langflow/frontend/assets/bandage-DFbFVz9q.js +6 -0
- langflow/frontend/assets/banknote-DPht-Rbi.js +6 -0
- langflow/frontend/assets/banknote-arrow-down-Dxa9ZBsx.js +6 -0
- langflow/frontend/assets/banknote-arrow-up-mw8nueBm.js +6 -0
- langflow/frontend/assets/banknote-x-BhEAwwoq.js +6 -0
- langflow/frontend/assets/barcode-B0ZFnhvM.js +6 -0
- langflow/frontend/assets/baseline-CtvFVHOS.js +6 -0
- langflow/frontend/assets/bath-DsQU8Z5u.js +6 -0
- langflow/frontend/assets/battery-GEmkyWq6.js +6 -0
- langflow/frontend/assets/battery-charging-BS2AkHFC.js +6 -0
- langflow/frontend/assets/battery-full-DK-oepOu.js +6 -0
- langflow/frontend/assets/battery-low-ByTirZEF.js +6 -0
- langflow/frontend/assets/battery-medium-Bp5Fr1EV.js +6 -0
- langflow/frontend/assets/battery-plus-hYQF3Tnb.js +6 -0
- langflow/frontend/assets/battery-warning-Ds9qvorF.js +6 -0
- langflow/frontend/assets/beaker-Pu4T5BqL.js +6 -0
- langflow/frontend/assets/bean-CeOt6RrO.js +6 -0
- langflow/frontend/assets/bean-off-DEIJuUtg.js +6 -0
- langflow/frontend/assets/bed-CeFDVjJI.js +6 -0
- langflow/frontend/assets/bed-double-DQF8Qrph.js +6 -0
- langflow/frontend/assets/bed-single-wANbI4Mg.js +6 -0
- langflow/frontend/assets/beef-tFt8tR5p.js +6 -0
- langflow/frontend/assets/beer-LmgaZvAZ.js +6 -0
- langflow/frontend/assets/beer-off-D-MCfjdM.js +6 -0
- langflow/frontend/assets/bell-CVH3VMHa.js +6 -0
- langflow/frontend/assets/bell-dot-c8Rcj-tY.js +6 -0
- langflow/frontend/assets/bell-electric-DyxLU_XF.js +6 -0
- langflow/frontend/assets/bell-minus-CzbngbeJ.js +6 -0
- langflow/frontend/assets/bell-off-CypVsdiN.js +6 -0
- langflow/frontend/assets/bell-plus-MiSnPaqn.js +6 -0
- langflow/frontend/assets/bell-ring-0Fqnxzx4.js +6 -0
- langflow/frontend/assets/between-horizontal-end-CgOcsweX.js +6 -0
- langflow/frontend/assets/between-horizontal-start-eIP3Tlld.js +6 -0
- langflow/frontend/assets/between-vertical-end-bccQMJE2.js +6 -0
- langflow/frontend/assets/between-vertical-start-CoFrPqda.js +6 -0
- langflow/frontend/assets/biceps-flexed-DGoKcN6Z.js +6 -0
- langflow/frontend/assets/bike-BzrOjtnc.js +6 -0
- langflow/frontend/assets/binary-Dnd7Bxhb.js +6 -0
- langflow/frontend/assets/binoculars-CEj5AZGJ.js +6 -0
- langflow/frontend/assets/biohazard-Ch6kh9Qc.js +6 -0
- langflow/frontend/assets/bird-jZ6niaj1.js +6 -0
- langflow/frontend/assets/bitcoin-DDS8WeVJ.js +6 -0
- langflow/frontend/assets/blend-B4AIClZH.js +6 -0
- langflow/frontend/assets/blinds-CGZuGmfr.js +6 -0
- langflow/frontend/assets/blocks-HsRig1Z9.js +6 -0
- langflow/frontend/assets/bluetooth-CECXTFLO.js +6 -0
- langflow/frontend/assets/bluetooth-connected-BgXIHp1W.js +6 -0
- langflow/frontend/assets/bluetooth-off-B65umHdG.js +6 -0
- langflow/frontend/assets/bluetooth-searching-BKNplBrH.js +6 -0
- langflow/frontend/assets/bold-garu89Dk.js +6 -0
- langflow/frontend/assets/bolt-Da64D5X3.js +6 -0
- langflow/frontend/assets/bomb-D7tVGjCt.js +6 -0
- langflow/frontend/assets/bone-FW9Anh5h.js +6 -0
- langflow/frontend/assets/book-BaVBwOJX.js +6 -0
- langflow/frontend/assets/book-a-BlwBd0aA.js +6 -0
- langflow/frontend/assets/book-audio-CMyG4it4.js +6 -0
- langflow/frontend/assets/book-check-BwZ22-To.js +6 -0
- langflow/frontend/assets/book-copy-uRZAfDap.js +6 -0
- langflow/frontend/assets/book-dashed-CPODX8sw.js +6 -0
- langflow/frontend/assets/book-down-DC3tROQ3.js +6 -0
- langflow/frontend/assets/book-headphones-DH3WBiKe.js +6 -0
- langflow/frontend/assets/book-heart-C8IiuNEg.js +6 -0
- langflow/frontend/assets/book-image-XF_X-LEz.js +6 -0
- langflow/frontend/assets/book-key-BRQzZlFt.js +6 -0
- langflow/frontend/assets/book-lock-C-d72JhZ.js +6 -0
- langflow/frontend/assets/book-marked-To9jLzXk.js +6 -0
- langflow/frontend/assets/book-minus-D9qHPehY.js +6 -0
- langflow/frontend/assets/book-open-CZbwnq7F.js +6 -0
- langflow/frontend/assets/book-open-check-BgOTp9k8.js +6 -0
- langflow/frontend/assets/book-open-text--lqL7K-b.js +6 -0
- langflow/frontend/assets/book-plus-DafanXOa.js +6 -0
- langflow/frontend/assets/book-text-CZIgvWhu.js +6 -0
- langflow/frontend/assets/book-type-DciugwBe.js +6 -0
- langflow/frontend/assets/book-up-2-B27IV7YZ.js +6 -0
- langflow/frontend/assets/book-up-D99zpI7P.js +6 -0
- langflow/frontend/assets/book-user-CBxpgIis.js +6 -0
- langflow/frontend/assets/book-x-Cvddb4De.js +6 -0
- langflow/frontend/assets/bookmark-C7DSWoXc.js +6 -0
- langflow/frontend/assets/bookmark-check-BZjgo08j.js +6 -0
- langflow/frontend/assets/bookmark-minus-BSFpkP-_.js +6 -0
- langflow/frontend/assets/bookmark-plus-DQusOO6K.js +6 -0
- langflow/frontend/assets/bookmark-x-dZGXnB5w.js +6 -0
- langflow/frontend/assets/boom-box-ByFS7WHz.js +6 -0
- langflow/frontend/assets/bot-Txvyi5MB.js +6 -0
- langflow/frontend/assets/bot-message-square-Cp2yXJfd.js +6 -0
- langflow/frontend/assets/bot-off-F0KdpnEr.js +6 -0
- langflow/frontend/assets/bow-arrow-BxlOdNLT.js +6 -0
- langflow/frontend/assets/box-BoeczXpJ.js +6 -0
- langflow/frontend/assets/boxes-D23361Ld.js +6 -0
- langflow/frontend/assets/braces-C2X-xqdC.js +6 -0
- langflow/frontend/assets/brackets-ZLSNLmhe.js +6 -0
- langflow/frontend/assets/brain-BXct5sRa.js +6 -0
- langflow/frontend/assets/brain-circuit-CeFS37_6.js +6 -0
- langflow/frontend/assets/brain-cog-BVAEVZKY.js +6 -0
- langflow/frontend/assets/brick-wall-BR2w9fF7.js +6 -0
- langflow/frontend/assets/brick-wall-fire-BpN7Xln_.js +6 -0
- langflow/frontend/assets/briefcase-RytVb1ZG.js +6 -0
- langflow/frontend/assets/briefcase-business-BdSsD88B.js +6 -0
- langflow/frontend/assets/briefcase-conveyor-belt-CSjfD1ZF.js +6 -0
- langflow/frontend/assets/briefcase-medical-Wiz8Sk1T.js +6 -0
- langflow/frontend/assets/bring-to-front-CRmFzE26.js +6 -0
- langflow/frontend/assets/brush-DzCfJBg5.js +6 -0
- langflow/frontend/assets/bubbles-C5n-dZvG.js +6 -0
- langflow/frontend/assets/bug-ObOH22wB.js +6 -0
- langflow/frontend/assets/bug-off-C8b8YKJ6.js +6 -0
- langflow/frontend/assets/bug-play-DJ17PEFr.js +6 -0
- langflow/frontend/assets/building-2-N5qQRAxW.js +6 -0
- langflow/frontend/assets/building-dhLp28Em.js +6 -0
- langflow/frontend/assets/bus-front-Cv_Udack.js +6 -0
- langflow/frontend/assets/bus-vYHZDldY.js +6 -0
- langflow/frontend/assets/cable-DlS043Gp.js +6 -0
- langflow/frontend/assets/cable-car-CMcjixAi.js +6 -0
- langflow/frontend/assets/cake-C5wzm65L.js +6 -0
- langflow/frontend/assets/cake-slice-B3Kv4WRD.js +6 -0
- langflow/frontend/assets/calculator-CwcRAa_G.js +6 -0
- langflow/frontend/assets/calendar-1-OKpD16mb.js +6 -0
- langflow/frontend/assets/calendar-BfAL84K1.js +6 -0
- langflow/frontend/assets/calendar-arrow-down-AF04VQnT.js +6 -0
- langflow/frontend/assets/calendar-arrow-up-CGCOjSNX.js +6 -0
- langflow/frontend/assets/calendar-check-2-CjyZMz2Y.js +6 -0
- langflow/frontend/assets/calendar-check-AKNsXEAP.js +6 -0
- langflow/frontend/assets/calendar-clock-DP-0c-r-.js +6 -0
- langflow/frontend/assets/calendar-cog-CADOnSPm.js +6 -0
- langflow/frontend/assets/calendar-days-DQ8w64qg.js +6 -0
- langflow/frontend/assets/calendar-fold--gi8fMXH.js +6 -0
- langflow/frontend/assets/calendar-heart-JIF0STou.js +6 -0
- langflow/frontend/assets/calendar-minus-2-CyAe19B6.js +6 -0
- langflow/frontend/assets/calendar-minus-Bge6wIIh.js +6 -0
- langflow/frontend/assets/calendar-off-C1XVTbh8.js +6 -0
- langflow/frontend/assets/calendar-plus-2-CT8meRKq.js +6 -0
- langflow/frontend/assets/calendar-plus-D1ne5G59.js +6 -0
- langflow/frontend/assets/calendar-range-B09kh_3W.js +6 -0
- langflow/frontend/assets/calendar-search-CiMVGhF6.js +6 -0
- langflow/frontend/assets/calendar-sync-CMeWyqjd.js +6 -0
- langflow/frontend/assets/calendar-x-2-Uh7X52qm.js +6 -0
- langflow/frontend/assets/calendar-x-WURB3Cua.js +6 -0
- langflow/frontend/assets/camera-DHbYtyhi.js +6 -0
- langflow/frontend/assets/camera-off-BVbEvYQP.js +6 -0
- langflow/frontend/assets/candy-C-fYEJz_.js +6 -0
- langflow/frontend/assets/candy-cane-DW7GusBd.js +6 -0
- langflow/frontend/assets/candy-off-D6eJJ8qA.js +6 -0
- langflow/frontend/assets/cannabis-DDlYgh9R.js +6 -0
- langflow/frontend/assets/captions-BhwDGRt3.js +6 -0
- langflow/frontend/assets/captions-off-DwPUoeHC.js +6 -0
- langflow/frontend/assets/car-C2KPz6-j.js +6 -0
- langflow/frontend/assets/car-front-DBT3H9TT.js +6 -0
- langflow/frontend/assets/car-taxi-front-DoxPtE7s.js +6 -0
- langflow/frontend/assets/caravan-tmEqbhUp.js +6 -0
- langflow/frontend/assets/carrot-DjGfCLVr.js +6 -0
- langflow/frontend/assets/case-lower-GKNEXlBb.js +6 -0
- langflow/frontend/assets/case-sensitive-D0DXefZW.js +6 -0
- langflow/frontend/assets/case-upper-CO_blMzf.js +6 -0
- langflow/frontend/assets/cassette-tape-c2wiT2WV.js +6 -0
- langflow/frontend/assets/cast-oZBSRcJV.js +6 -0
- langflow/frontend/assets/castle-nKzGkgwn.js +6 -0
- langflow/frontend/assets/cat-C7yG7xci.js +6 -0
- langflow/frontend/assets/cctv-_EZajsq3.js +6 -0
- langflow/frontend/assets/chart-area-BDN94Uwe.js +6 -0
- langflow/frontend/assets/chart-bar-CWmi-zL_.js +6 -0
- langflow/frontend/assets/chart-bar-big-B7GpYjSf.js +6 -0
- langflow/frontend/assets/chart-bar-decreasing-DZupZEPx.js +6 -0
- langflow/frontend/assets/chart-bar-increasing-zXC-kAPj.js +6 -0
- langflow/frontend/assets/chart-bar-stacked-C4VUlTHp.js +6 -0
- langflow/frontend/assets/chart-candlestick-C3VHdCVr.js +6 -0
- langflow/frontend/assets/chart-column-ChAVCM0W.js +6 -0
- langflow/frontend/assets/chart-column-big-xsBSjPIM.js +6 -0
- langflow/frontend/assets/chart-column-decreasing-CqBLxZbG.js +6 -0
- langflow/frontend/assets/chart-column-increasing-YeO8Xvno.js +6 -0
- langflow/frontend/assets/chart-column-stacked-YtsjRh__.js +6 -0
- langflow/frontend/assets/chart-gantt-DKwhF2Ot.js +6 -0
- langflow/frontend/assets/chart-line-BAlBS9po.js +6 -0
- langflow/frontend/assets/chart-network-HGiYjkea.js +6 -0
- langflow/frontend/assets/chart-no-axes-column-BCW8tkwu.js +6 -0
- langflow/frontend/assets/chart-no-axes-column-decreasing-DWVxoxnP.js +6 -0
- langflow/frontend/assets/chart-no-axes-column-increasing-uz-bxAOZ.js +6 -0
- langflow/frontend/assets/chart-no-axes-combined-D8bjV9Qr.js +6 -0
- langflow/frontend/assets/chart-no-axes-gantt-DousELV9.js +6 -0
- langflow/frontend/assets/chart-pie-DVGWYFU0.js +6 -0
- langflow/frontend/assets/chart-scatter-BXKWB1vr.js +6 -0
- langflow/frontend/assets/chart-spline-BvJKfP0i.js +6 -0
- langflow/frontend/assets/check-check-CpheOAtX.js +6 -0
- langflow/frontend/assets/chef-hat-DChTgNIv.js +6 -0
- langflow/frontend/assets/cherry-CizvtfLt.js +6 -0
- langflow/frontend/assets/chevron-first-WYJkyUFH.js +6 -0
- langflow/frontend/assets/chevron-last-Bl5G7Y8_.js +6 -0
- langflow/frontend/assets/chevron-left-BGoprhmp.js +6 -0
- langflow/frontend/assets/chevron-right-6wSTG8OR.js +6 -0
- langflow/frontend/assets/chevrons-down-DzMU35X1.js +6 -0
- langflow/frontend/assets/chevrons-down-up-DOnL2XAJ.js +6 -0
- langflow/frontend/assets/chevrons-left-BT1xVp6K.js +6 -0
- langflow/frontend/assets/chevrons-left-right-B2WlCikN.js +6 -0
- langflow/frontend/assets/chevrons-left-right-ellipsis-BxPVnR4E.js +6 -0
- langflow/frontend/assets/chevrons-right-CmnVjd8f.js +6 -0
- langflow/frontend/assets/chevrons-right-left-DJlCB3D7.js +6 -0
- langflow/frontend/assets/chevrons-up-BXoBnixo.js +6 -0
- langflow/frontend/assets/chrome-MLuMBKvZ.js +6 -0
- langflow/frontend/assets/church-CfFOeDzf.js +6 -0
- langflow/frontend/assets/cigarette-BY0Ld_TP.js +6 -0
- langflow/frontend/assets/cigarette-off-CUqITmyr.js +6 -0
- langflow/frontend/assets/circle-alert-2_4FJj_N.js +6 -0
- langflow/frontend/assets/circle-arrow-down-DNUpZJUT.js +6 -0
- langflow/frontend/assets/circle-arrow-left-COoyuuhG.js +6 -0
- langflow/frontend/assets/circle-arrow-out-down-left-CU8rYZy7.js +6 -0
- langflow/frontend/assets/circle-arrow-out-down-right-f-QCFLH7.js +6 -0
- langflow/frontend/assets/circle-arrow-out-up-left-C09-TAPk.js +6 -0
- langflow/frontend/assets/circle-arrow-out-up-right-DisXp-ok.js +6 -0
- langflow/frontend/assets/circle-arrow-right-CTUuYHK7.js +6 -0
- langflow/frontend/assets/circle-arrow-up-OB29h_fS.js +6 -0
- langflow/frontend/assets/circle-check-BcRxb5E3.js +6 -0
- langflow/frontend/assets/circle-check-big-CQHYI4f2.js +6 -0
- langflow/frontend/assets/circle-chevron-down-CdywPJiL.js +6 -0
- langflow/frontend/assets/circle-chevron-left-bJywbBi1.js +6 -0
- langflow/frontend/assets/circle-chevron-right-BjGS-bbR.js +6 -0
- langflow/frontend/assets/circle-chevron-up-fJEGA2G9.js +6 -0
- langflow/frontend/assets/circle-dashed-B4eCduGN.js +6 -0
- langflow/frontend/assets/circle-divide-BRnLNU3R.js +6 -0
- langflow/frontend/assets/circle-dollar-sign-D20l3kyE.js +6 -0
- langflow/frontend/assets/circle-dot-D9zbAuLY.js +6 -0
- langflow/frontend/assets/circle-dot-dashed-BwvDttnr.js +6 -0
- langflow/frontend/assets/circle-ellipsis-CDUy3Pr7.js +6 -0
- langflow/frontend/assets/circle-equal-BagKhvGq.js +6 -0
- langflow/frontend/assets/circle-fading-arrow-up-Dejv-AAW.js +6 -0
- langflow/frontend/assets/circle-fading-plus-Y17ShM5D.js +6 -0
- langflow/frontend/assets/circle-gauge-B5UgdApG.js +6 -0
- langflow/frontend/assets/circle-help-Dh1o7hTO.js +6 -0
- langflow/frontend/assets/circle-minus-69GMoa2F.js +6 -0
- langflow/frontend/assets/circle-off-Brhk5gQ6.js +6 -0
- langflow/frontend/assets/circle-parking-C4zfscBU.js +6 -0
- langflow/frontend/assets/circle-parking-off-DZMjDDWJ.js +6 -0
- langflow/frontend/assets/circle-pause-B5Yv2eNl.js +6 -0
- langflow/frontend/assets/circle-percent-C_fO8Z8x.js +6 -0
- langflow/frontend/assets/circle-play-BJuIjOIJ.js +6 -0
- langflow/frontend/assets/circle-plus-BoJHwzPQ.js +6 -0
- langflow/frontend/assets/circle-power-BZpelruu.js +6 -0
- langflow/frontend/assets/circle-slash-2-DWJQFJFa.js +6 -0
- langflow/frontend/assets/circle-slash-BPw9aVMa.js +6 -0
- langflow/frontend/assets/circle-small-Bmtun1kt.js +6 -0
- langflow/frontend/assets/circle-stop-D3Cqh4d5.js +6 -0
- langflow/frontend/assets/circle-user-Cd_sIIY_.js +6 -0
- langflow/frontend/assets/circle-user-round-DdiEWOeX.js +6 -0
- langflow/frontend/assets/circuit-board-BZa5cIbj.js +6 -0
- langflow/frontend/assets/citrus-CQayHCWr.js +6 -0
- langflow/frontend/assets/clapperboard-C_bW3w2Z.js +6 -0
- langflow/frontend/assets/clipboard-B7KjZhMl.js +6 -0
- langflow/frontend/assets/clipboard-check-B836L5Md.js +6 -0
- langflow/frontend/assets/clipboard-copy-C-t-O3I5.js +6 -0
- langflow/frontend/assets/clipboard-list-BUPXBEwQ.js +6 -0
- langflow/frontend/assets/clipboard-minus-VOfkf2OK.js +6 -0
- langflow/frontend/assets/clipboard-paste-CEtqXPym.js +6 -0
- langflow/frontend/assets/clipboard-pen-UDWjr8Iq.js +6 -0
- langflow/frontend/assets/clipboard-pen-line-87IxA4zN.js +6 -0
- langflow/frontend/assets/clipboard-plus-Bdim0oRw.js +6 -0
- langflow/frontend/assets/clipboard-type-C8MMZOtY.js +6 -0
- langflow/frontend/assets/clipboard-x-CK1cgniq.js +6 -0
- langflow/frontend/assets/clock-1-BPZaameZ.js +6 -0
- langflow/frontend/assets/clock-10-D9HN68dA.js +6 -0
- langflow/frontend/assets/clock-11-n9UoehPL.js +6 -0
- langflow/frontend/assets/clock-12-B_bE_s4v.js +6 -0
- langflow/frontend/assets/clock-2-B67knUJU.js +6 -0
- langflow/frontend/assets/clock-3-zW_LLM0o.js +6 -0
- langflow/frontend/assets/clock-4-C3WrY9WP.js +6 -0
- langflow/frontend/assets/clock-5-CpKR0nkG.js +6 -0
- langflow/frontend/assets/clock-6-De-lhVtN.js +6 -0
- langflow/frontend/assets/clock-7-CCg_-2Ql.js +6 -0
- langflow/frontend/assets/clock-8-B_KJFb1L.js +6 -0
- langflow/frontend/assets/clock-9-C8unYDA7.js +6 -0
- langflow/frontend/assets/clock-alert-CCCB3QcA.js +6 -0
- langflow/frontend/assets/clock-arrow-down-DyiQQ8O9.js +6 -0
- langflow/frontend/assets/clock-arrow-up-DBAimPVQ.js +6 -0
- langflow/frontend/assets/clock-fading-Ds0A24yA.js +6 -0
- langflow/frontend/assets/clock-tDvuBa1I.js +6 -0
- langflow/frontend/assets/cloud-CEWNND-M.js +6 -0
- langflow/frontend/assets/cloud-alert-Bd8T2mgm.js +6 -0
- langflow/frontend/assets/cloud-cog-C23JSW9K.js +6 -0
- langflow/frontend/assets/cloud-download-CMNFrHq_.js +6 -0
- langflow/frontend/assets/cloud-drizzle-ByMVLkS-.js +6 -0
- langflow/frontend/assets/cloud-fog-DH9egexL.js +6 -0
- langflow/frontend/assets/cloud-hail-BPc7zHkK.js +6 -0
- langflow/frontend/assets/cloud-lightning-CqvLoAnL.js +6 -0
- langflow/frontend/assets/cloud-moon-jPd3Fccy.js +6 -0
- langflow/frontend/assets/cloud-moon-rain-D6hAKQda.js +6 -0
- langflow/frontend/assets/cloud-off-DsL52YnX.js +6 -0
- langflow/frontend/assets/cloud-rain-D687o3gz.js +6 -0
- langflow/frontend/assets/cloud-rain-wind-DIkjXEMC.js +6 -0
- langflow/frontend/assets/cloud-snow-IaXaqaJ-.js +6 -0
- langflow/frontend/assets/cloud-sun-fXVOr3bA.js +6 -0
- langflow/frontend/assets/cloud-sun-rain-Cxzspx2e.js +6 -0
- langflow/frontend/assets/cloud-upload-CO93Lee4.js +6 -0
- langflow/frontend/assets/cloudy-DSrbTCHD.js +6 -0
- langflow/frontend/assets/clover-BupVXV2L.js +6 -0
- langflow/frontend/assets/club-DDjS-KXQ.js +6 -0
- langflow/frontend/assets/code-xml-Bl4jLt2w.js +6 -0
- langflow/frontend/assets/codepen-CWSKE4lo.js +6 -0
- langflow/frontend/assets/codesandbox-CAbebHBB.js +6 -0
- langflow/frontend/assets/coffee-iYnoAjuI.js +6 -0
- langflow/frontend/assets/cog-BZzRO67j.js +6 -0
- langflow/frontend/assets/coins-CXlgNMAH.js +6 -0
- langflow/frontend/assets/columns-2-CY_-HKR1.js +6 -0
- langflow/frontend/assets/columns-3-Wb5xfEo8.js +6 -0
- langflow/frontend/assets/columns-3-cog-B4nI32-1.js +6 -0
- langflow/frontend/assets/columns-4-CtP4jlm8.js +6 -0
- langflow/frontend/assets/combine-CB275RH6.js +6 -0
- langflow/frontend/assets/command-CGSCs3f0.js +6 -0
- langflow/frontend/assets/compass-BN5Y8RYe.js +6 -0
- langflow/frontend/assets/component-_eieuZ4P.js +6 -0
- langflow/frontend/assets/computer-BYTBgdbC.js +6 -0
- langflow/frontend/assets/concierge-bell-CR83CzD9.js +6 -0
- langflow/frontend/assets/cone-CX9NuvPF.js +6 -0
- langflow/frontend/assets/construction-B4riMUje.js +6 -0
- langflow/frontend/assets/contact-N_sy9y1d.js +6 -0
- langflow/frontend/assets/contact-round-BQHWc1h8.js +6 -0
- langflow/frontend/assets/container-Ch2oJdc9.js +6 -0
- langflow/frontend/assets/contrast-BQkJ2guh.js +6 -0
- langflow/frontend/assets/cookie-C50YYYm0.js +6 -0
- langflow/frontend/assets/cooking-pot-C-Okv4yC.js +6 -0
- langflow/frontend/assets/copy-8ZslhzVD.js +6 -0
- langflow/frontend/assets/copy-check-Cxkjc3o7.js +6 -0
- langflow/frontend/assets/copy-minus-CqyGiSV-.js +6 -0
- langflow/frontend/assets/copy-plus-C_bR3H_v.js +6 -0
- langflow/frontend/assets/copy-slash-DZ6bKkUT.js +6 -0
- langflow/frontend/assets/copy-x-BkVjQuJl.js +6 -0
- langflow/frontend/assets/copyleft-UTEVSKkT.js +6 -0
- langflow/frontend/assets/copyright-DoS7bgL9.js +6 -0
- langflow/frontend/assets/corner-down-left-BVDdfIuz.js +6 -0
- langflow/frontend/assets/corner-down-right-Bqj7hw0G.js +6 -0
- langflow/frontend/assets/corner-left-down-B6nDF0XO.js +6 -0
- langflow/frontend/assets/corner-left-up-F0zIp1Tq.js +6 -0
- langflow/frontend/assets/corner-right-down-CvGhsmT1.js +6 -0
- langflow/frontend/assets/corner-right-up-BSptF6ea.js +6 -0
- langflow/frontend/assets/corner-up-left-CC2WvZE7.js +6 -0
- langflow/frontend/assets/corner-up-right-BST7X43a.js +6 -0
- langflow/frontend/assets/cpu-BPZDVaBD.js +6 -0
- langflow/frontend/assets/creative-commons-DyHusSW4.js +6 -0
- langflow/frontend/assets/credit-card-CygH8z2L.js +6 -0
- langflow/frontend/assets/croissant-BxU_7_Ar.js +6 -0
- langflow/frontend/assets/crop-BW-eOo8R.js +6 -0
- langflow/frontend/assets/cross-DVfptoxu.js +6 -0
- langflow/frontend/assets/crosshair-PODRWGSw.js +6 -0
- langflow/frontend/assets/crown-Cef9LfXr.js +6 -0
- langflow/frontend/assets/cuboid-Bqp_4ht1.js +6 -0
- langflow/frontend/assets/cup-soda-DEO7lk8D.js +6 -0
- langflow/frontend/assets/currency-CGPUh-GE.js +6 -0
- langflow/frontend/assets/cylinder-BWw9LsOO.js +6 -0
- langflow/frontend/assets/dam-BroAMNmM.js +6 -0
- langflow/frontend/assets/database-BSZUTzSp.js +6 -0
- langflow/frontend/assets/database-backup-BpmSWC1k.js +6 -0
- langflow/frontend/assets/database-zap-Czz-z1Ld.js +6 -0
- langflow/frontend/assets/decimals-arrow-left-DJRn4nxp.js +6 -0
- langflow/frontend/assets/decimals-arrow-right-bF8NOnIj.js +6 -0
- langflow/frontend/assets/delete-B_ofURoY.js +6 -0
- langflow/frontend/assets/dessert-4G-OpTmx.js +6 -0
- langflow/frontend/assets/diameter-DocvktNR.js +6 -0
- langflow/frontend/assets/diamond-DsL0eCTo.js +6 -0
- langflow/frontend/assets/diamond-minus-DpPrNiCW.js +6 -0
- langflow/frontend/assets/diamond-percent-dMtCowJd.js +6 -0
- langflow/frontend/assets/diamond-plus-Twa610o4.js +6 -0
- langflow/frontend/assets/dice-1-BWpKFEL7.js +6 -0
- langflow/frontend/assets/dice-2-Dsnb_ynY.js +6 -0
- langflow/frontend/assets/dice-3-Bu4LXglt.js +6 -0
- langflow/frontend/assets/dice-4-VVOhaevI.js +6 -0
- langflow/frontend/assets/dice-5-Daar5UAd.js +6 -0
- langflow/frontend/assets/dice-6-CDUAxys-.js +6 -0
- langflow/frontend/assets/dices-Deq0MLBS.js +6 -0
- langflow/frontend/assets/diff-CEshyR-n.js +6 -0
- langflow/frontend/assets/disc-2-CfvpX2HO.js +6 -0
- langflow/frontend/assets/disc-3-CjabXPol.js +6 -0
- langflow/frontend/assets/disc-Do91ctQD.js +6 -0
- langflow/frontend/assets/disc-album-D9Ognsbb.js +6 -0
- langflow/frontend/assets/divide-K5AwwJ0Z.js +6 -0
- langflow/frontend/assets/dna-Dqj3yZOX.js +6 -0
- langflow/frontend/assets/dna-off-BNtt-5vo.js +6 -0
- langflow/frontend/assets/dock-B42JVHPN.js +6 -0
- langflow/frontend/assets/dog-B5mt1tnY.js +6 -0
- langflow/frontend/assets/dollar-sign-NTAX1V1w.js +6 -0
- langflow/frontend/assets/donut-BR4NFIkK.js +6 -0
- langflow/frontend/assets/door-closed-COM1ogvo.js +6 -0
- langflow/frontend/assets/door-open-CqFp4kCh.js +6 -0
- langflow/frontend/assets/dot-C3vWbLU7.js +6 -0
- langflow/frontend/assets/download-HRw6vFD3.js +6 -0
- langflow/frontend/assets/drafting-compass-DZwFpyYA.js +6 -0
- langflow/frontend/assets/drama-BKcHTPcS.js +6 -0
- langflow/frontend/assets/dribbble-arzf-nQa.js +6 -0
- langflow/frontend/assets/drill-DkLeOjdT.js +6 -0
- langflow/frontend/assets/droplet-oUu-SG-R.js +6 -0
- langflow/frontend/assets/droplet-off-CIdJALZ6.js +6 -0
- langflow/frontend/assets/droplets-EPrcw5-M.js +6 -0
- langflow/frontend/assets/drum-BuT5XdVh.js +6 -0
- langflow/frontend/assets/drumstick-BYlA3c-q.js +6 -0
- langflow/frontend/assets/dumbbell-L3Ge8ldF.js +6 -0
- langflow/frontend/assets/ear-DhidmF06.js +6 -0
- langflow/frontend/assets/ear-off-Db6Wocgg.js +6 -0
- langflow/frontend/assets/earth-D--j_Rza.js +6 -0
- langflow/frontend/assets/earth-lock-Bs-ZoIQd.js +6 -0
- langflow/frontend/assets/eclipse-_i3vJRSl.js +6 -0
- langflow/frontend/assets/egg-BbWgzysa.js +6 -0
- langflow/frontend/assets/egg-fried-Bug5U7-h.js +6 -0
- langflow/frontend/assets/egg-off-D-ls3cA4.js +6 -0
- langflow/frontend/assets/ellipsis-B7WTCZl_.js +6 -0
- langflow/frontend/assets/ellipsis-vertical-CQ1i--RV.js +6 -0
- langflow/frontend/assets/equal-B_eWG38R.js +6 -0
- langflow/frontend/assets/equal-approximately-Ccx0i8zO.js +6 -0
- langflow/frontend/assets/equal-not-txdkmB30.js +6 -0
- langflow/frontend/assets/eraser-CF3Nwbzq.js +6 -0
- langflow/frontend/assets/ethernet-port-BlNDqU4x.js +6 -0
- langflow/frontend/assets/euro-CtVbrusG.js +6 -0
- langflow/frontend/assets/expand-Nah-q_NM.js +6 -0
- langflow/frontend/assets/eye-closed-B4w8QN4H.js +6 -0
- langflow/frontend/assets/eye-off-Dg4GNZFa.js +6 -0
- langflow/frontend/assets/eye-te5Aty18.js +6 -0
- langflow/frontend/assets/facebook-DfCZo-R8.js +6 -0
- langflow/frontend/assets/factory-BUb8o95t.js +6 -0
- langflow/frontend/assets/fan-2aPaMpol.js +6 -0
- langflow/frontend/assets/fast-forward-COKQ_G-7.js +6 -0
- langflow/frontend/assets/feather-Cph1Opf2.js +6 -0
- langflow/frontend/assets/fence-dWdKMQ7S.js +6 -0
- langflow/frontend/assets/ferris-wheel-CXZGjxSF.js +6 -0
- langflow/frontend/assets/figma-PTYfYYx3.js +6 -0
- langflow/frontend/assets/file-CFv2VplB.js +6 -0
- langflow/frontend/assets/file-archive-DoE3Oz7Q.js +6 -0
- langflow/frontend/assets/file-audio-2-CkYB_HbQ.js +6 -0
- langflow/frontend/assets/file-audio-DprT0Mjt.js +6 -0
- langflow/frontend/assets/file-axis-3d-CCky8MA_.js +6 -0
- langflow/frontend/assets/file-badge-2-Cdt_D-vU.js +6 -0
- langflow/frontend/assets/file-badge-C0uuo8ge.js +6 -0
- langflow/frontend/assets/file-box-BCicxgij.js +6 -0
- langflow/frontend/assets/file-chart-column-BRfDonHk.js +6 -0
- langflow/frontend/assets/file-chart-column-increasing-CWwcgky6.js +6 -0
- langflow/frontend/assets/file-chart-line-YZnvoTiB.js +6 -0
- langflow/frontend/assets/file-chart-pie-C9wE5E2_.js +6 -0
- langflow/frontend/assets/file-check-2-BjEdinb2.js +6 -0
- langflow/frontend/assets/file-check-AdyW0ie3.js +6 -0
- langflow/frontend/assets/file-clock-C6TLkorW.js +6 -0
- langflow/frontend/assets/file-code-2-BQMoMCyk.js +6 -0
- langflow/frontend/assets/file-code-GUOAOPmf.js +6 -0
- langflow/frontend/assets/file-cog-gckKq8R3.js +6 -0
- langflow/frontend/assets/file-diff-BO7kO3wQ.js +6 -0
- langflow/frontend/assets/file-digit-DBmn-NAN.js +6 -0
- langflow/frontend/assets/file-down-Cpj_JQ44.js +6 -0
- langflow/frontend/assets/file-heart-B9bLDRyl.js +6 -0
- langflow/frontend/assets/file-image-BbhSZCcu.js +6 -0
- langflow/frontend/assets/file-input-kw13cNET.js +6 -0
- langflow/frontend/assets/file-json-2-Danv3gv0.js +6 -0
- langflow/frontend/assets/file-json-CdNiRddF.js +6 -0
- langflow/frontend/assets/file-key-2-_lhrbwS0.js +6 -0
- langflow/frontend/assets/file-key-C0xXlVfd.js +6 -0
- langflow/frontend/assets/file-lock-2-BOTiZRaE.js +6 -0
- langflow/frontend/assets/file-lock-D1QNon4f.js +6 -0
- langflow/frontend/assets/file-minus-2-DjHe5CLf.js +6 -0
- langflow/frontend/assets/file-minus-DKMNVQrX.js +6 -0
- langflow/frontend/assets/file-music-C3VNGo36.js +6 -0
- langflow/frontend/assets/file-output-CtF8gTp0.js +6 -0
- langflow/frontend/assets/file-pen-CJ8rQsKZ.js +6 -0
- langflow/frontend/assets/file-pen-line-D7iwsEfn.js +6 -0
- langflow/frontend/assets/file-plus-2-Ct1mhczU.js +6 -0
- langflow/frontend/assets/file-plus-DbQXbAYg.js +6 -0
- langflow/frontend/assets/file-question-CZlTwuWW.js +6 -0
- langflow/frontend/assets/file-scan-a4O4wVlp.js +6 -0
- langflow/frontend/assets/file-search-2-INVP7Rr2.js +6 -0
- langflow/frontend/assets/file-search-v4laLUdE.js +6 -0
- langflow/frontend/assets/file-sliders-CI3ChCPf.js +6 -0
- langflow/frontend/assets/file-spreadsheet-BanF0L1x.js +6 -0
- langflow/frontend/assets/file-stack-BWJ8jFkF.js +6 -0
- langflow/frontend/assets/file-symlink-BvlNbeqH.js +6 -0
- langflow/frontend/assets/file-terminal-1Kluh8MK.js +6 -0
- langflow/frontend/assets/file-text-DOr3rw62.js +6 -0
- langflow/frontend/assets/file-type-2-DQQjkd_3.js +6 -0
- langflow/frontend/assets/file-type-BsVXQnEw.js +6 -0
- langflow/frontend/assets/file-up-Bykvje3M.js +6 -0
- langflow/frontend/assets/file-user-DwUHsjMT.js +6 -0
- langflow/frontend/assets/file-video-2-B5eGF0me.js +6 -0
- langflow/frontend/assets/file-video-Dny2ZImN.js +6 -0
- langflow/frontend/assets/file-volume-2-DOHJG224.js +6 -0
- langflow/frontend/assets/file-volume-CDEcDAPj.js +6 -0
- langflow/frontend/assets/file-warning-BBnVY_P5.js +6 -0
- langflow/frontend/assets/file-x-2-CoW9VaZ-.js +6 -0
- langflow/frontend/assets/file-x-BxhQIY0v.js +6 -0
- langflow/frontend/assets/files-ChGVzsTZ.js +6 -0
- langflow/frontend/assets/film-DEcQtiYV.js +6 -0
- langflow/frontend/assets/fingerprint-TpfMoeWs.js +6 -0
- langflow/frontend/assets/fire-extinguisher-DAAoM80h.js +6 -0
- langflow/frontend/assets/fish-B1ZefdbT.js +6 -0
- langflow/frontend/assets/fish-off-D1Z7ULz7.js +6 -0
- langflow/frontend/assets/fish-symbol-K6fIlHiC.js +6 -0
- langflow/frontend/assets/flag-C0t8XuzN.js +6 -0
- langflow/frontend/assets/flag-off-DVGZHkTC.js +6 -0
- langflow/frontend/assets/flag-triangle-left-DEmr3h_U.js +6 -0
- langflow/frontend/assets/flag-triangle-right-D9mF7qS_.js +6 -0
- langflow/frontend/assets/flame-D7KNDAbW.js +6 -0
- langflow/frontend/assets/flame-kindling-DDZILA7c.js +6 -0
- langflow/frontend/assets/flashlight-DnAlBFtq.js +6 -0
- langflow/frontend/assets/flashlight-off-CaBqrqNz.js +6 -0
- langflow/frontend/assets/flask-conical-579HsrLL.js +6 -0
- langflow/frontend/assets/flask-conical-off-ChTL_2JI.js +6 -0
- langflow/frontend/assets/flask-round-BxK3HnyC.js +6 -0
- langflow/frontend/assets/flip-horizontal-2-Dc1uayYK.js +6 -0
- langflow/frontend/assets/flip-horizontal-CfcUuyvu.js +6 -0
- langflow/frontend/assets/flip-vertical-2-ahvBKDd8.js +6 -0
- langflow/frontend/assets/flip-vertical-DKlHZhSC.js +6 -0
- langflow/frontend/assets/flower-2-DljFwyrh.js +6 -0
- langflow/frontend/assets/flower-GbCceBQj.js +6 -0
- langflow/frontend/assets/focus-ZFnBEtIP.js +6 -0
- langflow/frontend/assets/fold-horizontal-BcYAiLNo.js +6 -0
- langflow/frontend/assets/fold-vertical-Btvrk1at.js +6 -0
- langflow/frontend/assets/folder-C0RWWBif.js +6 -0
- langflow/frontend/assets/folder-archive-BuFYQYwb.js +6 -0
- langflow/frontend/assets/folder-check-CymeV4m-.js +6 -0
- langflow/frontend/assets/folder-clock-BfbfvWrw.js +6 -0
- langflow/frontend/assets/folder-closed-CILvcs1P.js +6 -0
- langflow/frontend/assets/folder-code-Caen5R7_.js +6 -0
- langflow/frontend/assets/folder-cog-C4niV-5N.js +6 -0
- langflow/frontend/assets/folder-dot-B_PIjtY1.js +6 -0
- langflow/frontend/assets/folder-down-DV92S3Pj.js +6 -0
- langflow/frontend/assets/folder-git-2-BowJ5oNl.js +6 -0
- langflow/frontend/assets/folder-git-Cjl04eKR.js +6 -0
- langflow/frontend/assets/folder-heart-CVY1s9i2.js +6 -0
- langflow/frontend/assets/folder-input-drI_gLXd.js +6 -0
- langflow/frontend/assets/folder-kanban-bihCbzQr.js +6 -0
- langflow/frontend/assets/folder-key-5gDP647M.js +6 -0
- langflow/frontend/assets/folder-lock-SBjeml5D.js +6 -0
- langflow/frontend/assets/folder-minus-CyWN47Hb.js +6 -0
- langflow/frontend/assets/folder-open-Dlu9s1nh.js +6 -0
- langflow/frontend/assets/folder-open-dot-B40kkxNH.js +6 -0
- langflow/frontend/assets/folder-output-XrbWz0y-.js +6 -0
- langflow/frontend/assets/folder-pen-3Dpgybz8.js +6 -0
- langflow/frontend/assets/folder-plus-DOC_UAiM.js +6 -0
- langflow/frontend/assets/folder-root-Dn_71Es2.js +6 -0
- langflow/frontend/assets/folder-search-2-DG9x270K.js +6 -0
- langflow/frontend/assets/folder-search-BDjX0u2J.js +6 -0
- langflow/frontend/assets/folder-symlink-DXudnvmW.js +6 -0
- langflow/frontend/assets/folder-sync-DKuVss19.js +6 -0
- langflow/frontend/assets/folder-tree-DRJR0xY6.js +6 -0
- langflow/frontend/assets/folder-up-CAKnsrV2.js +6 -0
- langflow/frontend/assets/folder-x-D6mt5-bG.js +6 -0
- langflow/frontend/assets/folders-p4nj-7yb.js +6 -0
- langflow/frontend/assets/footprints-C8pSD5vA.js +6 -0
- langflow/frontend/assets/forklift-DtgTwd0Y.js +6 -0
- langflow/frontend/assets/forward-CDxRhjvU.js +6 -0
- langflow/frontend/assets/frame-DVMMQwzw.js +6 -0
- langflow/frontend/assets/framer-KHFOxqLs.js +6 -0
- langflow/frontend/assets/frown-DmwvQIlD.js +6 -0
- langflow/frontend/assets/fuel-D7sb3ia4.js +6 -0
- langflow/frontend/assets/fullscreen-Zs3ZvCi6.js +6 -0
- langflow/frontend/assets/funnel-CE86EVQa.js +6 -0
- langflow/frontend/assets/funnel-plus-DwisN_0Y.js +6 -0
- langflow/frontend/assets/funnel-x-CNTpUms9.js +6 -0
- langflow/frontend/assets/gallery-horizontal-BgkdXEcH.js +6 -0
- langflow/frontend/assets/gallery-horizontal-end-CHG0sCZa.js +6 -0
- langflow/frontend/assets/gallery-thumbnails-DOIj_9V0.js +6 -0
- langflow/frontend/assets/gallery-vertical-BuntLFnW.js +6 -0
- langflow/frontend/assets/gallery-vertical-end-DFw8Bqyr.js +6 -0
- langflow/frontend/assets/gamepad-2-Dt3GrDXJ.js +6 -0
- langflow/frontend/assets/gamepad-BirbbUWJ.js +6 -0
- langflow/frontend/assets/gauge-ClnyfbsU.js +6 -0
- langflow/frontend/assets/gavel-BzxQtwb8.js +6 -0
- langflow/frontend/assets/gem-BwHJBTuP.js +6 -0
- langflow/frontend/assets/ghost-QLd1h_O9.js +6 -0
- langflow/frontend/assets/gift-_vDDY7Q5.js +6 -0
- langflow/frontend/assets/git-branch-Do4nHND_.js +6 -0
- langflow/frontend/assets/git-branch-plus-LDo-5FG5.js +6 -0
- langflow/frontend/assets/git-commit-horizontal-DsAbn1pT.js +6 -0
- langflow/frontend/assets/git-commit-vertical-Cf63CU69.js +6 -0
- langflow/frontend/assets/git-compare-DHJMxxfa.js +6 -0
- langflow/frontend/assets/git-compare-arrows-C1E_1wQg.js +6 -0
- langflow/frontend/assets/git-fork-Ho79NacG.js +6 -0
- langflow/frontend/assets/git-graph-CzwH3auq.js +6 -0
- langflow/frontend/assets/git-merge-BD5z5ypt.js +6 -0
- langflow/frontend/assets/git-pull-request-B9bALMsJ.js +6 -0
- langflow/frontend/assets/git-pull-request-arrow-CWmFVPI7.js +6 -0
- langflow/frontend/assets/git-pull-request-closed-x-4B7RJZ.js +6 -0
- langflow/frontend/assets/git-pull-request-create-CVqTiPj1.js +6 -0
- langflow/frontend/assets/git-pull-request-create-arrow-BVv1WQA_.js +6 -0
- langflow/frontend/assets/git-pull-request-draft-gWctFHOK.js +6 -0
- langflow/frontend/assets/github-MyY3ZMM3.js +6 -0
- langflow/frontend/assets/gitlab-C6kR-b5-.js +6 -0
- langflow/frontend/assets/glass-water-Dv638Yzp.js +6 -0
- langflow/frontend/assets/glasses-BAqA-rIt.js +6 -0
- langflow/frontend/assets/globe-OVjIDj4k.js +6 -0
- langflow/frontend/assets/globe-lock-SAVyHi23.js +6 -0
- langflow/frontend/assets/goal-D9qNnmUF.js +6 -0
- langflow/frontend/assets/grab-CSxFUk0J.js +6 -0
- langflow/frontend/assets/graduation-cap-JFBxWb3j.js +6 -0
- langflow/frontend/assets/grape-B0BWknPV.js +6 -0
- langflow/frontend/assets/grid-2x2-1PDE2DZ8.js +6 -0
- langflow/frontend/assets/grid-2x2-check-B4mMYpMN.js +6 -0
- langflow/frontend/assets/grid-2x2-plus-CECgXIqV.js +6 -0
- langflow/frontend/assets/grid-2x2-x-Br5jij3Q.js +6 -0
- langflow/frontend/assets/grid-3x3-DYmPUtPh.js +6 -0
- langflow/frontend/assets/grip-D61CrDmi.js +6 -0
- langflow/frontend/assets/grip-horizontal-CG3nwPKB.js +6 -0
- langflow/frontend/assets/grip-vertical-BcQBmN-Q.js +6 -0
- langflow/frontend/assets/group-BgstyEj8.js +6 -0
- langflow/frontend/assets/guitar-CA-RpaWI.js +6 -0
- langflow/frontend/assets/ham-CZdvYRSd.js +6 -0
- langflow/frontend/assets/hammer-DLYC4eNi.js +6 -0
- langflow/frontend/assets/hand-BrvYsDo8.js +6 -0
- langflow/frontend/assets/hand-coins-BiCEbX9N.js +6 -0
- langflow/frontend/assets/hand-heart-B-fPRoRY.js +6 -0
- langflow/frontend/assets/hand-helping-vRNpSjgr.js +6 -0
- langflow/frontend/assets/hand-metal-BKCFuNTU.js +6 -0
- langflow/frontend/assets/hand-platter-DdcU4K8E.js +6 -0
- langflow/frontend/assets/handshake-DvGKGjEY.js +6 -0
- langflow/frontend/assets/hard-drive-D6osG2ZF.js +6 -0
- langflow/frontend/assets/hard-drive-download-XV9d9a9F.js +6 -0
- langflow/frontend/assets/hard-drive-upload-BnXr77Eb.js +6 -0
- langflow/frontend/assets/hard-hat-BMgO6T_Z.js +6 -0
- langflow/frontend/assets/hash-ZP_bNYfp.js +6 -0
- langflow/frontend/assets/haze-tXilYZkm.js +6 -0
- langflow/frontend/assets/hdmi-port-A_C1QnoK.js +6 -0
- langflow/frontend/assets/heading-1-CNRluy1C.js +6 -0
- langflow/frontend/assets/heading-2-DcXdUsg6.js +6 -0
- langflow/frontend/assets/heading-3-CoX_utud.js +6 -0
- langflow/frontend/assets/heading-4-Dpvx7aXg.js +6 -0
- langflow/frontend/assets/heading-5-BKyoY7_l.js +6 -0
- langflow/frontend/assets/heading-6-D3b5734Y.js +6 -0
- langflow/frontend/assets/heading-CyP_u9iL.js +6 -0
- langflow/frontend/assets/headphone-off-8ipjsE3Q.js +6 -0
- langflow/frontend/assets/headphones-B1b6C-mz.js +6 -0
- langflow/frontend/assets/headset-7AYUbI0g.js +6 -0
- langflow/frontend/assets/heart-BiZ_BxQG.js +6 -0
- langflow/frontend/assets/heart-crack-DwwsvFvM.js +6 -0
- langflow/frontend/assets/heart-handshake-CHR_MHVy.js +6 -0
- langflow/frontend/assets/heart-minus-CoMhjyKk.js +6 -0
- langflow/frontend/assets/heart-off-Bwbelz6H.js +6 -0
- langflow/frontend/assets/heart-plus-DZkWfhof.js +6 -0
- langflow/frontend/assets/heart-pulse-CgUXwAsG.js +6 -0
- langflow/frontend/assets/heater-DFPPwhLA.js +6 -0
- langflow/frontend/assets/hexagon-BJus94lO.js +6 -0
- langflow/frontend/assets/highlighter-B97L2ZaD.js +6 -0
- langflow/frontend/assets/history-CYIfWBls.js +6 -0
- langflow/frontend/assets/hop-C43CVrDn.js +6 -0
- langflow/frontend/assets/hop-off-DXsG3hd1.js +6 -0
- langflow/frontend/assets/hospital-CF2VdPsZ.js +6 -0
- langflow/frontend/assets/hotel-CzowVY04.js +6 -0
- langflow/frontend/assets/hourglass-DIFpBIs0.js +6 -0
- langflow/frontend/assets/house-BBs4-NXU.js +6 -0
- langflow/frontend/assets/house-plug-DjhvK5Qj.js +6 -0
- langflow/frontend/assets/house-plus-4UMzMk7D.js +6 -0
- langflow/frontend/assets/house-wifi-CbcVoqFk.js +6 -0
- langflow/frontend/assets/ice-cream-bowl-xUdYNDsZ.js +6 -0
- langflow/frontend/assets/ice-cream-cone-Chmsve4H.js +6 -0
- langflow/frontend/assets/id-card-D_gHgoE6.js +6 -0
- langflow/frontend/assets/image-Dy8bf-9C.js +6 -0
- langflow/frontend/assets/image-down-bud-u9tI.js +6 -0
- langflow/frontend/assets/image-minus-DBLuSTX8.js +6 -0
- langflow/frontend/assets/image-off-B4U3tcXP.js +6 -0
- langflow/frontend/assets/image-play-CCMcIiK9.js +6 -0
- langflow/frontend/assets/image-plus-QQO8euBp.js +6 -0
- langflow/frontend/assets/image-up-Dnpb0WHh.js +6 -0
- langflow/frontend/assets/image-upscale-DQivmAjt.js +6 -0
- langflow/frontend/assets/images-PrEGP4Rd.js +6 -0
- langflow/frontend/assets/import-C7NnNjWD.js +6 -0
- langflow/frontend/assets/inbox-BKRJz50j.js +6 -0
- langflow/frontend/assets/indent-decrease-vAVL4B-2.js +6 -0
- langflow/frontend/assets/indent-increase-ddsPgprZ.js +6 -0
- langflow/frontend/assets/index--ryZKk2A.js +1 -0
- langflow/frontend/assets/index-0TvqIv-b.js +1 -0
- langflow/frontend/assets/index-1-jteCub.js +1 -0
- langflow/frontend/assets/index-1ardBTwz.js +1 -0
- langflow/frontend/assets/index-3HYxARJr.js +1 -0
- langflow/frontend/assets/index-72f4tz8t.js +1 -0
- langflow/frontend/assets/index-7CilUK0e.js +1 -0
- langflow/frontend/assets/index-8pk5GGG-.js +1 -0
- langflow/frontend/assets/index-APj_DnfF.js +1 -0
- langflow/frontend/assets/index-B-NQA0n2.js +1 -0
- langflow/frontend/assets/index-B6pj0yL7.js +1 -0
- langflow/frontend/assets/index-B9CEBLcZ.js +127 -0
- langflow/frontend/assets/index-BB9wVErO.js +1 -0
- langflow/frontend/assets/index-BD2YsHdq.js +1 -0
- langflow/frontend/assets/index-BE8BViTb.js +1 -0
- langflow/frontend/assets/index-BEVLmXHS.js +1 -0
- langflow/frontend/assets/index-BGavCsth.js +1 -0
- langflow/frontend/assets/index-BIv1vMsh.js +1 -0
- langflow/frontend/assets/index-BJBTX4zk.js +1 -0
- langflow/frontend/assets/index-BK3u8lSB.js +1 -0
- langflow/frontend/assets/index-BK48-VvR.js +1 -0
- langflow/frontend/assets/index-BKU5j2MC.js +1 -0
- langflow/frontend/assets/index-BNhJNvL_.js +1 -0
- langflow/frontend/assets/index-BNk-g6C4.js +1 -0
- langflow/frontend/assets/index-BPZT13IU.js +1 -0
- langflow/frontend/assets/index-BQptc6Q0.js +1 -0
- langflow/frontend/assets/index-BSA2lLf4.js +1 -0
- langflow/frontend/assets/index-BVjxduof.js +1 -0
- langflow/frontend/assets/index-BWWNR6bX.js +1 -0
- langflow/frontend/assets/index-BWrT1VZU.js +1 -0
- langflow/frontend/assets/index-BXK8B_Ng.js +1 -0
- langflow/frontend/assets/index-BY5_4CgK.js +1 -0
- langflow/frontend/assets/index-BYNkKcSY.js +1 -0
- langflow/frontend/assets/index-B_Ud-p2n.js +495 -0
- langflow/frontend/assets/index-BaM3XikF.js +1 -0
- langflow/frontend/assets/index-BasBVqTM.js +1 -0
- langflow/frontend/assets/index-BbEkZjzk.js +1 -0
- langflow/frontend/assets/index-BcWm5i27.js +1 -0
- langflow/frontend/assets/index-Bh3djpnE.js +1 -0
- langflow/frontend/assets/index-Bh9W4B2F.js +1 -0
- langflow/frontend/assets/index-BihA0no7.js +1 -0
- langflow/frontend/assets/index-BmJj2oHP.js +1 -0
- langflow/frontend/assets/index-BneBDjUb.js +21 -0
- langflow/frontend/assets/index-BoY6S9GF.js +1 -0
- langflow/frontend/assets/index-Bo_DCx0K.js +1 -0
- langflow/frontend/assets/index-BstmkMDg.js +1 -0
- langflow/frontend/assets/index-BtcYlTML.js +1 -0
- langflow/frontend/assets/index-Bvs-6JBz.js +1 -0
- langflow/frontend/assets/index-BwN3WPto.js +1 -0
- langflow/frontend/assets/index-BxMb0QVJ.js +1 -0
- langflow/frontend/assets/index-ByxIcCIV.js +1 -0
- langflow/frontend/assets/index-BzHfcmnB.js +1 -0
- langflow/frontend/assets/index-C4EZdALd.js +1 -0
- langflow/frontend/assets/index-C5BFMXr9.js +1 -0
- langflow/frontend/assets/index-C5d2tnJQ.js +1 -0
- langflow/frontend/assets/index-C6OXi5V0.js +1 -0
- langflow/frontend/assets/index-C8K9d6yp.js +1 -0
- langflow/frontend/assets/index-C9wPlfFZ.js +1 -0
- langflow/frontend/assets/index-CAUtb6Yf.js +1 -0
- langflow/frontend/assets/index-CBu9zIev.js +1 -0
- langflow/frontend/assets/index-CCZFVbfS.js +1 -0
- langflow/frontend/assets/index-CFQP_3uk.js +1 -0
- langflow/frontend/assets/index-CHcVfPzP.js +1 -0
- langflow/frontend/assets/index-CIiHPEFm.js +1 -0
- langflow/frontend/assets/index-CJNbPi0l.js +1 -0
- langflow/frontend/assets/index-CKUUy866.js +1 -0
- langflow/frontend/assets/index-CLPdAaz0.js +1 -0
- langflow/frontend/assets/index-CMoT1Xra.js +1 -0
- langflow/frontend/assets/index-CNt3JHx5.js +1 -0
- langflow/frontend/assets/index-COf7KEQ_.js +1 -0
- langflow/frontend/assets/index-CPBhz8zZ.js +381 -0
- langflow/frontend/assets/index-CPz4iw_D.js +1 -0
- langflow/frontend/assets/index-CQkajgd-.js +1 -0
- langflow/frontend/assets/index-CQsu_oCx.js +1 -0
- langflow/frontend/assets/index-CQxFPIpl.js +1 -0
- langflow/frontend/assets/index-CRTwUz_b.js +20 -0
- langflow/frontend/assets/index-CSUA5Lof.js +1 -0
- langflow/frontend/assets/index-CTXB_vBY.js +1 -0
- langflow/frontend/assets/index-CVAs2qjr.js +1 -0
- langflow/frontend/assets/index-CXe0dhZI.js +1 -0
- langflow/frontend/assets/index-CZSzsbOA.js +1 -0
- langflow/frontend/assets/index-C_VReGbC.js +1 -0
- langflow/frontend/assets/index-CauVxSEL.js +1 -0
- langflow/frontend/assets/index-Cc4STNAo.js +1 -0
- langflow/frontend/assets/index-CcOB7oQk.js +1 -0
- langflow/frontend/assets/index-CetUp3Ny.js +1 -0
- langflow/frontend/assets/index-CfxvzrVy.js +1 -0
- langflow/frontend/assets/index-Chu2XyqL.js +1 -0
- langflow/frontend/assets/index-CjwuHSgE.js +1 -0
- langflow/frontend/assets/index-CmIJ523o.js +1 -0
- langflow/frontend/assets/index-CmWA9Lvr.js +1 -0
- langflow/frontend/assets/index-CmsfMZo5.js +1 -0
- langflow/frontend/assets/index-Cn41dVyq.js +1 -0
- langflow/frontend/assets/index-CpSiFngt.js +1 -0
- langflow/frontend/assets/index-Cpi7JYVs.js +1 -0
- langflow/frontend/assets/index-Cu7Y5f7l.js +1 -0
- langflow/frontend/assets/index-CuW5-tBl.js +1 -0
- langflow/frontend/assets/index-D02tiQqp.js +281 -0
- langflow/frontend/assets/index-D0R8G_F2.js +1 -0
- langflow/frontend/assets/index-D0TCj2p4.js +1 -0
- langflow/frontend/assets/index-D1ojERZR.css +1 -0
- langflow/frontend/assets/index-D4AP6ijT.js +1 -0
- langflow/frontend/assets/index-D4KCuMLd.js +1 -0
- langflow/frontend/assets/index-D4YUd0kz.js +1 -0
- langflow/frontend/assets/index-D5gt1mRp.js +1 -0
- langflow/frontend/assets/index-DBHlxQz6.js +1 -0
- langflow/frontend/assets/index-DCXL0U8l.js +1 -0
- langflow/frontend/assets/index-DDThLEKy.js +1 -0
- langflow/frontend/assets/index-DF5gnxKx.js +1 -0
- langflow/frontend/assets/index-DHazfi5w.js +1 -0
- langflow/frontend/assets/index-DIa39Hs4.js +1 -0
- langflow/frontend/assets/index-DPUcZx27.js +1 -0
- langflow/frontend/assets/index-DPveTTf-.js +1 -0
- langflow/frontend/assets/index-DQzFlbiH.js +1 -0
- langflow/frontend/assets/index-DRqqSRjD.js +1 -0
- langflow/frontend/assets/index-DSrjNV4J.js +1 -0
- langflow/frontend/assets/index-DWaX05x1.js +1 -0
- langflow/frontend/assets/index-DXfF0vQR.js +1 -0
- langflow/frontend/assets/index-DY2jGJqb.js +1 -0
- langflow/frontend/assets/index-DZ6tcyJg.js +1 -0
- langflow/frontend/assets/index-D_DeF3yd.js +205 -0
- langflow/frontend/assets/index-D_WkSr4s.js +1 -0
- langflow/frontend/assets/index-Damn4OIi.js +1 -0
- langflow/frontend/assets/index-DaymB1bj.js +1 -0
- langflow/frontend/assets/index-Deabp4px.js +1 -0
- langflow/frontend/assets/index-DfcTAkyb.js +1 -0
- langflow/frontend/assets/index-DfrX3zPf.js +1 -0
- langflow/frontend/assets/index-Dfz_jbUc.js +2 -0
- langflow/frontend/assets/index-Dg-oByq-.js +1 -0
- langflow/frontend/assets/index-Dg06JSg2.js +1 -0
- langflow/frontend/assets/index-DgY4ewik.js +1 -0
- langflow/frontend/assets/index-DgsBGp7G.js +1 -0
- langflow/frontend/assets/index-DjLYCZCM.js +1 -0
- langflow/frontend/assets/index-DjMUzzEJ.js +7321 -0
- langflow/frontend/assets/index-DlcEhHes.js +1 -0
- langflow/frontend/assets/index-DmAiLOqf.js +1 -0
- langflow/frontend/assets/index-DmONlOs9.js +108 -0
- langflow/frontend/assets/index-DnwqEcas.js +1 -0
- langflow/frontend/assets/index-DpJIi7J5.js +1 -0
- langflow/frontend/assets/index-DpLpS53b.js +1 -0
- langflow/frontend/assets/index-DuHNVvq4.js +1 -0
- langflow/frontend/assets/index-Dukvwe_S.js +1 -0
- langflow/frontend/assets/index-DvozaVxn.js +1 -0
- langflow/frontend/assets/index-Dz24CfeM.js +1 -0
- langflow/frontend/assets/index-DzNj52IF.js +185 -0
- langflow/frontend/assets/index-EP_RwtR7.js +1 -0
- langflow/frontend/assets/index-Es33KfN0.js +1 -0
- langflow/frontend/assets/index-FeomfJt5.js +1 -0
- langflow/frontend/assets/index-HwCQwlzz.js +1 -0
- langflow/frontend/assets/index-Ic_TsdY0.js +1 -0
- langflow/frontend/assets/index-JVM3KsU7.js +1 -0
- langflow/frontend/assets/index-KGxLqNwq.js +1 -0
- langflow/frontend/assets/index-L5R65uXs.js +1 -0
- langflow/frontend/assets/index-L8lZCf1X.js +767 -0
- langflow/frontend/assets/index-LVoZHOXp.js +1 -0
- langflow/frontend/assets/index-OJrVUqex.js +1 -0
- langflow/frontend/assets/index-PytA15id.js +13 -0
- langflow/frontend/assets/index-QE__y1xm.js +1 -0
- langflow/frontend/assets/index-TNsn2odj.js +1 -0
- langflow/frontend/assets/index-UMXLhqX1.js +1 -0
- langflow/frontend/assets/index-UNJc1DvY.js +7 -0
- langflow/frontend/assets/index-URFjnCS1.js +1 -0
- langflow/frontend/assets/index-UqIj3_pv.js +1 -0
- langflow/frontend/assets/index-VSS2RAIW.js +1 -0
- langflow/frontend/assets/index-_GWxbwRt.js +1 -0
- langflow/frontend/assets/index-_ZO_tdlA.js +1 -0
- langflow/frontend/assets/index-_rVkNNkF.js +1 -0
- langflow/frontend/assets/index-dpze9uCV.js +1 -0
- langflow/frontend/assets/index-ec8xi6Ud.js +1 -0
- langflow/frontend/assets/index-fUY_XsaS.js +1 -0
- langflow/frontend/assets/index-gHe9BhWi.js +1 -0
- langflow/frontend/assets/index-h95E4J2n.js +1 -0
- langflow/frontend/assets/index-hJtIFTPf.js +1 -0
- langflow/frontend/assets/index-hTG5sDKH.js +1 -0
- langflow/frontend/assets/index-hc6_NKtm.js +1 -0
- langflow/frontend/assets/index-hpeO7aY3.js +1 -0
- langflow/frontend/assets/index-i28zm-60.js +1 -0
- langflow/frontend/assets/index-oq_MYoTn.js +1 -0
- langflow/frontend/assets/index-pjeTn7Oz.js +1 -0
- langflow/frontend/assets/index-rD-_pOMP.js +1 -0
- langflow/frontend/assets/index-sPB9CCL6.js +1 -0
- langflow/frontend/assets/index-tayweodu.js +1 -0
- langflow/frontend/assets/index-y3l0Xzen.js +399 -0
- langflow/frontend/assets/index-yNZyCKu5.js +1 -0
- langflow/frontend/assets/index-zPCwKECo.js +1 -0
- langflow/frontend/assets/indian-rupee-CH24wvfd.js +6 -0
- langflow/frontend/assets/infinity-BUyGPF9c.js +6 -0
- langflow/frontend/assets/info-C56khIqj.js +6 -0
- langflow/frontend/assets/inspection-panel-DmHSoqC7.js +6 -0
- langflow/frontend/assets/instagram-B2yKsUag.js +6 -0
- langflow/frontend/assets/italic-Cj8uL0Rr.js +6 -0
- langflow/frontend/assets/iteration-ccw-DAn59Qlb.js +6 -0
- langflow/frontend/assets/iteration-cw-1XZDGYi7.js +6 -0
- langflow/frontend/assets/japanese-yen-C7nxRUkn.js +6 -0
- langflow/frontend/assets/joystick-B7a7EZRK.js +6 -0
- langflow/frontend/assets/kanban-BPrQ4acr.js +6 -0
- langflow/frontend/assets/key-pgFQ_Rlg.js +6 -0
- langflow/frontend/assets/key-round-C3nj0eLK.js +6 -0
- langflow/frontend/assets/key-square-ahhgQ9-s.js +6 -0
- langflow/frontend/assets/keyboard-SdcsMDUP.js +6 -0
- langflow/frontend/assets/keyboard-music-B9gU57CX.js +6 -0
- langflow/frontend/assets/keyboard-off-s4AENAD7.js +6 -0
- langflow/frontend/assets/lamp-A3h-CzCo.js +6 -0
- langflow/frontend/assets/lamp-ceiling-CuW0Pje-.js +6 -0
- langflow/frontend/assets/lamp-desk-B0gSz8f2.js +6 -0
- langflow/frontend/assets/lamp-floor-CF4kEgFe.js +6 -0
- langflow/frontend/assets/lamp-wall-down-CHEvFXjU.js +6 -0
- langflow/frontend/assets/lamp-wall-up-BYfOipKe.js +6 -0
- langflow/frontend/assets/land-plot-DJAcAwnI.js +6 -0
- langflow/frontend/assets/landmark-DZ5l3yoz.js +6 -0
- langflow/frontend/assets/languages-o13Tg3ks.js +6 -0
- langflow/frontend/assets/laptop-C_-w1Zgr.js +6 -0
- langflow/frontend/assets/laptop-minimal-DLD1VG_w.js +6 -0
- langflow/frontend/assets/laptop-minimal-check-BcWarZRN.js +6 -0
- langflow/frontend/assets/lasso-TZwlL10m.js +6 -0
- langflow/frontend/assets/lasso-select-DZFm1dvr.js +6 -0
- langflow/frontend/assets/laugh-0gs3v00G.js +6 -0
- langflow/frontend/assets/layers-2-C9TwrAWY.js +6 -0
- langflow/frontend/assets/layers-CEcSXAq9.js +6 -0
- langflow/frontend/assets/layout-dashboard-CLBRy1uO.js +6 -0
- langflow/frontend/assets/layout-grid-__6Sk9EF.js +6 -0
- langflow/frontend/assets/layout-list-Bh236i6c.js +6 -0
- langflow/frontend/assets/layout-panel-left-CgAdABFP.js +6 -0
- langflow/frontend/assets/layout-panel-top-Bblv127D.js +6 -0
- langflow/frontend/assets/layout-template-B2fEHrfk.js +6 -0
- langflow/frontend/assets/lazyIconImports-CLD7MCnv.js +2 -0
- langflow/frontend/assets/leaf-DSQc-_CE.js +6 -0
- langflow/frontend/assets/leafy-green-D71B4IG4.js +6 -0
- langflow/frontend/assets/lectern-D4Rjius5.js +6 -0
- langflow/frontend/assets/letter-text-DdjtEAfr.js +6 -0
- langflow/frontend/assets/library-BU14JsQK.js +6 -0
- langflow/frontend/assets/library-big-C4BtxCYx.js +6 -0
- langflow/frontend/assets/life-buoy-C25NN-O0.js +6 -0
- langflow/frontend/assets/ligature-BDdhR98M.js +6 -0
- langflow/frontend/assets/lightbulb-CYVKd8_i.js +6 -0
- langflow/frontend/assets/lightbulb-off-yf-UxPfj.js +6 -0
- langflow/frontend/assets/link-2-CB5bnI4B.js +6 -0
- langflow/frontend/assets/link-2-off-BKDobe_B.js +6 -0
- langflow/frontend/assets/link-PrB-FQNr.js +6 -0
- langflow/frontend/assets/linkedin-BFtJhFp0.js +6 -0
- langflow/frontend/assets/list-CQBR3Ohh.js +6 -0
- langflow/frontend/assets/list-check-DlmBNOLm.js +6 -0
- langflow/frontend/assets/list-checks-CHaNW2kH.js +6 -0
- langflow/frontend/assets/list-collapse-Cyj_lJRp.js +6 -0
- langflow/frontend/assets/list-end-CltNfQfi.js +6 -0
- langflow/frontend/assets/list-filter-BrIMqkqz.js +6 -0
- langflow/frontend/assets/list-filter-plus-Bzi87QP_.js +6 -0
- langflow/frontend/assets/list-minus-CtsO-Sxz.js +6 -0
- langflow/frontend/assets/list-music-Z33Qpe0L.js +6 -0
- langflow/frontend/assets/list-ordered-C5QiJS9_.js +6 -0
- langflow/frontend/assets/list-plus-DxEcUuF-.js +6 -0
- langflow/frontend/assets/list-restart-BnpR7MX9.js +6 -0
- langflow/frontend/assets/list-start-u_FURjr8.js +6 -0
- langflow/frontend/assets/list-todo-BpCUDZvS.js +6 -0
- langflow/frontend/assets/list-tree-Bx_-h_pQ.js +6 -0
- langflow/frontend/assets/list-video-DP7lyYB4.js +6 -0
- langflow/frontend/assets/list-x-Cyz5KM-j.js +6 -0
- langflow/frontend/assets/loader-Cmtaae40.js +6 -0
- langflow/frontend/assets/loader-circle-Cu8hS1-V.js +6 -0
- langflow/frontend/assets/loader-pinwheel-VFfYuLTr.js +6 -0
- langflow/frontend/assets/locate-DSzhKoLI.js +6 -0
- langflow/frontend/assets/locate-fixed-CrV9RZ5Z.js +6 -0
- langflow/frontend/assets/locate-off-Dnifs5t8.js +6 -0
- langflow/frontend/assets/location-edit-Bvg0o27D.js +6 -0
- langflow/frontend/assets/lock-FEICSN66.js +6 -0
- langflow/frontend/assets/lock-keyhole-BVTpkV8M.js +6 -0
- langflow/frontend/assets/lock-keyhole-open-CfEjgYw7.js +6 -0
- langflow/frontend/assets/lock-open-CKbpJdMf.js +6 -0
- langflow/frontend/assets/log-in-D1ns7wQm.js +6 -0
- langflow/frontend/assets/log-out-CWsXBWIk.js +6 -0
- langflow/frontend/assets/logs-DRXP6HRH.js +6 -0
- langflow/frontend/assets/lollipop-DLt__LA0.js +6 -0
- langflow/frontend/assets/luggage-D0O1jUpK.js +6 -0
- langflow/frontend/assets/magnet-DOQucuF8.js +6 -0
- langflow/frontend/assets/mail-BHhcWlzF.js +6 -0
- langflow/frontend/assets/mail-check-Bllur3og.js +6 -0
- langflow/frontend/assets/mail-minus-4IdE4gAH.js +6 -0
- langflow/frontend/assets/mail-open-DoUkPHne.js +6 -0
- langflow/frontend/assets/mail-plus-B9HaMrwZ.js +6 -0
- langflow/frontend/assets/mail-question-DBYXhvaG.js +6 -0
- langflow/frontend/assets/mail-search-COgJb_51.js +6 -0
- langflow/frontend/assets/mail-warning-FVMlV9w8.js +6 -0
- langflow/frontend/assets/mail-x-C-UBX8j_.js +6 -0
- langflow/frontend/assets/mailbox-BMwljuGJ.js +6 -0
- langflow/frontend/assets/mails-CBvgBqlL.js +6 -0
- langflow/frontend/assets/map-2ZEdSJKz.js +6 -0
- langflow/frontend/assets/map-pin-BH2xAwfK.js +6 -0
- langflow/frontend/assets/map-pin-check-inside-Nd7ipyqr.js +6 -0
- langflow/frontend/assets/map-pin-check-oy93zYD7.js +6 -0
- langflow/frontend/assets/map-pin-house-_eL2J9ya.js +6 -0
- langflow/frontend/assets/map-pin-minus-BQcPlPcA.js +6 -0
- langflow/frontend/assets/map-pin-minus-inside-C_MgyibV.js +6 -0
- langflow/frontend/assets/map-pin-off-fPcFat_c.js +6 -0
- langflow/frontend/assets/map-pin-plus-BbFGBw9D.js +6 -0
- langflow/frontend/assets/map-pin-plus-inside-CuQX5M6B.js +6 -0
- langflow/frontend/assets/map-pin-x-C4VioXFC.js +6 -0
- langflow/frontend/assets/map-pin-x-inside-DsTQem5G.js +6 -0
- langflow/frontend/assets/map-pinned-CS197vMA.js +6 -0
- langflow/frontend/assets/map-plus-C5nt5fxQ.js +6 -0
- langflow/frontend/assets/mars-HmG7DwfW.js +6 -0
- langflow/frontend/assets/mars-stroke-Cv45yyYS.js +6 -0
- langflow/frontend/assets/martini-74YxP29j.js +6 -0
- langflow/frontend/assets/maximize-2-BBR8Q8AX.js +6 -0
- langflow/frontend/assets/maximize-BBteUCLq.js +6 -0
- langflow/frontend/assets/medal-CVxzwXK1.js +6 -0
- langflow/frontend/assets/megaphone-CWewH8O2.js +6 -0
- langflow/frontend/assets/megaphone-off-DI674mdn.js +6 -0
- langflow/frontend/assets/meh-CU9MNb-0.js +6 -0
- langflow/frontend/assets/memory-stick-DY1Y4w55.js +6 -0
- langflow/frontend/assets/menu-4GkLYVAP.js +6 -0
- langflow/frontend/assets/merge-DNwCjkMz.js +6 -0
- langflow/frontend/assets/message-circle-DLCvrYNR.js +6 -0
- langflow/frontend/assets/message-circle-code-GupdQt2W.js +6 -0
- langflow/frontend/assets/message-circle-dashed-67bYzw8l.js +6 -0
- langflow/frontend/assets/message-circle-heart-B85ZBeEI.js +6 -0
- langflow/frontend/assets/message-circle-more-M6qK0QU_.js +6 -0
- langflow/frontend/assets/message-circle-off-Cl1eoidv.js +6 -0
- langflow/frontend/assets/message-circle-plus-B1vadGfe.js +6 -0
- langflow/frontend/assets/message-circle-question-CCYdL8ts.js +6 -0
- langflow/frontend/assets/message-circle-reply-FGEU7jkF.js +6 -0
- langflow/frontend/assets/message-circle-warning-MUIUPzAb.js +6 -0
- langflow/frontend/assets/message-circle-x-DRvt_0Jv.js +6 -0
- langflow/frontend/assets/message-square-code-CpiJVsLk.js +6 -0
- langflow/frontend/assets/message-square-dashed-BEKvtMfA.js +6 -0
- langflow/frontend/assets/message-square-diff-C-oqiS_n.js +6 -0
- langflow/frontend/assets/message-square-dot-Bbc6g5vf.js +6 -0
- langflow/frontend/assets/message-square-heart-wk9IWIQG.js +6 -0
- langflow/frontend/assets/message-square-lock-CVwrV1Nu.js +6 -0
- langflow/frontend/assets/message-square-more-C_Djc7Nh.js +6 -0
- langflow/frontend/assets/message-square-off-BqQx6Nqj.js +6 -0
- langflow/frontend/assets/message-square-plus-6ZxHnHP8.js +6 -0
- langflow/frontend/assets/message-square-quote-HC4vYXVE.js +6 -0
- langflow/frontend/assets/message-square-reply-2P6H89jb.js +6 -0
- langflow/frontend/assets/message-square-share-CzgP9FTT.js +6 -0
- langflow/frontend/assets/message-square-tCU-VasX.js +6 -0
- langflow/frontend/assets/message-square-text-DewK7HOG.js +6 -0
- langflow/frontend/assets/message-square-warning-BiG-grkM.js +6 -0
- langflow/frontend/assets/message-square-x-DvMzivZb.js +6 -0
- langflow/frontend/assets/messages-square-CmvfPHoh.js +6 -0
- langflow/frontend/assets/mic-BU-iJrfW.js +6 -0
- langflow/frontend/assets/mic-off-D33cCiBM.js +6 -0
- langflow/frontend/assets/mic-vocal-CF-eDrbh.js +6 -0
- langflow/frontend/assets/microchip-D2O5hTQU.js +6 -0
- langflow/frontend/assets/microscope-C3ZRFXy7.js +6 -0
- langflow/frontend/assets/microwave-BDD_RGRq.js +6 -0
- langflow/frontend/assets/milestone-C7OhLhri.js +6 -0
- langflow/frontend/assets/milk-Du81K-Ni.js +6 -0
- langflow/frontend/assets/milk-off-BqLm_VtD.js +6 -0
- langflow/frontend/assets/minimize-2-Cw9YVpOQ.js +6 -0
- langflow/frontend/assets/minimize-D_UlCb-T.js +6 -0
- langflow/frontend/assets/monitor-NZU5KjYN.js +6 -0
- langflow/frontend/assets/monitor-check-BR2SXKF6.js +6 -0
- langflow/frontend/assets/monitor-cog-BqusH5zn.js +6 -0
- langflow/frontend/assets/monitor-dot-DVLNLP8h.js +6 -0
- langflow/frontend/assets/monitor-down--XTdboiB.js +6 -0
- langflow/frontend/assets/monitor-off-D9rwN6h6.js +6 -0
- langflow/frontend/assets/monitor-pause-B_FJcF8R.js +6 -0
- langflow/frontend/assets/monitor-play-CcmvwgqN.js +6 -0
- langflow/frontend/assets/monitor-smartphone-CNybTyth.js +6 -0
- langflow/frontend/assets/monitor-speaker-B7T7wM6k.js +6 -0
- langflow/frontend/assets/monitor-stop-B2En-SDg.js +6 -0
- langflow/frontend/assets/monitor-up-ByEb2qFg.js +6 -0
- langflow/frontend/assets/monitor-x-EnCDfgcp.js +6 -0
- langflow/frontend/assets/moon-DAEyOw2a.js +6 -0
- langflow/frontend/assets/moon-star-KGRnw97Y.js +6 -0
- langflow/frontend/assets/mountain-BQsTLNBK.js +6 -0
- langflow/frontend/assets/mountain-snow-D4GXC7fE.js +6 -0
- langflow/frontend/assets/mouse-gHIAmXRh.js +6 -0
- langflow/frontend/assets/mouse-off-BBxweWsh.js +6 -0
- langflow/frontend/assets/mouse-pointer-2-C7fm45_i.js +6 -0
- langflow/frontend/assets/mouse-pointer-DQFY7zgR.js +6 -0
- langflow/frontend/assets/mouse-pointer-ban-DWalDj1S.js +6 -0
- langflow/frontend/assets/mouse-pointer-click-DRahiKG9.js +6 -0
- langflow/frontend/assets/move-3d-DevCH49h.js +6 -0
- langflow/frontend/assets/move-Bychn4Xq.js +6 -0
- langflow/frontend/assets/move-diagonal-2-QmBU-EYZ.js +6 -0
- langflow/frontend/assets/move-diagonal-mULQjXm-.js +6 -0
- langflow/frontend/assets/move-down-Cf-8xJHz.js +6 -0
- langflow/frontend/assets/move-down-left-D0IdNcQj.js +6 -0
- langflow/frontend/assets/move-down-right-bsUiHRoi.js +6 -0
- langflow/frontend/assets/move-horizontal-C62bJym8.js +6 -0
- langflow/frontend/assets/move-left-BpiOG-Jd.js +6 -0
- langflow/frontend/assets/move-right-D3JUdlA_.js +6 -0
- langflow/frontend/assets/move-up-CrxoSZdy.js +6 -0
- langflow/frontend/assets/move-up-left-BvM6TIRX.js +6 -0
- langflow/frontend/assets/move-up-right-BCyrAjzU.js +6 -0
- langflow/frontend/assets/move-vertical-DCGMPTcZ.js +6 -0
- langflow/frontend/assets/music-2-uRHUqiKp.js +6 -0
- langflow/frontend/assets/music-3-CRjJxV7a.js +6 -0
- langflow/frontend/assets/music-4-CpQp7oLM.js +6 -0
- langflow/frontend/assets/music-Bz8XQ9yo.js +6 -0
- langflow/frontend/assets/navigation-2-DvC6GXOr.js +6 -0
- langflow/frontend/assets/navigation-2-off-B7pS7kXz.js +6 -0
- langflow/frontend/assets/navigation-krEuBOR5.js +6 -0
- langflow/frontend/assets/navigation-off-DYvXDM8k.js +6 -0
- langflow/frontend/assets/network-NbbjTPzx.js +6 -0
- langflow/frontend/assets/newspaper-Bat8syVx.js +6 -0
- langflow/frontend/assets/nfc-Ck_EfjEs.js +6 -0
- langflow/frontend/assets/non-binary-C1a3tYjk.js +6 -0
- langflow/frontend/assets/notebook-CYq4nN1L.js +6 -0
- langflow/frontend/assets/notebook-pen-BfC-bVpa.js +6 -0
- langflow/frontend/assets/notebook-tabs-DZGRk7gN.js +6 -0
- langflow/frontend/assets/notebook-text-Bz8iDl4c.js +6 -0
- langflow/frontend/assets/notepad-text-DW3fT_6Q.js +6 -0
- langflow/frontend/assets/notepad-text-dashed-uxBFkVY5.js +6 -0
- langflow/frontend/assets/nut-84DOF2vc.js +6 -0
- langflow/frontend/assets/nut-off-Blj0Qib-.js +6 -0
- langflow/frontend/assets/octagon-CxBqxkHW.js +6 -0
- langflow/frontend/assets/octagon-alert-C_MicO6Z.js +6 -0
- langflow/frontend/assets/octagon-minus-Dh34ZfKe.js +6 -0
- langflow/frontend/assets/octagon-pause-CE3TAT55.js +6 -0
- langflow/frontend/assets/octagon-x-DXD5HnNU.js +6 -0
- langflow/frontend/assets/omega-coKQMWfT.js +6 -0
- langflow/frontend/assets/option-C7JZRMxv.js +6 -0
- langflow/frontend/assets/orbit-B4Eh-8Rp.js +6 -0
- langflow/frontend/assets/origami-D-yOwIKo.js +6 -0
- langflow/frontend/assets/package-2-BWsHwFJe.js +6 -0
- langflow/frontend/assets/package-check-B8TF8iS9.js +6 -0
- langflow/frontend/assets/package-minus-DcZ_-XSV.js +6 -0
- langflow/frontend/assets/package-open-DisPx2TQ.js +6 -0
- langflow/frontend/assets/package-plus-CefpEysG.js +6 -0
- langflow/frontend/assets/package-search-DLbPBzFS.js +6 -0
- langflow/frontend/assets/package-v0MNchcK.js +6 -0
- langflow/frontend/assets/package-x-DL_VCYya.js +6 -0
- langflow/frontend/assets/paint-bucket-Ct4jgy_6.js +6 -0
- langflow/frontend/assets/paint-roller-CJYW2FAl.js +6 -0
- langflow/frontend/assets/paintbrush-DrdRABdX.js +6 -0
- langflow/frontend/assets/paintbrush-vertical-Cuz-FNyi.js +6 -0
- langflow/frontend/assets/palette-LPTwxgmn.js +6 -0
- langflow/frontend/assets/panel-bottom-C4_U90qc.js +6 -0
- langflow/frontend/assets/panel-bottom-close-Cr77xt1p.js +6 -0
- langflow/frontend/assets/panel-bottom-dashed-BFSIYvdN.js +6 -0
- langflow/frontend/assets/panel-bottom-open-Cm5guQNe.js +6 -0
- langflow/frontend/assets/panel-left-close-BcdQwvhI.js +6 -0
- langflow/frontend/assets/panel-left-dashed-CShCu4e8.js +6 -0
- langflow/frontend/assets/panel-left-open-oHSUly2d.js +6 -0
- langflow/frontend/assets/panel-right-D6EFTvl0.js +6 -0
- langflow/frontend/assets/panel-right-close-DSFapOxy.js +6 -0
- langflow/frontend/assets/panel-right-dashed-BHrFGWhY.js +6 -0
- langflow/frontend/assets/panel-right-open-CrbrE6LA.js +6 -0
- langflow/frontend/assets/panel-top-CgCE1J2x.js +6 -0
- langflow/frontend/assets/panel-top-close-4kYLiql7.js +6 -0
- langflow/frontend/assets/panel-top-dashed-5yBgRiNp.js +6 -0
- langflow/frontend/assets/panel-top-open-DKS0WOLf.js +6 -0
- langflow/frontend/assets/panels-left-bottom-BNQ8olvc.js +6 -0
- langflow/frontend/assets/panels-right-bottom-CduBkUgr.js +6 -0
- langflow/frontend/assets/panels-top-left-BNL9MJeP.js +6 -0
- langflow/frontend/assets/paperclip-DPcsFtxG.js +6 -0
- langflow/frontend/assets/parentheses-ClvkHT1-.js +6 -0
- langflow/frontend/assets/parking-meter-dXt2a2Z4.js +6 -0
- langflow/frontend/assets/party-popper-jfiJ6nFW.js +6 -0
- langflow/frontend/assets/pause-DPEStNp8.js +6 -0
- langflow/frontend/assets/paw-print-s6b4Xzbf.js +6 -0
- langflow/frontend/assets/pc-case-CEpqEnAg.js +6 -0
- langflow/frontend/assets/pen-C8W6rr1b.js +6 -0
- langflow/frontend/assets/pen-line-Cir29vtn.js +6 -0
- langflow/frontend/assets/pen-off-CogtVTYK.js +6 -0
- langflow/frontend/assets/pen-tool-Bv90B9da.js +6 -0
- langflow/frontend/assets/pencil-CEKZG-4t.js +6 -0
- langflow/frontend/assets/pencil-line-COJHbFUO.js +6 -0
- langflow/frontend/assets/pencil-off-rGMOHiFp.js +6 -0
- langflow/frontend/assets/pencil-ruler-CWNRk-1J.js +6 -0
- langflow/frontend/assets/pentagon-BpFnUGkI.js +6 -0
- langflow/frontend/assets/percent-xGuHobQW.js +6 -0
- langflow/frontend/assets/person-standing-DxW_1Yzh.js +6 -0
- langflow/frontend/assets/philippine-peso-BiacW8Wq.js +6 -0
- langflow/frontend/assets/phone-SaWqxouE.js +6 -0
- langflow/frontend/assets/phone-call-DhbCej8R.js +6 -0
- langflow/frontend/assets/phone-forwarded-CKNaHHhk.js +6 -0
- langflow/frontend/assets/phone-incoming-CXDFWqkP.js +6 -0
- langflow/frontend/assets/phone-missed-BVNsWzVi.js +6 -0
- langflow/frontend/assets/phone-off-DBSalt2d.js +6 -0
- langflow/frontend/assets/phone-outgoing-BqLNDcWF.js +6 -0
- langflow/frontend/assets/pi-D0ntK1iZ.js +6 -0
- langflow/frontend/assets/piano-B5x5eI1D.js +6 -0
- langflow/frontend/assets/pickaxe-DLoPxnpa.js +6 -0
- langflow/frontend/assets/picture-in-picture-2-DWXTsax-.js +6 -0
- langflow/frontend/assets/picture-in-picture-haYixbwt.js +6 -0
- langflow/frontend/assets/piggy-bank-C6TY3w4j.js +6 -0
- langflow/frontend/assets/pilcrow-CYvB1Z_E.js +6 -0
- langflow/frontend/assets/pilcrow-left-C9lmlliK.js +6 -0
- langflow/frontend/assets/pilcrow-right-wTlmqFtI.js +6 -0
- langflow/frontend/assets/pill-BV7FHIRV.js +6 -0
- langflow/frontend/assets/pill-bottle-DyPm0flW.js +6 -0
- langflow/frontend/assets/pin-BQPFMk05.js +6 -0
- langflow/frontend/assets/pin-off-CTk8rIsP.js +6 -0
- langflow/frontend/assets/pipette-CRaGvsws.js +6 -0
- langflow/frontend/assets/pizza-CmhR7ZYa.js +6 -0
- langflow/frontend/assets/plane-BIVEKO6u.js +6 -0
- langflow/frontend/assets/plane-landing-gwi8IEFD.js +6 -0
- langflow/frontend/assets/plane-takeoff-Ab5pN7Sy.js +6 -0
- langflow/frontend/assets/play-Cg03AZNv.js +6 -0
- langflow/frontend/assets/plug-2-7xYJ9ZPL.js +6 -0
- langflow/frontend/assets/plug-CPKlXP-Z.js +6 -0
- langflow/frontend/assets/plug-zap-B_dzoUSp.js +6 -0
- langflow/frontend/assets/pocket-BEJn1OUt.js +6 -0
- langflow/frontend/assets/pocket-knife-DZW1UGFr.js +6 -0
- langflow/frontend/assets/podcast-DMn2V1KU.js +6 -0
- langflow/frontend/assets/pointer-DUS66DM_.js +6 -0
- langflow/frontend/assets/pointer-off-CzGKqzYX.js +6 -0
- langflow/frontend/assets/popcorn-DlYSizK6.js +6 -0
- langflow/frontend/assets/popsicle-Denkv5OD.js +6 -0
- langflow/frontend/assets/pound-sterling-Dx6eQZSe.js +6 -0
- langflow/frontend/assets/power-DyYveOw3.js +6 -0
- langflow/frontend/assets/power-off-NJ3NsEeq.js +6 -0
- langflow/frontend/assets/presentation-BrKqQkrc.js +6 -0
- langflow/frontend/assets/printer-Cr_WymwU.js +6 -0
- langflow/frontend/assets/printer-check-kUdXJg9v.js +6 -0
- langflow/frontend/assets/projector-DQieS7C0.js +6 -0
- langflow/frontend/assets/proportions-CvN0j4pn.js +6 -0
- langflow/frontend/assets/puzzle-CKTReqkp.js +6 -0
- langflow/frontend/assets/pyramid-DEA7HIn1.js +6 -0
- langflow/frontend/assets/qr-code-JEPc3vLj.js +6 -0
- langflow/frontend/assets/quote-CHoFLDdS.js +6 -0
- langflow/frontend/assets/rabbit-DM05fJlz.js +6 -0
- langflow/frontend/assets/radar-C8IJaMW4.js +6 -0
- langflow/frontend/assets/radiation-BigqftKv.js +6 -0
- langflow/frontend/assets/radical-CaeDkYge.js +6 -0
- langflow/frontend/assets/radio-Bd6MLcgl.js +6 -0
- langflow/frontend/assets/radio-receiver-CmDh03oH.js +6 -0
- langflow/frontend/assets/radio-tower-lZSJtKuk.js +6 -0
- langflow/frontend/assets/radius-DCbmswU7.js +6 -0
- langflow/frontend/assets/rail-symbol-DpobjD85.js +6 -0
- langflow/frontend/assets/rainbow-gfLRuKdr.js +6 -0
- langflow/frontend/assets/rat-B3WF22ie.js +6 -0
- langflow/frontend/assets/ratio-BbY3kPrq.js +6 -0
- langflow/frontend/assets/receipt-Cf4tIvHd.js +6 -0
- langflow/frontend/assets/receipt-cent-BCusSgO0.js +6 -0
- langflow/frontend/assets/receipt-euro-B1f6UHDQ.js +6 -0
- langflow/frontend/assets/receipt-indian-rupee-DM_xzVoS.js +6 -0
- langflow/frontend/assets/receipt-japanese-yen-1Lmajaei.js +6 -0
- langflow/frontend/assets/receipt-pound-sterling-C-QOwaRJ.js +6 -0
- langflow/frontend/assets/receipt-russian-ruble-B6x8xfMf.js +6 -0
- langflow/frontend/assets/receipt-swiss-franc-BHzPb-Em.js +6 -0
- langflow/frontend/assets/receipt-text-D9IjAm7N.js +6 -0
- langflow/frontend/assets/rectangle-ellipsis-Buj9IU2x.js +6 -0
- langflow/frontend/assets/rectangle-goggles-D0ZfI7na.js +6 -0
- langflow/frontend/assets/rectangle-horizontal-BYJ-wqv0.js +6 -0
- langflow/frontend/assets/rectangle-vertical-BL-VAYCv.js +6 -0
- langflow/frontend/assets/recycle-C6ZfSrYc.js +6 -0
- langflow/frontend/assets/redo-2-DwsGdiMi.js +6 -0
- langflow/frontend/assets/redo-Cpww3zOS.js +6 -0
- langflow/frontend/assets/redo-dot-BqhUWPgg.js +6 -0
- langflow/frontend/assets/refresh-ccw-CZ7GaoCX.js +6 -0
- langflow/frontend/assets/refresh-ccw-dot-CiBOl6nk.js +6 -0
- langflow/frontend/assets/refresh-cw-off-P0NwKw-G.js +6 -0
- langflow/frontend/assets/refresh-cw-vdhaCeNl.js +6 -0
- langflow/frontend/assets/refrigerator-DHmU3EJx.js +6 -0
- langflow/frontend/assets/regex-B8ojcXYx.js +6 -0
- langflow/frontend/assets/remove-formatting-DoW4DZ_f.js +6 -0
- langflow/frontend/assets/repeat-1-DqnI0w_q.js +6 -0
- langflow/frontend/assets/repeat-2-Br9jvBam.js +6 -0
- langflow/frontend/assets/repeat-BVdrzElc.js +6 -0
- langflow/frontend/assets/replace-Cp6FavLW.js +6 -0
- langflow/frontend/assets/replace-all-CehhMKqi.js +6 -0
- langflow/frontend/assets/reply-Dm-xYGBL.js +6 -0
- langflow/frontend/assets/reply-all-DGhnZqms.js +6 -0
- langflow/frontend/assets/rewind-DrBQaUoa.js +6 -0
- langflow/frontend/assets/ribbon-D4Hzpzmo.js +6 -0
- langflow/frontend/assets/rocket-b1j0X1wA.js +6 -0
- langflow/frontend/assets/rocking-chair-CpndLdNd.js +6 -0
- langflow/frontend/assets/roller-coaster-C-6HDOib.js +6 -0
- langflow/frontend/assets/rotate-3d-BWxYZOsG.js +6 -0
- langflow/frontend/assets/rotate-ccw-DTX1eyUu.js +6 -0
- langflow/frontend/assets/rotate-ccw-key-C8nVkv_o.js +6 -0
- langflow/frontend/assets/rotate-ccw-square-CkTtklMA.js +6 -0
- langflow/frontend/assets/rotate-cw-CguoLpXe.js +6 -0
- langflow/frontend/assets/rotate-cw-square-BuB6SBZ6.js +6 -0
- langflow/frontend/assets/route-C77Wn2Mz.js +6 -0
- langflow/frontend/assets/route-off-CBjm3IMU.js +6 -0
- langflow/frontend/assets/router-DInkPf5g.js +6 -0
- langflow/frontend/assets/rows-2-B9oP-uPO.js +6 -0
- langflow/frontend/assets/rows-3-Dbs_ard3.js +6 -0
- langflow/frontend/assets/rows-4-DbcVmP9u.js +6 -0
- langflow/frontend/assets/rss-B8dxFNaF.js +6 -0
- langflow/frontend/assets/ruler-CKZ4BpZu.js +6 -0
- langflow/frontend/assets/ruler-dimension-line-BJjSwBaR.js +6 -0
- langflow/frontend/assets/russian-ruble-B7LfwYdU.js +6 -0
- langflow/frontend/assets/sailboat-DkCX9aRI.js +6 -0
- langflow/frontend/assets/salad-DpH3jTTo.js +6 -0
- langflow/frontend/assets/sandwich-B8l3CZwN.js +6 -0
- langflow/frontend/assets/satellite-CZX-rXCo.js +6 -0
- langflow/frontend/assets/satellite-dish-iaZ-Pi3t.js +6 -0
- langflow/frontend/assets/saudi-riyal-BK8OJTB0.js +6 -0
- langflow/frontend/assets/save-DVmb2SyE.js +6 -0
- langflow/frontend/assets/save-all-aos8jroE.js +6 -0
- langflow/frontend/assets/save-off-D4UoeLzi.js +6 -0
- langflow/frontend/assets/scale-3d-BLCroHMx.js +6 -0
- langflow/frontend/assets/scale-Myzm-53S.js +6 -0
- langflow/frontend/assets/scaling-BYVBuLh8.js +6 -0
- langflow/frontend/assets/scan-DsLSQLM6.js +6 -0
- langflow/frontend/assets/scan-barcode-BN7G95rt.js +6 -0
- langflow/frontend/assets/scan-eye-CVWZjNTZ.js +6 -0
- langflow/frontend/assets/scan-face-DRuNs54K.js +6 -0
- langflow/frontend/assets/scan-heart-yHDap0A_.js +6 -0
- langflow/frontend/assets/scan-line-Dz7F7CMJ.js +6 -0
- langflow/frontend/assets/scan-qr-code-BCwaxp9C.js +6 -0
- langflow/frontend/assets/scan-search-DlnoaHTD.js +6 -0
- langflow/frontend/assets/scan-text-DBmMgqwS.js +6 -0
- langflow/frontend/assets/school-DIFeMcFX.js +6 -0
- langflow/frontend/assets/scissors-CHoHzT7D.js +6 -0
- langflow/frontend/assets/scissors-line-dashed-CDko2_Gc.js +6 -0
- langflow/frontend/assets/screen-share-BeCpt36Z.js +6 -0
- langflow/frontend/assets/screen-share-off-px2XsB7y.js +6 -0
- langflow/frontend/assets/scroll-CRgEX6fu.js +6 -0
- langflow/frontend/assets/scroll-text-o6IcMYoq.js +6 -0
- langflow/frontend/assets/search-check-CKBKI1Gj.js +6 -0
- langflow/frontend/assets/search-code-Dv9K2drX.js +6 -0
- langflow/frontend/assets/search-slash-CycQBA_O.js +6 -0
- langflow/frontend/assets/search-x-ljulm3OF.js +6 -0
- langflow/frontend/assets/section-DKuqeNkJ.js +6 -0
- langflow/frontend/assets/send-2w8laZL9.js +6 -0
- langflow/frontend/assets/send-horizontal-BlavubAS.js +6 -0
- langflow/frontend/assets/send-to-back-CfN_yyTU.js +6 -0
- langflow/frontend/assets/separator-horizontal-aZjzQKVv.js +6 -0
- langflow/frontend/assets/separator-vertical-BXBezolX.js +6 -0
- langflow/frontend/assets/server-4YW_uq94.js +6 -0
- langflow/frontend/assets/server-cog-Divq2S3R.js +6 -0
- langflow/frontend/assets/server-crash-CiL6FTJC.js +6 -0
- langflow/frontend/assets/server-off-BV519F_x.js +6 -0
- langflow/frontend/assets/settings-2-U3ZiKH2K.js +6 -0
- langflow/frontend/assets/settings-BHtNu9az.js +6 -0
- langflow/frontend/assets/shapes-D5jgbMlg.js +6 -0
- langflow/frontend/assets/share-2-CnwH5PCU.js +6 -0
- langflow/frontend/assets/share-BBOC9Y6R.js +6 -0
- langflow/frontend/assets/sheet-B74d-JnA.js +6 -0
- langflow/frontend/assets/shell-BRzNJQCw.js +6 -0
- langflow/frontend/assets/shield-alert-DQ03HJsN.js +6 -0
- langflow/frontend/assets/shield-ban-DIVqiyYM.js +6 -0
- langflow/frontend/assets/shield-check-DKAsVa8M.js +6 -0
- langflow/frontend/assets/shield-ellipsis-CRVh79_t.js +6 -0
- langflow/frontend/assets/shield-half-kZ4LA3zf.js +6 -0
- langflow/frontend/assets/shield-minus-DG9uD6rd.js +6 -0
- langflow/frontend/assets/shield-off-BEfjusrf.js +6 -0
- langflow/frontend/assets/shield-plus-kt2QuIyK.js +6 -0
- langflow/frontend/assets/shield-question-BR9mosX3.js +6 -0
- langflow/frontend/assets/shield-user-Dn0n3wK2.js +6 -0
- langflow/frontend/assets/shield-x-YDXPdlMV.js +6 -0
- langflow/frontend/assets/shield-xmtPeYVl.js +6 -0
- langflow/frontend/assets/ship-Cit1XJk_.js +6 -0
- langflow/frontend/assets/ship-wheel-BwRR87b-.js +6 -0
- langflow/frontend/assets/shirt-B5jHTq3N.js +6 -0
- langflow/frontend/assets/shopping-bag-60DQI2jr.js +6 -0
- langflow/frontend/assets/shopping-basket-BBbQsBey.js +6 -0
- langflow/frontend/assets/shopping-cart-Cj_l7pQe.js +6 -0
- langflow/frontend/assets/shovel-CLtnALsm.js +6 -0
- langflow/frontend/assets/shower-head-Cdf2DNio.js +6 -0
- langflow/frontend/assets/shredder-CwP4a2Ao.js +6 -0
- langflow/frontend/assets/shrimp-FlM3V3lv.js +6 -0
- langflow/frontend/assets/shrink-Doomin48.js +6 -0
- langflow/frontend/assets/shrub-D2jxIUoe.js +6 -0
- langflow/frontend/assets/shuffle-Db4KaGX6.js +6 -0
- langflow/frontend/assets/sigma-D78gMsrg.js +6 -0
- langflow/frontend/assets/signal-CJw0Q6YV.js +6 -0
- langflow/frontend/assets/signal-high-CfBO56Gs.js +6 -0
- langflow/frontend/assets/signal-low-COOLPbIy.js +6 -0
- langflow/frontend/assets/signal-medium-DHFeo6cP.js +6 -0
- langflow/frontend/assets/signal-zero-95zGwHEy.js +6 -0
- langflow/frontend/assets/signature-8nn5bJN7.js +6 -0
- langflow/frontend/assets/signpost-big-BzVnuDF1.js +6 -0
- langflow/frontend/assets/signpost-jv5awm2D.js +6 -0
- langflow/frontend/assets/siren-D2i6hpoS.js +6 -0
- langflow/frontend/assets/skip-back-DnKcKIcA.js +6 -0
- langflow/frontend/assets/skip-forward-C_ryz2-2.js +6 -0
- langflow/frontend/assets/skull-Dr59tILw.js +6 -0
- langflow/frontend/assets/slack-BN9DnDt5.js +6 -0
- langflow/frontend/assets/slash-BzIMpzxA.js +6 -0
- langflow/frontend/assets/slice-C5NvbLH8.js +6 -0
- langflow/frontend/assets/sliders-horizontal-CCqTtmco.js +6 -0
- langflow/frontend/assets/sliders-vertical-Beu0Iwrj.js +6 -0
- langflow/frontend/assets/smartphone-C8zH19Ey.js +6 -0
- langflow/frontend/assets/smartphone-charging-CwNq_FJo.js +6 -0
- langflow/frontend/assets/smartphone-nfc-D_XiELPJ.js +6 -0
- langflow/frontend/assets/smile-D-B0wyP1.js +6 -0
- langflow/frontend/assets/smile-plus-CYYHBH4a.js +6 -0
- langflow/frontend/assets/snail-CyUMnzyS.js +6 -0
- langflow/frontend/assets/snowflake-B2yezUkT.js +6 -0
- langflow/frontend/assets/sofa-JXoXmoKb.js +6 -0
- langflow/frontend/assets/soup-CmZgLR1S.js +6 -0
- langflow/frontend/assets/space-CunKNbr-.js +6 -0
- langflow/frontend/assets/spade-DEza63Qa.js +6 -0
- langflow/frontend/assets/sparkle-HkN4zWqr.js +6 -0
- langflow/frontend/assets/sparkles-DmQOxm0f.js +6 -0
- langflow/frontend/assets/speaker-Cs_5oZDo.js +6 -0
- langflow/frontend/assets/speech-BSytzHaN.js +6 -0
- langflow/frontend/assets/spell-check-2-BQ2o5WTl.js +6 -0
- langflow/frontend/assets/spell-check-BlePI3Lv.js +6 -0
- langflow/frontend/assets/spline-BvNLK_9u.js +6 -0
- langflow/frontend/assets/spline-pointer-D3Guzykj.js +6 -0
- langflow/frontend/assets/split-CmFr02tK.js +6 -0
- langflow/frontend/assets/spray-can-BPxlNy8G.js +6 -0
- langflow/frontend/assets/sprout-DbeZwEUO.js +6 -0
- langflow/frontend/assets/square-BlBgoxPi.js +6 -0
- langflow/frontend/assets/square-activity-BFrC0pro.js +6 -0
- langflow/frontend/assets/square-arrow-down-C4eIsUbs.js +6 -0
- langflow/frontend/assets/square-arrow-down-left-V6JLej8R.js +6 -0
- langflow/frontend/assets/square-arrow-down-right-wN7V1Fe2.js +6 -0
- langflow/frontend/assets/square-arrow-left-DDwkibS_.js +6 -0
- langflow/frontend/assets/square-arrow-out-down-left-DqElHhHx.js +6 -0
- langflow/frontend/assets/square-arrow-out-down-right-C1EoKN6W.js +6 -0
- langflow/frontend/assets/square-arrow-out-up-left-H7RgjOzy.js +6 -0
- langflow/frontend/assets/square-arrow-out-up-right-BbzsL5A8.js +6 -0
- langflow/frontend/assets/square-arrow-right-CVO0BS00.js +6 -0
- langflow/frontend/assets/square-arrow-up-CvTY6PBa.js +6 -0
- langflow/frontend/assets/square-arrow-up-left-CCYdUgbY.js +6 -0
- langflow/frontend/assets/square-arrow-up-right-BhJwi5qy.js +6 -0
- langflow/frontend/assets/square-asterisk-B84x83Rz.js +6 -0
- langflow/frontend/assets/square-bottom-dashed-scissors-DUq-Ff1K.js +6 -0
- langflow/frontend/assets/square-chart-gantt-D191i51Z.js +6 -0
- langflow/frontend/assets/square-check-C81tDTX_.js +6 -0
- langflow/frontend/assets/square-check-big-Cfvo-cRB.js +6 -0
- langflow/frontend/assets/square-chevron-down-DznHaX0X.js +6 -0
- langflow/frontend/assets/square-chevron-left-DjJW6zzf.js +6 -0
- langflow/frontend/assets/square-chevron-right-BBCFRQCY.js +6 -0
- langflow/frontend/assets/square-chevron-up-XeBE2r3e.js +6 -0
- langflow/frontend/assets/square-code-DtHZO3E2.js +6 -0
- langflow/frontend/assets/square-dashed-DCb9_o-N.js +6 -0
- langflow/frontend/assets/square-dashed-bottom-BEHWpKy9.js +6 -0
- langflow/frontend/assets/square-dashed-bottom-code-Dg4aDDmy.js +6 -0
- langflow/frontend/assets/square-dashed-kanban-BxnkPmji.js +6 -0
- langflow/frontend/assets/square-dashed-mouse-pointer-DgpGX-FE.js +6 -0
- langflow/frontend/assets/square-divide-DfqFr1n1.js +6 -0
- langflow/frontend/assets/square-dot-CwmGmpkL.js +6 -0
- langflow/frontend/assets/square-equal-Dwq5DIse.js +6 -0
- langflow/frontend/assets/square-function-Cs4w0UYY.js +6 -0
- langflow/frontend/assets/square-kanban-JNJ3tJJl.js +6 -0
- langflow/frontend/assets/square-library-CSrrTmOj.js +6 -0
- langflow/frontend/assets/square-m-cwyKTmW7.js +6 -0
- langflow/frontend/assets/square-menu-CofS4Jdh.js +6 -0
- langflow/frontend/assets/square-minus-QP2YPLFE.js +6 -0
- langflow/frontend/assets/square-mouse-pointer-CPb28_Av.js +6 -0
- langflow/frontend/assets/square-parking-LRAQmZ3z.js +6 -0
- langflow/frontend/assets/square-parking-off-DKyuXHGj.js +6 -0
- langflow/frontend/assets/square-pen-D882q-0A.js +6 -0
- langflow/frontend/assets/square-percent-CC-BM1MI.js +6 -0
- langflow/frontend/assets/square-pi-CTLbhqlY.js +6 -0
- langflow/frontend/assets/square-pilcrow-CMX28bVz.js +6 -0
- langflow/frontend/assets/square-play-BC7C8dY-.js +6 -0
- langflow/frontend/assets/square-plus-BUilRaN_.js +6 -0
- langflow/frontend/assets/square-power-DIkAmWzc.js +6 -0
- langflow/frontend/assets/square-radical-DnLv08-s.js +6 -0
- langflow/frontend/assets/square-round-corner-BB3wcIDf.js +6 -0
- langflow/frontend/assets/square-scissors-GIbyqoKc.js +6 -0
- langflow/frontend/assets/square-sigma-C3i4obIF.js +6 -0
- langflow/frontend/assets/square-slash-CyhZn8Cq.js +6 -0
- langflow/frontend/assets/square-split-horizontal-Borhe4e7.js +6 -0
- langflow/frontend/assets/square-split-vertical-BvntodjP.js +6 -0
- langflow/frontend/assets/square-square-B9fytSIP.js +6 -0
- langflow/frontend/assets/square-stack-CRjEjRe1.js +6 -0
- langflow/frontend/assets/square-terminal-6JISJf-2.js +6 -0
- langflow/frontend/assets/square-user-BQEc5R89.js +6 -0
- langflow/frontend/assets/square-user-round-yFPaHBlM.js +6 -0
- langflow/frontend/assets/square-x-CqRpUqZ0.js +6 -0
- langflow/frontend/assets/squares-exclude-B0vq0dLW.js +6 -0
- langflow/frontend/assets/squares-intersect-BtmeIxUs.js +6 -0
- langflow/frontend/assets/squares-subtract-DGW_CmnN.js +6 -0
- langflow/frontend/assets/squares-unite-DqCazc-b.js +6 -0
- langflow/frontend/assets/squircle-Du8Ic38B.js +6 -0
- langflow/frontend/assets/squirrel-BwMjUg00.js +6 -0
- langflow/frontend/assets/stamp-Cjc-QLqW.js +6 -0
- langflow/frontend/assets/star-YimC0doB.js +6 -0
- langflow/frontend/assets/star-half-BpsPPRe8.js +6 -0
- langflow/frontend/assets/star-off-BZgDQCMp.js +6 -0
- langflow/frontend/assets/step-back-C4wlBc79.js +6 -0
- langflow/frontend/assets/step-forward-BAPOEvlT.js +6 -0
- langflow/frontend/assets/stethoscope-BTbCEz2e.js +6 -0
- langflow/frontend/assets/sticker-MsSoLwkI.js +6 -0
- langflow/frontend/assets/sticky-note-CqVrYxE3.js +6 -0
- langflow/frontend/assets/store-BHHNl-LA.js +6 -0
- langflow/frontend/assets/stretch-horizontal-KHaNXiVQ.js +6 -0
- langflow/frontend/assets/stretch-vertical-CkTLnojq.js +6 -0
- langflow/frontend/assets/strikethrough-neolJcVH.js +6 -0
- langflow/frontend/assets/subscript-B5wRTGx-.js +6 -0
- langflow/frontend/assets/sun-dim--tCsyV6K.js +6 -0
- langflow/frontend/assets/sun-jCLGEI5S.js +6 -0
- langflow/frontend/assets/sun-medium-Bu59LmGS.js +6 -0
- langflow/frontend/assets/sun-moon-nEcSFr07.js +6 -0
- langflow/frontend/assets/sun-snow-7iuEoPOW.js +6 -0
- langflow/frontend/assets/sunrise-COPqX1MA.js +6 -0
- langflow/frontend/assets/sunset-BkAWJDow.js +6 -0
- langflow/frontend/assets/superscript-BeANkFb4.js +6 -0
- langflow/frontend/assets/swatch-book-LyGIRyZs.js +6 -0
- langflow/frontend/assets/swiss-franc-Tat2OoO7.js +6 -0
- langflow/frontend/assets/switch-camera-B-cb-xfD.js +6 -0
- langflow/frontend/assets/sword-BnCEJ4kj.js +6 -0
- langflow/frontend/assets/swords-DAU66oRr.js +6 -0
- langflow/frontend/assets/syringe-CK4PBqTY.js +6 -0
- langflow/frontend/assets/table-2-BnuCiXOF.js +6 -0
- langflow/frontend/assets/table-CWz_88HP.js +6 -0
- langflow/frontend/assets/table-cells-merge-DPQo77iV.js +6 -0
- langflow/frontend/assets/table-cells-split-BQMtVPcO.js +6 -0
- langflow/frontend/assets/table-columns-split-eY5jFR_I.js +6 -0
- langflow/frontend/assets/table-of-contents-Bg55qGO3.js +6 -0
- langflow/frontend/assets/table-properties-CbtprbM7.js +6 -0
- langflow/frontend/assets/table-rows-split-CfMPKfdF.js +6 -0
- langflow/frontend/assets/tablet-2WI-Xtae.js +6 -0
- langflow/frontend/assets/tablet-smartphone-BbbKFPGi.js +6 -0
- langflow/frontend/assets/tablets-O1toG4NK.js +6 -0
- langflow/frontend/assets/tag-54EIbwuP.js +6 -0
- langflow/frontend/assets/tags-C5O_Rkcb.js +6 -0
- langflow/frontend/assets/tally-1-CNv0xRjZ.js +6 -0
- langflow/frontend/assets/tally-2-CiSfhu8q.js +6 -0
- langflow/frontend/assets/tally-3-C-D9o1hR.js +6 -0
- langflow/frontend/assets/tally-4-V2ZCZYie.js +6 -0
- langflow/frontend/assets/tally-5-Wi78oTob.js +6 -0
- langflow/frontend/assets/tangent-6r0rBYzU.js +6 -0
- langflow/frontend/assets/target-CwRoWS0S.js +6 -0
- langflow/frontend/assets/telescope-PLAnGdz5.js +6 -0
- langflow/frontend/assets/tent-CTjgumki.js +6 -0
- langflow/frontend/assets/tent-tree-B5Hrsem9.js +6 -0
- langflow/frontend/assets/terminal-_DfDx_Gm.js +6 -0
- langflow/frontend/assets/test-tube-BjpKBJB6.js +6 -0
- langflow/frontend/assets/test-tube-diagonal-X2w63hGz.js +6 -0
- langflow/frontend/assets/test-tubes-D9g6MvXw.js +6 -0
- langflow/frontend/assets/text-BTttciWI.js +6 -0
- langflow/frontend/assets/text-cursor-BiOIq_TK.js +6 -0
- langflow/frontend/assets/text-cursor-input-BlmQhhdN.js +6 -0
- langflow/frontend/assets/text-quote-6yqk6UK3.js +6 -0
- langflow/frontend/assets/text-search-DViF9PWU.js +6 -0
- langflow/frontend/assets/text-select-Bsmx45-v.js +6 -0
- langflow/frontend/assets/theater-UjqGmUUQ.js +6 -0
- langflow/frontend/assets/thermometer-b8fF6-2f.js +6 -0
- langflow/frontend/assets/thermometer-snowflake-CnWT2Z03.js +6 -0
- langflow/frontend/assets/thermometer-sun-5l-k-7R5.js +6 -0
- langflow/frontend/assets/thumbs-down-CcUZmpWQ.js +6 -0
- langflow/frontend/assets/thumbs-up-C-nbza2Q.js +6 -0
- langflow/frontend/assets/ticket-D8eM3xER.js +6 -0
- langflow/frontend/assets/ticket-check-Ba1BImoZ.js +6 -0
- langflow/frontend/assets/ticket-minus-16NYFu_J.js +6 -0
- langflow/frontend/assets/ticket-percent-BE-1RVPX.js +6 -0
- langflow/frontend/assets/ticket-plus-WOlIdJbN.js +6 -0
- langflow/frontend/assets/ticket-slash-D7Fyt7Yp.js +6 -0
- langflow/frontend/assets/ticket-x-i-NId5Lv.js +6 -0
- langflow/frontend/assets/tickets-eEsR9ldv.js +6 -0
- langflow/frontend/assets/tickets-plane-D_MSmi-3.js +6 -0
- langflow/frontend/assets/timer-CXwxKfmA.js +6 -0
- langflow/frontend/assets/timer-off-BY9bGYwt.js +6 -0
- langflow/frontend/assets/timer-reset-CXajZ_Vm.js +6 -0
- langflow/frontend/assets/toggle-left-DDeEpnRn.js +6 -0
- langflow/frontend/assets/toggle-right-BC-JipKK.js +6 -0
- langflow/frontend/assets/toilet-D_-QkmL6.js +6 -0
- langflow/frontend/assets/tornado-DJ2r4mwI.js +6 -0
- langflow/frontend/assets/torus-mcH7cOYu.js +6 -0
- langflow/frontend/assets/touchpad-BDKqmrsT.js +6 -0
- langflow/frontend/assets/touchpad-off-DTnARWvz.js +6 -0
- langflow/frontend/assets/tower-control-CcVK3ArT.js +6 -0
- langflow/frontend/assets/toy-brick-BKjba094.js +6 -0
- langflow/frontend/assets/tractor-D2MINhNC.js +6 -0
- langflow/frontend/assets/traffic-cone-2pjL2w6-.js +6 -0
- langflow/frontend/assets/train-front-lNaq4oxc.js +6 -0
- langflow/frontend/assets/train-front-tunnel-BxBJWaFg.js +6 -0
- langflow/frontend/assets/train-track-DB22DmXW.js +6 -0
- langflow/frontend/assets/tram-front-DbB2Jwgv.js +6 -0
- langflow/frontend/assets/transgender-DqzSqBNS.js +6 -0
- langflow/frontend/assets/trash-C02-iims.js +6 -0
- langflow/frontend/assets/tree-deciduous-B3EwnPfN.js +6 -0
- langflow/frontend/assets/tree-palm-D0AGcSUj.js +6 -0
- langflow/frontend/assets/tree-pine-EegiIDh2.js +6 -0
- langflow/frontend/assets/trees-DvUJBPZT.js +6 -0
- langflow/frontend/assets/trello-C7yvB1lX.js +6 -0
- langflow/frontend/assets/trending-down-BoBVhMQz.js +6 -0
- langflow/frontend/assets/trending-up-Cd7Q4btf.js +6 -0
- langflow/frontend/assets/trending-up-down-DDPUFvuo.js +6 -0
- langflow/frontend/assets/triangle-DWksNtrq.js +6 -0
- langflow/frontend/assets/triangle-alert-ZktpwbrD.js +6 -0
- langflow/frontend/assets/triangle-dashed-CT7-mc-Z.js +6 -0
- langflow/frontend/assets/triangle-right-f8RiENDo.js +6 -0
- langflow/frontend/assets/trophy-CXGrZve7.js +6 -0
- langflow/frontend/assets/truck-Cny4ajCH.js +6 -0
- langflow/frontend/assets/truck-electric-Dqe8VoeJ.js +6 -0
- langflow/frontend/assets/turtle-BQjM-HzI.js +6 -0
- langflow/frontend/assets/tv-BWsD18o7.js +6 -0
- langflow/frontend/assets/tv-minimal-D2buxW6o.js +6 -0
- langflow/frontend/assets/tv-minimal-play-DNAJSwYL.js +6 -0
- langflow/frontend/assets/twitch-CyYNXrTi.js +6 -0
- langflow/frontend/assets/twitter-CjKttUqY.js +6 -0
- langflow/frontend/assets/type-DK0kKsd2.js +6 -0
- langflow/frontend/assets/type-outline-B6RbUP75.js +6 -0
- langflow/frontend/assets/umbrella-oLZdR26J.js +6 -0
- langflow/frontend/assets/umbrella-off-C5MGdjMm.js +6 -0
- langflow/frontend/assets/underline-D9zDHPUD.js +6 -0
- langflow/frontend/assets/undo-2-DWNvriet.js +6 -0
- langflow/frontend/assets/undo-De0lTMLX.js +6 -0
- langflow/frontend/assets/undo-dot-Dx9tFT83.js +6 -0
- langflow/frontend/assets/unfold-horizontal-CQ3nDj1d.js +6 -0
- langflow/frontend/assets/unfold-vertical-ranEkBfQ.js +6 -0
- langflow/frontend/assets/ungroup-Baq5-A_5.js +6 -0
- langflow/frontend/assets/university-BxD0WGxX.js +6 -0
- langflow/frontend/assets/unlink-2-DQTiHcH7.js +6 -0
- langflow/frontend/assets/unlink-5GOEop6c.js +6 -0
- langflow/frontend/assets/unplug-nD1ZrYbt.js +6 -0
- langflow/frontend/assets/upload-C_NT-4Jx.js +6 -0
- langflow/frontend/assets/usb--T_2IXbP.js +6 -0
- langflow/frontend/assets/use-post-add-user-46A2cCNV.js +1 -0
- langflow/frontend/assets/user-B_4IPnEB.js +6 -0
- langflow/frontend/assets/user-check-mFlcdTcy.js +6 -0
- langflow/frontend/assets/user-cog-Bwg8N02i.js +6 -0
- langflow/frontend/assets/user-lock-_zs04IDa.js +6 -0
- langflow/frontend/assets/user-minus-pAax4qTZ.js +6 -0
- langflow/frontend/assets/user-pen-FaanVAZ2.js +6 -0
- langflow/frontend/assets/user-plus-C4jShBLC.js +6 -0
- langflow/frontend/assets/user-round-BpfSCNWk.js +6 -0
- langflow/frontend/assets/user-round-check-DJ6ZZvXP.js +6 -0
- langflow/frontend/assets/user-round-cog-B122oQxh.js +6 -0
- langflow/frontend/assets/user-round-minus-kaeDkLR6.js +6 -0
- langflow/frontend/assets/user-round-pen-8EdSwK1g.js +6 -0
- langflow/frontend/assets/user-round-plus-CdimSaTo.js +6 -0
- langflow/frontend/assets/user-round-search-CPPn0Mzd.js +6 -0
- langflow/frontend/assets/user-round-x-xIG5FN7i.js +6 -0
- langflow/frontend/assets/user-search-B_7s0lPH.js +6 -0
- langflow/frontend/assets/user-x-CsApufX8.js +6 -0
- langflow/frontend/assets/users-C-ebOnIn.js +6 -0
- langflow/frontend/assets/users-round-B5J-hLU3.js +6 -0
- langflow/frontend/assets/utensils-BVQiMFC8.js +6 -0
- langflow/frontend/assets/utensils-crossed-BPa0tz76.js +6 -0
- langflow/frontend/assets/utility-pole-B5I7MFat.js +6 -0
- langflow/frontend/assets/variable-EV6tGFMq.js +6 -0
- langflow/frontend/assets/vault-B-RGhTES.js +6 -0
- langflow/frontend/assets/vegan-BfC3y4ga.js +6 -0
- langflow/frontend/assets/venetian-mask-DmWfxb9c.js +6 -0
- langflow/frontend/assets/venus-RvFO6sz3.js +6 -0
- langflow/frontend/assets/venus-and-mars-CiOJpo6y.js +6 -0
- langflow/frontend/assets/vibrate-1WhiGt9n.js +6 -0
- langflow/frontend/assets/vibrate-off-B2p6HPqI.js +6 -0
- langflow/frontend/assets/video-B1xikC0D.js +6 -0
- langflow/frontend/assets/video-off-BfdtEXPL.js +6 -0
- langflow/frontend/assets/videotape-Dpgx8hXq.js +6 -0
- langflow/frontend/assets/view-CF1HRiVx.js +6 -0
- langflow/frontend/assets/voicemail-DqVuHxqG.js +6 -0
- langflow/frontend/assets/volleyball--xOUru5I.js +6 -0
- langflow/frontend/assets/volume-1-BiTdyOLX.js +6 -0
- langflow/frontend/assets/volume-2-BeaxB9YG.js +6 -0
- langflow/frontend/assets/volume-D7xKonzS.js +6 -0
- langflow/frontend/assets/volume-off-B33ivsB8.js +6 -0
- langflow/frontend/assets/volume-x-CqaDmcOs.js +6 -0
- langflow/frontend/assets/vote-Cfn06NT1.js +6 -0
- langflow/frontend/assets/wallet-DSdVEiqg.js +6 -0
- langflow/frontend/assets/wallet-cards-jAgwGOWo.js +6 -0
- langflow/frontend/assets/wallet-minimal-3TRsKOll.js +6 -0
- langflow/frontend/assets/wallpaper-GGLm4WrS.js +6 -0
- langflow/frontend/assets/wand-DgZTSrfQ.js +6 -0
- langflow/frontend/assets/wand-sparkles-H6tX1sCs.js +6 -0
- langflow/frontend/assets/warehouse-BgUhuxP5.js +6 -0
- langflow/frontend/assets/washing-machine-CS_OTJmd.js +6 -0
- langflow/frontend/assets/watch-B6mByeBr.js +6 -0
- langflow/frontend/assets/waves-BQXhi-gq.js +6 -0
- langflow/frontend/assets/waves-ladder-C0UexJSG.js +6 -0
- langflow/frontend/assets/waypoints-B5CB8GeY.js +6 -0
- langflow/frontend/assets/webcam-BkfBJe3H.js +6 -0
- langflow/frontend/assets/webhook-DjpEiRiq.js +6 -0
- langflow/frontend/assets/webhook-off-Do1xSnFf.js +6 -0
- langflow/frontend/assets/weight-BeDqmgI5.js +6 -0
- langflow/frontend/assets/wheat-CMJKptAw.js +6 -0
- langflow/frontend/assets/wheat-off-ML233b_1.js +6 -0
- langflow/frontend/assets/whole-word-OwMOlobi.js +6 -0
- langflow/frontend/assets/wifi-CGTXG3aj.js +6 -0
- langflow/frontend/assets/wifi-high-CNqVMeHc.js +6 -0
- langflow/frontend/assets/wifi-low-CDbC2Ejf.js +6 -0
- langflow/frontend/assets/wifi-off-ImMngQfV.js +6 -0
- langflow/frontend/assets/wifi-pen-CL8gzHjN.js +6 -0
- langflow/frontend/assets/wifi-zero-B0W-F8K6.js +6 -0
- langflow/frontend/assets/wind-C4PqW-zW.js +6 -0
- langflow/frontend/assets/wind-arrow-down-CvEtrUnC.js +6 -0
- langflow/frontend/assets/wine-B7VEAVgt.js +6 -0
- langflow/frontend/assets/wine-off-fk2gnCkB.js +6 -0
- langflow/frontend/assets/workflow-DLPIYsBq.js +6 -0
- langflow/frontend/assets/worm-CTXkdaVR.js +6 -0
- langflow/frontend/assets/wrap-text-Dne_wzgU.js +6 -0
- langflow/frontend/assets/wrench-Cq_Puwyi.js +6 -0
- langflow/frontend/assets/youtube-DS26oR2K.js +6 -0
- langflow/frontend/assets/zap-Cm8afIig.js +6 -0
- langflow/frontend/assets/zap-off-BwHG4Yed.js +6 -0
- langflow/frontend/assets/zoom-in-DIa-IkQ2.js +6 -0
- langflow/frontend/assets/zoom-out-v-bDwamo.js +6 -0
- langflow/frontend/index.html +2 -2
- langflow/initial_setup/starter_projects/Basic Prompt Chaining.json +1 -1
- langflow/initial_setup/starter_projects/Basic Prompting.json +1 -1
- langflow/initial_setup/starter_projects/Blog Writer.json +1 -1
- langflow/initial_setup/starter_projects/Custom Component Generator.json +1 -1
- langflow/initial_setup/starter_projects/Document Q&A.json +13 -5
- langflow/initial_setup/starter_projects/Financial Report Parser.json +1 -1
- langflow/initial_setup/starter_projects/Hybrid Search RAG.json +2 -2
- langflow/initial_setup/starter_projects/Image Sentiment Analysis.json +1 -1
- langflow/initial_setup/starter_projects/Instagram Copywriter.json +2 -2
- langflow/initial_setup/starter_projects/Invoice Summarizer.json +2 -2
- langflow/initial_setup/starter_projects/Knowledge Ingestion.json +1 -1
- langflow/initial_setup/starter_projects/Knowledge Retrieval.json +2 -2
- langflow/initial_setup/starter_projects/Market Research.json +2 -2
- langflow/initial_setup/starter_projects/Meeting Summary.json +3 -3
- langflow/initial_setup/starter_projects/Memory Chatbot.json +1 -1
- langflow/initial_setup/starter_projects/News Aggregator.json +4 -4
- langflow/initial_setup/starter_projects/Nvidia Remix.json +30 -9
- langflow/initial_setup/starter_projects/Pok/303/251dex Agent.json" +2 -2
- langflow/initial_setup/starter_projects/Portfolio Website Code Generator.json +13 -5
- langflow/initial_setup/starter_projects/Price Deal Finder.json +2 -2
- langflow/initial_setup/starter_projects/Research Agent.json +2 -2
- langflow/initial_setup/starter_projects/Research Translation Loop.json +1 -1
- langflow/initial_setup/starter_projects/SEO Keyword Generator.json +1 -1
- langflow/initial_setup/starter_projects/SaaS Pricing.json +2 -2
- langflow/initial_setup/starter_projects/Search agent.json +3 -3
- langflow/initial_setup/starter_projects/Sequential Tasks Agents.json +5 -5
- langflow/initial_setup/starter_projects/Simple Agent.json +2 -2
- langflow/initial_setup/starter_projects/Social Media Agent.json +4 -4
- langflow/initial_setup/starter_projects/Text Sentiment Analysis.json +14 -6
- langflow/initial_setup/starter_projects/Travel Planning Agents.json +4 -4
- langflow/initial_setup/starter_projects/Twitter Thread Generator.json +1 -1
- langflow/initial_setup/starter_projects/Vector Store RAG.json +15 -7
- langflow/initial_setup/starter_projects/Youtube Analysis.json +3 -3
- langflow/main.py +6 -0
- langflow/processing/process.py +7 -3
- langflow_base_nightly-1.7.0.dev29.dist-info/METADATA +99 -0
- langflow_base_nightly-1.7.0.dev29.dist-info/RECORD +2278 -0
- langflow/frontend/assets/SlackIcon-CEF_Lfgx.js +0 -1
- langflow/frontend/assets/Wikipedia-l89g58MW.js +0 -1
- langflow/frontend/assets/Wolfram-B0u7kBCd.js +0 -1
- langflow/frontend/assets/a-arrow-down-C1MR1UMk.js +0 -6
- langflow/frontend/assets/a-arrow-up-CMZerhaE.js +0 -6
- langflow/frontend/assets/a-large-small-Bv7wOVZp.js +0 -6
- langflow/frontend/assets/accessibility-BrEGjJ3h.js +0 -6
- langflow/frontend/assets/activity-D-a4MWi-.js +0 -6
- langflow/frontend/assets/air-vent-myzlVebI.js +0 -6
- langflow/frontend/assets/airplay-DyNG71LB.js +0 -6
- langflow/frontend/assets/alarm-clock-DH1LaNKu.js +0 -6
- langflow/frontend/assets/alarm-clock-check-C7zLrHCl.js +0 -6
- langflow/frontend/assets/alarm-clock-minus-B9sLdpi9.js +0 -6
- langflow/frontend/assets/alarm-clock-off-COlkkF3b.js +0 -6
- langflow/frontend/assets/alarm-clock-plus-DxfQCpS0.js +0 -6
- langflow/frontend/assets/alarm-smoke-DOKB4jdQ.js +0 -6
- langflow/frontend/assets/album-CbhFkW2K.js +0 -6
- langflow/frontend/assets/align-center-D4bRdbdX.js +0 -6
- langflow/frontend/assets/align-center-horizontal-DRKr69Bu.js +0 -6
- langflow/frontend/assets/align-center-vertical-B7CTn1nz.js +0 -6
- langflow/frontend/assets/align-end-horizontal-CgCdy2MI.js +0 -6
- langflow/frontend/assets/align-end-vertical-DnzR3Jh8.js +0 -6
- langflow/frontend/assets/align-horizontal-distribute-center-DcI8WEBg.js +0 -6
- langflow/frontend/assets/align-horizontal-distribute-end-ocyg2Ism.js +0 -6
- langflow/frontend/assets/align-horizontal-distribute-start-0cj83d0Q.js +0 -6
- langflow/frontend/assets/align-horizontal-justify-center-ELZCJfLJ.js +0 -6
- langflow/frontend/assets/align-horizontal-justify-end-CAvLzWix.js +0 -6
- langflow/frontend/assets/align-horizontal-justify-start-THFMmtW8.js +0 -6
- langflow/frontend/assets/align-horizontal-space-around-DM87J1lM.js +0 -6
- langflow/frontend/assets/align-horizontal-space-between-CWBgfaSR.js +0 -6
- langflow/frontend/assets/align-justify-BZr4mv6M.js +0 -6
- langflow/frontend/assets/align-left-DDKaY-tD.js +0 -6
- langflow/frontend/assets/align-right-UFsrS9ty.js +0 -6
- langflow/frontend/assets/align-start-horizontal-CDMo5O5J.js +0 -6
- langflow/frontend/assets/align-start-vertical-mfpy9Ha8.js +0 -6
- langflow/frontend/assets/align-vertical-distribute-center-D35O90hK.js +0 -6
- langflow/frontend/assets/align-vertical-distribute-end-BOhCSYqd.js +0 -6
- langflow/frontend/assets/align-vertical-distribute-start-CRtaDGO3.js +0 -6
- langflow/frontend/assets/align-vertical-justify-center-BEDLBLzr.js +0 -6
- langflow/frontend/assets/align-vertical-justify-end-CpmZIv_b.js +0 -6
- langflow/frontend/assets/align-vertical-justify-start-BaQPjHDD.js +0 -6
- langflow/frontend/assets/align-vertical-space-around-DN8HaVwe.js +0 -6
- langflow/frontend/assets/align-vertical-space-between-CtfMVSNs.js +0 -6
- langflow/frontend/assets/ambulance-EysJPjDH.js +0 -6
- langflow/frontend/assets/ampersand-De5P08QL.js +0 -6
- langflow/frontend/assets/ampersands-BFEb_UYl.js +0 -6
- langflow/frontend/assets/amphora-CeQeqX39.js +0 -6
- langflow/frontend/assets/anchor-Bmj6G_T-.js +0 -6
- langflow/frontend/assets/angry-BJ4OZ8cf.js +0 -6
- langflow/frontend/assets/annoyed-CnuYiPsR.js +0 -6
- langflow/frontend/assets/antenna-BF54KX6Q.js +0 -6
- langflow/frontend/assets/anvil-BDp882_x.js +0 -6
- langflow/frontend/assets/aperture-C-RXeV-R.js +0 -6
- langflow/frontend/assets/app-window-CnWdW7Z8.js +0 -6
- langflow/frontend/assets/app-window-mac-BWkyg2Dt.js +0 -6
- langflow/frontend/assets/apple-Cy1_Ygqa.js +0 -6
- langflow/frontend/assets/archive-DQM1ljrp.js +0 -6
- langflow/frontend/assets/archive-restore-CR7ZCkrs.js +0 -6
- langflow/frontend/assets/archive-x-Cah6BUmC.js +0 -6
- langflow/frontend/assets/armchair-CI__vHrc.js +0 -6
- langflow/frontend/assets/arrow-big-down-dash-Cexbrdd1.js +0 -6
- langflow/frontend/assets/arrow-big-down-es-qZLrf.js +0 -6
- langflow/frontend/assets/arrow-big-left-BNfP62tw.js +0 -6
- langflow/frontend/assets/arrow-big-left-dash-CDo880bt.js +0 -6
- langflow/frontend/assets/arrow-big-right-Cw4xK1An.js +0 -6
- langflow/frontend/assets/arrow-big-right-dash-Bv-LrLEi.js +0 -6
- langflow/frontend/assets/arrow-big-up-1D3Ok-B4.js +0 -6
- langflow/frontend/assets/arrow-big-up-dash-DkwHTfuU.js +0 -6
- langflow/frontend/assets/arrow-down-0-1-sOAZahEa.js +0 -6
- langflow/frontend/assets/arrow-down-1-0-jFkfLsFL.js +0 -6
- langflow/frontend/assets/arrow-down-DiLgk_Lv.js +0 -6
- langflow/frontend/assets/arrow-down-a-z-yfXUaZlY.js +0 -6
- langflow/frontend/assets/arrow-down-from-line-JwLxfDLL.js +0 -6
- langflow/frontend/assets/arrow-down-left-9rqXt219.js +0 -6
- langflow/frontend/assets/arrow-down-narrow-wide-DNQQfWSk.js +0 -6
- langflow/frontend/assets/arrow-down-right-C04MAksZ.js +0 -6
- langflow/frontend/assets/arrow-down-to-dot-BIQNg3lP.js +0 -6
- langflow/frontend/assets/arrow-down-to-line-AiuzCgPl.js +0 -6
- langflow/frontend/assets/arrow-down-up-BUl4CwHw.js +0 -6
- langflow/frontend/assets/arrow-down-wide-narrow-BEWv2A3j.js +0 -6
- langflow/frontend/assets/arrow-down-z-a-C-my0MFx.js +0 -6
- langflow/frontend/assets/arrow-left-DraCa3qF.js +0 -6
- langflow/frontend/assets/arrow-left-from-line-Cf8elz8N.js +0 -6
- langflow/frontend/assets/arrow-left-right-DnMFkXhG.js +0 -6
- langflow/frontend/assets/arrow-left-to-line-DqC6UI7j.js +0 -6
- langflow/frontend/assets/arrow-right-DjiPPpgB.js +0 -6
- langflow/frontend/assets/arrow-right-from-line-Dc9a1Fow.js +0 -6
- langflow/frontend/assets/arrow-right-left-DX4SFlaz.js +0 -6
- langflow/frontend/assets/arrow-right-to-line-QDmBsM4R.js +0 -6
- langflow/frontend/assets/arrow-up-0-1-B6al2yLS.js +0 -6
- langflow/frontend/assets/arrow-up-1-0-C6aJcw3B.js +0 -6
- langflow/frontend/assets/arrow-up-CjPYprhI.js +0 -6
- langflow/frontend/assets/arrow-up-a-z-BE7k_Es_.js +0 -6
- langflow/frontend/assets/arrow-up-down-nqmOlLPp.js +0 -6
- langflow/frontend/assets/arrow-up-from-dot-C3rxzunA.js +0 -6
- langflow/frontend/assets/arrow-up-from-line-KUrGFQEP.js +0 -6
- langflow/frontend/assets/arrow-up-left-DfnfqUsI.js +0 -6
- langflow/frontend/assets/arrow-up-narrow-wide-BxqaRTna.js +0 -6
- langflow/frontend/assets/arrow-up-right-XuwyPu6F.js +0 -6
- langflow/frontend/assets/arrow-up-to-line-ClQGsei8.js +0 -6
- langflow/frontend/assets/arrow-up-wide-narrow-Df4gI9kX.js +0 -6
- langflow/frontend/assets/arrow-up-z-a-BCD-rCLh.js +0 -6
- langflow/frontend/assets/arrows-up-from-line-BEVbeabp.js +0 -6
- langflow/frontend/assets/asterisk-DbNqMHXe.js +0 -6
- langflow/frontend/assets/at-sign-D6oIhdLE.js +0 -6
- langflow/frontend/assets/atom-BwKR6eUj.js +0 -6
- langflow/frontend/assets/audio-lines-DuaD6im4.js +0 -6
- langflow/frontend/assets/audio-waveform-BhXwvbto.js +0 -6
- langflow/frontend/assets/award-5kfq8rkw.js +0 -6
- langflow/frontend/assets/axe-BOOglolb.js +0 -6
- langflow/frontend/assets/axis-3d-DOFH7kHD.js +0 -6
- langflow/frontend/assets/baby-BEYKunXX.js +0 -6
- langflow/frontend/assets/backpack-_Qlx18_V.js +0 -6
- langflow/frontend/assets/badge-BOuSs5_H.js +0 -6
- langflow/frontend/assets/badge-alert-CckKfyfr.js +0 -6
- langflow/frontend/assets/badge-cent-BCVyiQHU.js +0 -6
- langflow/frontend/assets/badge-check-evlQm0SD.js +0 -6
- langflow/frontend/assets/badge-dollar-sign-Cs3GeUxH.js +0 -6
- langflow/frontend/assets/badge-euro-Bkq-NiJ5.js +0 -6
- langflow/frontend/assets/badge-help-CZrCA_Ar.js +0 -6
- langflow/frontend/assets/badge-indian-rupee-CGIxUK6a.js +0 -6
- langflow/frontend/assets/badge-info-tIeShHl2.js +0 -6
- langflow/frontend/assets/badge-japanese-yen-DC-UA7pC.js +0 -6
- langflow/frontend/assets/badge-minus-mAxFYDfn.js +0 -6
- langflow/frontend/assets/badge-percent-DInhOlwC.js +0 -6
- langflow/frontend/assets/badge-plus-Drx8vtQY.js +0 -6
- langflow/frontend/assets/badge-pound-sterling-SFaXfQwH.js +0 -6
- langflow/frontend/assets/badge-russian-ruble-Y4OZSJrU.js +0 -6
- langflow/frontend/assets/badge-swiss-franc-5KScJ4ZB.js +0 -6
- langflow/frontend/assets/badge-x-CntBKY-i.js +0 -6
- langflow/frontend/assets/baggage-claim-Bb6waYF4.js +0 -6
- langflow/frontend/assets/ban-Dr4CWBPj.js +0 -6
- langflow/frontend/assets/banana-C4ML2xXp.js +0 -6
- langflow/frontend/assets/bandage-BD0CHios.js +0 -6
- langflow/frontend/assets/banknote-DIcM5_C6.js +0 -6
- langflow/frontend/assets/banknote-arrow-down-v4zeqRIU.js +0 -6
- langflow/frontend/assets/banknote-arrow-up-BykOKE4i.js +0 -6
- langflow/frontend/assets/banknote-x-CpYx8SrC.js +0 -6
- langflow/frontend/assets/barcode-C9KJv53a.js +0 -6
- langflow/frontend/assets/baseline-BUk7-Xi7.js +0 -6
- langflow/frontend/assets/bath-Dg8LjUwx.js +0 -6
- langflow/frontend/assets/battery-CgmqlOl8.js +0 -6
- langflow/frontend/assets/battery-charging-pD-mMKPn.js +0 -6
- langflow/frontend/assets/battery-full-BWR4eBlS.js +0 -6
- langflow/frontend/assets/battery-low-CO0zIMLQ.js +0 -6
- langflow/frontend/assets/battery-medium-BDNKPIlP.js +0 -6
- langflow/frontend/assets/battery-plus-CDftjdMy.js +0 -6
- langflow/frontend/assets/battery-warning-BX8PdyQx.js +0 -6
- langflow/frontend/assets/beaker-DPQTIavx.js +0 -6
- langflow/frontend/assets/bean-Buf4iRsl.js +0 -6
- langflow/frontend/assets/bean-off-BdpjedQD.js +0 -6
- langflow/frontend/assets/bed-DbluJBcJ.js +0 -6
- langflow/frontend/assets/bed-double-ChlRO7Um.js +0 -6
- langflow/frontend/assets/bed-single-5Vz7P4KL.js +0 -6
- langflow/frontend/assets/beef-DLcY3ztG.js +0 -6
- langflow/frontend/assets/beer-CbZf1CLh.js +0 -6
- langflow/frontend/assets/beer-off-DQt9-Yvf.js +0 -6
- langflow/frontend/assets/bell-Dbx9wwOK.js +0 -6
- langflow/frontend/assets/bell-dot-KP_Rh9L4.js +0 -6
- langflow/frontend/assets/bell-electric-DYZym3Iv.js +0 -6
- langflow/frontend/assets/bell-minus-BZGjCom7.js +0 -6
- langflow/frontend/assets/bell-off-BAvH_HuW.js +0 -6
- langflow/frontend/assets/bell-plus-DPFkXHZc.js +0 -6
- langflow/frontend/assets/bell-ring-DuesEJGI.js +0 -6
- langflow/frontend/assets/between-horizontal-end-BPoYnPxc.js +0 -6
- langflow/frontend/assets/between-horizontal-start-DVqlwINr.js +0 -6
- langflow/frontend/assets/between-vertical-end-CGwEFKvW.js +0 -6
- langflow/frontend/assets/between-vertical-start-CTFQjVNF.js +0 -6
- langflow/frontend/assets/biceps-flexed-B2vA7PZV.js +0 -6
- langflow/frontend/assets/bike-Br2K_Koa.js +0 -6
- langflow/frontend/assets/binary-BHLdLb2-.js +0 -6
- langflow/frontend/assets/binoculars-DuKZH8Zh.js +0 -6
- langflow/frontend/assets/biohazard-B8FjW09n.js +0 -6
- langflow/frontend/assets/bird-itw24Hbj.js +0 -6
- langflow/frontend/assets/bitcoin-DgG8rKcA.js +0 -6
- langflow/frontend/assets/blend-CG2CKs-3.js +0 -6
- langflow/frontend/assets/blinds-BvB5LjVo.js +0 -6
- langflow/frontend/assets/blocks-NmxNFC3J.js +0 -6
- langflow/frontend/assets/bluetooth-CyLo6vyP.js +0 -6
- langflow/frontend/assets/bluetooth-connected-CW0EZSjS.js +0 -6
- langflow/frontend/assets/bluetooth-off-CLA2FgtZ.js +0 -6
- langflow/frontend/assets/bluetooth-searching-D39nzp26.js +0 -6
- langflow/frontend/assets/bold-Mwjfwd6i.js +0 -6
- langflow/frontend/assets/bolt-CCG6giOU.js +0 -6
- langflow/frontend/assets/bomb-CmW9GByV.js +0 -6
- langflow/frontend/assets/bone-B-ftIZZC.js +0 -6
- langflow/frontend/assets/book-C9k3ZOBc.js +0 -6
- langflow/frontend/assets/book-a-JtyovsEF.js +0 -6
- langflow/frontend/assets/book-audio-D4ca-u-T.js +0 -6
- langflow/frontend/assets/book-check-BeS3k1s2.js +0 -6
- langflow/frontend/assets/book-copy-C4XYhOc3.js +0 -6
- langflow/frontend/assets/book-dashed-B4RKCqvz.js +0 -6
- langflow/frontend/assets/book-down-C7cuvnxL.js +0 -6
- langflow/frontend/assets/book-headphones-W0HUkTzm.js +0 -6
- langflow/frontend/assets/book-heart-PLiTcr-b.js +0 -6
- langflow/frontend/assets/book-image-CwGwbb3g.js +0 -6
- langflow/frontend/assets/book-key-7traCCG2.js +0 -6
- langflow/frontend/assets/book-lock-Dlltc43Y.js +0 -6
- langflow/frontend/assets/book-marked-CdTsOLQX.js +0 -6
- langflow/frontend/assets/book-minus-6JqstP_B.js +0 -6
- langflow/frontend/assets/book-open--eSp397E.js +0 -6
- langflow/frontend/assets/book-open-check-Bkp4i0Z6.js +0 -6
- langflow/frontend/assets/book-open-text-BIWmd2fT.js +0 -6
- langflow/frontend/assets/book-plus-CflK6Aqe.js +0 -6
- langflow/frontend/assets/book-text-ByR7Lfzl.js +0 -6
- langflow/frontend/assets/book-type-Bq-Jm1g2.js +0 -6
- langflow/frontend/assets/book-up-2-DZZJTQeK.js +0 -6
- langflow/frontend/assets/book-up-ieUJxufA.js +0 -6
- langflow/frontend/assets/book-user-DJC4YpOj.js +0 -6
- langflow/frontend/assets/book-x-BYw2JmSg.js +0 -6
- langflow/frontend/assets/bookmark-DmgojVBV.js +0 -6
- langflow/frontend/assets/bookmark-check-BWmkNODf.js +0 -6
- langflow/frontend/assets/bookmark-minus-Opo6htKF.js +0 -6
- langflow/frontend/assets/bookmark-plus-Cmq9o8rG.js +0 -6
- langflow/frontend/assets/bookmark-x-Bbo75e-_.js +0 -6
- langflow/frontend/assets/boom-box-BUwW6n9i.js +0 -6
- langflow/frontend/assets/bot-DQCZD09Z.js +0 -6
- langflow/frontend/assets/bot-message-square-Qg8qf_Vo.js +0 -6
- langflow/frontend/assets/bot-off-CWhYg4QH.js +0 -6
- langflow/frontend/assets/bow-arrow-2G8YQj8T.js +0 -6
- langflow/frontend/assets/box-DI6aYfMK.js +0 -6
- langflow/frontend/assets/boxes-BtNp1YLT.js +0 -6
- langflow/frontend/assets/braces-BLcS_5vG.js +0 -6
- langflow/frontend/assets/brackets-Cv8xrRQf.js +0 -6
- langflow/frontend/assets/brain-DgRUprQ7.js +0 -6
- langflow/frontend/assets/brain-circuit-BtOL0kFy.js +0 -6
- langflow/frontend/assets/brain-cog-zXypBGqp.js +0 -6
- langflow/frontend/assets/brick-wall-CFFET0Vi.js +0 -6
- langflow/frontend/assets/brick-wall-fire-ZpPxxgvZ.js +0 -6
- langflow/frontend/assets/briefcase-Bbqle57g.js +0 -6
- langflow/frontend/assets/briefcase-business-EvgZ-pGn.js +0 -6
- langflow/frontend/assets/briefcase-conveyor-belt-B71ya1iU.js +0 -6
- langflow/frontend/assets/briefcase-medical-0jat9rYx.js +0 -6
- langflow/frontend/assets/bring-to-front-Cy8Ad0pA.js +0 -6
- langflow/frontend/assets/brush-5lcMFo2M.js +0 -6
- langflow/frontend/assets/bubbles--ZENXIG2.js +0 -6
- langflow/frontend/assets/bug-DRy9Jp16.js +0 -6
- langflow/frontend/assets/bug-off-BxN14Ao_.js +0 -6
- langflow/frontend/assets/bug-play-Dleid9nE.js +0 -6
- langflow/frontend/assets/building-2-CK8gdrCW.js +0 -6
- langflow/frontend/assets/building-DnAh38ZD.js +0 -6
- langflow/frontend/assets/bus-BDx_jniJ.js +0 -6
- langflow/frontend/assets/bus-front-B8mPAPPF.js +0 -6
- langflow/frontend/assets/cable-D1OmUrR-.js +0 -6
- langflow/frontend/assets/cable-car-tPhitjsJ.js +0 -6
- langflow/frontend/assets/cake-C6nHJ4UH.js +0 -6
- langflow/frontend/assets/cake-slice-BgiXTSq6.js +0 -6
- langflow/frontend/assets/calculator-DinCzLLu.js +0 -6
- langflow/frontend/assets/calendar-1-p13BBdjX.js +0 -6
- langflow/frontend/assets/calendar-B51W3LkW.js +0 -6
- langflow/frontend/assets/calendar-arrow-down-D4GLmFd6.js +0 -6
- langflow/frontend/assets/calendar-arrow-up-RlAgBFVb.js +0 -6
- langflow/frontend/assets/calendar-check-2-OzKJ28SZ.js +0 -6
- langflow/frontend/assets/calendar-check-DBkCCqIF.js +0 -6
- langflow/frontend/assets/calendar-clock-CPmhjPfI.js +0 -6
- langflow/frontend/assets/calendar-cog-DNf29O6g.js +0 -6
- langflow/frontend/assets/calendar-days-DM_qi8g0.js +0 -6
- langflow/frontend/assets/calendar-fold-DSBrdaqJ.js +0 -6
- langflow/frontend/assets/calendar-heart-CAtCjdjQ.js +0 -6
- langflow/frontend/assets/calendar-minus-2-hox-wOZr.js +0 -6
- langflow/frontend/assets/calendar-minus-DbKbHYOA.js +0 -6
- langflow/frontend/assets/calendar-off-DlYG3mA6.js +0 -6
- langflow/frontend/assets/calendar-plus-2-Ch9-ovuL.js +0 -6
- langflow/frontend/assets/calendar-plus-BN4Db129.js +0 -6
- langflow/frontend/assets/calendar-range-CJ4VugmU.js +0 -6
- langflow/frontend/assets/calendar-search-DHIkS4iK.js +0 -6
- langflow/frontend/assets/calendar-sync-CbzQX2UF.js +0 -6
- langflow/frontend/assets/calendar-x-2-BNmHDi_X.js +0 -6
- langflow/frontend/assets/calendar-x-LrNbzdAM.js +0 -6
- langflow/frontend/assets/camera-BseIeAZa.js +0 -6
- langflow/frontend/assets/camera-off-0d9MQnAK.js +0 -6
- langflow/frontend/assets/candy-DBuvO51G.js +0 -6
- langflow/frontend/assets/candy-cane-BhKAIRPp.js +0 -6
- langflow/frontend/assets/candy-off-xFO9zAdm.js +0 -6
- langflow/frontend/assets/cannabis-CECNWfs7.js +0 -6
- langflow/frontend/assets/captions-CZdZrpN9.js +0 -6
- langflow/frontend/assets/captions-off-ehI1itMu.js +0 -6
- langflow/frontend/assets/car-D0xYW2KF.js +0 -6
- langflow/frontend/assets/car-front-rr7hWrV5.js +0 -6
- langflow/frontend/assets/car-taxi-front-CQDj7ceR.js +0 -6
- langflow/frontend/assets/caravan-BI0wWOjB.js +0 -6
- langflow/frontend/assets/carrot-NTCSh6Bi.js +0 -6
- langflow/frontend/assets/case-lower-C0v-UmoB.js +0 -6
- langflow/frontend/assets/case-sensitive-CEBMjxQ0.js +0 -6
- langflow/frontend/assets/case-upper-qnPCGODe.js +0 -6
- langflow/frontend/assets/cassette-tape-o1NC2smT.js +0 -6
- langflow/frontend/assets/cast-DoGbtlSh.js +0 -6
- langflow/frontend/assets/castle-CDLhRCwv.js +0 -6
- langflow/frontend/assets/cat-ZE7MBg12.js +0 -6
- langflow/frontend/assets/cctv-BzSWabyA.js +0 -6
- langflow/frontend/assets/chart-area-BAWqnveI.js +0 -6
- langflow/frontend/assets/chart-bar-DQQ3LQU3.js +0 -6
- langflow/frontend/assets/chart-bar-big-D7MR2ePA.js +0 -6
- langflow/frontend/assets/chart-bar-decreasing-Vr_wGqvM.js +0 -6
- langflow/frontend/assets/chart-bar-increasing-DgEFeop5.js +0 -6
- langflow/frontend/assets/chart-bar-stacked-DnRijZKC.js +0 -6
- langflow/frontend/assets/chart-candlestick-DxGYDF5k.js +0 -6
- langflow/frontend/assets/chart-column-Et99item.js +0 -6
- langflow/frontend/assets/chart-column-big-yyRSq6kX.js +0 -6
- langflow/frontend/assets/chart-column-decreasing-CVvjizfE.js +0 -6
- langflow/frontend/assets/chart-column-increasing-CfeF2c-6.js +0 -6
- langflow/frontend/assets/chart-column-stacked-CF9zvWY4.js +0 -6
- langflow/frontend/assets/chart-gantt-BouGwyFq.js +0 -6
- langflow/frontend/assets/chart-line-Dk3EdrPb.js +0 -6
- langflow/frontend/assets/chart-network-CN4xGFXA.js +0 -6
- langflow/frontend/assets/chart-no-axes-column-BcQyHdMD.js +0 -6
- langflow/frontend/assets/chart-no-axes-column-decreasing-BgUclvV3.js +0 -6
- langflow/frontend/assets/chart-no-axes-column-increasing-DNTPc9wN.js +0 -6
- langflow/frontend/assets/chart-no-axes-combined-DF25ksrL.js +0 -6
- langflow/frontend/assets/chart-no-axes-gantt-BaC_vlS6.js +0 -6
- langflow/frontend/assets/chart-pie-B95LBWmZ.js +0 -6
- langflow/frontend/assets/chart-scatter-D8SFnMu1.js +0 -6
- langflow/frontend/assets/chart-spline-ClrgbOlE.js +0 -6
- langflow/frontend/assets/check-check-BXqbwrkO.js +0 -6
- langflow/frontend/assets/chef-hat-BjGOghzL.js +0 -6
- langflow/frontend/assets/cherry-CJB4mtL5.js +0 -6
- langflow/frontend/assets/chevron-first-2oTPGrLc.js +0 -6
- langflow/frontend/assets/chevron-last-3pCmFTmU.js +0 -6
- langflow/frontend/assets/chevron-left-ClDOQQjV.js +0 -6
- langflow/frontend/assets/chevron-right-C711qfbS.js +0 -6
- langflow/frontend/assets/chevrons-down-QCuIa8Yp.js +0 -6
- langflow/frontend/assets/chevrons-down-up-J6xSXJkb.js +0 -6
- langflow/frontend/assets/chevrons-left-NITQoGwJ.js +0 -6
- langflow/frontend/assets/chevrons-left-right-CYcrBR6M.js +0 -6
- langflow/frontend/assets/chevrons-left-right-ellipsis-Br8VMnkg.js +0 -6
- langflow/frontend/assets/chevrons-right-Cs2_g8bG.js +0 -6
- langflow/frontend/assets/chevrons-right-left-DtGiQ_O0.js +0 -6
- langflow/frontend/assets/chevrons-up-BMLMeGVh.js +0 -6
- langflow/frontend/assets/chrome-nvIjs2xZ.js +0 -6
- langflow/frontend/assets/church-Qq4UHf_z.js +0 -6
- langflow/frontend/assets/cigarette-CXfG_56T.js +0 -6
- langflow/frontend/assets/cigarette-off-CdYeRZyX.js +0 -6
- langflow/frontend/assets/circle-alert-DT5NKy9u.js +0 -6
- langflow/frontend/assets/circle-arrow-down-B2qM-Tuw.js +0 -6
- langflow/frontend/assets/circle-arrow-left-CBLpt9nA.js +0 -6
- langflow/frontend/assets/circle-arrow-out-down-left-gA68XlUY.js +0 -6
- langflow/frontend/assets/circle-arrow-out-down-right-HKXxeeQC.js +0 -6
- langflow/frontend/assets/circle-arrow-out-up-left-Cq1LyJKa.js +0 -6
- langflow/frontend/assets/circle-arrow-out-up-right-BUvVbJA7.js +0 -6
- langflow/frontend/assets/circle-arrow-right-D7t8P6ad.js +0 -6
- langflow/frontend/assets/circle-arrow-up-MHzCg4I0.js +0 -6
- langflow/frontend/assets/circle-check-B91Zb0zk.js +0 -6
- langflow/frontend/assets/circle-check-big-BVKtiAhQ.js +0 -6
- langflow/frontend/assets/circle-chevron-down-DNh3bpzK.js +0 -6
- langflow/frontend/assets/circle-chevron-left-BJb7vji3.js +0 -6
- langflow/frontend/assets/circle-chevron-right-CHmsilV-.js +0 -6
- langflow/frontend/assets/circle-chevron-up-Bj9nIZx9.js +0 -6
- langflow/frontend/assets/circle-dashed-DzEIY_5d.js +0 -6
- langflow/frontend/assets/circle-divide-BuJbzWip.js +0 -6
- langflow/frontend/assets/circle-dollar-sign-DdF9J_EI.js +0 -6
- langflow/frontend/assets/circle-dot-DitPRly6.js +0 -6
- langflow/frontend/assets/circle-dot-dashed-OHoDDXoS.js +0 -6
- langflow/frontend/assets/circle-ellipsis-Co5wf0tj.js +0 -6
- langflow/frontend/assets/circle-equal-qGSgRMn6.js +0 -6
- langflow/frontend/assets/circle-fading-arrow-up-DSM4N2tt.js +0 -6
- langflow/frontend/assets/circle-fading-plus-CTQq46rS.js +0 -6
- langflow/frontend/assets/circle-gauge-CisUMCG0.js +0 -6
- langflow/frontend/assets/circle-help-BF5hRBkX.js +0 -6
- langflow/frontend/assets/circle-minus-C3fjtT26.js +0 -6
- langflow/frontend/assets/circle-off-_zmE8lRn.js +0 -6
- langflow/frontend/assets/circle-parking-BLDdyc9C.js +0 -6
- langflow/frontend/assets/circle-parking-off-CxEO8auk.js +0 -6
- langflow/frontend/assets/circle-pause-CsP1hqTY.js +0 -6
- langflow/frontend/assets/circle-percent-CppecgnG.js +0 -6
- langflow/frontend/assets/circle-play-CElAyvGy.js +0 -6
- langflow/frontend/assets/circle-plus-DxOSr_qE.js +0 -6
- langflow/frontend/assets/circle-power-CX9PhDfK.js +0 -6
- langflow/frontend/assets/circle-slash-2--Mme5qmH.js +0 -6
- langflow/frontend/assets/circle-slash-BsqGhDcj.js +0 -6
- langflow/frontend/assets/circle-small-DQ5WLdC1.js +0 -6
- langflow/frontend/assets/circle-stop-5W_dFAx7.js +0 -6
- langflow/frontend/assets/circle-user-cdgPpsDB.js +0 -6
- langflow/frontend/assets/circle-user-round-DpFUTXdt.js +0 -6
- langflow/frontend/assets/circuit-board-Bzpo8k7-.js +0 -6
- langflow/frontend/assets/citrus-BD7KeVpe.js +0 -6
- langflow/frontend/assets/clapperboard-DJq3crx6.js +0 -6
- langflow/frontend/assets/clipboard-check-CzW6HoZg.js +0 -6
- langflow/frontend/assets/clipboard-copy-CuDmr3UP.js +0 -6
- langflow/frontend/assets/clipboard-list-blWwAWhj.js +0 -6
- langflow/frontend/assets/clipboard-minus-MDDcL-JV.js +0 -6
- langflow/frontend/assets/clipboard-paste-BALmGJWd.js +0 -6
- langflow/frontend/assets/clipboard-pen-CKtqpJ-f.js +0 -6
- langflow/frontend/assets/clipboard-pen-line-B8g42LUo.js +0 -6
- langflow/frontend/assets/clipboard-plus-DdcrgHOb.js +0 -6
- langflow/frontend/assets/clipboard-sn1jUIDV.js +0 -6
- langflow/frontend/assets/clipboard-type-DNViKiGe.js +0 -6
- langflow/frontend/assets/clipboard-x-BL6o1EDk.js +0 -6
- langflow/frontend/assets/clock-1-D_Xsorkr.js +0 -6
- langflow/frontend/assets/clock-10-C5lfthCJ.js +0 -6
- langflow/frontend/assets/clock-11-CrzatXPC.js +0 -6
- langflow/frontend/assets/clock-12-CB-3YTlR.js +0 -6
- langflow/frontend/assets/clock-2-CAjJbwpA.js +0 -6
- langflow/frontend/assets/clock-3-BkqbnGC2.js +0 -6
- langflow/frontend/assets/clock-4-B1iR-wjF.js +0 -6
- langflow/frontend/assets/clock-5-hqy_7zzP.js +0 -6
- langflow/frontend/assets/clock-6-COiBqCUV.js +0 -6
- langflow/frontend/assets/clock-7-D8H9-5o2.js +0 -6
- langflow/frontend/assets/clock-8-DmFZf8EJ.js +0 -6
- langflow/frontend/assets/clock-9-5vuBxoOH.js +0 -6
- langflow/frontend/assets/clock-CvX75A0g.js +0 -6
- langflow/frontend/assets/clock-alert-B4zpxMYp.js +0 -6
- langflow/frontend/assets/clock-arrow-down-Cp38KxCZ.js +0 -6
- langflow/frontend/assets/clock-arrow-up-Cu2Eqxj_.js +0 -6
- langflow/frontend/assets/clock-fading-DBqbXrNN.js +0 -6
- langflow/frontend/assets/cloud-alert-C8axZqAX.js +0 -6
- langflow/frontend/assets/cloud-cog-DH4WJaQY.js +0 -6
- langflow/frontend/assets/cloud-download-aSd93OOq.js +0 -6
- langflow/frontend/assets/cloud-drizzle-BoOXY0Vf.js +0 -6
- langflow/frontend/assets/cloud-ePqAv-Nj.js +0 -6
- langflow/frontend/assets/cloud-fog-DgOBgtbG.js +0 -6
- langflow/frontend/assets/cloud-hail-EUTfUsOC.js +0 -6
- langflow/frontend/assets/cloud-lightning-Bq38iQ8R.js +0 -6
- langflow/frontend/assets/cloud-moon-CEZa2582.js +0 -6
- langflow/frontend/assets/cloud-moon-rain-ViKAyE90.js +0 -6
- langflow/frontend/assets/cloud-off-BeDtlaCJ.js +0 -6
- langflow/frontend/assets/cloud-rain-BGFNQif7.js +0 -6
- langflow/frontend/assets/cloud-rain-wind-BJr3MNMX.js +0 -6
- langflow/frontend/assets/cloud-snow-B_NNumLp.js +0 -6
- langflow/frontend/assets/cloud-sun-CSeibAw_.js +0 -6
- langflow/frontend/assets/cloud-sun-rain-CmhhxE4C.js +0 -6
- langflow/frontend/assets/cloud-upload-DGtwHF2g.js +0 -6
- langflow/frontend/assets/cloudy-CZkWi5KD.js +0 -6
- langflow/frontend/assets/clover-DHTKeS-5.js +0 -6
- langflow/frontend/assets/club-BpMaUsgO.js +0 -6
- langflow/frontend/assets/code-xml-CAUmexA-.js +0 -6
- langflow/frontend/assets/codepen-ikBrTpKJ.js +0 -6
- langflow/frontend/assets/codesandbox-C08d09l6.js +0 -6
- langflow/frontend/assets/coffee-CvposdVX.js +0 -6
- langflow/frontend/assets/cog-C64LYrMn.js +0 -6
- langflow/frontend/assets/coins-UEx29OeF.js +0 -6
- langflow/frontend/assets/columns-2-Bsdbp-EE.js +0 -6
- langflow/frontend/assets/columns-3-DXwsg-oz.js +0 -6
- langflow/frontend/assets/columns-3-cog-DtVF6mVc.js +0 -6
- langflow/frontend/assets/columns-4-BRbvUIE-.js +0 -6
- langflow/frontend/assets/combine-BgQxFGO5.js +0 -6
- langflow/frontend/assets/command-B9cAeenh.js +0 -6
- langflow/frontend/assets/compass-pMFWbZJw.js +0 -6
- langflow/frontend/assets/component-BgLZWmP7.js +0 -6
- langflow/frontend/assets/computer-BXGdV9Gt.js +0 -6
- langflow/frontend/assets/concierge-bell-CbQqTx0G.js +0 -6
- langflow/frontend/assets/cone-CZ631cjP.js +0 -6
- langflow/frontend/assets/construction-DpDSFi2C.js +0 -6
- langflow/frontend/assets/contact-Bf_js1wR.js +0 -6
- langflow/frontend/assets/contact-round-CbjK6rc4.js +0 -6
- langflow/frontend/assets/container-SHkUJELq.js +0 -6
- langflow/frontend/assets/contrast-BrqH_HsS.js +0 -6
- langflow/frontend/assets/cookie-7yhFStaP.js +0 -6
- langflow/frontend/assets/cooking-pot-CtXq_mXS.js +0 -6
- langflow/frontend/assets/copy-D33RCBtr.js +0 -6
- langflow/frontend/assets/copy-check-BHsM9R9p.js +0 -6
- langflow/frontend/assets/copy-minus-DzHvDhtg.js +0 -6
- langflow/frontend/assets/copy-plus-D9aWk5ZC.js +0 -6
- langflow/frontend/assets/copy-slash-VkGSZ_CE.js +0 -6
- langflow/frontend/assets/copy-x-C4i424Hw.js +0 -6
- langflow/frontend/assets/copyleft-CqaewALy.js +0 -6
- langflow/frontend/assets/copyright-Bu0x5oIe.js +0 -6
- langflow/frontend/assets/corner-down-left-D6PAN-4K.js +0 -6
- langflow/frontend/assets/corner-down-right-Bn8MOthV.js +0 -6
- langflow/frontend/assets/corner-left-down-D5RxfmoN.js +0 -6
- langflow/frontend/assets/corner-left-up-C8TixmVG.js +0 -6
- langflow/frontend/assets/corner-right-down-CtmEwD6C.js +0 -6
- langflow/frontend/assets/corner-right-up-DG-F1pH2.js +0 -6
- langflow/frontend/assets/corner-up-left-QznD74yA.js +0 -6
- langflow/frontend/assets/corner-up-right-Bhkr_6ta.js +0 -6
- langflow/frontend/assets/cpu-CW82VU4w.js +0 -6
- langflow/frontend/assets/creative-commons-Bh5sqgki.js +0 -6
- langflow/frontend/assets/credit-card-1pfgVrv3.js +0 -6
- langflow/frontend/assets/croissant-DpBBx0pw.js +0 -6
- langflow/frontend/assets/crop-X7W6m64J.js +0 -6
- langflow/frontend/assets/cross-D542UVw8.js +0 -6
- langflow/frontend/assets/crosshair-B6mNFuS-.js +0 -6
- langflow/frontend/assets/crown-D6_nEBly.js +0 -6
- langflow/frontend/assets/cuboid-CyvwAGks.js +0 -6
- langflow/frontend/assets/cup-soda-lE90KQWF.js +0 -6
- langflow/frontend/assets/currency-CvqLSG-s.js +0 -6
- langflow/frontend/assets/cylinder-Dan7kvg6.js +0 -6
- langflow/frontend/assets/dam-BpbkiwPc.js +0 -6
- langflow/frontend/assets/database-CZ11Soos.js +0 -6
- langflow/frontend/assets/database-backup-ueaXvg29.js +0 -6
- langflow/frontend/assets/database-zap-CLyrj98z.js +0 -6
- langflow/frontend/assets/decimals-arrow-left-C4FshaZA.js +0 -6
- langflow/frontend/assets/decimals-arrow-right-BYKeQJvg.js +0 -6
- langflow/frontend/assets/delete-DGp28GjS.js +0 -6
- langflow/frontend/assets/dessert-vafoRC_I.js +0 -6
- langflow/frontend/assets/diameter-CpWKi4bQ.js +0 -6
- langflow/frontend/assets/diamond-D4sYlxiq.js +0 -6
- langflow/frontend/assets/diamond-minus-Dc9_xvul.js +0 -6
- langflow/frontend/assets/diamond-percent-Bls-21yM.js +0 -6
- langflow/frontend/assets/diamond-plus-DUfp2PhN.js +0 -6
- langflow/frontend/assets/dice-1-B5g_tzYc.js +0 -6
- langflow/frontend/assets/dice-2-DbCHSxL8.js +0 -6
- langflow/frontend/assets/dice-3-Bjv-XMP3.js +0 -6
- langflow/frontend/assets/dice-4-ChbYiYkR.js +0 -6
- langflow/frontend/assets/dice-5-CUmwrcU2.js +0 -6
- langflow/frontend/assets/dice-6-2a_DEvNP.js +0 -6
- langflow/frontend/assets/dices-Bfp6xf1T.js +0 -6
- langflow/frontend/assets/diff-DWrr4PgL.js +0 -6
- langflow/frontend/assets/disc-2-BKIHWtvV.js +0 -6
- langflow/frontend/assets/disc-3-C-YNVgLt.js +0 -6
- langflow/frontend/assets/disc-DcpBQ1vZ.js +0 -6
- langflow/frontend/assets/disc-album-BHqF8E8z.js +0 -6
- langflow/frontend/assets/divide-BowweBYy.js +0 -6
- langflow/frontend/assets/dna-CKx2UX_q.js +0 -6
- langflow/frontend/assets/dna-off-6vz4JWoY.js +0 -6
- langflow/frontend/assets/dock-CSWNUNEN.js +0 -6
- langflow/frontend/assets/dog-Brgy9TeF.js +0 -6
- langflow/frontend/assets/dollar-sign-BvVnYnyE.js +0 -6
- langflow/frontend/assets/donut-yE1ohHN1.js +0 -6
- langflow/frontend/assets/door-closed-DbQTZK_Z.js +0 -6
- langflow/frontend/assets/door-open-kU4MiMrV.js +0 -6
- langflow/frontend/assets/dot-BoAAat-a.js +0 -6
- langflow/frontend/assets/download-spnr31G_.js +0 -6
- langflow/frontend/assets/drafting-compass-BVLRoE9p.js +0 -6
- langflow/frontend/assets/drama-DH0VK2y4.js +0 -6
- langflow/frontend/assets/dribbble-BsRD_dOV.js +0 -6
- langflow/frontend/assets/drill-BQ8s8Ovp.js +0 -6
- langflow/frontend/assets/droplet-DgVYu4iw.js +0 -6
- langflow/frontend/assets/droplet-off-CWfFq3Y4.js +0 -6
- langflow/frontend/assets/droplets-BImhG8YB.js +0 -6
- langflow/frontend/assets/drum-CUBUrT-P.js +0 -6
- langflow/frontend/assets/drumstick-BdzvGI3x.js +0 -6
- langflow/frontend/assets/dumbbell-uzNP-XjP.js +0 -6
- langflow/frontend/assets/ear-DG1WWYBD.js +0 -6
- langflow/frontend/assets/ear-off-CnLtouCs.js +0 -6
- langflow/frontend/assets/earth-BLY47zLG.js +0 -6
- langflow/frontend/assets/earth-lock-C_4WyhYm.js +0 -6
- langflow/frontend/assets/eclipse-DotUntyW.js +0 -6
- langflow/frontend/assets/egg-D0p6D8iJ.js +0 -6
- langflow/frontend/assets/egg-fried-D8ZYWDd8.js +0 -6
- langflow/frontend/assets/egg-off-COi0Zq6A.js +0 -6
- langflow/frontend/assets/ellipsis-BqKuKkUq.js +0 -6
- langflow/frontend/assets/ellipsis-vertical-DLAiRoTI.js +0 -6
- langflow/frontend/assets/equal-BPZTCCOR.js +0 -6
- langflow/frontend/assets/equal-approximately-Ci9wlW7H.js +0 -6
- langflow/frontend/assets/equal-not-BbjIRsV9.js +0 -6
- langflow/frontend/assets/eraser-kryVNVEd.js +0 -6
- langflow/frontend/assets/ethernet-port-DY0h8gUB.js +0 -6
- langflow/frontend/assets/euro-CcGvvYEu.js +0 -6
- langflow/frontend/assets/expand-BT1hO_Gd.js +0 -6
- langflow/frontend/assets/eye-0Uepj1qe.js +0 -6
- langflow/frontend/assets/eye-closed-DhVJCZQy.js +0 -6
- langflow/frontend/assets/eye-off-DMZQc0_N.js +0 -6
- langflow/frontend/assets/facebook-BYV_s-7j.js +0 -6
- langflow/frontend/assets/factory-HMK58m9C.js +0 -6
- langflow/frontend/assets/fan-MiojL-un.js +0 -6
- langflow/frontend/assets/fast-forward-CP1NpIFe.js +0 -6
- langflow/frontend/assets/feather-BSp2xn9F.js +0 -6
- langflow/frontend/assets/fence-CBJziCGR.js +0 -6
- langflow/frontend/assets/ferris-wheel-Dc4hXImA.js +0 -6
- langflow/frontend/assets/figma-D1WZZKxq.js +0 -6
- langflow/frontend/assets/file-BJeOmSAw.js +0 -6
- langflow/frontend/assets/file-archive-CYnlcCTN.js +0 -6
- langflow/frontend/assets/file-audio-2-CFgbi0zE.js +0 -6
- langflow/frontend/assets/file-audio-UXcSArn5.js +0 -6
- langflow/frontend/assets/file-axis-3d-BkpPUlaa.js +0 -6
- langflow/frontend/assets/file-badge-2-DxqhO2Ge.js +0 -6
- langflow/frontend/assets/file-badge-R64auIUU.js +0 -6
- langflow/frontend/assets/file-box-BHVs20bG.js +0 -6
- langflow/frontend/assets/file-chart-column-DSBEh916.js +0 -6
- langflow/frontend/assets/file-chart-column-increasing-BLEWUcgJ.js +0 -6
- langflow/frontend/assets/file-chart-line-CkAf2P_o.js +0 -6
- langflow/frontend/assets/file-chart-pie-C6JyaHLt.js +0 -6
- langflow/frontend/assets/file-check-2-Ep64Ldje.js +0 -6
- langflow/frontend/assets/file-check-CfwhdRf-.js +0 -6
- langflow/frontend/assets/file-clock-yuvRB4zR.js +0 -6
- langflow/frontend/assets/file-code-2-DJSRSqgI.js +0 -6
- langflow/frontend/assets/file-code-tTXJt3y7.js +0 -6
- langflow/frontend/assets/file-cog-C3Bke8nN.js +0 -6
- langflow/frontend/assets/file-diff-07-zDqLK.js +0 -6
- langflow/frontend/assets/file-digit-C-TZ6TMx.js +0 -6
- langflow/frontend/assets/file-down-C_21auWB.js +0 -6
- langflow/frontend/assets/file-heart-BUWO_Ubq.js +0 -6
- langflow/frontend/assets/file-image-DeGNhVbH.js +0 -6
- langflow/frontend/assets/file-input-DC648sVv.js +0 -6
- langflow/frontend/assets/file-json-2-BleUm6B-.js +0 -6
- langflow/frontend/assets/file-json-DvYkA26T.js +0 -6
- langflow/frontend/assets/file-key-2-Df3DueKg.js +0 -6
- langflow/frontend/assets/file-key-D25uIzEV.js +0 -6
- langflow/frontend/assets/file-lock-2-CRuvNTc_.js +0 -6
- langflow/frontend/assets/file-lock-CSpPgoDZ.js +0 -6
- langflow/frontend/assets/file-minus-2-DYnr-vtz.js +0 -6
- langflow/frontend/assets/file-minus-CwO2J7XK.js +0 -6
- langflow/frontend/assets/file-music-frXWNJoK.js +0 -6
- langflow/frontend/assets/file-output-BCvl7eUX.js +0 -6
- langflow/frontend/assets/file-pen-CAaJniG8.js +0 -6
- langflow/frontend/assets/file-pen-line-Cgv1i6mY.js +0 -6
- langflow/frontend/assets/file-plus-2-BSvGeJIg.js +0 -6
- langflow/frontend/assets/file-plus-Bh-AJgy4.js +0 -6
- langflow/frontend/assets/file-question-DEVapx4f.js +0 -6
- langflow/frontend/assets/file-scan-t-aTKHOe.js +0 -6
- langflow/frontend/assets/file-search-2-Bh2Lyxdg.js +0 -6
- langflow/frontend/assets/file-search-B2BT1IJF.js +0 -6
- langflow/frontend/assets/file-sliders-BDrWWLnj.js +0 -6
- langflow/frontend/assets/file-spreadsheet-CMHqeLFl.js +0 -6
- langflow/frontend/assets/file-stack-DzWV1JJQ.js +0 -6
- langflow/frontend/assets/file-symlink-m0SuHMbb.js +0 -6
- langflow/frontend/assets/file-terminal-RtBqsz8t.js +0 -6
- langflow/frontend/assets/file-text-DcnfhlJS.js +0 -6
- langflow/frontend/assets/file-type-2-HgN3usQi.js +0 -6
- langflow/frontend/assets/file-type-Wo4mXDEa.js +0 -6
- langflow/frontend/assets/file-up-Ah5Vlblk.js +0 -6
- langflow/frontend/assets/file-user-C10BV3-F.js +0 -6
- langflow/frontend/assets/file-video-2-D60PR2tb.js +0 -6
- langflow/frontend/assets/file-video-D1LP9ceq.js +0 -6
- langflow/frontend/assets/file-volume-2-DWd0pH87.js +0 -6
- langflow/frontend/assets/file-volume-Dx1qqTPj.js +0 -6
- langflow/frontend/assets/file-warning-CntAQ03q.js +0 -6
- langflow/frontend/assets/file-x-2-D7pJdGQ4.js +0 -6
- langflow/frontend/assets/file-x-w3PSwPaN.js +0 -6
- langflow/frontend/assets/files-Ba_FZh9m.js +0 -6
- langflow/frontend/assets/film-CSV5uKAX.js +0 -6
- langflow/frontend/assets/fingerprint-BIoRa0QM.js +0 -6
- langflow/frontend/assets/fire-extinguisher-9pJExz54.js +0 -6
- langflow/frontend/assets/fish-D2IHyGo1.js +0 -6
- langflow/frontend/assets/fish-off-B1AV5M6o.js +0 -6
- langflow/frontend/assets/fish-symbol-1FtOa4Ff.js +0 -6
- langflow/frontend/assets/flag-DeciN7ml.js +0 -6
- langflow/frontend/assets/flag-off-DUP9GpZR.js +0 -6
- langflow/frontend/assets/flag-triangle-left-BFwEeuS_.js +0 -6
- langflow/frontend/assets/flag-triangle-right-CI_SLj86.js +0 -6
- langflow/frontend/assets/flame-GFGSOHNO.js +0 -6
- langflow/frontend/assets/flame-kindling-D8mfrPga.js +0 -6
- langflow/frontend/assets/flashlight-lOh9FijK.js +0 -6
- langflow/frontend/assets/flashlight-off-Bsi5bvDr.js +0 -6
- langflow/frontend/assets/flask-conical-Da2dFJgy.js +0 -6
- langflow/frontend/assets/flask-conical-off-BmBZh8li.js +0 -6
- langflow/frontend/assets/flask-round-DCNbM1Xr.js +0 -6
- langflow/frontend/assets/flip-horizontal-2-DjIxLldP.js +0 -6
- langflow/frontend/assets/flip-horizontal-Y1hdy1M8.js +0 -6
- langflow/frontend/assets/flip-vertical-2-CUzfycnQ.js +0 -6
- langflow/frontend/assets/flip-vertical-D-fZiBdV.js +0 -6
- langflow/frontend/assets/flower-2-DpuYXaI0.js +0 -6
- langflow/frontend/assets/flower-D7VN2vRV.js +0 -6
- langflow/frontend/assets/focus-CgjGqIlO.js +0 -6
- langflow/frontend/assets/fold-horizontal-DHM5GPi5.js +0 -6
- langflow/frontend/assets/fold-vertical-C9gKvqOi.js +0 -6
- langflow/frontend/assets/folder-DHBzBNi6.js +0 -6
- langflow/frontend/assets/folder-archive-Bg0p1BGr.js +0 -6
- langflow/frontend/assets/folder-check-C_J-pqhC.js +0 -6
- langflow/frontend/assets/folder-clock-Bdt0bWYb.js +0 -6
- langflow/frontend/assets/folder-closed-CpG_goS_.js +0 -6
- langflow/frontend/assets/folder-code-BfrcjBiJ.js +0 -6
- langflow/frontend/assets/folder-cog-D0HSZlUk.js +0 -6
- langflow/frontend/assets/folder-dot-Bl6Z8yRd.js +0 -6
- langflow/frontend/assets/folder-down-Cd5yX2hR.js +0 -6
- langflow/frontend/assets/folder-git-2-DW-8izzy.js +0 -6
- langflow/frontend/assets/folder-git-Dl6cI4x0.js +0 -6
- langflow/frontend/assets/folder-heart-BcWNEM_h.js +0 -6
- langflow/frontend/assets/folder-input-D08-f3t3.js +0 -6
- langflow/frontend/assets/folder-kanban-nzQd-lfD.js +0 -6
- langflow/frontend/assets/folder-key-DpznQOiZ.js +0 -6
- langflow/frontend/assets/folder-lock-SUBi7sWw.js +0 -6
- langflow/frontend/assets/folder-minus-DTAhS5kW.js +0 -6
- langflow/frontend/assets/folder-open-P_5T1_df.js +0 -6
- langflow/frontend/assets/folder-open-dot-DLsuij9P.js +0 -6
- langflow/frontend/assets/folder-output-Hoz7C5Sg.js +0 -6
- langflow/frontend/assets/folder-pen-CEFhZuKm.js +0 -6
- langflow/frontend/assets/folder-plus-DYMoWZt-.js +0 -6
- langflow/frontend/assets/folder-root-BTXEc8rM.js +0 -6
- langflow/frontend/assets/folder-search-2-CI2Sxf-y.js +0 -6
- langflow/frontend/assets/folder-search-CF6bJDV6.js +0 -6
- langflow/frontend/assets/folder-symlink-Dc7hVPyd.js +0 -6
- langflow/frontend/assets/folder-sync-BPBUfGnX.js +0 -6
- langflow/frontend/assets/folder-tree-DY4Ftj6k.js +0 -6
- langflow/frontend/assets/folder-up-BE_eC_UH.js +0 -6
- langflow/frontend/assets/folder-x--YzsyTv2.js +0 -6
- langflow/frontend/assets/folders-DBj-mUxf.js +0 -6
- langflow/frontend/assets/footprints-B3LklTMW.js +0 -6
- langflow/frontend/assets/forklift-C5LPpWzy.js +0 -6
- langflow/frontend/assets/forward-C0afMWvu.js +0 -6
- langflow/frontend/assets/frame-CuPcpGgS.js +0 -6
- langflow/frontend/assets/framer-CbCQQsmt.js +0 -6
- langflow/frontend/assets/frown-DxEX23Hm.js +0 -6
- langflow/frontend/assets/fuel-D1xGHjwV.js +0 -6
- langflow/frontend/assets/fullscreen-BIGq91ZI.js +0 -6
- langflow/frontend/assets/funnel-C-NQV0mL.js +0 -6
- langflow/frontend/assets/funnel-plus-D_vUHLvt.js +0 -6
- langflow/frontend/assets/funnel-x-DGu21bT2.js +0 -6
- langflow/frontend/assets/gallery-horizontal-BBiE0_x0.js +0 -6
- langflow/frontend/assets/gallery-horizontal-end-CnMgJ5DS.js +0 -6
- langflow/frontend/assets/gallery-thumbnails-CtOySXe1.js +0 -6
- langflow/frontend/assets/gallery-vertical-CV_I5Zfu.js +0 -6
- langflow/frontend/assets/gallery-vertical-end-4-jdBsGn.js +0 -6
- langflow/frontend/assets/gamepad-2-BvFzOQpx.js +0 -6
- langflow/frontend/assets/gamepad-DJe6Thxy.js +0 -6
- langflow/frontend/assets/gauge-DEzKFfM7.js +0 -6
- langflow/frontend/assets/gavel-CsTDuJw1.js +0 -6
- langflow/frontend/assets/gem-Bypt3rj7.js +0 -6
- langflow/frontend/assets/ghost-CG8V_Wik.js +0 -6
- langflow/frontend/assets/gift-D3Bw3K_w.js +0 -6
- langflow/frontend/assets/git-branch-DQvQg83e.js +0 -6
- langflow/frontend/assets/git-branch-plus-DnKO-rdL.js +0 -6
- langflow/frontend/assets/git-commit-horizontal-BSHVqLrs.js +0 -6
- langflow/frontend/assets/git-commit-vertical-CreWnTSn.js +0 -6
- langflow/frontend/assets/git-compare-B0PwMWpM.js +0 -6
- langflow/frontend/assets/git-compare-arrows-VgtsGNFF.js +0 -6
- langflow/frontend/assets/git-fork-DJZ2qmdu.js +0 -6
- langflow/frontend/assets/git-graph-D8PXH9s_.js +0 -6
- langflow/frontend/assets/git-merge-By9Qd2wm.js +0 -6
- langflow/frontend/assets/git-pull-request-C88DIeQ6.js +0 -6
- langflow/frontend/assets/git-pull-request-arrow-DG1SpKMq.js +0 -6
- langflow/frontend/assets/git-pull-request-closed-T8i53LyB.js +0 -6
- langflow/frontend/assets/git-pull-request-create-Vb2ZcmTQ.js +0 -6
- langflow/frontend/assets/git-pull-request-create-arrow-SiyvlJvG.js +0 -6
- langflow/frontend/assets/git-pull-request-draft-DUHB6Xxe.js +0 -6
- langflow/frontend/assets/github-C8ujlSn8.js +0 -6
- langflow/frontend/assets/gitlab-DY2Q3s_L.js +0 -6
- langflow/frontend/assets/glass-water-DshGksYS.js +0 -6
- langflow/frontend/assets/glasses-B8fR6VRZ.js +0 -6
- langflow/frontend/assets/globe-BOqIf5Wv.js +0 -6
- langflow/frontend/assets/globe-lock-CzUC5IEW.js +0 -6
- langflow/frontend/assets/goal-Vg3Wc1hY.js +0 -6
- langflow/frontend/assets/grab-Dxi_6jkO.js +0 -6
- langflow/frontend/assets/graduation-cap-BwucrBc9.js +0 -6
- langflow/frontend/assets/grape-OktxCY9q.js +0 -6
- langflow/frontend/assets/grid-2x2-CZ4LTCFd.js +0 -6
- langflow/frontend/assets/grid-2x2-check-CMnb1a9J.js +0 -6
- langflow/frontend/assets/grid-2x2-plus-BmbiTZxi.js +0 -6
- langflow/frontend/assets/grid-2x2-x-N-uF1q56.js +0 -6
- langflow/frontend/assets/grid-3x3-DIA7EVIA.js +0 -6
- langflow/frontend/assets/grip-B0YsYJKI.js +0 -6
- langflow/frontend/assets/grip-horizontal-CrMHt-nA.js +0 -6
- langflow/frontend/assets/grip-vertical-CzW6eTXD.js +0 -6
- langflow/frontend/assets/group-FSnIJ4jE.js +0 -6
- langflow/frontend/assets/guitar-CGwJlYgR.js +0 -6
- langflow/frontend/assets/ham-2r9Ls8Vw.js +0 -6
- langflow/frontend/assets/hammer-Dui_gaQL.js +0 -6
- langflow/frontend/assets/hand-BVXVxL5m.js +0 -6
- langflow/frontend/assets/hand-coins-B1hPR1t0.js +0 -6
- langflow/frontend/assets/hand-heart-CFSUyE4-.js +0 -6
- langflow/frontend/assets/hand-helping-BC9Nsi9A.js +0 -6
- langflow/frontend/assets/hand-metal-DlApbOIj.js +0 -6
- langflow/frontend/assets/hand-platter-B5Fh8FyW.js +0 -6
- langflow/frontend/assets/handshake-B7QevLMo.js +0 -6
- langflow/frontend/assets/hard-drive-P7jt4ry6.js +0 -6
- langflow/frontend/assets/hard-drive-download-CGLjKx8_.js +0 -6
- langflow/frontend/assets/hard-drive-upload-BVR4a8dK.js +0 -6
- langflow/frontend/assets/hard-hat-BVHmLBWZ.js +0 -6
- langflow/frontend/assets/hash-Cy_nIGAs.js +0 -6
- langflow/frontend/assets/haze-C0IHpJQl.js +0 -6
- langflow/frontend/assets/hdmi-port-DQdigNCk.js +0 -6
- langflow/frontend/assets/heading-1-y80kG5je.js +0 -6
- langflow/frontend/assets/heading-2-DheBF6n8.js +0 -6
- langflow/frontend/assets/heading-3-jkgnS7dK.js +0 -6
- langflow/frontend/assets/heading-4-BpvVn18-.js +0 -6
- langflow/frontend/assets/heading-5-DH3G5xNX.js +0 -6
- langflow/frontend/assets/heading-6-D2HSUEY3.js +0 -6
- langflow/frontend/assets/heading-Bp2VrhJ9.js +0 -6
- langflow/frontend/assets/headphone-off-CpbOzIOQ.js +0 -6
- langflow/frontend/assets/headphones-CNZ6eFL8.js +0 -6
- langflow/frontend/assets/headset-CoIAhYny.js +0 -6
- langflow/frontend/assets/heart-5gd2ViSB.js +0 -6
- langflow/frontend/assets/heart-crack-aYzz14B5.js +0 -6
- langflow/frontend/assets/heart-handshake-BMKYy31S.js +0 -6
- langflow/frontend/assets/heart-minus-AklI9-MR.js +0 -6
- langflow/frontend/assets/heart-off-Cf0U8ha5.js +0 -6
- langflow/frontend/assets/heart-plus-BKwZH_J0.js +0 -6
- langflow/frontend/assets/heart-pulse-_7ddh519.js +0 -6
- langflow/frontend/assets/heater-Diw3EYfF.js +0 -6
- langflow/frontend/assets/hexagon-BTBf8idD.js +0 -6
- langflow/frontend/assets/highlighter-B0YDF2wa.js +0 -6
- langflow/frontend/assets/history-BDIXPh9_.js +0 -6
- langflow/frontend/assets/hop-CGA6q8Vm.js +0 -6
- langflow/frontend/assets/hop-off-CspGh94X.js +0 -6
- langflow/frontend/assets/hospital-CkxwUPZX.js +0 -6
- langflow/frontend/assets/hotel-DiRHLl0N.js +0 -6
- langflow/frontend/assets/hourglass-7QgnnBxF.js +0 -6
- langflow/frontend/assets/house-PmIvwCGE.js +0 -6
- langflow/frontend/assets/house-plug-D6-CvbzS.js +0 -6
- langflow/frontend/assets/house-plus-fnF0Q1S5.js +0 -6
- langflow/frontend/assets/house-wifi-D5DbD8CC.js +0 -6
- langflow/frontend/assets/ice-cream-bowl-DG7h7X7a.js +0 -6
- langflow/frontend/assets/ice-cream-cone-jr_R23US.js +0 -6
- langflow/frontend/assets/id-card-Kj7Yhkme.js +0 -6
- langflow/frontend/assets/image-CT8Z1KiI.js +0 -6
- langflow/frontend/assets/image-down-BXlsHkdJ.js +0 -6
- langflow/frontend/assets/image-minus-Dx3wFWFv.js +0 -6
- langflow/frontend/assets/image-off-0xSbW3dO.js +0 -6
- langflow/frontend/assets/image-play-INW5qgbJ.js +0 -6
- langflow/frontend/assets/image-plus-B9upvJbV.js +0 -6
- langflow/frontend/assets/image-up-Wgvg5K6c.js +0 -6
- langflow/frontend/assets/image-upscale-eBe3IrfA.js +0 -6
- langflow/frontend/assets/images-CKmX8_ZE.js +0 -6
- langflow/frontend/assets/import-DiSVaG7N.js +0 -6
- langflow/frontend/assets/inbox-CdOX8Icw.js +0 -6
- langflow/frontend/assets/indent-decrease-C7QHjBRg.js +0 -6
- langflow/frontend/assets/indent-increase-Ce0og9UZ.js +0 -6
- langflow/frontend/assets/index-2QKfOwQz.js +0 -1
- langflow/frontend/assets/index-2uQUhMEj.js +0 -1
- langflow/frontend/assets/index-4Mlswa0P.js +0 -1
- langflow/frontend/assets/index-B-KzTSjm.js +0 -1
- langflow/frontend/assets/index-B0rTFfBY.js +0 -1
- langflow/frontend/assets/index-B3BImWpa.js +0 -1
- langflow/frontend/assets/index-B3MGOMPg.js +0 -1
- langflow/frontend/assets/index-B41GnrGb.js +0 -21
- langflow/frontend/assets/index-B61Iucc2.js +0 -1
- langflow/frontend/assets/index-B7-I86_o.js +0 -1
- langflow/frontend/assets/index-B9tZ1GT6.js +0 -1
- langflow/frontend/assets/index-B9ywHEr5.js +0 -381
- langflow/frontend/assets/index-BA5Th8o9.js +0 -399
- langflow/frontend/assets/index-BAtp7_bt.js +0 -1
- langflow/frontend/assets/index-BBsMQR56.js +0 -20
- langflow/frontend/assets/index-BEa6tC2W.js +0 -7
- langflow/frontend/assets/index-BFItMCuU.js +0 -1
- langflow/frontend/assets/index-BFzVY7Nm.js +0 -1
- langflow/frontend/assets/index-BIZ_KOfj.js +0 -1
- langflow/frontend/assets/index-BJ_urhma.js +0 -1
- langflow/frontend/assets/index-BKJwmaxy.js +0 -1
- langflow/frontend/assets/index-BMzmXi7X.js +0 -1
- langflow/frontend/assets/index-BNh7b_1z.js +0 -1
- langflow/frontend/assets/index-BQETpRDP.js +0 -1
- langflow/frontend/assets/index-BQU253FX.js +0 -1
- langflow/frontend/assets/index-BQm6cH0D.js +0 -1
- langflow/frontend/assets/index-BRL6AvWi.js +0 -1
- langflow/frontend/assets/index-BRa3jhDA.js +0 -1
- langflow/frontend/assets/index-BTKi0LQE.js +0 -1
- langflow/frontend/assets/index-BTl_euDg.js +0 -1
- langflow/frontend/assets/index-BU6Vg5LE.js +0 -1
- langflow/frontend/assets/index-BUY4svgp.js +0 -1
- langflow/frontend/assets/index-BVeuK3hL.js +0 -1
- langflow/frontend/assets/index-BW6B6HXq.js +0 -1
- langflow/frontend/assets/index-BW8s5aZH.js +0 -1
- langflow/frontend/assets/index-BXM7wXF_.js +0 -185
- langflow/frontend/assets/index-BXs3aDj7.js +0 -1
- langflow/frontend/assets/index-B__vQOiE.js +0 -1
- langflow/frontend/assets/index-B_gQg1Ia.js +0 -1
- langflow/frontend/assets/index-BhgSwFHy.js +0 -1
- langflow/frontend/assets/index-BiHOs6w-.js +0 -1
- langflow/frontend/assets/index-BjNu8Slh.js +0 -1
- langflow/frontend/assets/index-BjVxHGPh.js +0 -1
- langflow/frontend/assets/index-BkIxy5hm.js +0 -1
- langflow/frontend/assets/index-Bmp8MMKQ.js +0 -1
- langflow/frontend/assets/index-BolQxU0J.js +0 -1
- langflow/frontend/assets/index-BrukvKtm.js +0 -1
- langflow/frontend/assets/index-Buc1fNZf.js +0 -1
- langflow/frontend/assets/index-BwLqtGH-.js +0 -1
- langflow/frontend/assets/index-BwOvHZia.js +0 -1
- langflow/frontend/assets/index-By-Q8tRv.js +0 -1
- langflow/frontend/assets/index-BzFZ-RLv.js +0 -1
- langflow/frontend/assets/index-BzUZ7LvQ.js +0 -767
- langflow/frontend/assets/index-C-LO-qz3.js +0 -1
- langflow/frontend/assets/index-C-pqZWxL.js +0 -1
- langflow/frontend/assets/index-C28aHVop.js +0 -1
- langflow/frontend/assets/index-C29JhKMO.js +0 -1
- langflow/frontend/assets/index-C35CcHFW.js +0 -1
- langflow/frontend/assets/index-C47EGVaO.js +0 -1
- langflow/frontend/assets/index-C5MlvNqt.js +0 -1
- langflow/frontend/assets/index-CBkOCjun.js +0 -205
- langflow/frontend/assets/index-CD0y3pmC.js +0 -1
- langflow/frontend/assets/index-CF5bkPY1.js +0 -1
- langflow/frontend/assets/index-CK8XfBh9.js +0 -1
- langflow/frontend/assets/index-CKNlB8-x.js +0 -1
- langflow/frontend/assets/index-CMoadJdI.js +0 -1
- langflow/frontend/assets/index-CNktQBsO.js +0 -1
- langflow/frontend/assets/index-CR5len4K.css +0 -1
- langflow/frontend/assets/index-CSKTxg0h.js +0 -1
- langflow/frontend/assets/index-CVWSTnX7.js +0 -1
- langflow/frontend/assets/index-CXgT5tuh.js +0 -1
- langflow/frontend/assets/index-CXi-kvMN.js +0 -1
- langflow/frontend/assets/index-CYWr1RTE.js +0 -1
- langflow/frontend/assets/index-CYsVGGsn.js +0 -1
- langflow/frontend/assets/index-C_jiTpRt.js +0 -1
- langflow/frontend/assets/index-CajLPh7J.js +0 -1
- langflow/frontend/assets/index-Cbswwof2.js +0 -1
- langflow/frontend/assets/index-CdGEh5Dd.js +0 -1
- langflow/frontend/assets/index-Cg8JGhuO.js +0 -1
- langflow/frontend/assets/index-Cgt3Y-Xc.js +0 -1
- langflow/frontend/assets/index-ChjP_lcd.js +0 -1
- langflow/frontend/assets/index-CjCZfoPa.js +0 -1
- langflow/frontend/assets/index-CkP6dNdd.js +0 -1
- langflow/frontend/assets/index-CksU1mCy.js +0 -1
- langflow/frontend/assets/index-CldV8cHX.js +0 -1
- langflow/frontend/assets/index-CmnAXW2M.js +0 -1
- langflow/frontend/assets/index-CnTe-ib8.js +0 -1
- langflow/frontend/assets/index-CppXkyAI.js +0 -1
- langflow/frontend/assets/index-CtlV5QSP.js +0 -1
- langflow/frontend/assets/index-Ctz536xU.js +0 -1
- langflow/frontend/assets/index-CumvaFGa.js +0 -1
- langflow/frontend/assets/index-CwHrfmT4.js +0 -1
- langflow/frontend/assets/index-CxThPLLM.js +0 -1
- langflow/frontend/assets/index-CygHHaG2.js +0 -1
- langflow/frontend/assets/index-D-Xdt1WZ.js +0 -1
- langflow/frontend/assets/index-D0rileO3.js +0 -127
- langflow/frontend/assets/index-D13KZztq.js +0 -1
- langflow/frontend/assets/index-D37V2bzg.js +0 -1
- langflow/frontend/assets/index-D3LYZj5R.js +0 -1
- langflow/frontend/assets/index-D3PL-v55.js +0 -1
- langflow/frontend/assets/index-D3k8ERHA.js +0 -1
- langflow/frontend/assets/index-D3xD_Vi3.js +0 -1
- langflow/frontend/assets/index-D4KStq-y.js +0 -1
- langflow/frontend/assets/index-D6IWUtCW.js +0 -1
- langflow/frontend/assets/index-D9EYpYAn.js +0 -1
- langflow/frontend/assets/index-D9pRkBVQ.js +0 -1
- langflow/frontend/assets/index-DBYJSBIJ.js +0 -108
- langflow/frontend/assets/index-DCBcV8DO.js +0 -1
- langflow/frontend/assets/index-DGMmz1qB.js +0 -1
- langflow/frontend/assets/index-DIIpP9BC.js +0 -1
- langflow/frontend/assets/index-DK0SpiSw.js +0 -1
- langflow/frontend/assets/index-DKiew9tJ.js +0 -1
- langflow/frontend/assets/index-DLiLtnQb.js +0 -1
- langflow/frontend/assets/index-DLsjc7AJ.js +0 -1
- langflow/frontend/assets/index-DMo7t1c2.js +0 -1
- langflow/frontend/assets/index-DNnbYSjo.js +0 -1
- langflow/frontend/assets/index-DPXTlNhX.js +0 -1
- langflow/frontend/assets/index-DPwI8ASU.js +0 -1
- langflow/frontend/assets/index-DR86Lsio.js +0 -1
- langflow/frontend/assets/index-DRGpD-Cf.js +0 -1
- langflow/frontend/assets/index-DTjOvZoy.js +0 -1
- langflow/frontend/assets/index-DUIyyegl.js +0 -1
- langflow/frontend/assets/index-DVTTJ573.js +0 -1
- langflow/frontend/assets/index-DWD-qFGN.js +0 -1
- langflow/frontend/assets/index-DXC9SGLO.js +0 -1
- langflow/frontend/assets/index-DXGrBtIm.js +0 -2
- langflow/frontend/assets/index-DcthS0OS.js +0 -1
- langflow/frontend/assets/index-DeO1TmoJ.js +0 -1
- langflow/frontend/assets/index-DfdXqTkC.js +0 -1
- langflow/frontend/assets/index-DgEsHHbn.js +0 -1
- langflow/frontend/assets/index-DiPdSAb-.js +0 -1
- langflow/frontend/assets/index-Dj1_1AVu.js +0 -1
- langflow/frontend/assets/index-DjX3Rlg0.js +0 -1
- langflow/frontend/assets/index-Dp665wgU.js +0 -1
- langflow/frontend/assets/index-DpUVtJBm.js +0 -7321
- langflow/frontend/assets/index-DqykhdBR.js +0 -1
- langflow/frontend/assets/index-DrCxi3rC.js +0 -1
- langflow/frontend/assets/index-DrVyWfLb.js +0 -1
- langflow/frontend/assets/index-Ds909mc5.js +0 -1
- langflow/frontend/assets/index-DtssSJxD.js +0 -1
- langflow/frontend/assets/index-Dunq7Fbc.js +0 -1
- langflow/frontend/assets/index-Dv5PD2q_.js +0 -1
- langflow/frontend/assets/index-DvbGYJtn.js +0 -1
- langflow/frontend/assets/index-Dxa1dBKG.js +0 -1
- langflow/frontend/assets/index-DxlRpmOX.js +0 -13
- langflow/frontend/assets/index-DyF-bhai.js +0 -1
- langflow/frontend/assets/index-DywEJqhX.js +0 -1
- langflow/frontend/assets/index-EG_OxGv1.js +0 -1
- langflow/frontend/assets/index-EzafEE3l.js +0 -1
- langflow/frontend/assets/index-F3rYC31i.js +0 -1
- langflow/frontend/assets/index-FSWmLCr-.js +0 -1
- langflow/frontend/assets/index-HTtZBzMC.js +0 -1
- langflow/frontend/assets/index-In_88aci.js +0 -1
- langflow/frontend/assets/index-J48O83cO.js +0 -1
- langflow/frontend/assets/index-JHNbfi9f.js +0 -1
- langflow/frontend/assets/index-JRpZxXX0.js +0 -1
- langflow/frontend/assets/index-Ku1RDlBy.js +0 -1
- langflow/frontend/assets/index-LJXUrkrg.js +0 -1
- langflow/frontend/assets/index-LfoCLlQg.js +0 -1
- langflow/frontend/assets/index-MUTJNp7V.js +0 -1
- langflow/frontend/assets/index-OD2aObmN.js +0 -1
- langflow/frontend/assets/index-Ocb9xE6f.js +0 -1
- langflow/frontend/assets/index-OveD7Elj.js +0 -1
- langflow/frontend/assets/index-Q2ERMfmI.js +0 -1
- langflow/frontend/assets/index-U8072tZG.js +0 -1
- langflow/frontend/assets/index-UYJ_RoEv.js +0 -1
- langflow/frontend/assets/index-VQoziAj6.js +0 -1
- langflow/frontend/assets/index-XGbXMbq1.js +0 -281
- langflow/frontend/assets/index-_LYoMZUZ.js +0 -1
- langflow/frontend/assets/index-_RoBlfFQ.js +0 -1
- langflow/frontend/assets/index-anR8pASH.js +0 -1
- langflow/frontend/assets/index-e_gCJGBV.js +0 -1
- langflow/frontend/assets/index-el6qZ4-I.js +0 -1
- langflow/frontend/assets/index-exua16zz.js +0 -1
- langflow/frontend/assets/index-exxjib9E.js +0 -1
- langflow/frontend/assets/index-jJhmhzvv.js +0 -1
- langflow/frontend/assets/index-kgyZ5iib.js +0 -1
- langflow/frontend/assets/index-mObAeoAH.js +0 -1
- langflow/frontend/assets/index-nAPqAw8J.js +0 -1
- langflow/frontend/assets/index-pkt4K6Im.js +0 -1
- langflow/frontend/assets/index-sjbu-dD7.js +0 -1
- langflow/frontend/assets/index-t9AMFJoS.js +0 -1
- langflow/frontend/assets/index-ukXwm0mA.js +0 -1
- langflow/frontend/assets/index-wID9VtBj.js +0 -495
- langflow/frontend/assets/indian-rupee-dfWATytK.js +0 -6
- langflow/frontend/assets/infinity-CjUe5ivd.js +0 -6
- langflow/frontend/assets/info-B_LE7L7E.js +0 -6
- langflow/frontend/assets/inspection-panel-ZKvlddDX.js +0 -6
- langflow/frontend/assets/instagram-BsiiTwbe.js +0 -6
- langflow/frontend/assets/italic-DuNznHfD.js +0 -6
- langflow/frontend/assets/iteration-ccw-D_X6Ncpd.js +0 -6
- langflow/frontend/assets/iteration-cw-CtI6sO4s.js +0 -6
- langflow/frontend/assets/japanese-yen-CpXpceuO.js +0 -6
- langflow/frontend/assets/joystick-C2Ky6Mbv.js +0 -6
- langflow/frontend/assets/kanban-C9Ycd6s4.js +0 -6
- langflow/frontend/assets/key-DRVIdukA.js +0 -6
- langflow/frontend/assets/key-round-DNOaaSPy.js +0 -6
- langflow/frontend/assets/key-square-DwMHFAtk.js +0 -6
- langflow/frontend/assets/keyboard-C6CFUeHB.js +0 -6
- langflow/frontend/assets/keyboard-music-CKIVnkdm.js +0 -6
- langflow/frontend/assets/keyboard-off-C7O7DrK0.js +0 -6
- langflow/frontend/assets/lamp-B5kXYX3W.js +0 -6
- langflow/frontend/assets/lamp-ceiling-Bc2MBOMS.js +0 -6
- langflow/frontend/assets/lamp-desk-Cj4cV5p0.js +0 -6
- langflow/frontend/assets/lamp-floor-BmWaN3gA.js +0 -6
- langflow/frontend/assets/lamp-wall-down-DptQKLOl.js +0 -6
- langflow/frontend/assets/lamp-wall-up-D--Xk8Uc.js +0 -6
- langflow/frontend/assets/land-plot-BbZVsEO6.js +0 -6
- langflow/frontend/assets/landmark-CcoCKSRy.js +0 -6
- langflow/frontend/assets/languages-DJmiOypY.js +0 -6
- langflow/frontend/assets/laptop-BH2ES5zs.js +0 -6
- langflow/frontend/assets/laptop-minimal-BViwcE0p.js +0 -6
- langflow/frontend/assets/laptop-minimal-check-BGIW2iZy.js +0 -6
- langflow/frontend/assets/lasso-BmP9amC_.js +0 -6
- langflow/frontend/assets/lasso-select-Be4Nr3Hx.js +0 -6
- langflow/frontend/assets/laugh-C_Mx1EnJ.js +0 -6
- langflow/frontend/assets/layers-2-CQ1eeSl_.js +0 -6
- langflow/frontend/assets/layers-Bpl575qt.js +0 -6
- langflow/frontend/assets/layout-dashboard-DzHGzN63.js +0 -6
- langflow/frontend/assets/layout-grid-BJ0cVgDn.js +0 -6
- langflow/frontend/assets/layout-list-2TpTYkoP.js +0 -6
- langflow/frontend/assets/layout-panel-left-NBHLcbEc.js +0 -6
- langflow/frontend/assets/layout-panel-top-C15hIwEQ.js +0 -6
- langflow/frontend/assets/layout-template-C_2m978f.js +0 -6
- langflow/frontend/assets/lazyIconImports-C1Cwzm74.js +0 -2
- langflow/frontend/assets/leaf-C7I-gNqN.js +0 -6
- langflow/frontend/assets/leafy-green-DxfIltJY.js +0 -6
- langflow/frontend/assets/lectern-BWPxyWG5.js +0 -6
- langflow/frontend/assets/letter-text-CojX37RF.js +0 -6
- langflow/frontend/assets/library-_tOxFRdG.js +0 -6
- langflow/frontend/assets/library-big-V_be0egg.js +0 -6
- langflow/frontend/assets/life-buoy-SLaOKPui.js +0 -6
- langflow/frontend/assets/ligature-DI3N5Sgh.js +0 -6
- langflow/frontend/assets/lightbulb-BJ-u5yNj.js +0 -6
- langflow/frontend/assets/lightbulb-off-CYZZK-Ca.js +0 -6
- langflow/frontend/assets/link-2-C2f9vuOw.js +0 -6
- langflow/frontend/assets/link-2-off-Cznc1x59.js +0 -6
- langflow/frontend/assets/link-D8ffI3Bx.js +0 -6
- langflow/frontend/assets/linkedin-Da0zZOYR.js +0 -6
- langflow/frontend/assets/list-Dbxyd6FK.js +0 -6
- langflow/frontend/assets/list-check-BfuWLRhW.js +0 -6
- langflow/frontend/assets/list-checks-5qGsxHLJ.js +0 -6
- langflow/frontend/assets/list-collapse-CtnPbel8.js +0 -6
- langflow/frontend/assets/list-end-DUboME14.js +0 -6
- langflow/frontend/assets/list-filter-CmoSv9ih.js +0 -6
- langflow/frontend/assets/list-filter-plus-DH53x-KE.js +0 -6
- langflow/frontend/assets/list-minus-rsN5dKeL.js +0 -6
- langflow/frontend/assets/list-music-y6LRVp3R.js +0 -6
- langflow/frontend/assets/list-ordered-CFYedrtq.js +0 -6
- langflow/frontend/assets/list-plus-C1kZwFsM.js +0 -6
- langflow/frontend/assets/list-restart-DH7cBD12.js +0 -6
- langflow/frontend/assets/list-start-CjF0LNBk.js +0 -6
- langflow/frontend/assets/list-todo-D6S7Eq2U.js +0 -6
- langflow/frontend/assets/list-tree-BV3Jr4p1.js +0 -6
- langflow/frontend/assets/list-video-DQuDt4_H.js +0 -6
- langflow/frontend/assets/list-x-SyN4p91y.js +0 -6
- langflow/frontend/assets/loader-CW6ghXpM.js +0 -6
- langflow/frontend/assets/loader-circle-BIdiuIo8.js +0 -6
- langflow/frontend/assets/loader-pinwheel-DN59gqDR.js +0 -6
- langflow/frontend/assets/locate-B1rV_Eud.js +0 -6
- langflow/frontend/assets/locate-fixed-mm8d2I_1.js +0 -6
- langflow/frontend/assets/locate-off-DuwOZuVD.js +0 -6
- langflow/frontend/assets/location-edit-BVWsMtc0.js +0 -6
- langflow/frontend/assets/lock-B_mVf9AO.js +0 -6
- langflow/frontend/assets/lock-keyhole-CZBU_htP.js +0 -6
- langflow/frontend/assets/lock-keyhole-open-BmeFZtQo.js +0 -6
- langflow/frontend/assets/lock-open-B9vea4fd.js +0 -6
- langflow/frontend/assets/log-in-Dp5MKXJ6.js +0 -6
- langflow/frontend/assets/log-out-CnwhIFCV.js +0 -6
- langflow/frontend/assets/logs-CutF0a3A.js +0 -6
- langflow/frontend/assets/lollipop-CKVurF-h.js +0 -6
- langflow/frontend/assets/luggage-SGX9v5BA.js +0 -6
- langflow/frontend/assets/magnet-k1e_jfjF.js +0 -6
- langflow/frontend/assets/mail-CpHB9s87.js +0 -6
- langflow/frontend/assets/mail-check-BGq22NGF.js +0 -6
- langflow/frontend/assets/mail-minus-RCkfM2oU.js +0 -6
- langflow/frontend/assets/mail-open-wYro5Hao.js +0 -6
- langflow/frontend/assets/mail-plus-BlMpIq4Y.js +0 -6
- langflow/frontend/assets/mail-question-DARRLllg.js +0 -6
- langflow/frontend/assets/mail-search-BHPgf9Sg.js +0 -6
- langflow/frontend/assets/mail-warning-B8ppePDz.js +0 -6
- langflow/frontend/assets/mail-x-CaFLEt3S.js +0 -6
- langflow/frontend/assets/mailbox-BvqRfE85.js +0 -6
- langflow/frontend/assets/mails-D0K7EC5r.js +0 -6
- langflow/frontend/assets/map-BWe2j5uV.js +0 -6
- langflow/frontend/assets/map-pin-BIIQp1ny.js +0 -6
- langflow/frontend/assets/map-pin-check-DVigOmJy.js +0 -6
- langflow/frontend/assets/map-pin-check-inside-DAW-jmer.js +0 -6
- langflow/frontend/assets/map-pin-house-BjJGaZ_W.js +0 -6
- langflow/frontend/assets/map-pin-minus-inside-NU3kjUaq.js +0 -6
- langflow/frontend/assets/map-pin-minus-qSJvtAyu.js +0 -6
- langflow/frontend/assets/map-pin-off-D_XWqwUL.js +0 -6
- langflow/frontend/assets/map-pin-plus-BvtSdwiT.js +0 -6
- langflow/frontend/assets/map-pin-plus-inside-B8N0JWVa.js +0 -6
- langflow/frontend/assets/map-pin-x-CzkkzM8C.js +0 -6
- langflow/frontend/assets/map-pin-x-inside-Ch3mMXj3.js +0 -6
- langflow/frontend/assets/map-pinned-BFY8xjWv.js +0 -6
- langflow/frontend/assets/map-plus-C7VchZnk.js +0 -6
- langflow/frontend/assets/mars-CeY3O5YK.js +0 -6
- langflow/frontend/assets/mars-stroke-HXdX2iNQ.js +0 -6
- langflow/frontend/assets/martini-Dpn_2_XE.js +0 -6
- langflow/frontend/assets/maximize-2-CsbNYzxf.js +0 -6
- langflow/frontend/assets/maximize-D87I_lS3.js +0 -6
- langflow/frontend/assets/medal-C-rwKc2p.js +0 -6
- langflow/frontend/assets/megaphone-BmitnmNV.js +0 -6
- langflow/frontend/assets/megaphone-off-Dp38EeVm.js +0 -6
- langflow/frontend/assets/meh-Wl2qG9mS.js +0 -6
- langflow/frontend/assets/memory-stick-DjVuofBU.js +0 -6
- langflow/frontend/assets/menu-C_ZnFtke.js +0 -6
- langflow/frontend/assets/merge-CVxYdOU6.js +0 -6
- langflow/frontend/assets/message-circle-BCFKIVaG.js +0 -6
- langflow/frontend/assets/message-circle-code-ByC3xlrm.js +0 -6
- langflow/frontend/assets/message-circle-dashed-BGf6wc2q.js +0 -6
- langflow/frontend/assets/message-circle-heart-CJe2hG5I.js +0 -6
- langflow/frontend/assets/message-circle-more-DlkXYzwc.js +0 -6
- langflow/frontend/assets/message-circle-off-BXNwVK73.js +0 -6
- langflow/frontend/assets/message-circle-plus-BvVDEWER.js +0 -6
- langflow/frontend/assets/message-circle-question-F_PDi40-.js +0 -6
- langflow/frontend/assets/message-circle-reply-DBVvbcYc.js +0 -6
- langflow/frontend/assets/message-circle-warning-C6owxiSU.js +0 -6
- langflow/frontend/assets/message-circle-x-V7F92TlD.js +0 -6
- langflow/frontend/assets/message-square-DXqIv5-T.js +0 -6
- langflow/frontend/assets/message-square-code-Cnybl1gQ.js +0 -6
- langflow/frontend/assets/message-square-dashed-Dyhajt9A.js +0 -6
- langflow/frontend/assets/message-square-diff-DUvtcPyO.js +0 -6
- langflow/frontend/assets/message-square-dot-C_SriCts.js +0 -6
- langflow/frontend/assets/message-square-heart-eWRT_k_U.js +0 -6
- langflow/frontend/assets/message-square-lock-BbEknDit.js +0 -6
- langflow/frontend/assets/message-square-more-BIWp7spD.js +0 -6
- langflow/frontend/assets/message-square-off-AdEUq_kZ.js +0 -6
- langflow/frontend/assets/message-square-plus-CsVRuGMd.js +0 -6
- langflow/frontend/assets/message-square-quote-CLJ-6YBF.js +0 -6
- langflow/frontend/assets/message-square-reply-COdDGZlL.js +0 -6
- langflow/frontend/assets/message-square-share-Babk5o3W.js +0 -6
- langflow/frontend/assets/message-square-text-KEj0QhlY.js +0 -6
- langflow/frontend/assets/message-square-warning-DbMBK25A.js +0 -6
- langflow/frontend/assets/message-square-x-Dlmu05x-.js +0 -6
- langflow/frontend/assets/messages-square-BLHXkvXu.js +0 -6
- langflow/frontend/assets/mic-CkGvjoA6.js +0 -6
- langflow/frontend/assets/mic-off-BF7T6uJG.js +0 -6
- langflow/frontend/assets/mic-vocal-D63-pkbV.js +0 -6
- langflow/frontend/assets/microchip-BdgsWAAt.js +0 -6
- langflow/frontend/assets/microscope-BIZdt6qa.js +0 -6
- langflow/frontend/assets/microwave-ljjNyijf.js +0 -6
- langflow/frontend/assets/milestone-Z7ApTXoY.js +0 -6
- langflow/frontend/assets/milk-C94MudXv.js +0 -6
- langflow/frontend/assets/milk-off-Bks8F3Rh.js +0 -6
- langflow/frontend/assets/minimize-0iR8d_wz.js +0 -6
- langflow/frontend/assets/minimize-2-4bKQDiPS.js +0 -6
- langflow/frontend/assets/monitor-CzM786BJ.js +0 -6
- langflow/frontend/assets/monitor-check-BumJuy9o.js +0 -6
- langflow/frontend/assets/monitor-cog-CCmf8Cx_.js +0 -6
- langflow/frontend/assets/monitor-dot-CppOnLLF.js +0 -6
- langflow/frontend/assets/monitor-down-VT--09JI.js +0 -6
- langflow/frontend/assets/monitor-off-DsGxBfLz.js +0 -6
- langflow/frontend/assets/monitor-pause-lkcsR8rF.js +0 -6
- langflow/frontend/assets/monitor-play-qe460Ine.js +0 -6
- langflow/frontend/assets/monitor-smartphone-z2JHsU8j.js +0 -6
- langflow/frontend/assets/monitor-speaker-BVDiZULG.js +0 -6
- langflow/frontend/assets/monitor-stop-Ds8yehE1.js +0 -6
- langflow/frontend/assets/monitor-up-BlZtuUw9.js +0 -6
- langflow/frontend/assets/monitor-x-JBkUDpDd.js +0 -6
- langflow/frontend/assets/moon-WoYIfO4w.js +0 -6
- langflow/frontend/assets/moon-star-CNHQKOUR.js +0 -6
- langflow/frontend/assets/mountain-D9FRFvIA.js +0 -6
- langflow/frontend/assets/mountain-snow-DVA_gd64.js +0 -6
- langflow/frontend/assets/mouse-867O2vOv.js +0 -6
- langflow/frontend/assets/mouse-off-BawwNju4.js +0 -6
- langflow/frontend/assets/mouse-pointer-2-DLgsfHFL.js +0 -6
- langflow/frontend/assets/mouse-pointer-C7z_bkYM.js +0 -6
- langflow/frontend/assets/mouse-pointer-ban-CQhj6Cwn.js +0 -6
- langflow/frontend/assets/mouse-pointer-click-BxuJ2b0V.js +0 -6
- langflow/frontend/assets/move-3d-dlIqQaWp.js +0 -6
- langflow/frontend/assets/move-B4Ds2cBm.js +0 -6
- langflow/frontend/assets/move-diagonal-2-BHA9O73b.js +0 -6
- langflow/frontend/assets/move-diagonal-D60wM06u.js +0 -6
- langflow/frontend/assets/move-down-Dx-PFKUb.js +0 -6
- langflow/frontend/assets/move-down-left-Bo5FgvGr.js +0 -6
- langflow/frontend/assets/move-down-right-CH_PsfhD.js +0 -6
- langflow/frontend/assets/move-horizontal-DLrS0Kpz.js +0 -6
- langflow/frontend/assets/move-left-oY8FtBG5.js +0 -6
- langflow/frontend/assets/move-right-Cr4sR_bt.js +0 -6
- langflow/frontend/assets/move-up-left-D7oJ2J8_.js +0 -6
- langflow/frontend/assets/move-up-right-CJJYlUX1.js +0 -6
- langflow/frontend/assets/move-up-w5CKBeD9.js +0 -6
- langflow/frontend/assets/move-vertical-BqfrZ7dN.js +0 -6
- langflow/frontend/assets/music-2-_WHrMLLg.js +0 -6
- langflow/frontend/assets/music-3-DJRE06-A.js +0 -6
- langflow/frontend/assets/music-4-BkKWffDU.js +0 -6
- langflow/frontend/assets/music-DeKSHmIS.js +0 -6
- langflow/frontend/assets/navigation-2-BwK7Ko0h.js +0 -6
- langflow/frontend/assets/navigation-2-off-u3MSWrGH.js +0 -6
- langflow/frontend/assets/navigation-BpGnSiAE.js +0 -6
- langflow/frontend/assets/navigation-off-dsN-pPUd.js +0 -6
- langflow/frontend/assets/network-Dq6lJHXU.js +0 -6
- langflow/frontend/assets/newspaper-30MRjhu7.js +0 -6
- langflow/frontend/assets/nfc-C0BJPdwh.js +0 -6
- langflow/frontend/assets/non-binary-CLGP-iiC.js +0 -6
- langflow/frontend/assets/notebook-CgaWNAFz.js +0 -6
- langflow/frontend/assets/notebook-pen-CYm6Ghk1.js +0 -6
- langflow/frontend/assets/notebook-tabs-Bk5eQyL5.js +0 -6
- langflow/frontend/assets/notebook-text-BLkbIk44.js +0 -6
- langflow/frontend/assets/notepad-text-Cjoga3oN.js +0 -6
- langflow/frontend/assets/notepad-text-dashed-C5hD1-Fe.js +0 -6
- langflow/frontend/assets/nut-CYsTlL60.js +0 -6
- langflow/frontend/assets/nut-off-msUVlCzb.js +0 -6
- langflow/frontend/assets/octagon-CM-nuNqQ.js +0 -6
- langflow/frontend/assets/octagon-alert-DXa35bCO.js +0 -6
- langflow/frontend/assets/octagon-minus-JM9PGbZV.js +0 -6
- langflow/frontend/assets/octagon-pause-M0CjOmJu.js +0 -6
- langflow/frontend/assets/octagon-x-E1ygK_P1.js +0 -6
- langflow/frontend/assets/omega-BjqV4fX1.js +0 -6
- langflow/frontend/assets/option-BIcrDVbD.js +0 -6
- langflow/frontend/assets/orbit-BikgSX0-.js +0 -6
- langflow/frontend/assets/origami-BQ5XI6j8.js +0 -6
- langflow/frontend/assets/package-2-XU3yxTGl.js +0 -6
- langflow/frontend/assets/package-4EiKsge0.js +0 -6
- langflow/frontend/assets/package-check-CfdAe0GF.js +0 -6
- langflow/frontend/assets/package-minus-BvKhdHSB.js +0 -6
- langflow/frontend/assets/package-open-CKh_I0fr.js +0 -6
- langflow/frontend/assets/package-plus-DxVNDWFo.js +0 -6
- langflow/frontend/assets/package-search-G8fpx_ZL.js +0 -6
- langflow/frontend/assets/package-x-DTd2nbYB.js +0 -6
- langflow/frontend/assets/paint-bucket-16FRhKgt.js +0 -6
- langflow/frontend/assets/paint-roller-CkA54Lft.js +0 -6
- langflow/frontend/assets/paintbrush-DiQd2006.js +0 -6
- langflow/frontend/assets/paintbrush-vertical-RVs4ZAcf.js +0 -6
- langflow/frontend/assets/palette-63ZAp8jT.js +0 -6
- langflow/frontend/assets/panel-bottom-BRSGITkZ.js +0 -6
- langflow/frontend/assets/panel-bottom-close-BKhC1IPs.js +0 -6
- langflow/frontend/assets/panel-bottom-dashed-DDmIVEyF.js +0 -6
- langflow/frontend/assets/panel-bottom-open-DNB3w9jB.js +0 -6
- langflow/frontend/assets/panel-left-close-2wcAhQC8.js +0 -6
- langflow/frontend/assets/panel-left-dashed-P-yRaAfE.js +0 -6
- langflow/frontend/assets/panel-left-open-C8Z5Ex7t.js +0 -6
- langflow/frontend/assets/panel-right-DhqTAxzZ.js +0 -6
- langflow/frontend/assets/panel-right-close-D-4tz-fa.js +0 -6
- langflow/frontend/assets/panel-right-dashed-oSwbzusJ.js +0 -6
- langflow/frontend/assets/panel-right-open-D3Vfnad1.js +0 -6
- langflow/frontend/assets/panel-top-BiDhuHAU.js +0 -6
- langflow/frontend/assets/panel-top-close-DXTUcegA.js +0 -6
- langflow/frontend/assets/panel-top-dashed-GiUGeBeB.js +0 -6
- langflow/frontend/assets/panel-top-open-6PMe_rzg.js +0 -6
- langflow/frontend/assets/panels-left-bottom-BLaYgiWe.js +0 -6
- langflow/frontend/assets/panels-right-bottom-CAOwjL6I.js +0 -6
- langflow/frontend/assets/panels-top-left-C7JFKzm4.js +0 -6
- langflow/frontend/assets/paperclip-C2jDvuaB.js +0 -6
- langflow/frontend/assets/parentheses-DpyyMTil.js +0 -6
- langflow/frontend/assets/parking-meter-Br1Avhl7.js +0 -6
- langflow/frontend/assets/party-popper-ml82k9Oh.js +0 -6
- langflow/frontend/assets/pause-CNE8dZxo.js +0 -6
- langflow/frontend/assets/paw-print-f_-GBH01.js +0 -6
- langflow/frontend/assets/pc-case-Chy1tZyO.js +0 -6
- langflow/frontend/assets/pen-CWOC_G5w.js +0 -6
- langflow/frontend/assets/pen-line-CbSvGV_f.js +0 -6
- langflow/frontend/assets/pen-off-CRlhISzF.js +0 -6
- langflow/frontend/assets/pen-tool-BCBDxitS.js +0 -6
- langflow/frontend/assets/pencil-lCJvvWYR.js +0 -6
- langflow/frontend/assets/pencil-line-DuQsld7D.js +0 -6
- langflow/frontend/assets/pencil-off-D9SAANhb.js +0 -6
- langflow/frontend/assets/pencil-ruler-BZ7rwkjR.js +0 -6
- langflow/frontend/assets/pentagon-CMdRJpyU.js +0 -6
- langflow/frontend/assets/percent-DUcp_Hu-.js +0 -6
- langflow/frontend/assets/person-standing-Ur3pkyWF.js +0 -6
- langflow/frontend/assets/philippine-peso-DYnLi4za.js +0 -6
- langflow/frontend/assets/phone-DU0nN01j.js +0 -6
- langflow/frontend/assets/phone-call-CpzfUvCS.js +0 -6
- langflow/frontend/assets/phone-forwarded-BhIeiw1L.js +0 -6
- langflow/frontend/assets/phone-incoming--bMxOKL_.js +0 -6
- langflow/frontend/assets/phone-missed-CLZnCkx0.js +0 -6
- langflow/frontend/assets/phone-off-D2N1--DK.js +0 -6
- langflow/frontend/assets/phone-outgoing-BttSf1Mf.js +0 -6
- langflow/frontend/assets/pi-0ZqHUNvQ.js +0 -6
- langflow/frontend/assets/piano-O0okyq-q.js +0 -6
- langflow/frontend/assets/pickaxe-BBq80IDk.js +0 -6
- langflow/frontend/assets/picture-in-picture-2-BRD22oaq.js +0 -6
- langflow/frontend/assets/picture-in-picture-aMu6X4he.js +0 -6
- langflow/frontend/assets/piggy-bank-Ba5KpW-R.js +0 -6
- langflow/frontend/assets/pilcrow-jO5PkN9u.js +0 -6
- langflow/frontend/assets/pilcrow-left-DIbvdJ4q.js +0 -6
- langflow/frontend/assets/pilcrow-right-Cn9D7hDF.js +0 -6
- langflow/frontend/assets/pill-D-42rIOW.js +0 -6
- langflow/frontend/assets/pill-bottle-DsJKKNcA.js +0 -6
- langflow/frontend/assets/pin-DfAVbRNJ.js +0 -6
- langflow/frontend/assets/pin-off-CJNWcHaA.js +0 -6
- langflow/frontend/assets/pipette-B7tJT2kJ.js +0 -6
- langflow/frontend/assets/pizza-CnrmNK8m.js +0 -6
- langflow/frontend/assets/plane-Dn27nhFg.js +0 -6
- langflow/frontend/assets/plane-landing-D0PYnEJh.js +0 -6
- langflow/frontend/assets/plane-takeoff-C9ORUKgO.js +0 -6
- langflow/frontend/assets/play-fRIv90Vb.js +0 -6
- langflow/frontend/assets/plug-2-D8fXOKQU.js +0 -6
- langflow/frontend/assets/plug-i5tCOxoY.js +0 -6
- langflow/frontend/assets/plug-zap-DUkZjazY.js +0 -6
- langflow/frontend/assets/pocket-Baxk-icN.js +0 -6
- langflow/frontend/assets/pocket-knife-vflNgCDB.js +0 -6
- langflow/frontend/assets/podcast-CGBp0he6.js +0 -6
- langflow/frontend/assets/pointer-BAlqPHUA.js +0 -6
- langflow/frontend/assets/pointer-off-Dr4nsB_n.js +0 -6
- langflow/frontend/assets/popcorn-CkYbqF6n.js +0 -6
- langflow/frontend/assets/popsicle-DQx7XFEX.js +0 -6
- langflow/frontend/assets/pound-sterling-D-7ovrEl.js +0 -6
- langflow/frontend/assets/power-CjdszFge.js +0 -6
- langflow/frontend/assets/power-off-DXTNJRDM.js +0 -6
- langflow/frontend/assets/presentation-BUFQUUad.js +0 -6
- langflow/frontend/assets/printer-DlXrt59N.js +0 -6
- langflow/frontend/assets/printer-check-CNpp-7a2.js +0 -6
- langflow/frontend/assets/projector-CejJOabJ.js +0 -6
- langflow/frontend/assets/proportions-DhzsgWUR.js +0 -6
- langflow/frontend/assets/puzzle-CIUZmh73.js +0 -6
- langflow/frontend/assets/pyramid-B1EU302T.js +0 -6
- langflow/frontend/assets/qr-code-B3ueAf2a.js +0 -6
- langflow/frontend/assets/quote-DnSAw5GA.js +0 -6
- langflow/frontend/assets/rabbit-D_w405-3.js +0 -6
- langflow/frontend/assets/radar-mMKrjXiq.js +0 -6
- langflow/frontend/assets/radiation-BKZhrAsf.js +0 -6
- langflow/frontend/assets/radical-DiyXLgcs.js +0 -6
- langflow/frontend/assets/radio-FZqpRcOY.js +0 -6
- langflow/frontend/assets/radio-receiver-DoqS8xe3.js +0 -6
- langflow/frontend/assets/radio-tower-DzcmNTOD.js +0 -6
- langflow/frontend/assets/radius-WO6Uuofn.js +0 -6
- langflow/frontend/assets/rail-symbol-Blp5Z6mm.js +0 -6
- langflow/frontend/assets/rainbow-BcpREq76.js +0 -6
- langflow/frontend/assets/rat-C_6nvO9X.js +0 -6
- langflow/frontend/assets/ratio-B2vtZEP1.js +0 -6
- langflow/frontend/assets/receipt-WM0uZGH2.js +0 -6
- langflow/frontend/assets/receipt-cent-BsFZulIa.js +0 -6
- langflow/frontend/assets/receipt-euro-JyQiZVY6.js +0 -6
- langflow/frontend/assets/receipt-indian-rupee-fTOVSpHz.js +0 -6
- langflow/frontend/assets/receipt-japanese-yen-D8DfDeDK.js +0 -6
- langflow/frontend/assets/receipt-pound-sterling-DaKscCMf.js +0 -6
- langflow/frontend/assets/receipt-russian-ruble-Buf0_3Kt.js +0 -6
- langflow/frontend/assets/receipt-swiss-franc-Bem-z2ls.js +0 -6
- langflow/frontend/assets/receipt-text-Bwc10qHQ.js +0 -6
- langflow/frontend/assets/rectangle-ellipsis-CeJcpjOB.js +0 -6
- langflow/frontend/assets/rectangle-goggles-DOshY7hS.js +0 -6
- langflow/frontend/assets/rectangle-horizontal-BkYka3pL.js +0 -6
- langflow/frontend/assets/rectangle-vertical-DzlIazB7.js +0 -6
- langflow/frontend/assets/recycle-BYgswKLN.js +0 -6
- langflow/frontend/assets/redo-2-BZ3Hs4ln.js +0 -6
- langflow/frontend/assets/redo-BU2dMbQ2.js +0 -6
- langflow/frontend/assets/redo-dot-BZUxEEyF.js +0 -6
- langflow/frontend/assets/refresh-ccw-dot-Cz65nUFZ.js +0 -6
- langflow/frontend/assets/refresh-ccw-mpgTt4cp.js +0 -6
- langflow/frontend/assets/refresh-cw-ACMLi-4b.js +0 -6
- langflow/frontend/assets/refresh-cw-off-BrGN63Qm.js +0 -6
- langflow/frontend/assets/refrigerator-BFChB889.js +0 -6
- langflow/frontend/assets/regex-C8kDLEV-.js +0 -6
- langflow/frontend/assets/remove-formatting-4xIOGsHV.js +0 -6
- langflow/frontend/assets/repeat-1-C5gQ8b_d.js +0 -6
- langflow/frontend/assets/repeat-2-YlU_Z8sF.js +0 -6
- langflow/frontend/assets/repeat-BYHb23Jr.js +0 -6
- langflow/frontend/assets/replace-DrXxrUoA.js +0 -6
- langflow/frontend/assets/replace-all-_qSvipH9.js +0 -6
- langflow/frontend/assets/reply-D3kS0lZA.js +0 -6
- langflow/frontend/assets/reply-all-C9Q_Q7RN.js +0 -6
- langflow/frontend/assets/rewind-C6LCP7LR.js +0 -6
- langflow/frontend/assets/ribbon-8h1u3qoT.js +0 -6
- langflow/frontend/assets/rocket-6Gkkhs52.js +0 -6
- langflow/frontend/assets/rocking-chair-Ds11M0kh.js +0 -6
- langflow/frontend/assets/roller-coaster-B1FJdn_M.js +0 -6
- langflow/frontend/assets/rotate-3d-BMruZsY9.js +0 -6
- langflow/frontend/assets/rotate-ccw-DXeuJ4SS.js +0 -6
- langflow/frontend/assets/rotate-ccw-key-D8tWaFpf.js +0 -6
- langflow/frontend/assets/rotate-ccw-square-DqcG1yyF.js +0 -6
- langflow/frontend/assets/rotate-cw-JxVkjAiv.js +0 -6
- langflow/frontend/assets/rotate-cw-square-DIFQHpgn.js +0 -6
- langflow/frontend/assets/route-CyvYbs4s.js +0 -6
- langflow/frontend/assets/route-off-DaW9NN2P.js +0 -6
- langflow/frontend/assets/router-Dj4Gk-iP.js +0 -6
- langflow/frontend/assets/rows-2-Bz25-LGn.js +0 -6
- langflow/frontend/assets/rows-3-BjF2fk8b.js +0 -6
- langflow/frontend/assets/rows-4-CdbGj4cO.js +0 -6
- langflow/frontend/assets/rss-BqrD36sY.js +0 -6
- langflow/frontend/assets/ruler-DDUQN13b.js +0 -6
- langflow/frontend/assets/ruler-dimension-line-B7pClM0L.js +0 -6
- langflow/frontend/assets/russian-ruble-B8-eH9Vh.js +0 -6
- langflow/frontend/assets/sailboat-BNh0r77k.js +0 -6
- langflow/frontend/assets/salad-DYdtRABF.js +0 -6
- langflow/frontend/assets/sandwich-BM6ZxGik.js +0 -6
- langflow/frontend/assets/satellite-bn5mBvGZ.js +0 -6
- langflow/frontend/assets/satellite-dish-CInF6yLC.js +0 -6
- langflow/frontend/assets/saudi-riyal-DXjre3xO.js +0 -6
- langflow/frontend/assets/save-CnwN2YAE.js +0 -6
- langflow/frontend/assets/save-all-Drrj35Ia.js +0 -6
- langflow/frontend/assets/save-off-M8ohigKB.js +0 -6
- langflow/frontend/assets/scale-3d-CaKlEBy5.js +0 -6
- langflow/frontend/assets/scale-Cu8-QWt2.js +0 -6
- langflow/frontend/assets/scaling-BoA8uGVv.js +0 -6
- langflow/frontend/assets/scan-C_H_s3YU.js +0 -6
- langflow/frontend/assets/scan-barcode-CrdT66Ss.js +0 -6
- langflow/frontend/assets/scan-eye-DVxu5yMg.js +0 -6
- langflow/frontend/assets/scan-face-C-BbOdW7.js +0 -6
- langflow/frontend/assets/scan-heart-BDP49vL1.js +0 -6
- langflow/frontend/assets/scan-line-CvXcAKFz.js +0 -6
- langflow/frontend/assets/scan-qr-code-CGmOxmjp.js +0 -6
- langflow/frontend/assets/scan-search-lVHucfuL.js +0 -6
- langflow/frontend/assets/scan-text-BWlFO81f.js +0 -6
- langflow/frontend/assets/school-DIrnM4NK.js +0 -6
- langflow/frontend/assets/scissors-D_tqn99a.js +0 -6
- langflow/frontend/assets/scissors-line-dashed-BmzyE8L6.js +0 -6
- langflow/frontend/assets/screen-share-QrqusLrN.js +0 -6
- langflow/frontend/assets/screen-share-off-CChuEPW1.js +0 -6
- langflow/frontend/assets/scroll-CJKwovV_.js +0 -6
- langflow/frontend/assets/scroll-text-DrBBLd5M.js +0 -6
- langflow/frontend/assets/search-check-pd5Z-lqD.js +0 -6
- langflow/frontend/assets/search-code-Dv1aBkEZ.js +0 -6
- langflow/frontend/assets/search-slash-C7hA1-is.js +0 -6
- langflow/frontend/assets/search-x-BBxtqy3_.js +0 -6
- langflow/frontend/assets/section-BQnHgm0Z.js +0 -6
- langflow/frontend/assets/send-Bic93nFl.js +0 -6
- langflow/frontend/assets/send-horizontal-Djz0F2nb.js +0 -6
- langflow/frontend/assets/send-to-back-Du3rjlDy.js +0 -6
- langflow/frontend/assets/separator-horizontal-DK0ZpL2Q.js +0 -6
- langflow/frontend/assets/separator-vertical-Zxsg5S5s.js +0 -6
- langflow/frontend/assets/server-cog-DgcA3tg2.js +0 -6
- langflow/frontend/assets/server-crash-Lc5DjUjZ.js +0 -6
- langflow/frontend/assets/server-cxBG8tpy.js +0 -6
- langflow/frontend/assets/server-off-C1-ZzWKv.js +0 -6
- langflow/frontend/assets/settings-2-BZ95YTfB.js +0 -6
- langflow/frontend/assets/settings-DbTdPIpg.js +0 -6
- langflow/frontend/assets/shapes-DhvVOUty.js +0 -6
- langflow/frontend/assets/share-2-CgsPoN9M.js +0 -6
- langflow/frontend/assets/share-BMMVZ7rL.js +0 -6
- langflow/frontend/assets/sheet-DoAFHBc2.js +0 -6
- langflow/frontend/assets/shell-DVTOAKsK.js +0 -6
- langflow/frontend/assets/shield-CdOo33h6.js +0 -6
- langflow/frontend/assets/shield-alert-DBjHf6ln.js +0 -6
- langflow/frontend/assets/shield-ban-iaGkidPw.js +0 -6
- langflow/frontend/assets/shield-check-BcYNKKvn.js +0 -6
- langflow/frontend/assets/shield-ellipsis-CeuabAd1.js +0 -6
- langflow/frontend/assets/shield-half-DslM6pvI.js +0 -6
- langflow/frontend/assets/shield-minus-5D5bC80R.js +0 -6
- langflow/frontend/assets/shield-off-Bs6Dw1oj.js +0 -6
- langflow/frontend/assets/shield-plus-BYTPSZ_j.js +0 -6
- langflow/frontend/assets/shield-question-8di04eB9.js +0 -6
- langflow/frontend/assets/shield-user-BjZpNWs-.js +0 -6
- langflow/frontend/assets/shield-x-DtMjrAR6.js +0 -6
- langflow/frontend/assets/ship-B1FS-0wt.js +0 -6
- langflow/frontend/assets/ship-wheel-CWwqGxuS.js +0 -6
- langflow/frontend/assets/shirt-DDY_cBLI.js +0 -6
- langflow/frontend/assets/shopping-bag-C8yUBVA3.js +0 -6
- langflow/frontend/assets/shopping-basket-DuQiTq_R.js +0 -6
- langflow/frontend/assets/shopping-cart-DXQDHvOm.js +0 -6
- langflow/frontend/assets/shovel-BX6j4P4r.js +0 -6
- langflow/frontend/assets/shower-head-CnHgENtR.js +0 -6
- langflow/frontend/assets/shredder-CNaGhMYw.js +0 -6
- langflow/frontend/assets/shrimp-BKwZUqsk.js +0 -6
- langflow/frontend/assets/shrink-DtBGdGCI.js +0 -6
- langflow/frontend/assets/shrub-BHoEVOKE.js +0 -6
- langflow/frontend/assets/shuffle-ewdvGbAy.js +0 -6
- langflow/frontend/assets/sigma-KzfEfHDJ.js +0 -6
- langflow/frontend/assets/signal-Cty6boDC.js +0 -6
- langflow/frontend/assets/signal-high-o0UeLOaX.js +0 -6
- langflow/frontend/assets/signal-low-BlXUWkId.js +0 -6
- langflow/frontend/assets/signal-medium-Cb-EZQHK.js +0 -6
- langflow/frontend/assets/signal-zero-WgiDibfW.js +0 -6
- langflow/frontend/assets/signature-D6cLBZaG.js +0 -6
- langflow/frontend/assets/signpost-DCNWRGGD.js +0 -6
- langflow/frontend/assets/signpost-big-BRAZrCYB.js +0 -6
- langflow/frontend/assets/siren-CmgQp-ZJ.js +0 -6
- langflow/frontend/assets/skip-back-BiBdMTVG.js +0 -6
- langflow/frontend/assets/skip-forward-DnMYJ9X6.js +0 -6
- langflow/frontend/assets/skull-CvtoSbMr.js +0 -6
- langflow/frontend/assets/slack-C_8L2fXg.js +0 -6
- langflow/frontend/assets/slash-BuhBmsx0.js +0 -6
- langflow/frontend/assets/slice-C33iA43B.js +0 -6
- langflow/frontend/assets/sliders-horizontal-DzuvDOHu.js +0 -6
- langflow/frontend/assets/sliders-vertical-DswThdIG.js +0 -6
- langflow/frontend/assets/smartphone-DLfmh6zg.js +0 -6
- langflow/frontend/assets/smartphone-charging-DM5gpvRw.js +0 -6
- langflow/frontend/assets/smartphone-nfc-4FHMN64h.js +0 -6
- langflow/frontend/assets/smile-DfMqFt_h.js +0 -6
- langflow/frontend/assets/smile-plus-vdR01AAo.js +0 -6
- langflow/frontend/assets/snail-BSe4rGOt.js +0 -6
- langflow/frontend/assets/snowflake-jjr9o6Xt.js +0 -6
- langflow/frontend/assets/sofa-CSdha_xf.js +0 -6
- langflow/frontend/assets/soup-DZaUMUi7.js +0 -6
- langflow/frontend/assets/space-CtU_wGsw.js +0 -6
- langflow/frontend/assets/spade-D6c1SnhI.js +0 -6
- langflow/frontend/assets/sparkle-D4Y-hgf0.js +0 -6
- langflow/frontend/assets/sparkles-D6LCSr3Q.js +0 -6
- langflow/frontend/assets/speaker-cIby5NbL.js +0 -6
- langflow/frontend/assets/speech-BcZoNsRO.js +0 -6
- langflow/frontend/assets/spell-check-2-gCrGa94o.js +0 -6
- langflow/frontend/assets/spell-check-C4VH_2Qb.js +0 -6
- langflow/frontend/assets/spline-30bTTImI.js +0 -6
- langflow/frontend/assets/spline-pointer-cKwSQ01W.js +0 -6
- langflow/frontend/assets/split-CNrHGI-P.js +0 -6
- langflow/frontend/assets/spray-can-MY8gc3Gg.js +0 -6
- langflow/frontend/assets/sprout-CTMnmXTl.js +0 -6
- langflow/frontend/assets/square-DAYnpPeo.js +0 -6
- langflow/frontend/assets/square-activity-BkP8wsck.js +0 -6
- langflow/frontend/assets/square-arrow-down-left-BJCokILI.js +0 -6
- langflow/frontend/assets/square-arrow-down-right-D21bwU3d.js +0 -6
- langflow/frontend/assets/square-arrow-down-wjq_PHOs.js +0 -6
- langflow/frontend/assets/square-arrow-left-ffOKr4VO.js +0 -6
- langflow/frontend/assets/square-arrow-out-down-left-BezNJDBn.js +0 -6
- langflow/frontend/assets/square-arrow-out-down-right-BPuETIWj.js +0 -6
- langflow/frontend/assets/square-arrow-out-up-left-DLD7WE_w.js +0 -6
- langflow/frontend/assets/square-arrow-out-up-right-DA0PM5tU.js +0 -6
- langflow/frontend/assets/square-arrow-right-B4b1_-rA.js +0 -6
- langflow/frontend/assets/square-arrow-up-D1JuObvy.js +0 -6
- langflow/frontend/assets/square-arrow-up-left-C4rWW6J5.js +0 -6
- langflow/frontend/assets/square-arrow-up-right-BccXA4Y9.js +0 -6
- langflow/frontend/assets/square-asterisk-CrzQn13y.js +0 -6
- langflow/frontend/assets/square-bottom-dashed-scissors-DnW0XK0f.js +0 -6
- langflow/frontend/assets/square-chart-gantt-C8R1N8RH.js +0 -6
- langflow/frontend/assets/square-check-D4l21ciO.js +0 -6
- langflow/frontend/assets/square-check-big-DjzIbmzH.js +0 -6
- langflow/frontend/assets/square-chevron-down-BPkxVX0b.js +0 -6
- langflow/frontend/assets/square-chevron-left-ExTGsTLo.js +0 -6
- langflow/frontend/assets/square-chevron-right-BBaghHnR.js +0 -6
- langflow/frontend/assets/square-chevron-up-DkVUGfLD.js +0 -6
- langflow/frontend/assets/square-code-CQFZqV73.js +0 -6
- langflow/frontend/assets/square-dashed-D_wWm-82.js +0 -6
- langflow/frontend/assets/square-dashed-bottom-Bqr8MwXl.js +0 -6
- langflow/frontend/assets/square-dashed-bottom-code-Bjjim6HD.js +0 -6
- langflow/frontend/assets/square-dashed-kanban-CCab8Xca.js +0 -6
- langflow/frontend/assets/square-dashed-mouse-pointer-BxGXrsme.js +0 -6
- langflow/frontend/assets/square-divide-CKI-Up8y.js +0 -6
- langflow/frontend/assets/square-dot-DgcJzw1Q.js +0 -6
- langflow/frontend/assets/square-equal-CSDXQXyV.js +0 -6
- langflow/frontend/assets/square-function-D6lS9fXm.js +0 -6
- langflow/frontend/assets/square-kanban-D1wJC8dg.js +0 -6
- langflow/frontend/assets/square-library-oxh7GiX_.js +0 -6
- langflow/frontend/assets/square-m-D3E68E4o.js +0 -6
- langflow/frontend/assets/square-menu-DkvQRppR.js +0 -6
- langflow/frontend/assets/square-minus-D3EZtgoZ.js +0 -6
- langflow/frontend/assets/square-mouse-pointer-Djj-JU4h.js +0 -6
- langflow/frontend/assets/square-parking-D9m5K58Z.js +0 -6
- langflow/frontend/assets/square-parking-off-Br2o87Vn.js +0 -6
- langflow/frontend/assets/square-pen-54_TzMVB.js +0 -6
- langflow/frontend/assets/square-percent-Pi7Do-mI.js +0 -6
- langflow/frontend/assets/square-pi-d8AE2n6O.js +0 -6
- langflow/frontend/assets/square-pilcrow-CHkd54Ay.js +0 -6
- langflow/frontend/assets/square-play-C7NhfVmU.js +0 -6
- langflow/frontend/assets/square-plus-7W1vqpS2.js +0 -6
- langflow/frontend/assets/square-power-d73kfd02.js +0 -6
- langflow/frontend/assets/square-radical-B_WKpw6e.js +0 -6
- langflow/frontend/assets/square-round-corner-Bt24eSa-.js +0 -6
- langflow/frontend/assets/square-scissors-BPBlO8tj.js +0 -6
- langflow/frontend/assets/square-sigma-B408Hcot.js +0 -6
- langflow/frontend/assets/square-slash-oyzWpALk.js +0 -6
- langflow/frontend/assets/square-split-horizontal-BwcBVle3.js +0 -6
- langflow/frontend/assets/square-split-vertical-D1ATm8h5.js +0 -6
- langflow/frontend/assets/square-square-Y0bNlAeu.js +0 -6
- langflow/frontend/assets/square-stack-DIcbRSYB.js +0 -6
- langflow/frontend/assets/square-terminal-DNbwvTum.js +0 -6
- langflow/frontend/assets/square-user-C6j9Cm_b.js +0 -6
- langflow/frontend/assets/square-user-round-CGV7arDL.js +0 -6
- langflow/frontend/assets/square-x-BSlFsooC.js +0 -6
- langflow/frontend/assets/squares-exclude-BWlUU_LN.js +0 -6
- langflow/frontend/assets/squares-intersect-DC96-VnH.js +0 -6
- langflow/frontend/assets/squares-subtract-V_tzjsIa.js +0 -6
- langflow/frontend/assets/squares-unite-DDAWTUUz.js +0 -6
- langflow/frontend/assets/squircle-CWI8bpGs.js +0 -6
- langflow/frontend/assets/squirrel-DexGqqHj.js +0 -6
- langflow/frontend/assets/stamp-Da9eG7P8.js +0 -6
- langflow/frontend/assets/star-CjU7PovP.js +0 -6
- langflow/frontend/assets/star-half-BEdJF7rh.js +0 -6
- langflow/frontend/assets/star-off-DEHoRhIC.js +0 -6
- langflow/frontend/assets/step-back-BGv8ki_W.js +0 -6
- langflow/frontend/assets/step-forward-CXeF6y97.js +0 -6
- langflow/frontend/assets/stethoscope-B_z5mVjV.js +0 -6
- langflow/frontend/assets/sticker-R-n9lbNf.js +0 -6
- langflow/frontend/assets/sticky-note-at6ea9az.js +0 -6
- langflow/frontend/assets/store-DnHo-Dvu.js +0 -6
- langflow/frontend/assets/stretch-horizontal-zg63Pwn2.js +0 -6
- langflow/frontend/assets/stretch-vertical-CB9Cr8wu.js +0 -6
- langflow/frontend/assets/strikethrough-B3J3AT-j.js +0 -6
- langflow/frontend/assets/subscript-wOCgwyoJ.js +0 -6
- langflow/frontend/assets/sun-1UeCQOnL.js +0 -6
- langflow/frontend/assets/sun-dim-B0YsfXD6.js +0 -6
- langflow/frontend/assets/sun-medium-CUw1fOHy.js +0 -6
- langflow/frontend/assets/sun-moon-BkXUm2zc.js +0 -6
- langflow/frontend/assets/sun-snow-AD_NFDlL.js +0 -6
- langflow/frontend/assets/sunrise-DrRDOJnx.js +0 -6
- langflow/frontend/assets/sunset-BmTyIBYG.js +0 -6
- langflow/frontend/assets/superscript-DAkv6GWV.js +0 -6
- langflow/frontend/assets/swatch-book-PuFO7fNf.js +0 -6
- langflow/frontend/assets/swiss-franc-CvCwlH-1.js +0 -6
- langflow/frontend/assets/switch-camera-CVKjOYy0.js +0 -6
- langflow/frontend/assets/sword-Dl4xK_Hg.js +0 -6
- langflow/frontend/assets/swords-B2bEsoTz.js +0 -6
- langflow/frontend/assets/syringe-CWwiBNw1.js +0 -6
- langflow/frontend/assets/table-2-5Ub1Hp1X.js +0 -6
- langflow/frontend/assets/table-cQlSPuPD.js +0 -6
- langflow/frontend/assets/table-cells-merge-5Lwptgjx.js +0 -6
- langflow/frontend/assets/table-cells-split-D5HaR7Ur.js +0 -6
- langflow/frontend/assets/table-columns-split-Br2xOFx-.js +0 -6
- langflow/frontend/assets/table-of-contents-J33-4h_p.js +0 -6
- langflow/frontend/assets/table-properties-lG9kds2q.js +0 -6
- langflow/frontend/assets/table-rows-split-NcY8df44.js +0 -6
- langflow/frontend/assets/tablet-bAWYk7ZU.js +0 -6
- langflow/frontend/assets/tablet-smartphone-CFUKE6kR.js +0 -6
- langflow/frontend/assets/tablets-P6mDX7J9.js +0 -6
- langflow/frontend/assets/tag-CQdskkfZ.js +0 -6
- langflow/frontend/assets/tags-BxGGU895.js +0 -6
- langflow/frontend/assets/tally-1-SqGUi5E_.js +0 -6
- langflow/frontend/assets/tally-2-DeYyaYLG.js +0 -6
- langflow/frontend/assets/tally-3-CaXs59HO.js +0 -6
- langflow/frontend/assets/tally-4-CmBeVOUP.js +0 -6
- langflow/frontend/assets/tally-5-Cp6xqAlX.js +0 -6
- langflow/frontend/assets/tangent-Bu8LuRAW.js +0 -6
- langflow/frontend/assets/target-CatpZfLc.js +0 -6
- langflow/frontend/assets/telescope-BPZqaaPb.js +0 -6
- langflow/frontend/assets/tent-qOuOFpz4.js +0 -6
- langflow/frontend/assets/tent-tree-DmiIwVgi.js +0 -6
- langflow/frontend/assets/terminal-BYbGvjDK.js +0 -6
- langflow/frontend/assets/test-tube-D_FhTaaq.js +0 -6
- langflow/frontend/assets/test-tube-diagonal-CCU3bG1X.js +0 -6
- langflow/frontend/assets/test-tubes-DukEK2vU.js +0 -6
- langflow/frontend/assets/text-CwwKm1R0.js +0 -6
- langflow/frontend/assets/text-cursor-BimJjGf3.js +0 -6
- langflow/frontend/assets/text-cursor-input-B_kXpYRl.js +0 -6
- langflow/frontend/assets/text-quote-CBAkQ8QD.js +0 -6
- langflow/frontend/assets/text-search-B7Sl0pKm.js +0 -6
- langflow/frontend/assets/text-select-DjpMY6Y4.js +0 -6
- langflow/frontend/assets/theater-Bo3HTTbl.js +0 -6
- langflow/frontend/assets/thermometer-Bu6gSpo-.js +0 -6
- langflow/frontend/assets/thermometer-snowflake-hm8pKZNQ.js +0 -6
- langflow/frontend/assets/thermometer-sun-DP-3bkYe.js +0 -6
- langflow/frontend/assets/thumbs-down-BN2xuLtF.js +0 -6
- langflow/frontend/assets/thumbs-up-CvtaTShj.js +0 -6
- langflow/frontend/assets/ticket-B8jfAFNy.js +0 -6
- langflow/frontend/assets/ticket-check-MV1S9SUz.js +0 -6
- langflow/frontend/assets/ticket-minus-D9NRuCuh.js +0 -6
- langflow/frontend/assets/ticket-percent-Cx11tpWt.js +0 -6
- langflow/frontend/assets/ticket-plus-B4SeZsFv.js +0 -6
- langflow/frontend/assets/ticket-slash-DmFj6_tZ.js +0 -6
- langflow/frontend/assets/ticket-x-BV_YZPkD.js +0 -6
- langflow/frontend/assets/tickets-BuIASBDi.js +0 -6
- langflow/frontend/assets/tickets-plane-BVCZthgO.js +0 -6
- langflow/frontend/assets/timer-5MEGKA2T.js +0 -6
- langflow/frontend/assets/timer-off-C-i8-CA1.js +0 -6
- langflow/frontend/assets/timer-reset-DN9eZBRg.js +0 -6
- langflow/frontend/assets/toggle-left-BCOe-Uk4.js +0 -6
- langflow/frontend/assets/toggle-right-ersa9_T2.js +0 -6
- langflow/frontend/assets/toilet-DpxVM3Ui.js +0 -6
- langflow/frontend/assets/tornado-JM7DbumL.js +0 -6
- langflow/frontend/assets/torus-Bei_YR1p.js +0 -6
- langflow/frontend/assets/touchpad-CXUqWqt1.js +0 -6
- langflow/frontend/assets/touchpad-off-DyO9VlXZ.js +0 -6
- langflow/frontend/assets/tower-control-BKAIg-Wk.js +0 -6
- langflow/frontend/assets/toy-brick-DcGrcKQp.js +0 -6
- langflow/frontend/assets/tractor-B2dLboVj.js +0 -6
- langflow/frontend/assets/traffic-cone-BEvlA0ug.js +0 -6
- langflow/frontend/assets/train-front-CxEtDqw-.js +0 -6
- langflow/frontend/assets/train-front-tunnel-6851wkpJ.js +0 -6
- langflow/frontend/assets/train-track-Cgy3PJec.js +0 -6
- langflow/frontend/assets/tram-front-C5eL4T0U.js +0 -6
- langflow/frontend/assets/transgender-W81LXVG9.js +0 -6
- langflow/frontend/assets/trash-C-jmCiLI.js +0 -6
- langflow/frontend/assets/tree-deciduous-DYmfvFfP.js +0 -6
- langflow/frontend/assets/tree-palm-Bv1YDrxR.js +0 -6
- langflow/frontend/assets/tree-pine-F7CHJhUF.js +0 -6
- langflow/frontend/assets/trees-CQI05VGt.js +0 -6
- langflow/frontend/assets/trello-D1yKllL-.js +0 -6
- langflow/frontend/assets/trending-down-7BR48si1.js +0 -6
- langflow/frontend/assets/trending-up-DxGJGJI4.js +0 -6
- langflow/frontend/assets/trending-up-down-Bv-0EkEM.js +0 -6
- langflow/frontend/assets/triangle-CqL0BuIo.js +0 -6
- langflow/frontend/assets/triangle-alert-BurSbX0E.js +0 -6
- langflow/frontend/assets/triangle-dashed-D0AlVMT4.js +0 -6
- langflow/frontend/assets/triangle-right-Cjlm7XfT.js +0 -6
- langflow/frontend/assets/trophy-DlqrTI3t.js +0 -6
- langflow/frontend/assets/truck-Be0AHBIn.js +0 -6
- langflow/frontend/assets/truck-electric-CTzzAU12.js +0 -6
- langflow/frontend/assets/turtle-CwgcW4BG.js +0 -6
- langflow/frontend/assets/tv-Cvkiuwa4.js +0 -6
- langflow/frontend/assets/tv-minimal-BKMMXObd.js +0 -6
- langflow/frontend/assets/tv-minimal-play-C2zC8Mf7.js +0 -6
- langflow/frontend/assets/twitch-BaNtc3ms.js +0 -6
- langflow/frontend/assets/twitter-D8cJDYlb.js +0 -6
- langflow/frontend/assets/type-B6-SVmrS.js +0 -6
- langflow/frontend/assets/type-outline-DF201kHQ.js +0 -6
- langflow/frontend/assets/umbrella-CUjrRZLn.js +0 -6
- langflow/frontend/assets/umbrella-off-DUIvDGWF.js +0 -6
- langflow/frontend/assets/underline-BZYW7kZe.js +0 -6
- langflow/frontend/assets/undo-2-_LSGuM6A.js +0 -6
- langflow/frontend/assets/undo-D0ua0irY.js +0 -6
- langflow/frontend/assets/undo-dot-DHpoiELc.js +0 -6
- langflow/frontend/assets/unfold-horizontal-Baz2NDym.js +0 -6
- langflow/frontend/assets/unfold-vertical-B5z_zoi2.js +0 -6
- langflow/frontend/assets/ungroup-Byf-HoMq.js +0 -6
- langflow/frontend/assets/university-BfeHsa2H.js +0 -6
- langflow/frontend/assets/unlink-2-Bf6hkBxc.js +0 -6
- langflow/frontend/assets/unlink-PTIP9C1t.js +0 -6
- langflow/frontend/assets/unplug-dq9vW1e5.js +0 -6
- langflow/frontend/assets/upload-ClL_xcHX.js +0 -6
- langflow/frontend/assets/usb-CMQz5Bbx.js +0 -6
- langflow/frontend/assets/use-post-add-user-CijdM3CW.js +0 -1
- langflow/frontend/assets/user-CJbOlfYO.js +0 -6
- langflow/frontend/assets/user-check-D2TJIdbC.js +0 -6
- langflow/frontend/assets/user-cog-xgFL0Fjx.js +0 -6
- langflow/frontend/assets/user-lock-4Ccl2f31.js +0 -6
- langflow/frontend/assets/user-minus-3-XA_v8O.js +0 -6
- langflow/frontend/assets/user-pen-B6_m96L5.js +0 -6
- langflow/frontend/assets/user-plus-DcRRk4IL.js +0 -6
- langflow/frontend/assets/user-round-B4Dz_J0y.js +0 -6
- langflow/frontend/assets/user-round-check-BuqG6Tln.js +0 -6
- langflow/frontend/assets/user-round-cog-CkomKcE0.js +0 -6
- langflow/frontend/assets/user-round-minus-BOY_xYco.js +0 -6
- langflow/frontend/assets/user-round-pen-QbRIGglu.js +0 -6
- langflow/frontend/assets/user-round-plus-BC1vyhU-.js +0 -6
- langflow/frontend/assets/user-round-search-CDMrfpLU.js +0 -6
- langflow/frontend/assets/user-round-x-B3E2RJ6I.js +0 -6
- langflow/frontend/assets/user-search-DF_KLVhe.js +0 -6
- langflow/frontend/assets/user-x-DgFDuuYq.js +0 -6
- langflow/frontend/assets/users-C9tV3bcv.js +0 -6
- langflow/frontend/assets/users-round-m5S3NT8N.js +0 -6
- langflow/frontend/assets/utensils-CNMxOrnM.js +0 -6
- langflow/frontend/assets/utensils-crossed-CWsvzFyf.js +0 -6
- langflow/frontend/assets/utility-pole-PSm7b5qq.js +0 -6
- langflow/frontend/assets/variable-Dosn3l0Q.js +0 -6
- langflow/frontend/assets/vault-DJCdrDkA.js +0 -6
- langflow/frontend/assets/vegan-BzI5fdli.js +0 -6
- langflow/frontend/assets/venetian-mask-DhNCjf4N.js +0 -6
- langflow/frontend/assets/venus-Dz-DpZXp.js +0 -6
- langflow/frontend/assets/venus-and-mars-Bl6thHIW.js +0 -6
- langflow/frontend/assets/vibrate-BtFaim1I.js +0 -6
- langflow/frontend/assets/vibrate-off-CrxEKLLu.js +0 -6
- langflow/frontend/assets/video-CskvLdG0.js +0 -6
- langflow/frontend/assets/video-off-BLD65TIj.js +0 -6
- langflow/frontend/assets/videotape-CFtB6Y7N.js +0 -6
- langflow/frontend/assets/view-vJgBVvc1.js +0 -6
- langflow/frontend/assets/voicemail-BLTEEoA_.js +0 -6
- langflow/frontend/assets/volleyball-CmsNUAQG.js +0 -6
- langflow/frontend/assets/volume-1-GNgUvREd.js +0 -6
- langflow/frontend/assets/volume-2--ZL1-glW.js +0 -6
- langflow/frontend/assets/volume-Cb0M2vA7.js +0 -6
- langflow/frontend/assets/volume-off-B0WaOdRU.js +0 -6
- langflow/frontend/assets/volume-x-N8PIRYGP.js +0 -6
- langflow/frontend/assets/vote-BybNJmTk.js +0 -6
- langflow/frontend/assets/wallet--kGpRM2_.js +0 -6
- langflow/frontend/assets/wallet-cards-DlB31LM8.js +0 -6
- langflow/frontend/assets/wallet-minimal-Bi8ZraZE.js +0 -6
- langflow/frontend/assets/wallpaper-DtDpeCXF.js +0 -6
- langflow/frontend/assets/wand-DCe0uAlf.js +0 -6
- langflow/frontend/assets/wand-sparkles-3r2BJJrS.js +0 -6
- langflow/frontend/assets/warehouse-BKHflVjD.js +0 -6
- langflow/frontend/assets/washing-machine-DX7eBIvZ.js +0 -6
- langflow/frontend/assets/watch-DtXtjDr9.js +0 -6
- langflow/frontend/assets/waves-CiYh0DqU.js +0 -6
- langflow/frontend/assets/waves-ladder-Yzo4x2dv.js +0 -6
- langflow/frontend/assets/waypoints-Be0aFt5U.js +0 -6
- langflow/frontend/assets/webcam-BrDmzAmL.js +0 -6
- langflow/frontend/assets/webhook-DJlX-3N-.js +0 -6
- langflow/frontend/assets/webhook-off-B7Eotjfb.js +0 -6
- langflow/frontend/assets/weight-DEkTHimE.js +0 -6
- langflow/frontend/assets/wheat-BinBJSa-.js +0 -6
- langflow/frontend/assets/wheat-off-DOI2qhbr.js +0 -6
- langflow/frontend/assets/whole-word-DoiXEyAQ.js +0 -6
- langflow/frontend/assets/wifi-C5iLP1z0.js +0 -6
- langflow/frontend/assets/wifi-high-WCT9uviK.js +0 -6
- langflow/frontend/assets/wifi-low-bhDZjYYt.js +0 -6
- langflow/frontend/assets/wifi-off-DybtTHDv.js +0 -6
- langflow/frontend/assets/wifi-pen-YZxtC-1t.js +0 -6
- langflow/frontend/assets/wifi-zero-Ck1ckTXM.js +0 -6
- langflow/frontend/assets/wind-DpU4CZZc.js +0 -6
- langflow/frontend/assets/wind-arrow-down-CF-PTBQL.js +0 -6
- langflow/frontend/assets/wine-DZzgE7cg.js +0 -6
- langflow/frontend/assets/wine-off-CKFsTdqQ.js +0 -6
- langflow/frontend/assets/workflow-B9ICwfQ9.js +0 -6
- langflow/frontend/assets/worm-B9DE2nB9.js +0 -6
- langflow/frontend/assets/wrap-text-GILhD4dN.js +0 -6
- langflow/frontend/assets/wrench-BVYdz0EV.js +0 -6
- langflow/frontend/assets/youtube-6WX8K7Zb.js +0 -6
- langflow/frontend/assets/zap-BZEXKDc5.js +0 -6
- langflow/frontend/assets/zap-off-B4uFrIUs.js +0 -6
- langflow/frontend/assets/zoom-in-CWEynbHp.js +0 -6
- langflow/frontend/assets/zoom-out-3VosI-6u.js +0 -6
- langflow_base_nightly-1.7.0.dev27.dist-info/METADATA +0 -99
- langflow_base_nightly-1.7.0.dev27.dist-info/RECORD +0 -2277
- {langflow_base_nightly-1.7.0.dev27.dist-info → langflow_base_nightly-1.7.0.dev29.dist-info}/WHEEL +0 -0
- {langflow_base_nightly-1.7.0.dev27.dist-info → langflow_base_nightly-1.7.0.dev29.dist-info}/entry_points.txt +0 -0
|
@@ -520,7 +520,7 @@
|
|
|
520
520
|
},
|
|
521
521
|
{
|
|
522
522
|
"name": "fastapi",
|
|
523
|
-
"version": "0.
|
|
523
|
+
"version": "0.123.0"
|
|
524
524
|
},
|
|
525
525
|
{
|
|
526
526
|
"name": "lfx",
|
|
@@ -815,7 +815,7 @@
|
|
|
815
815
|
"dependencies": [
|
|
816
816
|
{
|
|
817
817
|
"name": "langchain_core",
|
|
818
|
-
"version": "0.3.
|
|
818
|
+
"version": "0.3.80"
|
|
819
819
|
},
|
|
820
820
|
{
|
|
821
821
|
"name": "pydantic",
|
|
@@ -1853,7 +1853,7 @@
|
|
|
1853
1853
|
"legacy": false,
|
|
1854
1854
|
"lf_version": "1.4.2",
|
|
1855
1855
|
"metadata": {
|
|
1856
|
-
"code_hash": "
|
|
1856
|
+
"code_hash": "d3ef27c15b29",
|
|
1857
1857
|
"dependencies": {
|
|
1858
1858
|
"dependencies": [
|
|
1859
1859
|
{
|
|
@@ -1862,7 +1862,7 @@
|
|
|
1862
1862
|
},
|
|
1863
1863
|
{
|
|
1864
1864
|
"name": "ibm_watsonx_ai",
|
|
1865
|
-
"version": "1.4.
|
|
1865
|
+
"version": "1.4.7"
|
|
1866
1866
|
},
|
|
1867
1867
|
{
|
|
1868
1868
|
"name": "langchain_openai",
|
|
@@ -1882,7 +1882,7 @@
|
|
|
1882
1882
|
},
|
|
1883
1883
|
{
|
|
1884
1884
|
"name": "langchain_ibm",
|
|
1885
|
-
"version": "0.3.
|
|
1885
|
+
"version": "0.3.20"
|
|
1886
1886
|
}
|
|
1887
1887
|
],
|
|
1888
1888
|
"total_dependencies": 7
|
|
@@ -2015,7 +2015,7 @@
|
|
|
2015
2015
|
"show": true,
|
|
2016
2016
|
"title_case": false,
|
|
2017
2017
|
"type": "code",
|
|
2018
|
-
"value": "from typing import Any\n\nimport requests\nfrom ibm_watsonx_ai.metanames import EmbedTextParamsMetaNames\nfrom langchain_openai import OpenAIEmbeddings\n\nfrom lfx.base.embeddings.embeddings_class import EmbeddingsWithModels\nfrom lfx.base.embeddings.model import LCEmbeddingsModel\nfrom lfx.base.models.model_utils import get_ollama_models, is_valid_ollama_url\nfrom lfx.base.models.openai_constants import OPENAI_EMBEDDING_MODEL_NAMES\nfrom lfx.base.models.watsonx_constants import (\n IBM_WATSONX_URLS,\n WATSONX_EMBEDDING_MODEL_NAMES,\n)\nfrom lfx.field_typing import Embeddings\nfrom lfx.io import (\n BoolInput,\n DictInput,\n DropdownInput,\n FloatInput,\n IntInput,\n MessageTextInput,\n SecretStrInput,\n)\nfrom lfx.log.logger import logger\nfrom lfx.schema.dotdict import dotdict\nfrom lfx.utils.util import transform_localhost_url\n\n# Ollama API constants\nHTTP_STATUS_OK = 200\nJSON_MODELS_KEY = \"models\"\nJSON_NAME_KEY = \"name\"\nJSON_CAPABILITIES_KEY = \"capabilities\"\nDESIRED_CAPABILITY = \"embedding\"\nDEFAULT_OLLAMA_URL = \"http://localhost:11434\"\n\n\nclass EmbeddingModelComponent(LCEmbeddingsModel):\n display_name = \"Embedding Model\"\n description = \"Generate embeddings using a specified provider.\"\n documentation: str = \"https://docs.langflow.org/components-embedding-models\"\n icon = \"binary\"\n name = \"EmbeddingModel\"\n category = \"models\"\n\n inputs = [\n DropdownInput(\n name=\"provider\",\n display_name=\"Model Provider\",\n options=[\"OpenAI\", \"Ollama\", \"IBM watsonx.ai\"],\n value=\"OpenAI\",\n info=\"Select the embedding model provider\",\n real_time_refresh=True,\n options_metadata=[{\"icon\": \"OpenAI\"}, {\"icon\": \"Ollama\"}, {\"icon\": \"WatsonxAI\"}],\n ),\n MessageTextInput(\n name=\"api_base\",\n display_name=\"API Base URL\",\n info=\"Base URL for the API. Leave empty for default.\",\n advanced=True,\n ),\n MessageTextInput(\n name=\"ollama_base_url\",\n display_name=\"Ollama API URL\",\n info=f\"Endpoint of the Ollama API (Ollama only). Defaults to {DEFAULT_OLLAMA_URL}\",\n value=DEFAULT_OLLAMA_URL,\n show=False,\n real_time_refresh=True,\n load_from_db=True,\n ),\n DropdownInput(\n name=\"base_url_ibm_watsonx\",\n display_name=\"watsonx API Endpoint\",\n info=\"The base URL of the API (IBM watsonx.ai only)\",\n options=IBM_WATSONX_URLS,\n value=IBM_WATSONX_URLS[0],\n show=False,\n real_time_refresh=True,\n ),\n DropdownInput(\n name=\"model\",\n display_name=\"Model Name\",\n options=OPENAI_EMBEDDING_MODEL_NAMES,\n value=OPENAI_EMBEDDING_MODEL_NAMES[0],\n info=\"Select the embedding model to use\",\n real_time_refresh=True,\n refresh_button=True,\n ),\n SecretStrInput(\n name=\"api_key\",\n display_name=\"OpenAI API Key\",\n info=\"Model Provider API key\",\n required=True,\n show=True,\n real_time_refresh=True,\n ),\n # Watson-specific inputs\n MessageTextInput(\n name=\"project_id\",\n display_name=\"Project ID\",\n info=\"IBM watsonx.ai Project ID (required for IBM watsonx.ai)\",\n show=False,\n ),\n IntInput(\n name=\"dimensions\",\n display_name=\"Dimensions\",\n info=\"The number of dimensions the resulting output embeddings should have. \"\n \"Only supported by certain models.\",\n advanced=True,\n ),\n IntInput(name=\"chunk_size\", display_name=\"Chunk Size\", advanced=True, value=1000),\n FloatInput(name=\"request_timeout\", display_name=\"Request Timeout\", advanced=True),\n IntInput(name=\"max_retries\", display_name=\"Max Retries\", advanced=True, value=3),\n BoolInput(name=\"show_progress_bar\", display_name=\"Show Progress Bar\", advanced=True),\n DictInput(\n name=\"model_kwargs\",\n display_name=\"Model Kwargs\",\n advanced=True,\n info=\"Additional keyword arguments to pass to the model.\",\n ),\n IntInput(\n name=\"truncate_input_tokens\",\n display_name=\"Truncate Input Tokens\",\n advanced=True,\n value=200,\n show=False,\n ),\n BoolInput(\n name=\"input_text\",\n display_name=\"Include the original text in the output\",\n value=True,\n advanced=True,\n show=False,\n ),\n ]\n\n @staticmethod\n def fetch_ibm_models(base_url: str) -> list[str]:\n \"\"\"Fetch available models from the watsonx.ai API.\"\"\"\n try:\n endpoint = f\"{base_url}/ml/v1/foundation_model_specs\"\n params = {\n \"version\": \"2024-09-16\",\n \"filters\": \"function_embedding,!lifecycle_withdrawn:and\",\n }\n response = requests.get(endpoint, params=params, timeout=10)\n response.raise_for_status()\n data = response.json()\n models = [model[\"model_id\"] for model in data.get(\"resources\", [])]\n return sorted(models)\n except Exception: # noqa: BLE001\n logger.exception(\"Error fetching models\")\n return WATSONX_EMBEDDING_MODEL_NAMES\n\n async def build_embeddings(self) -> Embeddings:\n provider = self.provider\n model = self.model\n api_key = self.api_key\n api_base = self.api_base\n base_url_ibm_watsonx = self.base_url_ibm_watsonx\n ollama_base_url = self.ollama_base_url\n dimensions = self.dimensions\n chunk_size = self.chunk_size\n request_timeout = self.request_timeout\n max_retries = self.max_retries\n show_progress_bar = self.show_progress_bar\n model_kwargs = self.model_kwargs or {}\n\n if provider == \"OpenAI\":\n if not api_key:\n msg = \"OpenAI API key is required when using OpenAI provider\"\n raise ValueError(msg)\n\n # Create the primary embedding instance\n embeddings_instance = OpenAIEmbeddings(\n model=model,\n dimensions=dimensions or None,\n base_url=api_base or None,\n api_key=api_key,\n chunk_size=chunk_size,\n max_retries=max_retries,\n timeout=request_timeout or None,\n show_progress_bar=show_progress_bar,\n model_kwargs=model_kwargs,\n )\n\n # Create dedicated instances for each available model\n available_models_dict = {}\n for model_name in OPENAI_EMBEDDING_MODEL_NAMES:\n available_models_dict[model_name] = OpenAIEmbeddings(\n model=model_name,\n dimensions=dimensions or None, # Use same dimensions config for all\n base_url=api_base or None,\n api_key=api_key,\n chunk_size=chunk_size,\n max_retries=max_retries,\n timeout=request_timeout or None,\n show_progress_bar=show_progress_bar,\n model_kwargs=model_kwargs,\n )\n\n return EmbeddingsWithModels(\n embeddings=embeddings_instance,\n available_models=available_models_dict,\n )\n\n if provider == \"Ollama\":\n try:\n from langchain_ollama import OllamaEmbeddings\n except ImportError:\n try:\n from langchain_community.embeddings import OllamaEmbeddings\n except ImportError:\n msg = \"Please install langchain-ollama: pip install langchain-ollama\"\n raise ImportError(msg) from None\n\n transformed_base_url = transform_localhost_url(ollama_base_url)\n\n # Check if URL contains /v1 suffix (OpenAI-compatible mode)\n if transformed_base_url and transformed_base_url.rstrip(\"/\").endswith(\"/v1\"):\n # Strip /v1 suffix and log warning\n transformed_base_url = transformed_base_url.rstrip(\"/\").removesuffix(\"/v1\")\n logger.warning(\n \"Detected '/v1' suffix in base URL. The Ollama component uses the native Ollama API, \"\n \"not the OpenAI-compatible API. The '/v1' suffix has been automatically removed. \"\n \"If you want to use the OpenAI-compatible API, please use the OpenAI component instead. \"\n \"Learn more at https://docs.ollama.com/openai#openai-compatibility\"\n )\n\n final_base_url = transformed_base_url or \"http://localhost:11434\"\n\n # Create the primary embedding instance\n embeddings_instance = OllamaEmbeddings(\n model=model,\n base_url=final_base_url,\n **model_kwargs,\n )\n\n # Fetch available Ollama models\n available_model_names = await get_ollama_models(\n base_url_value=self.ollama_base_url,\n desired_capability=DESIRED_CAPABILITY,\n json_models_key=JSON_MODELS_KEY,\n json_name_key=JSON_NAME_KEY,\n json_capabilities_key=JSON_CAPABILITIES_KEY,\n )\n\n # Create dedicated instances for each available model\n available_models_dict = {}\n for model_name in available_model_names:\n available_models_dict[model_name] = OllamaEmbeddings(\n model=model_name,\n base_url=final_base_url,\n **model_kwargs,\n )\n\n return EmbeddingsWithModels(\n embeddings=embeddings_instance,\n available_models=available_models_dict,\n )\n\n if provider == \"IBM watsonx.ai\":\n try:\n from langchain_ibm import WatsonxEmbeddings\n except ImportError:\n msg = \"Please install langchain-ibm: pip install langchain-ibm\"\n raise ImportError(msg) from None\n\n if not api_key:\n msg = \"IBM watsonx.ai API key is required when using IBM watsonx.ai provider\"\n raise ValueError(msg)\n\n project_id = self.project_id\n\n if not project_id:\n msg = \"Project ID is required for IBM watsonx.ai provider\"\n raise ValueError(msg)\n\n from ibm_watsonx_ai import APIClient, Credentials\n\n final_url = base_url_ibm_watsonx or \"https://us-south.ml.cloud.ibm.com\"\n\n credentials = Credentials(\n api_key=self.api_key,\n url=final_url,\n )\n\n api_client = APIClient(credentials)\n\n params = {\n EmbedTextParamsMetaNames.TRUNCATE_INPUT_TOKENS: self.truncate_input_tokens,\n EmbedTextParamsMetaNames.RETURN_OPTIONS: {\"input_text\": self.input_text},\n }\n\n # Create the primary embedding instance\n embeddings_instance = WatsonxEmbeddings(\n model_id=model,\n params=params,\n watsonx_client=api_client,\n project_id=project_id,\n )\n\n # Fetch available IBM watsonx.ai models\n available_model_names = self.fetch_ibm_models(final_url)\n\n # Create dedicated instances for each available model\n available_models_dict = {}\n for model_name in available_model_names:\n available_models_dict[model_name] = WatsonxEmbeddings(\n model_id=model_name,\n params=params,\n watsonx_client=api_client,\n project_id=project_id,\n )\n\n return EmbeddingsWithModels(\n embeddings=embeddings_instance,\n available_models=available_models_dict,\n )\n\n msg = f\"Unknown provider: {provider}\"\n raise ValueError(msg)\n\n async def update_build_config(\n self, build_config: dotdict, field_value: Any, field_name: str | None = None\n ) -> dotdict:\n if field_name == \"provider\":\n if field_value == \"OpenAI\":\n build_config[\"model\"][\"options\"] = OPENAI_EMBEDDING_MODEL_NAMES\n build_config[\"model\"][\"value\"] = OPENAI_EMBEDDING_MODEL_NAMES[0]\n build_config[\"api_key\"][\"display_name\"] = \"OpenAI API Key\"\n build_config[\"api_key\"][\"required\"] = True\n build_config[\"api_key\"][\"show\"] = True\n build_config[\"api_base\"][\"display_name\"] = \"OpenAI API Base URL\"\n build_config[\"api_base\"][\"advanced\"] = True\n build_config[\"api_base\"][\"show\"] = True\n build_config[\"ollama_base_url\"][\"show\"] = False\n build_config[\"project_id\"][\"show\"] = False\n build_config[\"base_url_ibm_watsonx\"][\"show\"] = False\n build_config[\"truncate_input_tokens\"][\"show\"] = False\n build_config[\"input_text\"][\"show\"] = False\n elif field_value == \"Ollama\":\n build_config[\"ollama_base_url\"][\"show\"] = True\n\n if await is_valid_ollama_url(url=self.ollama_base_url):\n try:\n models = await get_ollama_models(\n base_url_value=self.ollama_base_url,\n desired_capability=DESIRED_CAPABILITY,\n json_models_key=JSON_MODELS_KEY,\n json_name_key=JSON_NAME_KEY,\n json_capabilities_key=JSON_CAPABILITIES_KEY,\n )\n build_config[\"model\"][\"options\"] = models\n build_config[\"model\"][\"value\"] = models[0] if models else \"\"\n except ValueError:\n build_config[\"model\"][\"options\"] = []\n build_config[\"model\"][\"value\"] = \"\"\n else:\n build_config[\"model\"][\"options\"] = []\n build_config[\"model\"][\"value\"] = \"\"\n build_config[\"truncate_input_tokens\"][\"show\"] = False\n build_config[\"input_text\"][\"show\"] = False\n build_config[\"api_key\"][\"display_name\"] = \"API Key (Optional)\"\n build_config[\"api_key\"][\"required\"] = False\n build_config[\"api_key\"][\"show\"] = False\n build_config[\"api_base\"][\"show\"] = False\n build_config[\"project_id\"][\"show\"] = False\n build_config[\"base_url_ibm_watsonx\"][\"show\"] = False\n\n elif field_value == \"IBM watsonx.ai\":\n build_config[\"model\"][\"options\"] = self.fetch_ibm_models(base_url=self.base_url_ibm_watsonx)\n build_config[\"model\"][\"value\"] = self.fetch_ibm_models(base_url=self.base_url_ibm_watsonx)[0]\n build_config[\"api_key\"][\"display_name\"] = \"IBM watsonx.ai API Key\"\n build_config[\"api_key\"][\"required\"] = True\n build_config[\"api_key\"][\"show\"] = True\n build_config[\"api_base\"][\"show\"] = False\n build_config[\"ollama_base_url\"][\"show\"] = False\n build_config[\"base_url_ibm_watsonx\"][\"show\"] = True\n build_config[\"project_id\"][\"show\"] = True\n build_config[\"truncate_input_tokens\"][\"show\"] = True\n build_config[\"input_text\"][\"show\"] = True\n elif field_name == \"base_url_ibm_watsonx\":\n build_config[\"model\"][\"options\"] = self.fetch_ibm_models(base_url=field_value)\n build_config[\"model\"][\"value\"] = self.fetch_ibm_models(base_url=field_value)[0]\n elif field_name == \"ollama_base_url\":\n # # Refresh Ollama models when base URL changes\n # if hasattr(self, \"provider\") and self.provider == \"Ollama\":\n # Use field_value if provided, otherwise fall back to instance attribute\n ollama_url = self.ollama_base_url\n if await is_valid_ollama_url(url=ollama_url):\n try:\n models = await get_ollama_models(\n base_url_value=ollama_url,\n desired_capability=DESIRED_CAPABILITY,\n json_models_key=JSON_MODELS_KEY,\n json_name_key=JSON_NAME_KEY,\n json_capabilities_key=JSON_CAPABILITIES_KEY,\n )\n build_config[\"model\"][\"options\"] = models\n build_config[\"model\"][\"value\"] = models[0] if models else \"\"\n except ValueError:\n await logger.awarning(\"Failed to fetch Ollama embedding models.\")\n build_config[\"model\"][\"options\"] = []\n build_config[\"model\"][\"value\"] = \"\"\n\n elif field_name == \"model\" and self.provider == \"Ollama\":\n ollama_url = self.ollama_base_url\n if await is_valid_ollama_url(url=ollama_url):\n try:\n models = await get_ollama_models(\n base_url_value=ollama_url,\n desired_capability=DESIRED_CAPABILITY,\n json_models_key=JSON_MODELS_KEY,\n json_name_key=JSON_NAME_KEY,\n json_capabilities_key=JSON_CAPABILITIES_KEY,\n )\n build_config[\"model\"][\"options\"] = models\n except ValueError:\n await logger.awarning(\"Failed to refresh Ollama embedding models.\")\n build_config[\"model\"][\"options\"] = []\n\n return build_config\n"
|
|
2018
|
+
"value": "from typing import Any\n\nimport requests\nfrom ibm_watsonx_ai.metanames import EmbedTextParamsMetaNames\nfrom langchain_openai import OpenAIEmbeddings\n\nfrom lfx.base.embeddings.embeddings_class import EmbeddingsWithModels\nfrom lfx.base.embeddings.model import LCEmbeddingsModel\nfrom lfx.base.models.model_utils import get_ollama_models, is_valid_ollama_url\nfrom lfx.base.models.openai_constants import OPENAI_EMBEDDING_MODEL_NAMES\nfrom lfx.base.models.watsonx_constants import (\n IBM_WATSONX_URLS,\n WATSONX_EMBEDDING_MODEL_NAMES,\n)\nfrom lfx.field_typing import Embeddings\nfrom lfx.io import (\n BoolInput,\n DictInput,\n DropdownInput,\n FloatInput,\n IntInput,\n MessageTextInput,\n SecretStrInput,\n)\nfrom lfx.log.logger import logger\nfrom lfx.schema.dotdict import dotdict\nfrom lfx.utils.util import transform_localhost_url\n\n# Ollama API constants\nHTTP_STATUS_OK = 200\nJSON_MODELS_KEY = \"models\"\nJSON_NAME_KEY = \"name\"\nJSON_CAPABILITIES_KEY = \"capabilities\"\nDESIRED_CAPABILITY = \"embedding\"\nDEFAULT_OLLAMA_URL = \"http://localhost:11434\"\n\n\nclass EmbeddingModelComponent(LCEmbeddingsModel):\n display_name = \"Embedding Model\"\n description = \"Generate embeddings using a specified provider.\"\n documentation: str = \"https://docs.langflow.org/components-embedding-models\"\n icon = \"binary\"\n name = \"EmbeddingModel\"\n category = \"models\"\n\n inputs = [\n DropdownInput(\n name=\"provider\",\n display_name=\"Model Provider\",\n options=[\"OpenAI\", \"Ollama\", \"IBM watsonx.ai\"],\n value=\"OpenAI\",\n info=\"Select the embedding model provider\",\n real_time_refresh=True,\n options_metadata=[{\"icon\": \"OpenAI\"}, {\"icon\": \"Ollama\"}, {\"icon\": \"WatsonxAI\"}],\n ),\n MessageTextInput(\n name=\"api_base\",\n display_name=\"API Base URL\",\n info=\"Base URL for the API. Leave empty for default.\",\n advanced=True,\n ),\n MessageTextInput(\n name=\"ollama_base_url\",\n display_name=\"Ollama API URL\",\n info=f\"Endpoint of the Ollama API (Ollama only). Defaults to {DEFAULT_OLLAMA_URL}\",\n value=DEFAULT_OLLAMA_URL,\n show=False,\n real_time_refresh=True,\n load_from_db=True,\n ),\n DropdownInput(\n name=\"base_url_ibm_watsonx\",\n display_name=\"watsonx API Endpoint\",\n info=\"The base URL of the API (IBM watsonx.ai only)\",\n options=IBM_WATSONX_URLS,\n value=IBM_WATSONX_URLS[0],\n show=False,\n real_time_refresh=True,\n ),\n DropdownInput(\n name=\"model\",\n display_name=\"Model Name\",\n options=OPENAI_EMBEDDING_MODEL_NAMES,\n value=OPENAI_EMBEDDING_MODEL_NAMES[0],\n info=\"Select the embedding model to use\",\n real_time_refresh=True,\n refresh_button=True,\n ),\n SecretStrInput(\n name=\"api_key\",\n display_name=\"OpenAI API Key\",\n info=\"Model Provider API key\",\n required=True,\n show=True,\n real_time_refresh=True,\n ),\n # Watson-specific inputs\n MessageTextInput(\n name=\"project_id\",\n display_name=\"Project ID\",\n info=\"IBM watsonx.ai Project ID (required for IBM watsonx.ai)\",\n show=False,\n ),\n IntInput(\n name=\"dimensions\",\n display_name=\"Dimensions\",\n info=\"The number of dimensions the resulting output embeddings should have. \"\n \"Only supported by certain models.\",\n advanced=True,\n ),\n IntInput(name=\"chunk_size\", display_name=\"Chunk Size\", advanced=True, value=1000),\n FloatInput(name=\"request_timeout\", display_name=\"Request Timeout\", advanced=True),\n IntInput(name=\"max_retries\", display_name=\"Max Retries\", advanced=True, value=3),\n BoolInput(name=\"show_progress_bar\", display_name=\"Show Progress Bar\", advanced=True),\n DictInput(\n name=\"model_kwargs\",\n display_name=\"Model Kwargs\",\n advanced=True,\n info=\"Additional keyword arguments to pass to the model.\",\n ),\n IntInput(\n name=\"truncate_input_tokens\",\n display_name=\"Truncate Input Tokens\",\n advanced=True,\n value=200,\n show=False,\n ),\n BoolInput(\n name=\"input_text\",\n display_name=\"Include the original text in the output\",\n value=True,\n advanced=True,\n show=False,\n ),\n BoolInput(\n name=\"fail_safe_mode\",\n display_name=\"Fail-Safe Mode\",\n value=False,\n advanced=True,\n info=\"When enabled, errors will be logged instead of raising exceptions. \"\n \"The component will return None on error.\",\n real_time_refresh=True,\n ),\n ]\n\n @staticmethod\n def fetch_ibm_models(base_url: str) -> list[str]:\n \"\"\"Fetch available models from the watsonx.ai API.\"\"\"\n try:\n endpoint = f\"{base_url}/ml/v1/foundation_model_specs\"\n params = {\n \"version\": \"2024-09-16\",\n \"filters\": \"function_embedding,!lifecycle_withdrawn:and\",\n }\n response = requests.get(endpoint, params=params, timeout=10)\n response.raise_for_status()\n data = response.json()\n models = [model[\"model_id\"] for model in data.get(\"resources\", [])]\n return sorted(models)\n except Exception: # noqa: BLE001\n logger.exception(\"Error fetching models\")\n return WATSONX_EMBEDDING_MODEL_NAMES\n\n async def fetch_ollama_models(self) -> list[str]:\n try:\n return await get_ollama_models(\n base_url_value=self.ollama_base_url,\n desired_capability=DESIRED_CAPABILITY,\n json_models_key=JSON_MODELS_KEY,\n json_name_key=JSON_NAME_KEY,\n json_capabilities_key=JSON_CAPABILITIES_KEY,\n )\n except Exception: # noqa: BLE001\n logger.exception(\"Error fetching models\")\n return []\n\n async def build_embeddings(self) -> Embeddings:\n provider = self.provider\n model = self.model\n api_key = self.api_key\n api_base = self.api_base\n base_url_ibm_watsonx = self.base_url_ibm_watsonx\n ollama_base_url = self.ollama_base_url\n dimensions = self.dimensions\n chunk_size = self.chunk_size\n request_timeout = self.request_timeout\n max_retries = self.max_retries\n show_progress_bar = self.show_progress_bar\n model_kwargs = self.model_kwargs or {}\n\n if provider == \"OpenAI\":\n if not api_key:\n msg = \"OpenAI API key is required when using OpenAI provider\"\n if self.fail_safe_mode:\n logger.error(msg)\n return None\n raise ValueError(msg)\n\n try:\n # Create the primary embedding instance\n embeddings_instance = OpenAIEmbeddings(\n model=model,\n dimensions=dimensions or None,\n base_url=api_base or None,\n api_key=api_key,\n chunk_size=chunk_size,\n max_retries=max_retries,\n timeout=request_timeout or None,\n show_progress_bar=show_progress_bar,\n model_kwargs=model_kwargs,\n )\n\n # Create dedicated instances for each available model\n available_models_dict = {}\n for model_name in OPENAI_EMBEDDING_MODEL_NAMES:\n available_models_dict[model_name] = OpenAIEmbeddings(\n model=model_name,\n dimensions=dimensions or None, # Use same dimensions config for all\n base_url=api_base or None,\n api_key=api_key,\n chunk_size=chunk_size,\n max_retries=max_retries,\n timeout=request_timeout or None,\n show_progress_bar=show_progress_bar,\n model_kwargs=model_kwargs,\n )\n\n return EmbeddingsWithModels(\n embeddings=embeddings_instance,\n available_models=available_models_dict,\n )\n except Exception as e:\n msg = f\"Failed to initialize OpenAI embeddings: {e}\"\n if self.fail_safe_mode:\n logger.error(msg)\n return None\n raise\n\n if provider == \"Ollama\":\n try:\n from langchain_ollama import OllamaEmbeddings\n except ImportError:\n try:\n from langchain_community.embeddings import OllamaEmbeddings\n except ImportError:\n msg = \"Please install langchain-ollama: pip install langchain-ollama\"\n if self.fail_safe_mode:\n logger.error(msg)\n return None\n raise ImportError(msg) from None\n\n try:\n transformed_base_url = transform_localhost_url(ollama_base_url)\n\n # Check if URL contains /v1 suffix (OpenAI-compatible mode)\n if transformed_base_url and transformed_base_url.rstrip(\"/\").endswith(\"/v1\"):\n # Strip /v1 suffix and log warning\n transformed_base_url = transformed_base_url.rstrip(\"/\").removesuffix(\"/v1\")\n logger.warning(\n \"Detected '/v1' suffix in base URL. The Ollama component uses the native Ollama API, \"\n \"not the OpenAI-compatible API. The '/v1' suffix has been automatically removed. \"\n \"If you want to use the OpenAI-compatible API, please use the OpenAI component instead. \"\n \"Learn more at https://docs.ollama.com/openai#openai-compatibility\"\n )\n\n final_base_url = transformed_base_url or \"http://localhost:11434\"\n\n # Create the primary embedding instance\n embeddings_instance = OllamaEmbeddings(\n model=model,\n base_url=final_base_url,\n **model_kwargs,\n )\n\n # Fetch available Ollama models\n available_model_names = await self.fetch_ollama_models()\n\n # Create dedicated instances for each available model\n available_models_dict = {}\n for model_name in available_model_names:\n available_models_dict[model_name] = OllamaEmbeddings(\n model=model_name,\n base_url=final_base_url,\n **model_kwargs,\n )\n\n return EmbeddingsWithModels(\n embeddings=embeddings_instance,\n available_models=available_models_dict,\n )\n except Exception as e:\n msg = f\"Failed to initialize Ollama embeddings: {e}\"\n if self.fail_safe_mode:\n logger.error(msg)\n return None\n raise\n\n if provider == \"IBM watsonx.ai\":\n try:\n from langchain_ibm import WatsonxEmbeddings\n except ImportError:\n msg = \"Please install langchain-ibm: pip install langchain-ibm\"\n if self.fail_safe_mode:\n logger.error(msg)\n return None\n raise ImportError(msg) from None\n\n if not api_key:\n msg = \"IBM watsonx.ai API key is required when using IBM watsonx.ai provider\"\n if self.fail_safe_mode:\n logger.error(msg)\n return None\n raise ValueError(msg)\n\n project_id = self.project_id\n\n if not project_id:\n msg = \"Project ID is required for IBM watsonx.ai provider\"\n if self.fail_safe_mode:\n logger.error(msg)\n return None\n raise ValueError(msg)\n\n try:\n from ibm_watsonx_ai import APIClient, Credentials\n\n final_url = base_url_ibm_watsonx or \"https://us-south.ml.cloud.ibm.com\"\n\n credentials = Credentials(\n api_key=self.api_key,\n url=final_url,\n )\n\n api_client = APIClient(credentials)\n\n params = {\n EmbedTextParamsMetaNames.TRUNCATE_INPUT_TOKENS: self.truncate_input_tokens,\n EmbedTextParamsMetaNames.RETURN_OPTIONS: {\"input_text\": self.input_text},\n }\n\n # Create the primary embedding instance\n embeddings_instance = WatsonxEmbeddings(\n model_id=model,\n params=params,\n watsonx_client=api_client,\n project_id=project_id,\n )\n\n # Fetch available IBM watsonx.ai models\n available_model_names = self.fetch_ibm_models(final_url)\n\n # Create dedicated instances for each available model\n available_models_dict = {}\n for model_name in available_model_names:\n available_models_dict[model_name] = WatsonxEmbeddings(\n model_id=model_name,\n params=params,\n watsonx_client=api_client,\n project_id=project_id,\n )\n\n return EmbeddingsWithModels(\n embeddings=embeddings_instance,\n available_models=available_models_dict,\n )\n except Exception as e:\n msg = f\"Failed to authenticate with IBM watsonx.ai: {e}\"\n if self.fail_safe_mode:\n logger.error(msg)\n return None\n raise\n\n msg = f\"Unknown provider: {provider}\"\n if self.fail_safe_mode:\n logger.error(msg)\n return None\n raise ValueError(msg)\n\n async def update_build_config(\n self, build_config: dotdict, field_value: Any, field_name: str | None = None\n ) -> dotdict:\n # Handle fail_safe_mode changes first - set all required fields to False if enabled\n if field_name == \"fail_safe_mode\":\n if field_value: # If fail_safe_mode is enabled\n build_config[\"api_key\"][\"required\"] = False\n elif hasattr(self, \"provider\"):\n # If fail_safe_mode is disabled, restore required flags based on provider\n if self.provider in [\"OpenAI\", \"IBM watsonx.ai\"]:\n build_config[\"api_key\"][\"required\"] = True\n else: # Ollama\n build_config[\"api_key\"][\"required\"] = False\n\n if field_name == \"provider\":\n if field_value == \"OpenAI\":\n build_config[\"model\"][\"options\"] = OPENAI_EMBEDDING_MODEL_NAMES\n build_config[\"model\"][\"value\"] = OPENAI_EMBEDDING_MODEL_NAMES[0]\n build_config[\"api_key\"][\"display_name\"] = \"OpenAI API Key\"\n # Only set required=True if fail_safe_mode is not enabled\n build_config[\"api_key\"][\"required\"] = not (hasattr(self, \"fail_safe_mode\") and self.fail_safe_mode)\n build_config[\"api_key\"][\"show\"] = True\n build_config[\"api_base\"][\"display_name\"] = \"OpenAI API Base URL\"\n build_config[\"api_base\"][\"advanced\"] = True\n build_config[\"api_base\"][\"show\"] = True\n build_config[\"ollama_base_url\"][\"show\"] = False\n build_config[\"project_id\"][\"show\"] = False\n build_config[\"base_url_ibm_watsonx\"][\"show\"] = False\n build_config[\"truncate_input_tokens\"][\"show\"] = False\n build_config[\"input_text\"][\"show\"] = False\n elif field_value == \"Ollama\":\n build_config[\"ollama_base_url\"][\"show\"] = True\n\n if await is_valid_ollama_url(url=self.ollama_base_url):\n try:\n models = await self.fetch_ollama_models()\n build_config[\"model\"][\"options\"] = models\n build_config[\"model\"][\"value\"] = models[0] if models else \"\"\n except ValueError:\n build_config[\"model\"][\"options\"] = []\n build_config[\"model\"][\"value\"] = \"\"\n else:\n build_config[\"model\"][\"options\"] = []\n build_config[\"model\"][\"value\"] = \"\"\n build_config[\"truncate_input_tokens\"][\"show\"] = False\n build_config[\"input_text\"][\"show\"] = False\n build_config[\"api_key\"][\"display_name\"] = \"API Key (Optional)\"\n build_config[\"api_key\"][\"required\"] = False\n build_config[\"api_key\"][\"show\"] = False\n build_config[\"api_base\"][\"show\"] = False\n build_config[\"project_id\"][\"show\"] = False\n build_config[\"base_url_ibm_watsonx\"][\"show\"] = False\n\n elif field_value == \"IBM watsonx.ai\":\n build_config[\"model\"][\"options\"] = self.fetch_ibm_models(base_url=self.base_url_ibm_watsonx)\n build_config[\"model\"][\"value\"] = self.fetch_ibm_models(base_url=self.base_url_ibm_watsonx)[0]\n build_config[\"api_key\"][\"display_name\"] = \"IBM watsonx.ai API Key\"\n # Only set required=True if fail_safe_mode is not enabled\n build_config[\"api_key\"][\"required\"] = not (hasattr(self, \"fail_safe_mode\") and self.fail_safe_mode)\n build_config[\"api_key\"][\"show\"] = True\n build_config[\"api_base\"][\"show\"] = False\n build_config[\"ollama_base_url\"][\"show\"] = False\n build_config[\"base_url_ibm_watsonx\"][\"show\"] = True\n build_config[\"project_id\"][\"show\"] = True\n build_config[\"truncate_input_tokens\"][\"show\"] = True\n build_config[\"input_text\"][\"show\"] = True\n elif field_name == \"base_url_ibm_watsonx\":\n build_config[\"model\"][\"options\"] = self.fetch_ibm_models(base_url=field_value)\n build_config[\"model\"][\"value\"] = self.fetch_ibm_models(base_url=field_value)[0]\n elif field_name == \"ollama_base_url\":\n # # Refresh Ollama models when base URL changes\n # if hasattr(self, \"provider\") and self.provider == \"Ollama\":\n # Use field_value if provided, otherwise fall back to instance attribute\n ollama_url = self.ollama_base_url\n if await is_valid_ollama_url(url=ollama_url):\n try:\n models = await self.fetch_ollama_models()\n build_config[\"model\"][\"options\"] = models\n build_config[\"model\"][\"value\"] = models[0] if models else \"\"\n except ValueError:\n await logger.awarning(\"Failed to fetch Ollama embedding models.\")\n build_config[\"model\"][\"options\"] = []\n build_config[\"model\"][\"value\"] = \"\"\n\n elif field_name == \"model\" and self.provider == \"Ollama\":\n ollama_url = self.ollama_base_url\n if await is_valid_ollama_url(url=ollama_url):\n try:\n models = await self.fetch_ollama_models()\n build_config[\"model\"][\"options\"] = models\n except ValueError:\n await logger.awarning(\"Failed to refresh Ollama embedding models.\")\n build_config[\"model\"][\"options\"] = []\n\n return build_config\n"
|
|
2019
2019
|
},
|
|
2020
2020
|
"dimensions": {
|
|
2021
2021
|
"_input_type": "IntInput",
|
|
@@ -2035,6 +2035,27 @@
|
|
|
2035
2035
|
"type": "int",
|
|
2036
2036
|
"value": ""
|
|
2037
2037
|
},
|
|
2038
|
+
"fail_safe_mode": {
|
|
2039
|
+
"_input_type": "BoolInput",
|
|
2040
|
+
"advanced": true,
|
|
2041
|
+
"display_name": "Fail-Safe Mode",
|
|
2042
|
+
"dynamic": false,
|
|
2043
|
+
"info": "When enabled, errors will be logged instead of raising exceptions. The component will return None on error.",
|
|
2044
|
+
"list": false,
|
|
2045
|
+
"list_add_label": "Add More",
|
|
2046
|
+
"name": "fail_safe_mode",
|
|
2047
|
+
"override_skip": false,
|
|
2048
|
+
"placeholder": "",
|
|
2049
|
+
"real_time_refresh": true,
|
|
2050
|
+
"required": false,
|
|
2051
|
+
"show": true,
|
|
2052
|
+
"title_case": false,
|
|
2053
|
+
"tool_mode": false,
|
|
2054
|
+
"trace_as_metadata": true,
|
|
2055
|
+
"track_in_telemetry": true,
|
|
2056
|
+
"type": "bool",
|
|
2057
|
+
"value": false
|
|
2058
|
+
},
|
|
2038
2059
|
"input_text": {
|
|
2039
2060
|
"_input_type": "BoolInput",
|
|
2040
2061
|
"advanced": true,
|
|
@@ -2645,12 +2666,12 @@
|
|
|
2645
2666
|
"legacy": false,
|
|
2646
2667
|
"lf_version": "1.4.2",
|
|
2647
2668
|
"metadata": {
|
|
2648
|
-
"code_hash": "
|
|
2669
|
+
"code_hash": "6d0bc49cd44e",
|
|
2649
2670
|
"dependencies": {
|
|
2650
2671
|
"dependencies": [
|
|
2651
2672
|
{
|
|
2652
2673
|
"name": "langchain_core",
|
|
2653
|
-
"version": "0.3.
|
|
2674
|
+
"version": "0.3.80"
|
|
2654
2675
|
},
|
|
2655
2676
|
{
|
|
2656
2677
|
"name": "lfx",
|
|
@@ -2705,7 +2726,7 @@
|
|
|
2705
2726
|
"show": true,
|
|
2706
2727
|
"title_case": false,
|
|
2707
2728
|
"type": "code",
|
|
2708
|
-
"value": "from __future__ import annotations\n\nimport asyncio\nimport json\nimport uuid\n\nfrom langchain_core.tools import StructuredTool # noqa: TC002\n\nfrom lfx.base.agents.utils import maybe_unflatten_dict, safe_cache_get, safe_cache_set\nfrom lfx.base.mcp.util import (\n MCPStdioClient,\n MCPStreamableHttpClient,\n create_input_schema_from_json_schema,\n update_tools,\n)\nfrom lfx.custom.custom_component.component_with_cache import ComponentWithCache\nfrom lfx.inputs.inputs import InputTypes # noqa: TC001\nfrom lfx.io import BoolInput, DropdownInput, McpInput, MessageTextInput, Output\nfrom lfx.io.schema import flatten_schema, schema_to_langflow_inputs\nfrom lfx.log.logger import logger\nfrom lfx.schema.dataframe import DataFrame\nfrom lfx.schema.message import Message\nfrom lfx.services.deps import get_settings_service, get_storage_service, session_scope\n\n\nclass MCPToolsComponent(ComponentWithCache):\n schema_inputs: list = []\n tools: list[StructuredTool] = []\n _not_load_actions: bool = False\n _tool_cache: dict = {}\n _last_selected_server: str | None = None # Cache for the last selected server\n\n def __init__(self, **data) -> None:\n super().__init__(**data)\n # Initialize cache keys to avoid CacheMiss when accessing them\n self._ensure_cache_structure()\n\n # Initialize clients with access to the component cache\n self.stdio_client: MCPStdioClient = MCPStdioClient(component_cache=self._shared_component_cache)\n self.streamable_http_client: MCPStreamableHttpClient = MCPStreamableHttpClient(\n component_cache=self._shared_component_cache\n )\n\n def _ensure_cache_structure(self):\n \"\"\"Ensure the cache has the required structure.\"\"\"\n # Check if servers key exists and is not CacheMiss\n servers_value = safe_cache_get(self._shared_component_cache, \"servers\")\n if servers_value is None:\n safe_cache_set(self._shared_component_cache, \"servers\", {})\n\n # Check if last_selected_server key exists and is not CacheMiss\n last_server_value = safe_cache_get(self._shared_component_cache, \"last_selected_server\")\n if last_server_value is None:\n safe_cache_set(self._shared_component_cache, \"last_selected_server\", \"\")\n\n default_keys: list[str] = [\n \"code\",\n \"_type\",\n \"tool_mode\",\n \"tool_placeholder\",\n \"mcp_server\",\n \"tool\",\n \"use_cache\",\n \"verify_ssl\",\n ]\n\n display_name = \"MCP Tools\"\n description = \"Connect to an MCP server to use its tools.\"\n documentation: str = \"https://docs.langflow.org/mcp-tools\"\n icon = \"Mcp\"\n name = \"MCPTools\"\n\n inputs = [\n McpInput(\n name=\"mcp_server\",\n display_name=\"MCP Server\",\n info=\"Select the MCP Server that will be used by this component\",\n real_time_refresh=True,\n ),\n BoolInput(\n name=\"use_cache\",\n display_name=\"Use Cached Server\",\n info=(\n \"Enable caching of MCP Server and tools to improve performance. \"\n \"Disable to always fetch fresh tools and server updates.\"\n ),\n value=False,\n advanced=True,\n ),\n BoolInput(\n name=\"verify_ssl\",\n display_name=\"Verify SSL Certificate\",\n info=(\n \"Enable SSL certificate verification for HTTPS connections. \"\n \"Disable only for development/testing with self-signed certificates.\"\n ),\n value=True,\n advanced=True,\n ),\n DropdownInput(\n name=\"tool\",\n display_name=\"Tool\",\n options=[],\n value=\"\",\n info=\"Select the tool to execute\",\n show=False,\n required=True,\n real_time_refresh=True,\n ),\n MessageTextInput(\n name=\"tool_placeholder\",\n display_name=\"Tool Placeholder\",\n info=\"Placeholder for the tool\",\n value=\"\",\n show=False,\n tool_mode=False,\n ),\n ]\n\n outputs = [\n Output(display_name=\"Response\", name=\"response\", method=\"build_output\"),\n ]\n\n async def _validate_schema_inputs(self, tool_obj) -> list[InputTypes]:\n \"\"\"Validate and process schema inputs for a tool.\"\"\"\n try:\n if not tool_obj or not hasattr(tool_obj, \"args_schema\"):\n msg = \"Invalid tool object or missing input schema\"\n raise ValueError(msg)\n\n flat_schema = flatten_schema(tool_obj.args_schema.schema())\n input_schema = create_input_schema_from_json_schema(flat_schema)\n if not input_schema:\n msg = f\"Empty input schema for tool '{tool_obj.name}'\"\n raise ValueError(msg)\n\n schema_inputs = schema_to_langflow_inputs(input_schema)\n if not schema_inputs:\n msg = f\"No input parameters defined for tool '{tool_obj.name}'\"\n await logger.awarning(msg)\n return []\n\n except Exception as e:\n msg = f\"Error validating schema inputs: {e!s}\"\n await logger.aexception(msg)\n raise ValueError(msg) from e\n else:\n return schema_inputs\n\n async def update_tool_list(self, mcp_server_value=None):\n # Accepts mcp_server_value as dict {name, config} or uses self.mcp_server\n mcp_server = mcp_server_value if mcp_server_value is not None else getattr(self, \"mcp_server\", None)\n server_name = None\n server_config_from_value = None\n if isinstance(mcp_server, dict):\n server_name = mcp_server.get(\"name\")\n server_config_from_value = mcp_server.get(\"config\")\n else:\n server_name = mcp_server\n if not server_name:\n self.tools = []\n return [], {\"name\": server_name, \"config\": server_config_from_value}\n\n # Check if caching is enabled, default to False\n use_cache = getattr(self, \"use_cache\", False)\n\n # Use shared cache if available and caching is enabled\n cached = None\n if use_cache:\n servers_cache = safe_cache_get(self._shared_component_cache, \"servers\", {})\n cached = servers_cache.get(server_name) if isinstance(servers_cache, dict) else None\n\n if cached is not None:\n try:\n self.tools = cached[\"tools\"]\n self.tool_names = cached[\"tool_names\"]\n self._tool_cache = cached[\"tool_cache\"]\n server_config_from_value = cached[\"config\"]\n except (TypeError, KeyError, AttributeError) as e:\n # Handle corrupted cache data by clearing it and continuing to fetch fresh tools\n msg = f\"Unable to use cached data for MCP Server{server_name}: {e}\"\n await logger.awarning(msg)\n # Clear the corrupted cache entry\n current_servers_cache = safe_cache_get(self._shared_component_cache, \"servers\", {})\n if isinstance(current_servers_cache, dict) and server_name in current_servers_cache:\n current_servers_cache.pop(server_name)\n safe_cache_set(self._shared_component_cache, \"servers\", current_servers_cache)\n else:\n return self.tools, {\"name\": server_name, \"config\": server_config_from_value}\n\n try:\n try:\n from langflow.api.v2.mcp import get_server\n from langflow.services.database.models.user.crud import get_user_by_id\n except ImportError as e:\n msg = (\n \"Langflow MCP server functionality is not available. \"\n \"This feature requires the full Langflow installation.\"\n )\n raise ImportError(msg) from e\n async with session_scope() as db:\n if not self.user_id:\n msg = \"User ID is required for fetching MCP tools.\"\n raise ValueError(msg)\n current_user = await get_user_by_id(db, self.user_id)\n\n # Try to get server config from DB/API\n server_config = await get_server(\n server_name,\n current_user,\n db,\n storage_service=get_storage_service(),\n settings_service=get_settings_service(),\n )\n\n # If get_server returns empty but we have a config, use it\n if not server_config and server_config_from_value:\n server_config = server_config_from_value\n\n if not server_config:\n self.tools = []\n return [], {\"name\": server_name, \"config\": server_config}\n\n # Add verify_ssl option to server config if not present\n if \"verify_ssl\" not in server_config:\n verify_ssl = getattr(self, \"verify_ssl\", True)\n server_config[\"verify_ssl\"] = verify_ssl\n\n _, tool_list, tool_cache = await update_tools(\n server_name=server_name,\n server_config=server_config,\n mcp_stdio_client=self.stdio_client,\n mcp_streamable_http_client=self.streamable_http_client,\n )\n\n self.tool_names = [tool.name for tool in tool_list if hasattr(tool, \"name\")]\n self._tool_cache = tool_cache\n self.tools = tool_list\n\n # Cache the result only if caching is enabled\n if use_cache:\n cache_data = {\n \"tools\": tool_list,\n \"tool_names\": self.tool_names,\n \"tool_cache\": tool_cache,\n \"config\": server_config,\n }\n\n # Safely update the servers cache\n current_servers_cache = safe_cache_get(self._shared_component_cache, \"servers\", {})\n if isinstance(current_servers_cache, dict):\n current_servers_cache[server_name] = cache_data\n safe_cache_set(self._shared_component_cache, \"servers\", current_servers_cache)\n\n except (TimeoutError, asyncio.TimeoutError) as e:\n msg = f\"Timeout updating tool list: {e!s}\"\n await logger.aexception(msg)\n raise TimeoutError(msg) from e\n except Exception as e:\n msg = f\"Error updating tool list: {e!s}\"\n await logger.aexception(msg)\n raise ValueError(msg) from e\n else:\n return tool_list, {\"name\": server_name, \"config\": server_config}\n\n async def update_build_config(self, build_config: dict, field_value: str, field_name: str | None = None) -> dict:\n \"\"\"Toggle the visibility of connection-specific fields based on the selected mode.\"\"\"\n try:\n if field_name == \"tool\":\n try:\n if len(self.tools) == 0:\n try:\n self.tools, build_config[\"mcp_server\"][\"value\"] = await self.update_tool_list()\n build_config[\"tool\"][\"options\"] = [tool.name for tool in self.tools]\n build_config[\"tool\"][\"placeholder\"] = \"Select a tool\"\n except (TimeoutError, asyncio.TimeoutError) as e:\n msg = f\"Timeout updating tool list: {e!s}\"\n await logger.aexception(msg)\n if not build_config[\"tools_metadata\"][\"show\"]:\n build_config[\"tool\"][\"show\"] = True\n build_config[\"tool\"][\"options\"] = []\n build_config[\"tool\"][\"value\"] = \"\"\n build_config[\"tool\"][\"placeholder\"] = \"Timeout on MCP server\"\n else:\n build_config[\"tool\"][\"show\"] = False\n except ValueError:\n if not build_config[\"tools_metadata\"][\"show\"]:\n build_config[\"tool\"][\"show\"] = True\n build_config[\"tool\"][\"options\"] = []\n build_config[\"tool\"][\"value\"] = \"\"\n build_config[\"tool\"][\"placeholder\"] = \"Error on MCP Server\"\n else:\n build_config[\"tool\"][\"show\"] = False\n\n if field_value == \"\":\n return build_config\n tool_obj = None\n for tool in self.tools:\n if tool.name == field_value:\n tool_obj = tool\n break\n if tool_obj is None:\n msg = f\"Tool {field_value} not found in available tools: {self.tools}\"\n await logger.awarning(msg)\n return build_config\n await self._update_tool_config(build_config, field_value)\n except Exception as e:\n build_config[\"tool\"][\"options\"] = []\n msg = f\"Failed to update tools: {e!s}\"\n raise ValueError(msg) from e\n else:\n return build_config\n elif field_name == \"mcp_server\":\n if not field_value:\n build_config[\"tool\"][\"show\"] = False\n build_config[\"tool\"][\"options\"] = []\n build_config[\"tool\"][\"value\"] = \"\"\n build_config[\"tool\"][\"placeholder\"] = \"\"\n build_config[\"tool_placeholder\"][\"tool_mode\"] = False\n self.remove_non_default_keys(build_config)\n return build_config\n\n build_config[\"tool_placeholder\"][\"tool_mode\"] = True\n\n current_server_name = field_value.get(\"name\") if isinstance(field_value, dict) else field_value\n _last_selected_server = safe_cache_get(self._shared_component_cache, \"last_selected_server\", \"\")\n server_changed = current_server_name != _last_selected_server\n\n # Determine if \"Tool Mode\" is active by checking if the tool dropdown is hidden.\n is_in_tool_mode = build_config[\"tools_metadata\"][\"show\"]\n\n # Get use_cache setting to determine if we should use cached data\n use_cache = getattr(self, \"use_cache\", False)\n\n # Fast path: if server didn't change and we already have options, keep them as-is\n # BUT only if caching is enabled or we're in tool mode\n existing_options = build_config.get(\"tool\", {}).get(\"options\") or []\n if not server_changed and existing_options:\n # In non-tool mode with cache disabled, skip the fast path to force refresh\n if not is_in_tool_mode and not use_cache:\n pass # Continue to refresh logic below\n else:\n if not is_in_tool_mode:\n build_config[\"tool\"][\"show\"] = True\n return build_config\n\n # To avoid unnecessary updates, only proceed if the server has actually changed\n # OR if caching is disabled (to force refresh in non-tool mode)\n if (_last_selected_server in (current_server_name, \"\")) and build_config[\"tool\"][\"show\"] and use_cache:\n if current_server_name:\n servers_cache = safe_cache_get(self._shared_component_cache, \"servers\", {})\n if isinstance(servers_cache, dict):\n cached = servers_cache.get(current_server_name)\n if cached is not None and cached.get(\"tool_names\"):\n cached_tools = cached[\"tool_names\"]\n current_tools = build_config[\"tool\"][\"options\"]\n if current_tools == cached_tools:\n return build_config\n else:\n return build_config\n safe_cache_set(self._shared_component_cache, \"last_selected_server\", current_server_name)\n\n # Check if tools are already cached for this server before clearing\n cached_tools = None\n if current_server_name and use_cache:\n servers_cache = safe_cache_get(self._shared_component_cache, \"servers\", {})\n if isinstance(servers_cache, dict):\n cached = servers_cache.get(current_server_name)\n if cached is not None:\n try:\n cached_tools = cached[\"tools\"]\n self.tools = cached_tools\n self.tool_names = cached[\"tool_names\"]\n self._tool_cache = cached[\"tool_cache\"]\n except (TypeError, KeyError, AttributeError) as e:\n # Handle corrupted cache data by ignoring it\n msg = f\"Unable to use cached data for MCP Server,{current_server_name}: {e}\"\n await logger.awarning(msg)\n cached_tools = None\n\n # Only clear tools if we don't have cached tools for the current server\n if not cached_tools:\n self.tools = [] # Clear previous tools only if no cache\n\n # Clear previous tool inputs if:\n # 1. Server actually changed\n # 2. Cache is disabled (meaning tool list will be refreshed)\n if server_changed or not use_cache:\n self.remove_non_default_keys(build_config)\n\n # Only show the tool dropdown if not in tool_mode\n if not is_in_tool_mode:\n build_config[\"tool\"][\"show\"] = True\n if cached_tools:\n # Use cached tools to populate options immediately\n build_config[\"tool\"][\"options\"] = [tool.name for tool in cached_tools]\n build_config[\"tool\"][\"placeholder\"] = \"Select a tool\"\n else:\n # Show loading state only when we need to fetch tools\n build_config[\"tool\"][\"placeholder\"] = \"Loading tools...\"\n build_config[\"tool\"][\"options\"] = []\n # Force a value refresh when:\n # 1. Server changed\n # 2. We don't have cached tools\n # 3. Cache is disabled (to force refresh on config changes)\n if server_changed or not cached_tools or not use_cache:\n build_config[\"tool\"][\"value\"] = uuid.uuid4()\n else:\n # Keep the tool dropdown hidden if in tool_mode\n self._not_load_actions = True\n build_config[\"tool\"][\"show\"] = False\n\n elif field_name == \"tool_mode\":\n build_config[\"tool\"][\"placeholder\"] = \"\"\n build_config[\"tool\"][\"show\"] = not bool(field_value) and bool(build_config[\"mcp_server\"])\n self.remove_non_default_keys(build_config)\n self.tool = build_config[\"tool\"][\"value\"]\n if field_value:\n self._not_load_actions = True\n else:\n build_config[\"tool\"][\"value\"] = uuid.uuid4()\n build_config[\"tool\"][\"options\"] = []\n build_config[\"tool\"][\"show\"] = True\n build_config[\"tool\"][\"placeholder\"] = \"Loading tools...\"\n elif field_name == \"tools_metadata\":\n self._not_load_actions = False\n\n except Exception as e:\n msg = f\"Error in update_build_config: {e!s}\"\n await logger.aexception(msg)\n raise ValueError(msg) from e\n else:\n return build_config\n\n def get_inputs_for_all_tools(self, tools: list) -> dict:\n \"\"\"Get input schemas for all tools.\"\"\"\n inputs = {}\n for tool in tools:\n if not tool or not hasattr(tool, \"name\"):\n continue\n try:\n flat_schema = flatten_schema(tool.args_schema.schema())\n input_schema = create_input_schema_from_json_schema(flat_schema)\n langflow_inputs = schema_to_langflow_inputs(input_schema)\n inputs[tool.name] = langflow_inputs\n except (AttributeError, ValueError, TypeError, KeyError) as e:\n msg = f\"Error getting inputs for tool {getattr(tool, 'name', 'unknown')}: {e!s}\"\n logger.exception(msg)\n continue\n return inputs\n\n def remove_non_default_keys(self, build_config: dict) -> None:\n \"\"\"Remove non-default keys from the build config.\"\"\"\n for key in list(build_config.keys()):\n if key not in self.default_keys:\n build_config.pop(key)\n\n async def _update_tool_config(self, build_config: dict, tool_name: str) -> None:\n \"\"\"Update tool configuration with proper error handling.\"\"\"\n if not self.tools:\n self.tools, build_config[\"mcp_server\"][\"value\"] = await self.update_tool_list()\n\n if not tool_name:\n return\n\n tool_obj = next((tool for tool in self.tools if tool.name == tool_name), None)\n if not tool_obj:\n msg = f\"Tool {tool_name} not found in available tools: {self.tools}\"\n self.remove_non_default_keys(build_config)\n build_config[\"tool\"][\"value\"] = \"\"\n await logger.awarning(msg)\n return\n\n try:\n # Store current values before removing inputs (only for the current tool)\n current_values = {}\n for key, value in build_config.items():\n if key not in self.default_keys and isinstance(value, dict) and \"value\" in value:\n current_values[key] = value[\"value\"]\n\n # Remove ALL non-default keys (all previous tool inputs)\n self.remove_non_default_keys(build_config)\n\n # Get and validate new inputs for the selected tool\n self.schema_inputs = await self._validate_schema_inputs(tool_obj)\n if not self.schema_inputs:\n msg = f\"No input parameters to configure for tool '{tool_name}'\"\n await logger.ainfo(msg)\n return\n\n # Add new inputs to build config for the selected tool only\n for schema_input in self.schema_inputs:\n if not schema_input or not hasattr(schema_input, \"name\"):\n msg = \"Invalid schema input detected, skipping\"\n await logger.awarning(msg)\n continue\n\n try:\n name = schema_input.name\n input_dict = schema_input.to_dict()\n input_dict.setdefault(\"value\", None)\n input_dict.setdefault(\"required\", True)\n\n build_config[name] = input_dict\n\n # Preserve existing value if the parameter name exists in current_values\n if name in current_values:\n build_config[name][\"value\"] = current_values[name]\n\n except (AttributeError, KeyError, TypeError) as e:\n msg = f\"Error processing schema input {schema_input}: {e!s}\"\n await logger.aexception(msg)\n continue\n except ValueError as e:\n msg = f\"Schema validation error for tool {tool_name}: {e!s}\"\n await logger.aexception(msg)\n self.schema_inputs = []\n return\n except (AttributeError, KeyError, TypeError) as e:\n msg = f\"Error updating tool config: {e!s}\"\n await logger.aexception(msg)\n raise ValueError(msg) from e\n\n async def build_output(self) -> DataFrame:\n \"\"\"Build output with improved error handling and validation.\"\"\"\n try:\n self.tools, _ = await self.update_tool_list()\n if self.tool != \"\":\n # Set session context for persistent MCP sessions using Langflow session ID\n session_context = self._get_session_context()\n if session_context:\n self.stdio_client.set_session_context(session_context)\n self.streamable_http_client.set_session_context(session_context)\n exec_tool = self._tool_cache[self.tool]\n tool_args = self.get_inputs_for_all_tools(self.tools)[self.tool]\n kwargs = {}\n for arg in tool_args:\n value = getattr(self, arg.name, None)\n if value is not None:\n if isinstance(value, Message):\n kwargs[arg.name] = value.text\n else:\n kwargs[arg.name] = value\n\n unflattened_kwargs = maybe_unflatten_dict(kwargs)\n\n output = await exec_tool.coroutine(**unflattened_kwargs)\n tool_content = []\n for item in output.content:\n item_dict = item.model_dump()\n item_dict = self.process_output_item(item_dict)\n tool_content.append(item_dict)\n\n if isinstance(tool_content, list) and all(isinstance(x, dict) for x in tool_content):\n return DataFrame(tool_content)\n return DataFrame(data=tool_content)\n return DataFrame(data=[{\"error\": \"You must select a tool\"}])\n except Exception as e:\n msg = f\"Error in build_output: {e!s}\"\n await logger.aexception(msg)\n raise ValueError(msg) from e\n\n def process_output_item(self, item_dict):\n \"\"\"Process the output of a tool.\"\"\"\n if item_dict.get(\"type\") == \"text\":\n text = item_dict.get(\"text\")\n try:\n return json.loads(text)\n except json.JSONDecodeError:\n return item_dict\n return item_dict\n\n def _get_session_context(self) -> str | None:\n \"\"\"Get the Langflow session ID for MCP session caching.\"\"\"\n # Try to get session ID from the component's execution context\n if hasattr(self, \"graph\") and hasattr(self.graph, \"session_id\"):\n session_id = self.graph.session_id\n # Include server name to ensure different servers get different sessions\n server_name = \"\"\n mcp_server = getattr(self, \"mcp_server\", None)\n if isinstance(mcp_server, dict):\n server_name = mcp_server.get(\"name\", \"\")\n elif mcp_server:\n server_name = str(mcp_server)\n return f\"{session_id}_{server_name}\" if session_id else None\n return None\n\n async def _get_tools(self):\n \"\"\"Get cached tools or update if necessary.\"\"\"\n mcp_server = getattr(self, \"mcp_server\", None)\n if not self._not_load_actions:\n tools, _ = await self.update_tool_list(mcp_server)\n return tools\n return []\n"
|
|
2729
|
+
"value": "from __future__ import annotations\n\nimport asyncio\nimport json\nimport uuid\n\nfrom langchain_core.tools import StructuredTool # noqa: TC002\n\nfrom lfx.base.agents.utils import maybe_unflatten_dict, safe_cache_get, safe_cache_set\nfrom lfx.base.mcp.util import (\n MCPStdioClient,\n MCPStreamableHttpClient,\n create_input_schema_from_json_schema,\n update_tools,\n)\nfrom lfx.custom.custom_component.component_with_cache import ComponentWithCache\nfrom lfx.inputs.inputs import InputTypes # noqa: TC001\nfrom lfx.io import BoolInput, DropdownInput, McpInput, MessageTextInput, Output\nfrom lfx.io.schema import flatten_schema, schema_to_langflow_inputs\nfrom lfx.log.logger import logger\nfrom lfx.schema.dataframe import DataFrame\nfrom lfx.schema.message import Message\nfrom lfx.services.deps import get_settings_service, get_storage_service, session_scope\n\n\ndef resolve_mcp_config(\n server_name: str, # noqa: ARG001\n server_config_from_value: dict | None,\n server_config_from_db: dict | None,\n) -> dict | None:\n \"\"\"Resolve MCP server config with proper precedence.\n\n Resolves the configuration for an MCP server with the following precedence:\n 1. Database config (takes priority) - ensures edits are reflected\n 2. Config from value/tweaks (fallback) - allows REST API to provide config for new servers\n\n Args:\n server_name: Name of the MCP server\n server_config_from_value: Config provided via value/tweaks (optional)\n server_config_from_db: Config from database (optional)\n\n Returns:\n Final config to use (DB takes priority, falls back to value)\n Returns None if no config found in either location\n \"\"\"\n if server_config_from_db:\n return server_config_from_db\n return server_config_from_value\n\n\nclass MCPToolsComponent(ComponentWithCache):\n schema_inputs: list = []\n tools: list[StructuredTool] = []\n _not_load_actions: bool = False\n _tool_cache: dict = {}\n _last_selected_server: str | None = None # Cache for the last selected server\n\n def __init__(self, **data) -> None:\n super().__init__(**data)\n # Initialize cache keys to avoid CacheMiss when accessing them\n self._ensure_cache_structure()\n\n # Initialize clients with access to the component cache\n self.stdio_client: MCPStdioClient = MCPStdioClient(component_cache=self._shared_component_cache)\n self.streamable_http_client: MCPStreamableHttpClient = MCPStreamableHttpClient(\n component_cache=self._shared_component_cache\n )\n\n def _ensure_cache_structure(self):\n \"\"\"Ensure the cache has the required structure.\"\"\"\n # Check if servers key exists and is not CacheMiss\n servers_value = safe_cache_get(self._shared_component_cache, \"servers\")\n if servers_value is None:\n safe_cache_set(self._shared_component_cache, \"servers\", {})\n\n # Check if last_selected_server key exists and is not CacheMiss\n last_server_value = safe_cache_get(self._shared_component_cache, \"last_selected_server\")\n if last_server_value is None:\n safe_cache_set(self._shared_component_cache, \"last_selected_server\", \"\")\n\n default_keys: list[str] = [\n \"code\",\n \"_type\",\n \"tool_mode\",\n \"tool_placeholder\",\n \"mcp_server\",\n \"tool\",\n \"use_cache\",\n \"verify_ssl\",\n ]\n\n display_name = \"MCP Tools\"\n description = \"Connect to an MCP server to use its tools.\"\n documentation: str = \"https://docs.langflow.org/mcp-tools\"\n icon = \"Mcp\"\n name = \"MCPTools\"\n\n inputs = [\n McpInput(\n name=\"mcp_server\",\n display_name=\"MCP Server\",\n info=\"Select the MCP Server that will be used by this component\",\n real_time_refresh=True,\n ),\n BoolInput(\n name=\"use_cache\",\n display_name=\"Use Cached Server\",\n info=(\n \"Enable caching of MCP Server and tools to improve performance. \"\n \"Disable to always fetch fresh tools and server updates.\"\n ),\n value=False,\n advanced=True,\n ),\n BoolInput(\n name=\"verify_ssl\",\n display_name=\"Verify SSL Certificate\",\n info=(\n \"Enable SSL certificate verification for HTTPS connections. \"\n \"Disable only for development/testing with self-signed certificates.\"\n ),\n value=True,\n advanced=True,\n ),\n DropdownInput(\n name=\"tool\",\n display_name=\"Tool\",\n options=[],\n value=\"\",\n info=\"Select the tool to execute\",\n show=False,\n required=True,\n real_time_refresh=True,\n ),\n MessageTextInput(\n name=\"tool_placeholder\",\n display_name=\"Tool Placeholder\",\n info=\"Placeholder for the tool\",\n value=\"\",\n show=False,\n tool_mode=False,\n ),\n ]\n\n outputs = [\n Output(display_name=\"Response\", name=\"response\", method=\"build_output\"),\n ]\n\n async def _validate_schema_inputs(self, tool_obj) -> list[InputTypes]:\n \"\"\"Validate and process schema inputs for a tool.\"\"\"\n try:\n if not tool_obj or not hasattr(tool_obj, \"args_schema\"):\n msg = \"Invalid tool object or missing input schema\"\n raise ValueError(msg)\n\n flat_schema = flatten_schema(tool_obj.args_schema.schema())\n input_schema = create_input_schema_from_json_schema(flat_schema)\n if not input_schema:\n msg = f\"Empty input schema for tool '{tool_obj.name}'\"\n raise ValueError(msg)\n\n schema_inputs = schema_to_langflow_inputs(input_schema)\n if not schema_inputs:\n msg = f\"No input parameters defined for tool '{tool_obj.name}'\"\n await logger.awarning(msg)\n return []\n\n except Exception as e:\n msg = f\"Error validating schema inputs: {e!s}\"\n await logger.aexception(msg)\n raise ValueError(msg) from e\n else:\n return schema_inputs\n\n async def update_tool_list(self, mcp_server_value=None):\n # Accepts mcp_server_value as dict {name, config} or uses self.mcp_server\n mcp_server = mcp_server_value if mcp_server_value is not None else getattr(self, \"mcp_server\", None)\n server_name = None\n server_config_from_value = None\n if isinstance(mcp_server, dict):\n server_name = mcp_server.get(\"name\")\n server_config_from_value = mcp_server.get(\"config\")\n else:\n server_name = mcp_server\n if not server_name:\n self.tools = []\n return [], {\"name\": server_name, \"config\": server_config_from_value}\n\n # Check if caching is enabled, default to False\n use_cache = getattr(self, \"use_cache\", False)\n\n # Use shared cache if available and caching is enabled\n cached = None\n if use_cache:\n servers_cache = safe_cache_get(self._shared_component_cache, \"servers\", {})\n cached = servers_cache.get(server_name) if isinstance(servers_cache, dict) else None\n\n if cached is not None:\n try:\n self.tools = cached[\"tools\"]\n self.tool_names = cached[\"tool_names\"]\n self._tool_cache = cached[\"tool_cache\"]\n server_config_from_value = cached[\"config\"]\n except (TypeError, KeyError, AttributeError) as e:\n # Handle corrupted cache data by clearing it and continuing to fetch fresh tools\n msg = f\"Unable to use cached data for MCP Server{server_name}: {e}\"\n await logger.awarning(msg)\n # Clear the corrupted cache entry\n current_servers_cache = safe_cache_get(self._shared_component_cache, \"servers\", {})\n if isinstance(current_servers_cache, dict) and server_name in current_servers_cache:\n current_servers_cache.pop(server_name)\n safe_cache_set(self._shared_component_cache, \"servers\", current_servers_cache)\n else:\n return self.tools, {\"name\": server_name, \"config\": server_config_from_value}\n\n try:\n # Try to fetch from database first to ensure we have the latest config\n # This ensures database updates (like editing a server) take effect\n try:\n from langflow.api.v2.mcp import get_server\n from langflow.services.database.models.user.crud import get_user_by_id\n except ImportError as e:\n msg = (\n \"Langflow MCP server functionality is not available. \"\n \"This feature requires the full Langflow installation.\"\n )\n raise ImportError(msg) from e\n\n server_config_from_db = None\n async with session_scope() as db:\n if not self.user_id:\n msg = \"User ID is required for fetching MCP tools.\"\n raise ValueError(msg)\n current_user = await get_user_by_id(db, self.user_id)\n\n # Try to get server config from DB/API\n server_config_from_db = await get_server(\n server_name,\n current_user,\n db,\n storage_service=get_storage_service(),\n settings_service=get_settings_service(),\n )\n\n # Resolve config with proper precedence: DB takes priority, falls back to value\n server_config = resolve_mcp_config(\n server_name=server_name,\n server_config_from_value=server_config_from_value,\n server_config_from_db=server_config_from_db,\n )\n\n if not server_config:\n self.tools = []\n return [], {\"name\": server_name, \"config\": server_config}\n\n # Add verify_ssl option to server config if not present\n if \"verify_ssl\" not in server_config:\n verify_ssl = getattr(self, \"verify_ssl\", True)\n server_config[\"verify_ssl\"] = verify_ssl\n\n _, tool_list, tool_cache = await update_tools(\n server_name=server_name,\n server_config=server_config,\n mcp_stdio_client=self.stdio_client,\n mcp_streamable_http_client=self.streamable_http_client,\n )\n\n self.tool_names = [tool.name for tool in tool_list if hasattr(tool, \"name\")]\n self._tool_cache = tool_cache\n self.tools = tool_list\n\n # Cache the result only if caching is enabled\n if use_cache:\n cache_data = {\n \"tools\": tool_list,\n \"tool_names\": self.tool_names,\n \"tool_cache\": tool_cache,\n \"config\": server_config,\n }\n\n # Safely update the servers cache\n current_servers_cache = safe_cache_get(self._shared_component_cache, \"servers\", {})\n if isinstance(current_servers_cache, dict):\n current_servers_cache[server_name] = cache_data\n safe_cache_set(self._shared_component_cache, \"servers\", current_servers_cache)\n\n except (TimeoutError, asyncio.TimeoutError) as e:\n msg = f\"Timeout updating tool list: {e!s}\"\n await logger.aexception(msg)\n raise TimeoutError(msg) from e\n except Exception as e:\n msg = f\"Error updating tool list: {e!s}\"\n await logger.aexception(msg)\n raise ValueError(msg) from e\n else:\n return tool_list, {\"name\": server_name, \"config\": server_config}\n\n async def update_build_config(self, build_config: dict, field_value: str, field_name: str | None = None) -> dict:\n \"\"\"Toggle the visibility of connection-specific fields based on the selected mode.\"\"\"\n try:\n if field_name == \"tool\":\n try:\n # Always refresh tools when cache is disabled, or when tools list is empty\n # This ensures database edits are reflected immediately when cache is disabled\n use_cache = getattr(self, \"use_cache\", False)\n if len(self.tools) == 0 or not use_cache:\n try:\n self.tools, build_config[\"mcp_server\"][\"value\"] = await self.update_tool_list()\n build_config[\"tool\"][\"options\"] = [tool.name for tool in self.tools]\n build_config[\"tool\"][\"placeholder\"] = \"Select a tool\"\n except (TimeoutError, asyncio.TimeoutError) as e:\n msg = f\"Timeout updating tool list: {e!s}\"\n await logger.aexception(msg)\n if not build_config[\"tools_metadata\"][\"show\"]:\n build_config[\"tool\"][\"show\"] = True\n build_config[\"tool\"][\"options\"] = []\n build_config[\"tool\"][\"value\"] = \"\"\n build_config[\"tool\"][\"placeholder\"] = \"Timeout on MCP server\"\n else:\n build_config[\"tool\"][\"show\"] = False\n except ValueError:\n if not build_config[\"tools_metadata\"][\"show\"]:\n build_config[\"tool\"][\"show\"] = True\n build_config[\"tool\"][\"options\"] = []\n build_config[\"tool\"][\"value\"] = \"\"\n build_config[\"tool\"][\"placeholder\"] = \"Error on MCP Server\"\n else:\n build_config[\"tool\"][\"show\"] = False\n\n if field_value == \"\":\n return build_config\n tool_obj = None\n for tool in self.tools:\n if tool.name == field_value:\n tool_obj = tool\n break\n if tool_obj is None:\n msg = f\"Tool {field_value} not found in available tools: {self.tools}\"\n await logger.awarning(msg)\n return build_config\n await self._update_tool_config(build_config, field_value)\n except Exception as e:\n build_config[\"tool\"][\"options\"] = []\n msg = f\"Failed to update tools: {e!s}\"\n raise ValueError(msg) from e\n else:\n return build_config\n elif field_name == \"mcp_server\":\n if not field_value:\n build_config[\"tool\"][\"show\"] = False\n build_config[\"tool\"][\"options\"] = []\n build_config[\"tool\"][\"value\"] = \"\"\n build_config[\"tool\"][\"placeholder\"] = \"\"\n build_config[\"tool_placeholder\"][\"tool_mode\"] = False\n self.remove_non_default_keys(build_config)\n return build_config\n\n build_config[\"tool_placeholder\"][\"tool_mode\"] = True\n\n current_server_name = field_value.get(\"name\") if isinstance(field_value, dict) else field_value\n _last_selected_server = safe_cache_get(self._shared_component_cache, \"last_selected_server\", \"\")\n server_changed = current_server_name != _last_selected_server\n\n # Determine if \"Tool Mode\" is active by checking if the tool dropdown is hidden.\n is_in_tool_mode = build_config[\"tools_metadata\"][\"show\"]\n\n # Get use_cache setting to determine if we should use cached data\n use_cache = getattr(self, \"use_cache\", False)\n\n # Fast path: if server didn't change and we already have options, keep them as-is\n # BUT only if caching is enabled or we're in tool mode\n existing_options = build_config.get(\"tool\", {}).get(\"options\") or []\n if not server_changed and existing_options:\n # In non-tool mode with cache disabled, skip the fast path to force refresh\n if not is_in_tool_mode and not use_cache:\n pass # Continue to refresh logic below\n else:\n if not is_in_tool_mode:\n build_config[\"tool\"][\"show\"] = True\n return build_config\n\n # To avoid unnecessary updates, only proceed if the server has actually changed\n # OR if caching is disabled (to force refresh in non-tool mode)\n if (_last_selected_server in (current_server_name, \"\")) and build_config[\"tool\"][\"show\"] and use_cache:\n if current_server_name:\n servers_cache = safe_cache_get(self._shared_component_cache, \"servers\", {})\n if isinstance(servers_cache, dict):\n cached = servers_cache.get(current_server_name)\n if cached is not None and cached.get(\"tool_names\"):\n cached_tools = cached[\"tool_names\"]\n current_tools = build_config[\"tool\"][\"options\"]\n if current_tools == cached_tools:\n return build_config\n else:\n return build_config\n safe_cache_set(self._shared_component_cache, \"last_selected_server\", current_server_name)\n\n # When cache is disabled, clear any cached data for this server\n # This ensures we always fetch fresh data from the database\n if not use_cache and current_server_name:\n servers_cache = safe_cache_get(self._shared_component_cache, \"servers\", {})\n if isinstance(servers_cache, dict) and current_server_name in servers_cache:\n servers_cache.pop(current_server_name)\n safe_cache_set(self._shared_component_cache, \"servers\", servers_cache)\n\n # Check if tools are already cached for this server before clearing\n cached_tools = None\n if current_server_name and use_cache:\n servers_cache = safe_cache_get(self._shared_component_cache, \"servers\", {})\n if isinstance(servers_cache, dict):\n cached = servers_cache.get(current_server_name)\n if cached is not None:\n try:\n cached_tools = cached[\"tools\"]\n self.tools = cached_tools\n self.tool_names = cached[\"tool_names\"]\n self._tool_cache = cached[\"tool_cache\"]\n except (TypeError, KeyError, AttributeError) as e:\n # Handle corrupted cache data by ignoring it\n msg = f\"Unable to use cached data for MCP Server,{current_server_name}: {e}\"\n await logger.awarning(msg)\n cached_tools = None\n\n # Clear tools when cache is disabled OR when we don't have cached tools\n # This ensures fresh tools are fetched after database edits\n if not cached_tools or not use_cache:\n self.tools = [] # Clear previous tools to force refresh\n\n # Clear previous tool inputs if:\n # 1. Server actually changed\n # 2. Cache is disabled (meaning tool list will be refreshed)\n if server_changed or not use_cache:\n self.remove_non_default_keys(build_config)\n\n # Only show the tool dropdown if not in tool_mode\n if not is_in_tool_mode:\n build_config[\"tool\"][\"show\"] = True\n if cached_tools:\n # Use cached tools to populate options immediately\n build_config[\"tool\"][\"options\"] = [tool.name for tool in cached_tools]\n build_config[\"tool\"][\"placeholder\"] = \"Select a tool\"\n else:\n # Show loading state only when we need to fetch tools\n build_config[\"tool\"][\"placeholder\"] = \"Loading tools...\"\n build_config[\"tool\"][\"options\"] = []\n # Force a value refresh when:\n # 1. Server changed\n # 2. We don't have cached tools\n # 3. Cache is disabled (to force refresh on config changes)\n if server_changed or not cached_tools or not use_cache:\n build_config[\"tool\"][\"value\"] = uuid.uuid4()\n else:\n # Keep the tool dropdown hidden if in tool_mode\n self._not_load_actions = True\n build_config[\"tool\"][\"show\"] = False\n\n elif field_name == \"tool_mode\":\n build_config[\"tool\"][\"placeholder\"] = \"\"\n build_config[\"tool\"][\"show\"] = not bool(field_value) and bool(build_config[\"mcp_server\"])\n self.remove_non_default_keys(build_config)\n self.tool = build_config[\"tool\"][\"value\"]\n if field_value:\n self._not_load_actions = True\n else:\n build_config[\"tool\"][\"value\"] = uuid.uuid4()\n build_config[\"tool\"][\"options\"] = []\n build_config[\"tool\"][\"show\"] = True\n build_config[\"tool\"][\"placeholder\"] = \"Loading tools...\"\n elif field_name == \"tools_metadata\":\n self._not_load_actions = False\n\n except Exception as e:\n msg = f\"Error in update_build_config: {e!s}\"\n await logger.aexception(msg)\n raise ValueError(msg) from e\n else:\n return build_config\n\n def get_inputs_for_all_tools(self, tools: list) -> dict:\n \"\"\"Get input schemas for all tools.\"\"\"\n inputs = {}\n for tool in tools:\n if not tool or not hasattr(tool, \"name\"):\n continue\n try:\n flat_schema = flatten_schema(tool.args_schema.schema())\n input_schema = create_input_schema_from_json_schema(flat_schema)\n langflow_inputs = schema_to_langflow_inputs(input_schema)\n inputs[tool.name] = langflow_inputs\n except (AttributeError, ValueError, TypeError, KeyError) as e:\n msg = f\"Error getting inputs for tool {getattr(tool, 'name', 'unknown')}: {e!s}\"\n logger.exception(msg)\n continue\n return inputs\n\n def remove_non_default_keys(self, build_config: dict) -> None:\n \"\"\"Remove non-default keys from the build config.\"\"\"\n for key in list(build_config.keys()):\n if key not in self.default_keys:\n build_config.pop(key)\n\n async def _update_tool_config(self, build_config: dict, tool_name: str) -> None:\n \"\"\"Update tool configuration with proper error handling.\"\"\"\n if not self.tools:\n self.tools, build_config[\"mcp_server\"][\"value\"] = await self.update_tool_list()\n\n if not tool_name:\n return\n\n tool_obj = next((tool for tool in self.tools if tool.name == tool_name), None)\n if not tool_obj:\n msg = f\"Tool {tool_name} not found in available tools: {self.tools}\"\n self.remove_non_default_keys(build_config)\n build_config[\"tool\"][\"value\"] = \"\"\n await logger.awarning(msg)\n return\n\n try:\n # Store current values before removing inputs (only for the current tool)\n current_values = {}\n for key, value in build_config.items():\n if key not in self.default_keys and isinstance(value, dict) and \"value\" in value:\n current_values[key] = value[\"value\"]\n\n # Remove ALL non-default keys (all previous tool inputs)\n self.remove_non_default_keys(build_config)\n\n # Get and validate new inputs for the selected tool\n self.schema_inputs = await self._validate_schema_inputs(tool_obj)\n if not self.schema_inputs:\n msg = f\"No input parameters to configure for tool '{tool_name}'\"\n await logger.ainfo(msg)\n return\n\n # Add new inputs to build config for the selected tool only\n for schema_input in self.schema_inputs:\n if not schema_input or not hasattr(schema_input, \"name\"):\n msg = \"Invalid schema input detected, skipping\"\n await logger.awarning(msg)\n continue\n\n try:\n name = schema_input.name\n input_dict = schema_input.to_dict()\n input_dict.setdefault(\"value\", None)\n input_dict.setdefault(\"required\", True)\n\n build_config[name] = input_dict\n\n # Preserve existing value if the parameter name exists in current_values\n if name in current_values:\n build_config[name][\"value\"] = current_values[name]\n\n except (AttributeError, KeyError, TypeError) as e:\n msg = f\"Error processing schema input {schema_input}: {e!s}\"\n await logger.aexception(msg)\n continue\n except ValueError as e:\n msg = f\"Schema validation error for tool {tool_name}: {e!s}\"\n await logger.aexception(msg)\n self.schema_inputs = []\n return\n except (AttributeError, KeyError, TypeError) as e:\n msg = f\"Error updating tool config: {e!s}\"\n await logger.aexception(msg)\n raise ValueError(msg) from e\n\n async def build_output(self) -> DataFrame:\n \"\"\"Build output with improved error handling and validation.\"\"\"\n try:\n self.tools, _ = await self.update_tool_list()\n if self.tool != \"\":\n # Set session context for persistent MCP sessions using Langflow session ID\n session_context = self._get_session_context()\n if session_context:\n self.stdio_client.set_session_context(session_context)\n self.streamable_http_client.set_session_context(session_context)\n exec_tool = self._tool_cache[self.tool]\n tool_args = self.get_inputs_for_all_tools(self.tools)[self.tool]\n kwargs = {}\n for arg in tool_args:\n value = getattr(self, arg.name, None)\n if value is not None:\n if isinstance(value, Message):\n kwargs[arg.name] = value.text\n else:\n kwargs[arg.name] = value\n\n unflattened_kwargs = maybe_unflatten_dict(kwargs)\n\n output = await exec_tool.coroutine(**unflattened_kwargs)\n tool_content = []\n for item in output.content:\n item_dict = item.model_dump()\n item_dict = self.process_output_item(item_dict)\n tool_content.append(item_dict)\n\n if isinstance(tool_content, list) and all(isinstance(x, dict) for x in tool_content):\n return DataFrame(tool_content)\n return DataFrame(data=tool_content)\n return DataFrame(data=[{\"error\": \"You must select a tool\"}])\n except Exception as e:\n msg = f\"Error in build_output: {e!s}\"\n await logger.aexception(msg)\n raise ValueError(msg) from e\n\n def process_output_item(self, item_dict):\n \"\"\"Process the output of a tool.\"\"\"\n if item_dict.get(\"type\") == \"text\":\n text = item_dict.get(\"text\")\n try:\n return json.loads(text)\n except json.JSONDecodeError:\n return item_dict\n return item_dict\n\n def _get_session_context(self) -> str | None:\n \"\"\"Get the Langflow session ID for MCP session caching.\"\"\"\n # Try to get session ID from the component's execution context\n if hasattr(self, \"graph\") and hasattr(self.graph, \"session_id\"):\n session_id = self.graph.session_id\n # Include server name to ensure different servers get different sessions\n server_name = \"\"\n mcp_server = getattr(self, \"mcp_server\", None)\n if isinstance(mcp_server, dict):\n server_name = mcp_server.get(\"name\", \"\")\n elif mcp_server:\n server_name = str(mcp_server)\n return f\"{session_id}_{server_name}\" if session_id else None\n return None\n\n async def _get_tools(self):\n \"\"\"Get cached tools or update if necessary.\"\"\"\n mcp_server = getattr(self, \"mcp_server\", None)\n if not self._not_load_actions:\n tools, _ = await self.update_tool_list(mcp_server)\n return tools\n return []\n"
|
|
2709
2730
|
},
|
|
2710
2731
|
"mcp_server": {
|
|
2711
2732
|
"_input_type": "McpInput",
|
|
@@ -401,7 +401,7 @@
|
|
|
401
401
|
},
|
|
402
402
|
{
|
|
403
403
|
"name": "fastapi",
|
|
404
|
-
"version": "0.
|
|
404
|
+
"version": "0.123.0"
|
|
405
405
|
},
|
|
406
406
|
{
|
|
407
407
|
"name": "lfx",
|
|
@@ -1241,7 +1241,7 @@
|
|
|
1241
1241
|
"dependencies": [
|
|
1242
1242
|
{
|
|
1243
1243
|
"name": "langchain_core",
|
|
1244
|
-
"version": "0.3.
|
|
1244
|
+
"version": "0.3.80"
|
|
1245
1245
|
},
|
|
1246
1246
|
{
|
|
1247
1247
|
"name": "pydantic",
|
|
@@ -335,7 +335,7 @@
|
|
|
335
335
|
},
|
|
336
336
|
{
|
|
337
337
|
"name": "fastapi",
|
|
338
|
-
"version": "0.
|
|
338
|
+
"version": "0.123.0"
|
|
339
339
|
},
|
|
340
340
|
{
|
|
341
341
|
"name": "lfx",
|
|
@@ -910,7 +910,7 @@
|
|
|
910
910
|
"beta": false,
|
|
911
911
|
"conditional_paths": [],
|
|
912
912
|
"custom_fields": {},
|
|
913
|
-
"description": "Loads content from
|
|
913
|
+
"description": "Loads and returns the content from uploaded files.",
|
|
914
914
|
"display_name": "File",
|
|
915
915
|
"documentation": "",
|
|
916
916
|
"edited": false,
|
|
@@ -931,15 +931,23 @@
|
|
|
931
931
|
"legacy": false,
|
|
932
932
|
"lf_version": "1.6.0",
|
|
933
933
|
"metadata": {
|
|
934
|
-
"code_hash": "
|
|
934
|
+
"code_hash": "1d81b3a4d764",
|
|
935
935
|
"dependencies": {
|
|
936
936
|
"dependencies": [
|
|
937
937
|
{
|
|
938
938
|
"name": "lfx",
|
|
939
939
|
"version": null
|
|
940
|
+
},
|
|
941
|
+
{
|
|
942
|
+
"name": "langchain_core",
|
|
943
|
+
"version": "0.3.80"
|
|
944
|
+
},
|
|
945
|
+
{
|
|
946
|
+
"name": "pydantic",
|
|
947
|
+
"version": "2.11.10"
|
|
940
948
|
}
|
|
941
949
|
],
|
|
942
|
-
"total_dependencies":
|
|
950
|
+
"total_dependencies": 3
|
|
943
951
|
},
|
|
944
952
|
"module": "lfx.components.files_and_knowledge.file.FileComponent"
|
|
945
953
|
},
|
|
@@ -999,7 +1007,7 @@
|
|
|
999
1007
|
"show": true,
|
|
1000
1008
|
"title_case": false,
|
|
1001
1009
|
"type": "code",
|
|
1002
|
-
"value": "\"\"\"Enhanced file component with Docling support and process isolation.\n\nNotes:\n-----\n- ALL Docling parsing/export runs in a separate OS process to prevent memory\n growth and native library state from impacting the main Langflow process.\n- Standard text/structured parsing continues to use existing BaseFileComponent\n utilities (and optional threading via `parallel_load_data`).\n\"\"\"\n\nfrom __future__ import annotations\n\nimport contextlib\nimport json\nimport subprocess\nimport sys\nimport textwrap\nfrom copy import deepcopy\nfrom pathlib import Path\nfrom tempfile import NamedTemporaryFile\nfrom typing import Any\n\nfrom lfx.base.data.base_file import BaseFileComponent\nfrom lfx.base.data.storage_utils import parse_storage_path\nfrom lfx.base.data.utils import TEXT_FILE_TYPES, parallel_load_data, parse_text_file_to_data\nfrom lfx.inputs.inputs import DropdownInput, MessageTextInput, StrInput\nfrom lfx.io import BoolInput, FileInput, IntInput, Output\nfrom lfx.schema.data import Data\nfrom lfx.schema.dataframe import DataFrame # noqa: TC001\nfrom lfx.schema.message import Message\nfrom lfx.services.deps import get_settings_service, get_storage_service\nfrom lfx.utils.async_helpers import run_until_complete\n\n\nclass FileComponent(BaseFileComponent):\n \"\"\"File component with optional Docling processing (isolated in a subprocess).\"\"\"\n\n display_name = \"Read File\"\n description = \"Loads content from one or more files.\"\n documentation: str = \"https://docs.langflow.org/read-file\"\n icon = \"file-text\"\n name = \"File\"\n\n # Extensions that can be processed without Docling (using standard text parsing)\n TEXT_EXTENSIONS = TEXT_FILE_TYPES\n\n # Extensions that require Docling for processing (images, advanced office formats, etc.)\n DOCLING_ONLY_EXTENSIONS = [\n \"adoc\",\n \"asciidoc\",\n \"asc\",\n \"bmp\",\n \"dotx\",\n \"dotm\",\n \"docm\",\n \"jpg\",\n \"jpeg\",\n \"png\",\n \"potx\",\n \"ppsx\",\n \"pptm\",\n \"potm\",\n \"ppsm\",\n \"pptx\",\n \"tiff\",\n \"xls\",\n \"xlsx\",\n \"xhtml\",\n \"webp\",\n ]\n\n # Docling-supported/compatible extensions; TEXT_FILE_TYPES are supported by the base loader.\n VALID_EXTENSIONS = [\n *TEXT_EXTENSIONS,\n *DOCLING_ONLY_EXTENSIONS,\n ]\n\n # Fixed export settings used when markdown export is requested.\n EXPORT_FORMAT = \"Markdown\"\n IMAGE_MODE = \"placeholder\"\n\n _base_inputs = deepcopy(BaseFileComponent.get_base_inputs())\n\n for input_item in _base_inputs:\n if isinstance(input_item, FileInput) and input_item.name == \"path\":\n input_item.real_time_refresh = True\n input_item.tool_mode = False # Disable tool mode for file upload input\n input_item.required = False # Make it optional so it doesn't error in tool mode\n break\n\n inputs = [\n *_base_inputs,\n StrInput(\n name=\"file_path_str\",\n display_name=\"File Path\",\n info=(\n \"Path to the file to read. Used when component is called as a tool. \"\n \"If not provided, will use the uploaded file from 'path' input.\"\n ),\n show=False,\n advanced=True,\n tool_mode=True,\n required=False,\n ),\n BoolInput(\n name=\"advanced_mode\",\n display_name=\"Advanced Parser\",\n value=False,\n real_time_refresh=True,\n info=(\n \"Enable advanced document processing and export with Docling for PDFs, images, and office documents. \"\n \"Note that advanced document processing can consume significant resources.\"\n ),\n show=True,\n ),\n DropdownInput(\n name=\"pipeline\",\n display_name=\"Pipeline\",\n info=\"Docling pipeline to use\",\n options=[\"standard\", \"vlm\"],\n value=\"standard\",\n advanced=True,\n real_time_refresh=True,\n ),\n DropdownInput(\n name=\"ocr_engine\",\n display_name=\"OCR Engine\",\n info=\"OCR engine to use. Only available when pipeline is set to 'standard'.\",\n options=[\"None\", \"easyocr\"],\n value=\"easyocr\",\n show=False,\n advanced=True,\n ),\n StrInput(\n name=\"md_image_placeholder\",\n display_name=\"Image placeholder\",\n info=\"Specify the image placeholder for markdown exports.\",\n value=\"<!-- image -->\",\n advanced=True,\n show=False,\n ),\n StrInput(\n name=\"md_page_break_placeholder\",\n display_name=\"Page break placeholder\",\n info=\"Add this placeholder between pages in the markdown output.\",\n value=\"\",\n advanced=True,\n show=False,\n ),\n MessageTextInput(\n name=\"doc_key\",\n display_name=\"Doc Key\",\n info=\"The key to use for the DoclingDocument column.\",\n value=\"doc\",\n advanced=True,\n show=False,\n ),\n # Deprecated input retained for backward-compatibility.\n BoolInput(\n name=\"use_multithreading\",\n display_name=\"[Deprecated] Use Multithreading\",\n advanced=True,\n value=True,\n info=\"Set 'Processing Concurrency' greater than 1 to enable multithreading.\",\n ),\n IntInput(\n name=\"concurrency_multithreading\",\n display_name=\"Processing Concurrency\",\n advanced=True,\n info=\"When multiple files are being processed, the number of files to process concurrently.\",\n value=1,\n ),\n BoolInput(\n name=\"markdown\",\n display_name=\"Markdown Export\",\n info=\"Export processed documents to Markdown format. Only available when advanced mode is enabled.\",\n value=False,\n show=False,\n ),\n ]\n\n outputs = [\n Output(display_name=\"Raw Content\", name=\"message\", method=\"load_files_message\", tool_mode=True),\n ]\n\n # ------------------------------ UI helpers --------------------------------------\n\n def _path_value(self, template: dict) -> list[str]:\n \"\"\"Return the list of currently selected file paths from the template.\"\"\"\n return template.get(\"path\", {}).get(\"file_path\", [])\n\n def update_build_config(\n self,\n build_config: dict[str, Any],\n field_value: Any,\n field_name: str | None = None,\n ) -> dict[str, Any]:\n \"\"\"Show/hide Advanced Parser and related fields based on selection context.\"\"\"\n if field_name == \"path\":\n paths = self._path_value(build_config)\n\n # If all files can be processed by docling, do so\n allow_advanced = all(not file_path.endswith((\".csv\", \".xlsx\", \".parquet\")) for file_path in paths)\n build_config[\"advanced_mode\"][\"show\"] = allow_advanced\n if not allow_advanced:\n build_config[\"advanced_mode\"][\"value\"] = False\n for f in (\"pipeline\", \"ocr_engine\", \"doc_key\", \"md_image_placeholder\", \"md_page_break_placeholder\"):\n if f in build_config:\n build_config[f][\"show\"] = False\n\n # Docling Processing\n elif field_name == \"advanced_mode\":\n for f in (\"pipeline\", \"ocr_engine\", \"doc_key\", \"md_image_placeholder\", \"md_page_break_placeholder\"):\n if f in build_config:\n build_config[f][\"show\"] = bool(field_value)\n if f == \"pipeline\":\n build_config[f][\"advanced\"] = not bool(field_value)\n\n elif field_name == \"pipeline\":\n if field_value == \"standard\":\n build_config[\"ocr_engine\"][\"show\"] = True\n build_config[\"ocr_engine\"][\"value\"] = \"easyocr\"\n else:\n build_config[\"ocr_engine\"][\"show\"] = False\n build_config[\"ocr_engine\"][\"value\"] = \"None\"\n\n return build_config\n\n def update_outputs(self, frontend_node: dict[str, Any], field_name: str, field_value: Any) -> dict[str, Any]: # noqa: ARG002\n \"\"\"Dynamically show outputs based on file count/type and advanced mode.\"\"\"\n if field_name not in [\"path\", \"advanced_mode\", \"pipeline\"]:\n return frontend_node\n\n template = frontend_node.get(\"template\", {})\n paths = self._path_value(template)\n if not paths:\n return frontend_node\n\n frontend_node[\"outputs\"] = []\n if len(paths) == 1:\n file_path = paths[0] if field_name == \"path\" else frontend_node[\"template\"][\"path\"][\"file_path\"][0]\n if file_path.endswith((\".csv\", \".xlsx\", \".parquet\")):\n frontend_node[\"outputs\"].append(\n Output(\n display_name=\"Structured Content\",\n name=\"dataframe\",\n method=\"load_files_structured\",\n tool_mode=True,\n ),\n )\n elif file_path.endswith(\".json\"):\n frontend_node[\"outputs\"].append(\n Output(display_name=\"Structured Content\", name=\"json\", method=\"load_files_json\", tool_mode=True),\n )\n\n advanced_mode = frontend_node.get(\"template\", {}).get(\"advanced_mode\", {}).get(\"value\", False)\n if advanced_mode:\n frontend_node[\"outputs\"].append(\n Output(\n display_name=\"Structured Output\",\n name=\"advanced_dataframe\",\n method=\"load_files_dataframe\",\n tool_mode=True,\n ),\n )\n frontend_node[\"outputs\"].append(\n Output(\n display_name=\"Markdown\", name=\"advanced_markdown\", method=\"load_files_markdown\", tool_mode=True\n ),\n )\n frontend_node[\"outputs\"].append(\n Output(display_name=\"File Path\", name=\"path\", method=\"load_files_path\", tool_mode=True),\n )\n else:\n frontend_node[\"outputs\"].append(\n Output(display_name=\"Raw Content\", name=\"message\", method=\"load_files_message\", tool_mode=True),\n )\n frontend_node[\"outputs\"].append(\n Output(display_name=\"File Path\", name=\"path\", method=\"load_files_path\", tool_mode=True),\n )\n else:\n # Multiple files => DataFrame output; advanced parser disabled\n frontend_node[\"outputs\"].append(\n Output(display_name=\"Files\", name=\"dataframe\", method=\"load_files\", tool_mode=True)\n )\n\n return frontend_node\n\n # ------------------------------ Core processing ----------------------------------\n\n def _validate_and_resolve_paths(self) -> list[BaseFileComponent.BaseFile]:\n \"\"\"Override to handle file_path_str input from tool mode.\n\n When called as a tool, the file_path_str parameter can be set.\n If not provided, it will fall back to using the path FileInput (uploaded file).\n Priority:\n 1. file_path_str (if provided by the tool call)\n 2. path (uploaded file from UI)\n \"\"\"\n # Check if file_path_str is provided (from tool mode)\n file_path_str = getattr(self, \"file_path_str\", None)\n if file_path_str:\n # Use the string path from tool mode\n from pathlib import Path\n\n from lfx.schema.data import Data\n\n resolved_path = Path(self.resolve_path(file_path_str))\n if not resolved_path.exists():\n msg = f\"File or directory not found: {file_path_str}\"\n self.log(msg)\n if not self.silent_errors:\n raise ValueError(msg)\n return []\n\n data_obj = Data(data={self.SERVER_FILE_PATH_FIELDNAME: str(resolved_path)})\n return [BaseFileComponent.BaseFile(data_obj, resolved_path, delete_after_processing=False)]\n\n # Otherwise use the default implementation (uses path FileInput)\n return super()._validate_and_resolve_paths()\n\n def _is_docling_compatible(self, file_path: str) -> bool:\n \"\"\"Lightweight extension gate for Docling-compatible types.\"\"\"\n docling_exts = (\n \".adoc\",\n \".asciidoc\",\n \".asc\",\n \".bmp\",\n \".csv\",\n \".dotx\",\n \".dotm\",\n \".docm\",\n \".docx\",\n \".htm\",\n \".html\",\n \".jpg\",\n \".jpeg\",\n \".json\",\n \".md\",\n \".pdf\",\n \".png\",\n \".potx\",\n \".ppsx\",\n \".pptm\",\n \".potm\",\n \".ppsm\",\n \".pptx\",\n \".tiff\",\n \".txt\",\n \".xls\",\n \".xlsx\",\n \".xhtml\",\n \".xml\",\n \".webp\",\n )\n return file_path.lower().endswith(docling_exts)\n\n async def _get_local_file_for_docling(self, file_path: str) -> tuple[str, bool]:\n \"\"\"Get a local file path for Docling processing, downloading from S3 if needed.\n\n Args:\n file_path: Either a local path or S3 key (format \"flow_id/filename\")\n\n Returns:\n tuple[str, bool]: (local_path, should_delete) where should_delete indicates\n if this is a temporary file that should be cleaned up\n \"\"\"\n settings = get_settings_service().settings\n if settings.storage_type == \"local\":\n return file_path, False\n\n # S3 storage - download to temp file\n parsed = parse_storage_path(file_path)\n if not parsed:\n msg = f\"Invalid S3 path format: {file_path}. Expected 'flow_id/filename'\"\n raise ValueError(msg)\n\n storage_service = get_storage_service()\n flow_id, filename = parsed\n\n # Get file content from S3\n content = await storage_service.get_file(flow_id, filename)\n\n suffix = Path(filename).suffix\n with NamedTemporaryFile(mode=\"wb\", suffix=suffix, delete=False) as tmp_file:\n tmp_file.write(content)\n temp_path = tmp_file.name\n\n return temp_path, True\n\n def _process_docling_in_subprocess(self, file_path: str) -> Data | None:\n \"\"\"Run Docling in a separate OS process and map the result to a Data object.\n\n We avoid multiprocessing pickling by launching `python -c \"<script>\"` and\n passing JSON config via stdin. The child prints a JSON result to stdout.\n\n For S3 storage, the file is downloaded to a temp file first.\n \"\"\"\n if not file_path:\n return None\n\n settings = get_settings_service().settings\n if settings.storage_type == \"s3\":\n local_path, should_delete = run_until_complete(self._get_local_file_for_docling(file_path))\n else:\n local_path = file_path\n should_delete = False\n\n try:\n return self._process_docling_subprocess_impl(local_path, file_path)\n finally:\n # Clean up temp file if we created one\n if should_delete:\n with contextlib.suppress(Exception):\n Path(local_path).unlink() # Ignore cleanup errors\n\n def _process_docling_subprocess_impl(self, local_file_path: str, original_file_path: str) -> Data | None:\n \"\"\"Implementation of Docling subprocess processing.\n\n Args:\n local_file_path: Path to local file to process\n original_file_path: Original file path to include in metadata\n Returns:\n Data object with processed content\n \"\"\"\n args: dict[str, Any] = {\n \"file_path\": local_file_path,\n \"markdown\": bool(self.markdown),\n \"image_mode\": str(self.IMAGE_MODE),\n \"md_image_placeholder\": str(self.md_image_placeholder),\n \"md_page_break_placeholder\": str(self.md_page_break_placeholder),\n \"pipeline\": str(self.pipeline),\n \"ocr_engine\": (\n self.ocr_engine if self.ocr_engine and self.ocr_engine != \"None\" and self.pipeline != \"vlm\" else None\n ),\n }\n\n self.log(f\"Starting Docling subprocess for file: {local_file_path}\")\n self.log(args)\n\n # Child script for isolating the docling processing\n child_script = textwrap.dedent(\n r\"\"\"\n import json, sys\n\n def try_imports():\n try:\n from docling.datamodel.base_models import ConversionStatus, InputFormat # type: ignore\n from docling.document_converter import DocumentConverter # type: ignore\n from docling_core.types.doc import ImageRefMode # type: ignore\n return ConversionStatus, InputFormat, DocumentConverter, ImageRefMode, \"latest\"\n except Exception as e:\n raise e\n\n def create_converter(strategy, input_format, DocumentConverter, pipeline, ocr_engine):\n # --- Standard PDF/IMAGE pipeline (your existing behavior), with optional OCR ---\n if pipeline == \"standard\":\n try:\n from docling.datamodel.pipeline_options import PdfPipelineOptions # type: ignore\n from docling.document_converter import PdfFormatOption # type: ignore\n\n pipe = PdfPipelineOptions()\n pipe.do_ocr = False\n\n if ocr_engine:\n try:\n from docling.models.factories import get_ocr_factory # type: ignore\n pipe.do_ocr = True\n fac = get_ocr_factory(allow_external_plugins=False)\n pipe.ocr_options = fac.create_options(kind=ocr_engine)\n except Exception:\n # If OCR setup fails, disable it\n pipe.do_ocr = False\n\n fmt = {}\n if hasattr(input_format, \"PDF\"):\n fmt[getattr(input_format, \"PDF\")] = PdfFormatOption(pipeline_options=pipe)\n if hasattr(input_format, \"IMAGE\"):\n fmt[getattr(input_format, \"IMAGE\")] = PdfFormatOption(pipeline_options=pipe)\n\n return DocumentConverter(format_options=fmt)\n except Exception:\n return DocumentConverter()\n\n # --- Vision-Language Model (VLM) pipeline ---\n if pipeline == \"vlm\":\n try:\n from docling.datamodel.pipeline_options import VlmPipelineOptions\n from docling.datamodel.vlm_model_specs import GRANITEDOCLING_MLX, GRANITEDOCLING_TRANSFORMERS\n from docling.document_converter import PdfFormatOption\n from docling.pipeline.vlm_pipeline import VlmPipeline\n\n vl_pipe = VlmPipelineOptions(\n vlm_options=GRANITEDOCLING_TRANSFORMERS,\n )\n\n if sys.platform == \"darwin\":\n try:\n import mlx_vlm\n vl_pipe.vlm_options = GRANITEDOCLING_MLX\n except ImportError as e:\n raise e\n\n # VLM paths generally don't need OCR; keep OCR off by default here.\n fmt = {}\n if hasattr(input_format, \"PDF\"):\n fmt[getattr(input_format, \"PDF\")] = PdfFormatOption(\n pipeline_cls=VlmPipeline,\n pipeline_options=vl_pipe\n )\n if hasattr(input_format, \"IMAGE\"):\n fmt[getattr(input_format, \"IMAGE\")] = PdfFormatOption(\n pipeline_cls=VlmPipeline,\n pipeline_options=vl_pipe\n )\n\n return DocumentConverter(format_options=fmt)\n except Exception as e:\n raise e\n\n # --- Fallback: default converter with no special options ---\n return DocumentConverter()\n\n def export_markdown(document, ImageRefMode, image_mode, img_ph, pg_ph):\n try:\n mode = getattr(ImageRefMode, image_mode.upper(), image_mode)\n return document.export_to_markdown(\n image_mode=mode,\n image_placeholder=img_ph,\n page_break_placeholder=pg_ph,\n )\n except Exception:\n try:\n return document.export_to_text()\n except Exception:\n return str(document)\n\n def to_rows(doc_dict):\n rows = []\n for t in doc_dict.get(\"texts\", []):\n prov = t.get(\"prov\") or []\n page_no = None\n if prov and isinstance(prov, list) and isinstance(prov[0], dict):\n page_no = prov[0].get(\"page_no\")\n rows.append({\n \"page_no\": page_no,\n \"label\": t.get(\"label\"),\n \"text\": t.get(\"text\"),\n \"level\": t.get(\"level\"),\n })\n return rows\n\n def main():\n cfg = json.loads(sys.stdin.read())\n file_path = cfg[\"file_path\"]\n markdown = cfg[\"markdown\"]\n image_mode = cfg[\"image_mode\"]\n img_ph = cfg[\"md_image_placeholder\"]\n pg_ph = cfg[\"md_page_break_placeholder\"]\n pipeline = cfg[\"pipeline\"]\n ocr_engine = cfg.get(\"ocr_engine\")\n meta = {\"file_path\": file_path}\n\n try:\n ConversionStatus, InputFormat, DocumentConverter, ImageRefMode, strategy = try_imports()\n converter = create_converter(strategy, InputFormat, DocumentConverter, pipeline, ocr_engine)\n try:\n res = converter.convert(file_path)\n except Exception as e:\n print(json.dumps({\"ok\": False, \"error\": f\"Docling conversion error: {e}\", \"meta\": meta}))\n return\n\n ok = False\n if hasattr(res, \"status\"):\n try:\n ok = (res.status == ConversionStatus.SUCCESS) or (str(res.status).lower() == \"success\")\n except Exception:\n ok = (str(res.status).lower() == \"success\")\n if not ok and hasattr(res, \"document\"):\n ok = getattr(res, \"document\", None) is not None\n if not ok:\n print(json.dumps({\"ok\": False, \"error\": \"Docling conversion failed\", \"meta\": meta}))\n return\n\n doc = getattr(res, \"document\", None)\n if doc is None:\n print(json.dumps({\"ok\": False, \"error\": \"Docling produced no document\", \"meta\": meta}))\n return\n\n if markdown:\n text = export_markdown(doc, ImageRefMode, image_mode, img_ph, pg_ph)\n print(json.dumps({\"ok\": True, \"mode\": \"markdown\", \"text\": text, \"meta\": meta}))\n return\n\n # structured\n try:\n doc_dict = doc.export_to_dict()\n except Exception as e:\n print(json.dumps({\"ok\": False, \"error\": f\"Docling export_to_dict failed: {e}\", \"meta\": meta}))\n return\n\n rows = to_rows(doc_dict)\n print(json.dumps({\"ok\": True, \"mode\": \"structured\", \"doc\": rows, \"meta\": meta}))\n except Exception as e:\n print(\n json.dumps({\n \"ok\": False,\n \"error\": f\"Docling processing error: {e}\",\n \"meta\": {\"file_path\": file_path},\n })\n )\n\n if __name__ == \"__main__\":\n main()\n \"\"\"\n )\n\n # Validate file_path to avoid command injection or unsafe input\n if not isinstance(args[\"file_path\"], str) or any(c in args[\"file_path\"] for c in [\";\", \"|\", \"&\", \"$\", \"`\"]):\n return Data(data={\"error\": \"Unsafe file path detected.\", \"file_path\": args[\"file_path\"]})\n\n proc = subprocess.run( # noqa: S603\n [sys.executable, \"-u\", \"-c\", child_script],\n input=json.dumps(args).encode(\"utf-8\"),\n capture_output=True,\n check=False,\n )\n\n if not proc.stdout:\n err_msg = proc.stderr.decode(\"utf-8\", errors=\"replace\") or \"no output from child process\"\n return Data(data={\"error\": f\"Docling subprocess error: {err_msg}\", \"file_path\": original_file_path})\n\n try:\n result = json.loads(proc.stdout.decode(\"utf-8\"))\n except Exception as e: # noqa: BLE001\n err_msg = proc.stderr.decode(\"utf-8\", errors=\"replace\")\n return Data(\n data={\n \"error\": f\"Invalid JSON from Docling subprocess: {e}. stderr={err_msg}\",\n \"file_path\": original_file_path,\n },\n )\n\n if not result.get(\"ok\"):\n return Data(data={\"error\": result.get(\"error\", \"Unknown Docling error\"), **result.get(\"meta\", {})})\n\n meta = result.get(\"meta\", {})\n if result.get(\"mode\") == \"markdown\":\n exported_content = str(result.get(\"text\", \"\"))\n return Data(\n text=exported_content,\n data={\"exported_content\": exported_content, \"export_format\": self.EXPORT_FORMAT, **meta},\n )\n\n rows = list(result.get(\"doc\", []))\n return Data(data={\"doc\": rows, \"export_format\": self.EXPORT_FORMAT, **meta})\n\n def process_files(\n self,\n file_list: list[BaseFileComponent.BaseFile],\n ) -> list[BaseFileComponent.BaseFile]:\n \"\"\"Process input files.\n\n - advanced_mode => Docling in a separate process.\n - Otherwise => standard parsing in current process (optionally threaded).\n \"\"\"\n if not file_list:\n msg = \"No files to process.\"\n raise ValueError(msg)\n\n # Validate that files requiring Docling are only processed when advanced mode is enabled\n if not self.advanced_mode:\n for file in file_list:\n extension = file.path.suffix[1:].lower()\n if extension in self.DOCLING_ONLY_EXTENSIONS:\n msg = (\n f\"File '{file.path.name}' has extension '.{extension}' which requires \"\n f\"Advanced Parser mode. Please enable 'Advanced Parser' to process this file.\"\n )\n self.log(msg)\n raise ValueError(msg)\n\n def process_file_standard(file_path: str, *, silent_errors: bool = False) -> Data | None:\n try:\n return parse_text_file_to_data(file_path, silent_errors=silent_errors)\n except FileNotFoundError as e:\n self.log(f\"File not found: {file_path}. Error: {e}\")\n if not silent_errors:\n raise\n return None\n except Exception as e:\n self.log(f\"Unexpected error processing {file_path}: {e}\")\n if not silent_errors:\n raise\n return None\n\n docling_compatible = all(self._is_docling_compatible(str(f.path)) for f in file_list)\n\n # Advanced path: Check if ALL files are compatible with Docling\n if self.advanced_mode and docling_compatible:\n final_return: list[BaseFileComponent.BaseFile] = []\n for file in file_list:\n file_path = str(file.path)\n advanced_data: Data | None = self._process_docling_in_subprocess(file_path)\n\n # --- UNNEST: expand each element in `doc` to its own Data row\n payload = getattr(advanced_data, \"data\", {}) or {}\n doc_rows = payload.get(\"doc\")\n if isinstance(doc_rows, list):\n rows: list[Data | None] = [\n Data(\n data={\n \"file_path\": file_path,\n **(item if isinstance(item, dict) else {\"value\": item}),\n },\n )\n for item in doc_rows\n ]\n final_return.extend(self.rollup_data(file_list, rows))\n else:\n # If not structured, keep as-is (e.g., markdown export or error dict)\n final_return.extend(self.rollup_data(file_list, [advanced_data]))\n return final_return\n\n # Standard multi-file (or single non-advanced) path\n concurrency = 1 if not self.use_multithreading else max(1, self.concurrency_multithreading)\n\n file_paths = [str(f.path) for f in file_list]\n self.log(f\"Starting parallel processing of {len(file_paths)} files with concurrency: {concurrency}.\")\n my_data = parallel_load_data(\n file_paths,\n silent_errors=self.silent_errors,\n load_function=process_file_standard,\n max_concurrency=concurrency,\n )\n return self.rollup_data(file_list, my_data)\n\n # ------------------------------ Output helpers -----------------------------------\n\n def load_files_helper(self) -> DataFrame:\n result = self.load_files()\n\n # Error condition - raise error if no text and an error is present\n if not hasattr(result, \"text\"):\n if hasattr(result, \"error\"):\n raise ValueError(result.error[0])\n msg = \"Could not extract content from the provided file(s).\"\n raise ValueError(msg)\n\n return result\n\n def load_files_dataframe(self) -> DataFrame:\n \"\"\"Load files using advanced Docling processing and export to DataFrame format.\"\"\"\n self.markdown = False\n return self.load_files_helper()\n\n def load_files_markdown(self) -> Message:\n \"\"\"Load files using advanced Docling processing and export to Markdown format.\"\"\"\n self.markdown = True\n result = self.load_files_helper()\n return Message(text=str(result.text[0]))\n"
|
|
1010
|
+
"value": "\"\"\"Enhanced file component with Docling support and process isolation.\n\nNotes:\n-----\n- ALL Docling parsing/export runs in a separate OS process to prevent memory\n growth and native library state from impacting the main Langflow process.\n- Standard text/structured parsing continues to use existing BaseFileComponent\n utilities (and optional threading via `parallel_load_data`).\n\"\"\"\n\nfrom __future__ import annotations\n\nimport contextlib\nimport json\nimport subprocess\nimport sys\nimport textwrap\nfrom copy import deepcopy\nfrom pathlib import Path\nfrom tempfile import NamedTemporaryFile\nfrom typing import Any\n\nfrom lfx.base.data.base_file import BaseFileComponent\nfrom lfx.base.data.storage_utils import parse_storage_path, validate_image_content_type\nfrom lfx.base.data.utils import TEXT_FILE_TYPES, parallel_load_data, parse_text_file_to_data\nfrom lfx.inputs.inputs import DropdownInput, MessageTextInput, StrInput\nfrom lfx.io import BoolInput, FileInput, IntInput, Output\nfrom lfx.schema.data import Data\nfrom lfx.schema.dataframe import DataFrame # noqa: TC001\nfrom lfx.schema.message import Message\nfrom lfx.services.deps import get_settings_service, get_storage_service\nfrom lfx.utils.async_helpers import run_until_complete\n\n\nclass FileComponent(BaseFileComponent):\n \"\"\"File component with optional Docling processing (isolated in a subprocess).\"\"\"\n\n display_name = \"Read File\"\n # description is now a dynamic property - see get_tool_description()\n _base_description = \"Loads content from one or more files.\"\n documentation: str = \"https://docs.langflow.org/read-file\"\n icon = \"file-text\"\n name = \"File\"\n add_tool_output = True # Enable tool mode toggle without requiring tool_mode inputs\n\n # Extensions that can be processed without Docling (using standard text parsing)\n TEXT_EXTENSIONS = TEXT_FILE_TYPES\n\n # Extensions that require Docling for processing (images, advanced office formats, etc.)\n DOCLING_ONLY_EXTENSIONS = [\n \"adoc\",\n \"asciidoc\",\n \"asc\",\n \"bmp\",\n \"dotx\",\n \"dotm\",\n \"docm\",\n \"jpg\",\n \"jpeg\",\n \"png\",\n \"potx\",\n \"ppsx\",\n \"pptm\",\n \"potm\",\n \"ppsm\",\n \"pptx\",\n \"tiff\",\n \"xls\",\n \"xlsx\",\n \"xhtml\",\n \"webp\",\n ]\n\n # Docling-supported/compatible extensions; TEXT_FILE_TYPES are supported by the base loader.\n VALID_EXTENSIONS = [\n *TEXT_EXTENSIONS,\n *DOCLING_ONLY_EXTENSIONS,\n ]\n\n # Fixed export settings used when markdown export is requested.\n EXPORT_FORMAT = \"Markdown\"\n IMAGE_MODE = \"placeholder\"\n\n _base_inputs = deepcopy(BaseFileComponent.get_base_inputs())\n\n for input_item in _base_inputs:\n if isinstance(input_item, FileInput) and input_item.name == \"path\":\n input_item.real_time_refresh = True\n input_item.tool_mode = False # Disable tool mode for file upload input\n input_item.required = False # Make it optional so it doesn't error in tool mode\n break\n\n inputs = [\n *_base_inputs,\n StrInput(\n name=\"file_path_str\",\n display_name=\"File Path\",\n info=(\n \"Path to the file to read. Used when component is called as a tool. \"\n \"If not provided, will use the uploaded file from 'path' input.\"\n ),\n show=False,\n advanced=True,\n tool_mode=True, # Required for Toolset toggle, but _get_tools() ignores this parameter\n required=False,\n ),\n BoolInput(\n name=\"advanced_mode\",\n display_name=\"Advanced Parser\",\n value=False,\n real_time_refresh=True,\n info=(\n \"Enable advanced document processing and export with Docling for PDFs, images, and office documents. \"\n \"Note that advanced document processing can consume significant resources.\"\n ),\n show=True,\n ),\n DropdownInput(\n name=\"pipeline\",\n display_name=\"Pipeline\",\n info=\"Docling pipeline to use\",\n options=[\"standard\", \"vlm\"],\n value=\"standard\",\n advanced=True,\n real_time_refresh=True,\n ),\n DropdownInput(\n name=\"ocr_engine\",\n display_name=\"OCR Engine\",\n info=\"OCR engine to use. Only available when pipeline is set to 'standard'.\",\n options=[\"None\", \"easyocr\"],\n value=\"easyocr\",\n show=False,\n advanced=True,\n ),\n StrInput(\n name=\"md_image_placeholder\",\n display_name=\"Image placeholder\",\n info=\"Specify the image placeholder for markdown exports.\",\n value=\"<!-- image -->\",\n advanced=True,\n show=False,\n ),\n StrInput(\n name=\"md_page_break_placeholder\",\n display_name=\"Page break placeholder\",\n info=\"Add this placeholder between pages in the markdown output.\",\n value=\"\",\n advanced=True,\n show=False,\n ),\n MessageTextInput(\n name=\"doc_key\",\n display_name=\"Doc Key\",\n info=\"The key to use for the DoclingDocument column.\",\n value=\"doc\",\n advanced=True,\n show=False,\n ),\n # Deprecated input retained for backward-compatibility.\n BoolInput(\n name=\"use_multithreading\",\n display_name=\"[Deprecated] Use Multithreading\",\n advanced=True,\n value=True,\n info=\"Set 'Processing Concurrency' greater than 1 to enable multithreading.\",\n ),\n IntInput(\n name=\"concurrency_multithreading\",\n display_name=\"Processing Concurrency\",\n advanced=True,\n info=\"When multiple files are being processed, the number of files to process concurrently.\",\n value=1,\n ),\n BoolInput(\n name=\"markdown\",\n display_name=\"Markdown Export\",\n info=\"Export processed documents to Markdown format. Only available when advanced mode is enabled.\",\n value=False,\n show=False,\n ),\n ]\n\n outputs = [\n Output(display_name=\"Raw Content\", name=\"message\", method=\"load_files_message\", tool_mode=True),\n ]\n\n # ------------------------------ Tool description with file names --------------\n\n def get_tool_description(self) -> str:\n \"\"\"Return a dynamic description that includes the names of uploaded files.\n\n This helps the Agent understand which files are available to read.\n \"\"\"\n base_description = \"Loads and returns the content from uploaded files.\"\n\n # Get the list of uploaded file paths\n file_paths = getattr(self, \"path\", None)\n if not file_paths:\n return base_description\n\n # Ensure it's a list\n if not isinstance(file_paths, list):\n file_paths = [file_paths]\n\n # Extract just the file names from the paths\n file_names = []\n for fp in file_paths:\n if fp:\n name = Path(fp).name\n file_names.append(name)\n\n if file_names:\n files_str = \", \".join(file_names)\n return f\"{base_description} Available files: {files_str}. Call this tool to read these files.\"\n\n return base_description\n\n @property\n def description(self) -> str:\n \"\"\"Dynamic description property that includes uploaded file names.\"\"\"\n return self.get_tool_description()\n\n async def _get_tools(self) -> list:\n \"\"\"Override to create a tool without parameters.\n\n The Read File component should use the files already uploaded via UI,\n not accept file paths from the Agent (which wouldn't know the internal paths).\n \"\"\"\n from langchain_core.tools import StructuredTool\n from pydantic import BaseModel\n\n # Empty schema - no parameters needed\n class EmptySchema(BaseModel):\n \"\"\"No parameters required - uses pre-uploaded files.\"\"\"\n\n async def read_files_tool() -> str:\n \"\"\"Read the content of uploaded files.\"\"\"\n try:\n result = self.load_files_message()\n if hasattr(result, \"get_text\"):\n return result.get_text()\n if hasattr(result, \"text\"):\n return result.text\n return str(result)\n except (FileNotFoundError, ValueError, OSError, RuntimeError) as e:\n return f\"Error reading files: {e}\"\n\n description = self.get_tool_description()\n\n tool = StructuredTool(\n name=\"load_files_message\",\n description=description,\n coroutine=read_files_tool,\n args_schema=EmptySchema,\n handle_tool_error=True,\n tags=[\"load_files_message\"],\n metadata={\n \"display_name\": \"Read File\",\n \"display_description\": description,\n },\n )\n\n return [tool]\n\n # ------------------------------ UI helpers --------------------------------------\n\n def _path_value(self, template: dict) -> list[str]:\n \"\"\"Return the list of currently selected file paths from the template.\"\"\"\n return template.get(\"path\", {}).get(\"file_path\", [])\n\n def update_build_config(\n self,\n build_config: dict[str, Any],\n field_value: Any,\n field_name: str | None = None,\n ) -> dict[str, Any]:\n \"\"\"Show/hide Advanced Parser and related fields based on selection context.\"\"\"\n if field_name == \"path\":\n paths = self._path_value(build_config)\n\n # If all files can be processed by docling, do so\n allow_advanced = all(not file_path.endswith((\".csv\", \".xlsx\", \".parquet\")) for file_path in paths)\n build_config[\"advanced_mode\"][\"show\"] = allow_advanced\n if not allow_advanced:\n build_config[\"advanced_mode\"][\"value\"] = False\n for f in (\"pipeline\", \"ocr_engine\", \"doc_key\", \"md_image_placeholder\", \"md_page_break_placeholder\"):\n if f in build_config:\n build_config[f][\"show\"] = False\n\n # Docling Processing\n elif field_name == \"advanced_mode\":\n for f in (\"pipeline\", \"ocr_engine\", \"doc_key\", \"md_image_placeholder\", \"md_page_break_placeholder\"):\n if f in build_config:\n build_config[f][\"show\"] = bool(field_value)\n if f == \"pipeline\":\n build_config[f][\"advanced\"] = not bool(field_value)\n\n elif field_name == \"pipeline\":\n if field_value == \"standard\":\n build_config[\"ocr_engine\"][\"show\"] = True\n build_config[\"ocr_engine\"][\"value\"] = \"easyocr\"\n else:\n build_config[\"ocr_engine\"][\"show\"] = False\n build_config[\"ocr_engine\"][\"value\"] = \"None\"\n\n return build_config\n\n def update_outputs(self, frontend_node: dict[str, Any], field_name: str, field_value: Any) -> dict[str, Any]: # noqa: ARG002\n \"\"\"Dynamically show outputs based on file count/type and advanced mode.\"\"\"\n if field_name not in [\"path\", \"advanced_mode\", \"pipeline\"]:\n return frontend_node\n\n template = frontend_node.get(\"template\", {})\n paths = self._path_value(template)\n if not paths:\n return frontend_node\n\n frontend_node[\"outputs\"] = []\n if len(paths) == 1:\n file_path = paths[0] if field_name == \"path\" else frontend_node[\"template\"][\"path\"][\"file_path\"][0]\n if file_path.endswith((\".csv\", \".xlsx\", \".parquet\")):\n frontend_node[\"outputs\"].append(\n Output(\n display_name=\"Structured Content\",\n name=\"dataframe\",\n method=\"load_files_structured\",\n tool_mode=True,\n ),\n )\n elif file_path.endswith(\".json\"):\n frontend_node[\"outputs\"].append(\n Output(display_name=\"Structured Content\", name=\"json\", method=\"load_files_json\", tool_mode=True),\n )\n\n advanced_mode = frontend_node.get(\"template\", {}).get(\"advanced_mode\", {}).get(\"value\", False)\n if advanced_mode:\n frontend_node[\"outputs\"].append(\n Output(\n display_name=\"Structured Output\",\n name=\"advanced_dataframe\",\n method=\"load_files_dataframe\",\n tool_mode=True,\n ),\n )\n frontend_node[\"outputs\"].append(\n Output(\n display_name=\"Markdown\", name=\"advanced_markdown\", method=\"load_files_markdown\", tool_mode=True\n ),\n )\n frontend_node[\"outputs\"].append(\n Output(display_name=\"File Path\", name=\"path\", method=\"load_files_path\", tool_mode=True),\n )\n else:\n frontend_node[\"outputs\"].append(\n Output(display_name=\"Raw Content\", name=\"message\", method=\"load_files_message\", tool_mode=True),\n )\n frontend_node[\"outputs\"].append(\n Output(display_name=\"File Path\", name=\"path\", method=\"load_files_path\", tool_mode=True),\n )\n else:\n # Multiple files => DataFrame output; advanced parser disabled\n frontend_node[\"outputs\"].append(\n Output(display_name=\"Files\", name=\"dataframe\", method=\"load_files\", tool_mode=True)\n )\n\n return frontend_node\n\n # ------------------------------ Core processing ----------------------------------\n\n def _validate_and_resolve_paths(self) -> list[BaseFileComponent.BaseFile]:\n \"\"\"Override to handle file_path_str input from tool mode.\n\n When called as a tool, the file_path_str parameter can be set.\n If not provided, it will fall back to using the path FileInput (uploaded file).\n Priority:\n 1. file_path_str (if provided by the tool call)\n 2. path (uploaded file from UI)\n \"\"\"\n # Check if file_path_str is provided (from tool mode)\n file_path_str = getattr(self, \"file_path_str\", None)\n if file_path_str:\n # Use the string path from tool mode\n from pathlib import Path\n\n from lfx.schema.data import Data\n\n resolved_path = Path(self.resolve_path(file_path_str))\n if not resolved_path.exists():\n msg = f\"File or directory not found: {file_path_str}\"\n self.log(msg)\n if not self.silent_errors:\n raise ValueError(msg)\n return []\n\n data_obj = Data(data={self.SERVER_FILE_PATH_FIELDNAME: str(resolved_path)})\n return [BaseFileComponent.BaseFile(data_obj, resolved_path, delete_after_processing=False)]\n\n # Otherwise use the default implementation (uses path FileInput)\n return super()._validate_and_resolve_paths()\n\n def _is_docling_compatible(self, file_path: str) -> bool:\n \"\"\"Lightweight extension gate for Docling-compatible types.\"\"\"\n docling_exts = (\n \".adoc\",\n \".asciidoc\",\n \".asc\",\n \".bmp\",\n \".csv\",\n \".dotx\",\n \".dotm\",\n \".docm\",\n \".docx\",\n \".htm\",\n \".html\",\n \".jpg\",\n \".jpeg\",\n \".json\",\n \".md\",\n \".pdf\",\n \".png\",\n \".potx\",\n \".ppsx\",\n \".pptm\",\n \".potm\",\n \".ppsm\",\n \".pptx\",\n \".tiff\",\n \".txt\",\n \".xls\",\n \".xlsx\",\n \".xhtml\",\n \".xml\",\n \".webp\",\n )\n return file_path.lower().endswith(docling_exts)\n\n async def _get_local_file_for_docling(self, file_path: str) -> tuple[str, bool]:\n \"\"\"Get a local file path for Docling processing, downloading from S3 if needed.\n\n Args:\n file_path: Either a local path or S3 key (format \"flow_id/filename\")\n\n Returns:\n tuple[str, bool]: (local_path, should_delete) where should_delete indicates\n if this is a temporary file that should be cleaned up\n \"\"\"\n settings = get_settings_service().settings\n if settings.storage_type == \"local\":\n return file_path, False\n\n # S3 storage - download to temp file\n parsed = parse_storage_path(file_path)\n if not parsed:\n msg = f\"Invalid S3 path format: {file_path}. Expected 'flow_id/filename'\"\n raise ValueError(msg)\n\n storage_service = get_storage_service()\n flow_id, filename = parsed\n\n # Get file content from S3\n content = await storage_service.get_file(flow_id, filename)\n\n suffix = Path(filename).suffix\n with NamedTemporaryFile(mode=\"wb\", suffix=suffix, delete=False) as tmp_file:\n tmp_file.write(content)\n temp_path = tmp_file.name\n\n return temp_path, True\n\n def _process_docling_in_subprocess(self, file_path: str) -> Data | None:\n \"\"\"Run Docling in a separate OS process and map the result to a Data object.\n\n We avoid multiprocessing pickling by launching `python -c \"<script>\"` and\n passing JSON config via stdin. The child prints a JSON result to stdout.\n\n For S3 storage, the file is downloaded to a temp file first.\n \"\"\"\n if not file_path:\n return None\n\n settings = get_settings_service().settings\n if settings.storage_type == \"s3\":\n local_path, should_delete = run_until_complete(self._get_local_file_for_docling(file_path))\n else:\n local_path = file_path\n should_delete = False\n\n try:\n return self._process_docling_subprocess_impl(local_path, file_path)\n finally:\n # Clean up temp file if we created one\n if should_delete:\n with contextlib.suppress(Exception):\n Path(local_path).unlink() # Ignore cleanup errors\n\n def _process_docling_subprocess_impl(self, local_file_path: str, original_file_path: str) -> Data | None:\n \"\"\"Implementation of Docling subprocess processing.\n\n Args:\n local_file_path: Path to local file to process\n original_file_path: Original file path to include in metadata\n Returns:\n Data object with processed content\n \"\"\"\n args: dict[str, Any] = {\n \"file_path\": local_file_path,\n \"markdown\": bool(self.markdown),\n \"image_mode\": str(self.IMAGE_MODE),\n \"md_image_placeholder\": str(self.md_image_placeholder),\n \"md_page_break_placeholder\": str(self.md_page_break_placeholder),\n \"pipeline\": str(self.pipeline),\n \"ocr_engine\": (\n self.ocr_engine if self.ocr_engine and self.ocr_engine != \"None\" and self.pipeline != \"vlm\" else None\n ),\n }\n\n self.log(f\"Starting Docling subprocess for file: {local_file_path}\")\n self.log(args)\n\n # Child script for isolating the docling processing\n child_script = textwrap.dedent(\n r\"\"\"\n import json, sys\n\n def try_imports():\n try:\n from docling.datamodel.base_models import ConversionStatus, InputFormat # type: ignore\n from docling.document_converter import DocumentConverter # type: ignore\n from docling_core.types.doc import ImageRefMode # type: ignore\n return ConversionStatus, InputFormat, DocumentConverter, ImageRefMode, \"latest\"\n except Exception as e:\n raise e\n\n def create_converter(strategy, input_format, DocumentConverter, pipeline, ocr_engine):\n # --- Standard PDF/IMAGE pipeline (your existing behavior), with optional OCR ---\n if pipeline == \"standard\":\n try:\n from docling.datamodel.pipeline_options import PdfPipelineOptions # type: ignore\n from docling.document_converter import PdfFormatOption # type: ignore\n\n pipe = PdfPipelineOptions()\n pipe.do_ocr = False\n\n if ocr_engine:\n try:\n from docling.models.factories import get_ocr_factory # type: ignore\n pipe.do_ocr = True\n fac = get_ocr_factory(allow_external_plugins=False)\n pipe.ocr_options = fac.create_options(kind=ocr_engine)\n except Exception:\n # If OCR setup fails, disable it\n pipe.do_ocr = False\n\n fmt = {}\n if hasattr(input_format, \"PDF\"):\n fmt[getattr(input_format, \"PDF\")] = PdfFormatOption(pipeline_options=pipe)\n if hasattr(input_format, \"IMAGE\"):\n fmt[getattr(input_format, \"IMAGE\")] = PdfFormatOption(pipeline_options=pipe)\n\n return DocumentConverter(format_options=fmt)\n except Exception:\n return DocumentConverter()\n\n # --- Vision-Language Model (VLM) pipeline ---\n if pipeline == \"vlm\":\n try:\n from docling.datamodel.pipeline_options import VlmPipelineOptions\n from docling.datamodel.vlm_model_specs import GRANITEDOCLING_MLX, GRANITEDOCLING_TRANSFORMERS\n from docling.document_converter import PdfFormatOption\n from docling.pipeline.vlm_pipeline import VlmPipeline\n\n vl_pipe = VlmPipelineOptions(\n vlm_options=GRANITEDOCLING_TRANSFORMERS,\n )\n\n if sys.platform == \"darwin\":\n try:\n import mlx_vlm\n vl_pipe.vlm_options = GRANITEDOCLING_MLX\n except ImportError as e:\n raise e\n\n # VLM paths generally don't need OCR; keep OCR off by default here.\n fmt = {}\n if hasattr(input_format, \"PDF\"):\n fmt[getattr(input_format, \"PDF\")] = PdfFormatOption(\n pipeline_cls=VlmPipeline,\n pipeline_options=vl_pipe\n )\n if hasattr(input_format, \"IMAGE\"):\n fmt[getattr(input_format, \"IMAGE\")] = PdfFormatOption(\n pipeline_cls=VlmPipeline,\n pipeline_options=vl_pipe\n )\n\n return DocumentConverter(format_options=fmt)\n except Exception as e:\n raise e\n\n # --- Fallback: default converter with no special options ---\n return DocumentConverter()\n\n def export_markdown(document, ImageRefMode, image_mode, img_ph, pg_ph):\n try:\n mode = getattr(ImageRefMode, image_mode.upper(), image_mode)\n return document.export_to_markdown(\n image_mode=mode,\n image_placeholder=img_ph,\n page_break_placeholder=pg_ph,\n )\n except Exception:\n try:\n return document.export_to_text()\n except Exception:\n return str(document)\n\n def to_rows(doc_dict):\n rows = []\n for t in doc_dict.get(\"texts\", []):\n prov = t.get(\"prov\") or []\n page_no = None\n if prov and isinstance(prov, list) and isinstance(prov[0], dict):\n page_no = prov[0].get(\"page_no\")\n rows.append({\n \"page_no\": page_no,\n \"label\": t.get(\"label\"),\n \"text\": t.get(\"text\"),\n \"level\": t.get(\"level\"),\n })\n return rows\n\n def main():\n cfg = json.loads(sys.stdin.read())\n file_path = cfg[\"file_path\"]\n markdown = cfg[\"markdown\"]\n image_mode = cfg[\"image_mode\"]\n img_ph = cfg[\"md_image_placeholder\"]\n pg_ph = cfg[\"md_page_break_placeholder\"]\n pipeline = cfg[\"pipeline\"]\n ocr_engine = cfg.get(\"ocr_engine\")\n meta = {\"file_path\": file_path}\n\n try:\n ConversionStatus, InputFormat, DocumentConverter, ImageRefMode, strategy = try_imports()\n converter = create_converter(strategy, InputFormat, DocumentConverter, pipeline, ocr_engine)\n try:\n res = converter.convert(file_path)\n except Exception as e:\n print(json.dumps({\"ok\": False, \"error\": f\"Docling conversion error: {e}\", \"meta\": meta}))\n return\n\n ok = False\n if hasattr(res, \"status\"):\n try:\n ok = (res.status == ConversionStatus.SUCCESS) or (str(res.status).lower() == \"success\")\n except Exception:\n ok = (str(res.status).lower() == \"success\")\n if not ok and hasattr(res, \"document\"):\n ok = getattr(res, \"document\", None) is not None\n if not ok:\n print(json.dumps({\"ok\": False, \"error\": \"Docling conversion failed\", \"meta\": meta}))\n return\n\n doc = getattr(res, \"document\", None)\n if doc is None:\n print(json.dumps({\"ok\": False, \"error\": \"Docling produced no document\", \"meta\": meta}))\n return\n\n if markdown:\n text = export_markdown(doc, ImageRefMode, image_mode, img_ph, pg_ph)\n print(json.dumps({\"ok\": True, \"mode\": \"markdown\", \"text\": text, \"meta\": meta}))\n return\n\n # structured\n try:\n doc_dict = doc.export_to_dict()\n except Exception as e:\n print(json.dumps({\"ok\": False, \"error\": f\"Docling export_to_dict failed: {e}\", \"meta\": meta}))\n return\n\n rows = to_rows(doc_dict)\n print(json.dumps({\"ok\": True, \"mode\": \"structured\", \"doc\": rows, \"meta\": meta}))\n except Exception as e:\n print(\n json.dumps({\n \"ok\": False,\n \"error\": f\"Docling processing error: {e}\",\n \"meta\": {\"file_path\": file_path},\n })\n )\n\n if __name__ == \"__main__\":\n main()\n \"\"\"\n )\n\n # Validate file_path to avoid command injection or unsafe input\n if not isinstance(args[\"file_path\"], str) or any(c in args[\"file_path\"] for c in [\";\", \"|\", \"&\", \"$\", \"`\"]):\n return Data(data={\"error\": \"Unsafe file path detected.\", \"file_path\": args[\"file_path\"]})\n\n proc = subprocess.run( # noqa: S603\n [sys.executable, \"-u\", \"-c\", child_script],\n input=json.dumps(args).encode(\"utf-8\"),\n capture_output=True,\n check=False,\n )\n\n if not proc.stdout:\n err_msg = proc.stderr.decode(\"utf-8\", errors=\"replace\") or \"no output from child process\"\n return Data(data={\"error\": f\"Docling subprocess error: {err_msg}\", \"file_path\": original_file_path})\n\n try:\n result = json.loads(proc.stdout.decode(\"utf-8\"))\n except Exception as e: # noqa: BLE001\n err_msg = proc.stderr.decode(\"utf-8\", errors=\"replace\")\n return Data(\n data={\n \"error\": f\"Invalid JSON from Docling subprocess: {e}. stderr={err_msg}\",\n \"file_path\": original_file_path,\n },\n )\n\n if not result.get(\"ok\"):\n return Data(data={\"error\": result.get(\"error\", \"Unknown Docling error\"), **result.get(\"meta\", {})})\n\n meta = result.get(\"meta\", {})\n if result.get(\"mode\") == \"markdown\":\n exported_content = str(result.get(\"text\", \"\"))\n return Data(\n text=exported_content,\n data={\"exported_content\": exported_content, \"export_format\": self.EXPORT_FORMAT, **meta},\n )\n\n rows = list(result.get(\"doc\", []))\n return Data(data={\"doc\": rows, \"export_format\": self.EXPORT_FORMAT, **meta})\n\n def process_files(\n self,\n file_list: list[BaseFileComponent.BaseFile],\n ) -> list[BaseFileComponent.BaseFile]:\n \"\"\"Process input files.\n\n - advanced_mode => Docling in a separate process.\n - Otherwise => standard parsing in current process (optionally threaded).\n \"\"\"\n if not file_list:\n msg = \"No files to process.\"\n raise ValueError(msg)\n\n # Validate image files to detect content/extension mismatches\n # This prevents API errors like \"Image does not match the provided media type\"\n image_extensions = {\"jpeg\", \"jpg\", \"png\", \"gif\", \"webp\", \"bmp\", \"tiff\"}\n for file in file_list:\n extension = file.path.suffix[1:].lower()\n if extension in image_extensions:\n # file.path is already resolved, read bytes directly\n try:\n content = file.path.read_bytes()\n is_valid, error_msg = validate_image_content_type(\n str(file.path),\n content=content,\n )\n if not is_valid:\n self.log(error_msg)\n if not self.silent_errors:\n raise ValueError(error_msg)\n except OSError as e:\n self.log(f\"Could not read file for validation: {e}\")\n # Continue - let it fail later with better error\n\n # Validate that files requiring Docling are only processed when advanced mode is enabled\n if not self.advanced_mode:\n for file in file_list:\n extension = file.path.suffix[1:].lower()\n if extension in self.DOCLING_ONLY_EXTENSIONS:\n msg = (\n f\"File '{file.path.name}' has extension '.{extension}' which requires \"\n f\"Advanced Parser mode. Please enable 'Advanced Parser' to process this file.\"\n )\n self.log(msg)\n raise ValueError(msg)\n\n def process_file_standard(file_path: str, *, silent_errors: bool = False) -> Data | None:\n try:\n return parse_text_file_to_data(file_path, silent_errors=silent_errors)\n except FileNotFoundError as e:\n self.log(f\"File not found: {file_path}. Error: {e}\")\n if not silent_errors:\n raise\n return None\n except Exception as e:\n self.log(f\"Unexpected error processing {file_path}: {e}\")\n if not silent_errors:\n raise\n return None\n\n docling_compatible = all(self._is_docling_compatible(str(f.path)) for f in file_list)\n\n # Advanced path: Check if ALL files are compatible with Docling\n if self.advanced_mode and docling_compatible:\n final_return: list[BaseFileComponent.BaseFile] = []\n for file in file_list:\n file_path = str(file.path)\n advanced_data: Data | None = self._process_docling_in_subprocess(file_path)\n\n # --- UNNEST: expand each element in `doc` to its own Data row\n payload = getattr(advanced_data, \"data\", {}) or {}\n doc_rows = payload.get(\"doc\")\n if isinstance(doc_rows, list) and doc_rows:\n # Non-empty list of structured rows\n rows: list[Data | None] = [\n Data(\n data={\n \"file_path\": file_path,\n **(item if isinstance(item, dict) else {\"value\": item}),\n },\n )\n for item in doc_rows\n ]\n final_return.extend(self.rollup_data(file_list, rows))\n elif isinstance(doc_rows, list) and not doc_rows:\n # Empty list - file was processed but no text content found\n # Create a Data object indicating no content was extracted\n self.log(f\"No text extracted from '{file_path}', creating placeholder data\")\n empty_data = Data(\n data={\n \"file_path\": file_path,\n \"text\": \"(No text content extracted from image)\",\n \"info\": \"Image processed successfully but contained no extractable text\",\n **{k: v for k, v in payload.items() if k != \"doc\"},\n },\n )\n final_return.extend(self.rollup_data([file], [empty_data]))\n else:\n # If not structured, keep as-is (e.g., markdown export or error dict)\n final_return.extend(self.rollup_data(file_list, [advanced_data]))\n return final_return\n\n # Standard multi-file (or single non-advanced) path\n concurrency = 1 if not self.use_multithreading else max(1, self.concurrency_multithreading)\n\n file_paths = [str(f.path) for f in file_list]\n self.log(f\"Starting parallel processing of {len(file_paths)} files with concurrency: {concurrency}.\")\n my_data = parallel_load_data(\n file_paths,\n silent_errors=self.silent_errors,\n load_function=process_file_standard,\n max_concurrency=concurrency,\n )\n return self.rollup_data(file_list, my_data)\n\n # ------------------------------ Output helpers -----------------------------------\n\n def load_files_helper(self) -> DataFrame:\n result = self.load_files()\n\n # Result is a DataFrame - check if it has any rows\n if result.empty:\n msg = \"Could not extract content from the provided file(s).\"\n raise ValueError(msg)\n\n # Check for error column with error messages\n if \"error\" in result.columns:\n errors = result[\"error\"].dropna().tolist()\n if errors and not any(col in result.columns for col in [\"text\", \"doc\", \"exported_content\"]):\n raise ValueError(errors[0])\n\n return result\n\n def load_files_dataframe(self) -> DataFrame:\n \"\"\"Load files using advanced Docling processing and export to DataFrame format.\"\"\"\n self.markdown = False\n return self.load_files_helper()\n\n def load_files_markdown(self) -> Message:\n \"\"\"Load files using advanced Docling processing and export to Markdown format.\"\"\"\n self.markdown = True\n result = self.load_files_helper()\n\n # Result is a DataFrame - check for text or exported_content columns\n if \"text\" in result.columns and not result[\"text\"].isna().all():\n text_values = result[\"text\"].dropna().tolist()\n if text_values:\n return Message(text=str(text_values[0]))\n\n if \"exported_content\" in result.columns and not result[\"exported_content\"].isna().all():\n content_values = result[\"exported_content\"].dropna().tolist()\n if content_values:\n return Message(text=str(content_values[0]))\n\n # Return empty message with info that no text was found\n return Message(text=\"(No text content extracted from file)\")\n"
|
|
1003
1011
|
},
|
|
1004
1012
|
"concurrency_multithreading": {
|
|
1005
1013
|
"_input_type": "IntInput",
|