langflow-base-nightly 1.7.0.dev20__py3-none-any.whl → 1.7.0.dev22__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/__main__.py +1 -3
- langflow/alembic/env.py +24 -10
- langflow/api/utils/core.py +5 -2
- langflow/api/v1/chat.py +1 -0
- langflow/api/v1/files.py +1 -2
- langflow/api/v1/flows.py +24 -15
- langflow/api/v1/mcp_projects.py +2 -2
- langflow/api/v1/monitor.py +2 -5
- langflow/api/v1/projects.py +18 -12
- langflow/api/v1/users.py +5 -5
- langflow/api/v2/files.py +273 -43
- langflow/frontend/assets/SlackIcon-UwSQkrch.js +1 -0
- langflow/frontend/assets/Wikipedia-qAlDOPip.js +1 -0
- langflow/frontend/assets/Wolfram-BdlSnZDh.js +1 -0
- langflow/frontend/assets/a-arrow-down-DgMrN2bG.js +6 -0
- langflow/frontend/assets/a-arrow-up-Bz-1WxE0.js +6 -0
- langflow/frontend/assets/a-large-small-ClGk9McB.js +6 -0
- langflow/frontend/assets/accessibility-n-EgFC9w.js +6 -0
- langflow/frontend/assets/activity-zZ6sORyY.js +6 -0
- langflow/frontend/assets/air-vent-BUkWB2Eo.js +6 -0
- langflow/frontend/assets/airplay-C7-k2ZeD.js +6 -0
- langflow/frontend/assets/alarm-clock-check-gmghG89d.js +6 -0
- langflow/frontend/assets/alarm-clock-minus-F8-gGEgT.js +6 -0
- langflow/frontend/assets/alarm-clock-off-B-Cuh6_q.js +6 -0
- langflow/frontend/assets/alarm-clock-plus-DSY0Ho_j.js +6 -0
- langflow/frontend/assets/alarm-clock-wlXXZ7F_.js +6 -0
- langflow/frontend/assets/alarm-smoke-BVQAtLTd.js +6 -0
- langflow/frontend/assets/album-BO2geGWs.js +6 -0
- langflow/frontend/assets/align-center-RdFmMC7Q.js +6 -0
- langflow/frontend/assets/align-center-horizontal-CS1Ng5Zh.js +6 -0
- langflow/frontend/assets/align-center-vertical-BBc4Ogyj.js +6 -0
- langflow/frontend/assets/align-end-horizontal-BMbZqIrz.js +6 -0
- langflow/frontend/assets/align-end-vertical-XtMFaIav.js +6 -0
- langflow/frontend/assets/align-horizontal-distribute-center-BzGl0H5w.js +6 -0
- langflow/frontend/assets/align-horizontal-distribute-end-dgqU49x_.js +6 -0
- langflow/frontend/assets/align-horizontal-distribute-start-B5oaIxgn.js +6 -0
- langflow/frontend/assets/align-horizontal-justify-center-D1iIhqR8.js +6 -0
- langflow/frontend/assets/align-horizontal-justify-end-DMBzc4LI.js +6 -0
- langflow/frontend/assets/align-horizontal-justify-start-BgV32ggY.js +6 -0
- langflow/frontend/assets/align-horizontal-space-around-KFYE6cki.js +6 -0
- langflow/frontend/assets/align-horizontal-space-between-9pp2BTGC.js +6 -0
- langflow/frontend/assets/align-justify-CtbUtBmx.js +6 -0
- langflow/frontend/assets/align-left-rkwnIYpN.js +6 -0
- langflow/frontend/assets/align-right-C2Pk_gI7.js +6 -0
- langflow/frontend/assets/align-start-horizontal-CFejXaj1.js +6 -0
- langflow/frontend/assets/align-start-vertical-DGnz6UVS.js +6 -0
- langflow/frontend/assets/align-vertical-distribute-center-BfhWrT6n.js +6 -0
- langflow/frontend/assets/align-vertical-distribute-end-CM1U6-Xk.js +6 -0
- langflow/frontend/assets/align-vertical-distribute-start-De20bByY.js +6 -0
- langflow/frontend/assets/align-vertical-justify-center-CxfPV_rs.js +6 -0
- langflow/frontend/assets/align-vertical-justify-end-By_FiU1j.js +6 -0
- langflow/frontend/assets/align-vertical-justify-start-BlD_1IpA.js +6 -0
- langflow/frontend/assets/align-vertical-space-around-Bcb6Lbvc.js +6 -0
- langflow/frontend/assets/align-vertical-space-between-CWgg4LIl.js +6 -0
- langflow/frontend/assets/ambulance-CVDBzEx3.js +6 -0
- langflow/frontend/assets/ampersand-DCqBN2R-.js +6 -0
- langflow/frontend/assets/ampersands--7yLHiBh.js +6 -0
- langflow/frontend/assets/amphora-BEpNXpFm.js +6 -0
- langflow/frontend/assets/anchor-Bp_043sI.js +6 -0
- langflow/frontend/assets/angry-DIyvDDB1.js +6 -0
- langflow/frontend/assets/annoyed-DB-31U7o.js +6 -0
- langflow/frontend/assets/antenna-8_0EZDTM.js +6 -0
- langflow/frontend/assets/anvil--LlkiUPz.js +6 -0
- langflow/frontend/assets/aperture-B1p26i5N.js +6 -0
- langflow/frontend/assets/app-window-DtZ-gJrW.js +6 -0
- langflow/frontend/assets/app-window-mac-DPvrKskg.js +6 -0
- langflow/frontend/assets/apple-643KpYp9.js +6 -0
- langflow/frontend/assets/archive-restore-CBfAJTxR.js +6 -0
- langflow/frontend/assets/archive-waqHzk7J.js +6 -0
- langflow/frontend/assets/archive-x-Ca-8J76k.js +6 -0
- langflow/frontend/assets/armchair-BVQt9ZYN.js +6 -0
- langflow/frontend/assets/arrow-big-down-BFp-IYJR.js +6 -0
- langflow/frontend/assets/arrow-big-down-dash-CbVdgQjo.js +6 -0
- langflow/frontend/assets/arrow-big-left-DUn62tnW.js +6 -0
- langflow/frontend/assets/arrow-big-left-dash-CAFqUKgp.js +6 -0
- langflow/frontend/assets/arrow-big-right-DEpah8kd.js +6 -0
- langflow/frontend/assets/arrow-big-right-dash-DGYit5BO.js +6 -0
- langflow/frontend/assets/arrow-big-up-DERyVQ68.js +6 -0
- langflow/frontend/assets/arrow-big-up-dash-DRpBXwhB.js +6 -0
- langflow/frontend/assets/arrow-down-0-1-CsSUExZ7.js +6 -0
- langflow/frontend/assets/arrow-down-1-0-D8SAuu_H.js +6 -0
- langflow/frontend/assets/arrow-down-DUwdbDJK.js +6 -0
- langflow/frontend/assets/arrow-down-a-z-B77AXt0B.js +6 -0
- langflow/frontend/assets/arrow-down-from-line-BtE1vV8S.js +6 -0
- langflow/frontend/assets/arrow-down-left-UzOq6N4V.js +6 -0
- langflow/frontend/assets/arrow-down-narrow-wide-DST8ZKf1.js +6 -0
- langflow/frontend/assets/arrow-down-right-B8xNaqim.js +6 -0
- langflow/frontend/assets/arrow-down-to-dot-QZ2azlAW.js +6 -0
- langflow/frontend/assets/arrow-down-to-line-BqiKSDPQ.js +6 -0
- langflow/frontend/assets/arrow-down-up-Dsikx1Op.js +6 -0
- langflow/frontend/assets/arrow-down-wide-narrow-DUyLGOLD.js +6 -0
- langflow/frontend/assets/arrow-down-z-a-DnDBDxqi.js +6 -0
- langflow/frontend/assets/arrow-left-from-line-CjnH2Lio.js +6 -0
- langflow/frontend/assets/arrow-left-n3Pl2Njh.js +6 -0
- langflow/frontend/assets/arrow-left-right-Bt9QPnh_.js +6 -0
- langflow/frontend/assets/arrow-left-to-line-DP1t4BCX.js +6 -0
- langflow/frontend/assets/arrow-right-DSmp7lRG.js +6 -0
- langflow/frontend/assets/arrow-right-from-line-CSECqyxc.js +6 -0
- langflow/frontend/assets/arrow-right-left-BbkJKiaq.js +6 -0
- langflow/frontend/assets/arrow-right-to-line-D0b0t3Gq.js +6 -0
- langflow/frontend/assets/arrow-up-0-1-X40Nn7vg.js +6 -0
- langflow/frontend/assets/arrow-up-1-0-Cwyzdr3r.js +6 -0
- langflow/frontend/assets/arrow-up-CnGLYr4d.js +6 -0
- langflow/frontend/assets/arrow-up-a-z-D4N9FaEZ.js +6 -0
- langflow/frontend/assets/arrow-up-down-D-BIHEou.js +6 -0
- langflow/frontend/assets/arrow-up-from-dot-Bil2sTG5.js +6 -0
- langflow/frontend/assets/arrow-up-from-line-ByI6MrBB.js +6 -0
- langflow/frontend/assets/arrow-up-left-5YhLDoJE.js +6 -0
- langflow/frontend/assets/arrow-up-narrow-wide-uWypwhsT.js +6 -0
- langflow/frontend/assets/arrow-up-right-Cvhs051g.js +6 -0
- langflow/frontend/assets/arrow-up-to-line-tQPE8rmM.js +6 -0
- langflow/frontend/assets/arrow-up-wide-narrow-CYnBq0ZQ.js +6 -0
- langflow/frontend/assets/arrow-up-z-a-BV-ZESM2.js +6 -0
- langflow/frontend/assets/arrows-up-from-line-CK9bNhfK.js +6 -0
- langflow/frontend/assets/asterisk-Qy4RnZ5p.js +6 -0
- langflow/frontend/assets/at-sign-DhjfDBPv.js +6 -0
- langflow/frontend/assets/atom-DWqI4pXi.js +6 -0
- langflow/frontend/assets/audio-lines-D2_X-lbk.js +6 -0
- langflow/frontend/assets/audio-waveform-B0PeIqKE.js +6 -0
- langflow/frontend/assets/award-BBncgK4i.js +6 -0
- langflow/frontend/assets/axe-D4Z1cKcC.js +6 -0
- langflow/frontend/assets/axis-3d-Bpu1p-q6.js +6 -0
- langflow/frontend/assets/baby-BCsyh4un.js +6 -0
- langflow/frontend/assets/backpack-BiE-QGhI.js +6 -0
- langflow/frontend/assets/badge-BqIFsbxq.js +6 -0
- langflow/frontend/assets/badge-alert-60BWV_Ef.js +6 -0
- langflow/frontend/assets/badge-cent-DxkHvnLQ.js +6 -0
- langflow/frontend/assets/badge-check-QxCNcwr7.js +6 -0
- langflow/frontend/assets/badge-dollar-sign-AJKikNEa.js +6 -0
- langflow/frontend/assets/badge-euro-DtnOErqI.js +6 -0
- langflow/frontend/assets/badge-help-QdwoR8xF.js +6 -0
- langflow/frontend/assets/badge-indian-rupee-RZm3GKwT.js +6 -0
- langflow/frontend/assets/badge-info-B3X54Klg.js +6 -0
- langflow/frontend/assets/badge-japanese-yen-DwOW9YQs.js +6 -0
- langflow/frontend/assets/badge-minus-Cse6sLCB.js +6 -0
- langflow/frontend/assets/badge-percent-C0d6Xz7K.js +6 -0
- langflow/frontend/assets/badge-plus-BQIsoW09.js +6 -0
- langflow/frontend/assets/badge-pound-sterling-9guPlqCM.js +6 -0
- langflow/frontend/assets/badge-russian-ruble-DsDgnMla.js +6 -0
- langflow/frontend/assets/badge-swiss-franc-AJ-JjyYv.js +6 -0
- langflow/frontend/assets/badge-x-BTvEuyQu.js +6 -0
- langflow/frontend/assets/baggage-claim-C0qZMU8z.js +6 -0
- langflow/frontend/assets/ban-CMseDwcb.js +6 -0
- langflow/frontend/assets/banana-U0N7YyJt.js +6 -0
- langflow/frontend/assets/bandage-DUj5iybP.js +6 -0
- langflow/frontend/assets/banknote-D0D4M-jG.js +6 -0
- langflow/frontend/assets/banknote-arrow-down-HRFzJLnP.js +6 -0
- langflow/frontend/assets/banknote-arrow-up-CWUF8uqE.js +6 -0
- langflow/frontend/assets/banknote-x-DC3xE3-o.js +6 -0
- langflow/frontend/assets/barcode-Dhid2u_r.js +6 -0
- langflow/frontend/assets/baseline-3oq9EQBA.js +6 -0
- langflow/frontend/assets/bath-CL7QPX-P.js +6 -0
- langflow/frontend/assets/battery-BIhna8bT.js +6 -0
- langflow/frontend/assets/battery-charging-Bsux_1Gt.js +6 -0
- langflow/frontend/assets/battery-full-CU7OtcXT.js +6 -0
- langflow/frontend/assets/battery-low-DC590ky3.js +6 -0
- langflow/frontend/assets/battery-medium-C12wv6uB.js +6 -0
- langflow/frontend/assets/battery-plus-CIyulGXR.js +6 -0
- langflow/frontend/assets/battery-warning-DQIv2Glc.js +6 -0
- langflow/frontend/assets/beaker-CYZ0ZmDr.js +6 -0
- langflow/frontend/assets/bean-D22QT4hR.js +6 -0
- langflow/frontend/assets/bean-off-CzaLsUsC.js +6 -0
- langflow/frontend/assets/bed-DYWYrx8k.js +6 -0
- langflow/frontend/assets/bed-double-boNQxnSL.js +6 -0
- langflow/frontend/assets/bed-single-CPtGeBtO.js +6 -0
- langflow/frontend/assets/beef-keWHRPzf.js +6 -0
- langflow/frontend/assets/beer-CEYOmvpr.js +6 -0
- langflow/frontend/assets/beer-off-DNXsij_s.js +6 -0
- langflow/frontend/assets/bell-Dtq455PW.js +6 -0
- langflow/frontend/assets/bell-dot-Ca-lpric.js +6 -0
- langflow/frontend/assets/bell-electric-CgCymT6c.js +6 -0
- langflow/frontend/assets/bell-minus-B6lAhPcg.js +6 -0
- langflow/frontend/assets/bell-off-BhDmLitw.js +6 -0
- langflow/frontend/assets/bell-plus-CM833QR7.js +6 -0
- langflow/frontend/assets/bell-ring-BKyxUxFb.js +6 -0
- langflow/frontend/assets/between-horizontal-end-CTJJ7w6M.js +6 -0
- langflow/frontend/assets/between-horizontal-start-R-z6fckS.js +6 -0
- langflow/frontend/assets/between-vertical-end-CCu9ELAu.js +6 -0
- langflow/frontend/assets/between-vertical-start-CoPbs7aZ.js +6 -0
- langflow/frontend/assets/biceps-flexed-qssKmVj2.js +6 -0
- langflow/frontend/assets/bike-CiOiXhtf.js +6 -0
- langflow/frontend/assets/binary-CwXawEVI.js +6 -0
- langflow/frontend/assets/binoculars-j7LGfhWM.js +6 -0
- langflow/frontend/assets/biohazard-B5yVAaKr.js +6 -0
- langflow/frontend/assets/bird-dSFizzeg.js +6 -0
- langflow/frontend/assets/bitcoin-CuMqo5yT.js +6 -0
- langflow/frontend/assets/blend-CmCOSkP8.js +6 -0
- langflow/frontend/assets/blinds-DtRT1rHj.js +6 -0
- langflow/frontend/assets/blocks-CgRYHxeQ.js +6 -0
- langflow/frontend/assets/bluetooth-BMG5w2Uf.js +6 -0
- langflow/frontend/assets/bluetooth-connected-GSH6JrRx.js +6 -0
- langflow/frontend/assets/bluetooth-off-CjG__suF.js +6 -0
- langflow/frontend/assets/bluetooth-searching-lutAyb-u.js +6 -0
- langflow/frontend/assets/bold-C3k-30HS.js +6 -0
- langflow/frontend/assets/bolt-mbo8olqN.js +6 -0
- langflow/frontend/assets/bomb-B7uQ-xkF.js +6 -0
- langflow/frontend/assets/bone-fqPFFNFO.js +6 -0
- langflow/frontend/assets/book-BQ3Fzm7g.js +6 -0
- langflow/frontend/assets/book-a-s3jwdCQX.js +6 -0
- langflow/frontend/assets/book-audio-vKTxJCro.js +6 -0
- langflow/frontend/assets/book-check-CxaAEFVP.js +6 -0
- langflow/frontend/assets/book-copy-DoYuPoFy.js +6 -0
- langflow/frontend/assets/book-dashed-C-uKoBib.js +6 -0
- langflow/frontend/assets/book-down-BSHxwvqE.js +6 -0
- langflow/frontend/assets/book-headphones-BS0SKqvV.js +6 -0
- langflow/frontend/assets/book-heart-Dg0jiWxG.js +6 -0
- langflow/frontend/assets/book-image-BB-WOe5Y.js +6 -0
- langflow/frontend/assets/book-key-DDMMcOlH.js +6 -0
- langflow/frontend/assets/book-lock-IU_q0iqx.js +6 -0
- langflow/frontend/assets/book-marked-BpC-9VMj.js +6 -0
- langflow/frontend/assets/book-minus-Hek2H7tV.js +6 -0
- langflow/frontend/assets/book-open-CU22V0Ps.js +6 -0
- langflow/frontend/assets/book-open-check-BriJIxHd.js +6 -0
- langflow/frontend/assets/book-open-text-B2p8MVMU.js +6 -0
- langflow/frontend/assets/book-plus-KB8N57Qg.js +6 -0
- langflow/frontend/assets/book-text-BuXcrrL4.js +6 -0
- langflow/frontend/assets/book-type-BaxILcX9.js +6 -0
- langflow/frontend/assets/book-up-2-DvS_uIXC.js +6 -0
- langflow/frontend/assets/book-up-Bg3h-ti7.js +6 -0
- langflow/frontend/assets/book-user-DRzGmR62.js +6 -0
- langflow/frontend/assets/book-x-DeXz3_4z.js +6 -0
- langflow/frontend/assets/bookmark-check-C5SManZe.js +6 -0
- langflow/frontend/assets/bookmark-hz99YfaH.js +6 -0
- langflow/frontend/assets/bookmark-minus-BUhmvmwH.js +6 -0
- langflow/frontend/assets/bookmark-plus-ZRU1UMbb.js +6 -0
- langflow/frontend/assets/bookmark-x-CeqyR5rS.js +6 -0
- langflow/frontend/assets/boom-box-CmJcx5uW.js +6 -0
- langflow/frontend/assets/bot-CNnrzPU_.js +6 -0
- langflow/frontend/assets/bot-message-square-CMNycayG.js +6 -0
- langflow/frontend/assets/bot-off-bIr9Yx3f.js +6 -0
- langflow/frontend/assets/bow-arrow-aOyhFUIl.js +6 -0
- langflow/frontend/assets/box-B52mWtnO.js +6 -0
- langflow/frontend/assets/boxes-CTz4fv6Z.js +6 -0
- langflow/frontend/assets/braces-mBtjoPlL.js +6 -0
- langflow/frontend/assets/brackets-B3aTuKso.js +6 -0
- langflow/frontend/assets/brain-4noFEzYU.js +6 -0
- langflow/frontend/assets/brain-circuit-Cw-D-WWw.js +6 -0
- langflow/frontend/assets/brain-cog-BU4PmgPW.js +6 -0
- langflow/frontend/assets/brick-wall-DzMmUgxT.js +6 -0
- langflow/frontend/assets/brick-wall-fire-Z2H8dEfF.js +6 -0
- langflow/frontend/assets/briefcase-_X4BWMTu.js +6 -0
- langflow/frontend/assets/briefcase-business-DInGwR4Z.js +6 -0
- langflow/frontend/assets/briefcase-conveyor-belt-Bzq8gZBA.js +6 -0
- langflow/frontend/assets/briefcase-medical-j_C-PHG2.js +6 -0
- langflow/frontend/assets/bring-to-front-CZ3qLmst.js +6 -0
- langflow/frontend/assets/brush-CrE1bfxw.js +6 -0
- langflow/frontend/assets/bubbles-Cxe93xJn.js +6 -0
- langflow/frontend/assets/bug-CFozNmH4.js +6 -0
- langflow/frontend/assets/bug-off-C9D5dUYh.js +6 -0
- langflow/frontend/assets/bug-play-Cga4ibvW.js +6 -0
- langflow/frontend/assets/building-2-CACqXznZ.js +6 -0
- langflow/frontend/assets/building-5lKr0pux.js +6 -0
- langflow/frontend/assets/bus-B-4dhIlO.js +6 -0
- langflow/frontend/assets/bus-front-BPVNvuWw.js +6 -0
- langflow/frontend/assets/cable-Chn5LSie.js +6 -0
- langflow/frontend/assets/cable-car-CI_PnJiU.js +6 -0
- langflow/frontend/assets/cake-Do6ep1ho.js +6 -0
- langflow/frontend/assets/cake-slice-B1CaopVQ.js +6 -0
- langflow/frontend/assets/calculator-BEg6efnM.js +6 -0
- langflow/frontend/assets/calendar-1-CgnnLpfi.js +6 -0
- langflow/frontend/assets/calendar-Ct9Wtewm.js +6 -0
- langflow/frontend/assets/calendar-arrow-down-_qiDPZpO.js +6 -0
- langflow/frontend/assets/calendar-arrow-up-DJl_Ssn2.js +6 -0
- langflow/frontend/assets/calendar-check-2-fj7wjJ1D.js +6 -0
- langflow/frontend/assets/calendar-check-cyX-m-EH.js +6 -0
- langflow/frontend/assets/calendar-clock-N-jvQmTG.js +6 -0
- langflow/frontend/assets/calendar-cog-BSi-SrGf.js +6 -0
- langflow/frontend/assets/calendar-days-CQ9Mp-nQ.js +6 -0
- langflow/frontend/assets/calendar-fold-BTGMRKNr.js +6 -0
- langflow/frontend/assets/calendar-heart-CF9qBVex.js +6 -0
- langflow/frontend/assets/calendar-minus-2-CO0EgZNa.js +6 -0
- langflow/frontend/assets/calendar-minus-DGPQjbuF.js +6 -0
- langflow/frontend/assets/calendar-off-yMGfW9cy.js +6 -0
- langflow/frontend/assets/calendar-plus-2-BHxCdEZs.js +6 -0
- langflow/frontend/assets/calendar-plus-CIAwHHQb.js +6 -0
- langflow/frontend/assets/calendar-range-HziWAqK2.js +6 -0
- langflow/frontend/assets/calendar-search-BbpdcvBf.js +6 -0
- langflow/frontend/assets/calendar-sync-Bnb29mkq.js +6 -0
- langflow/frontend/assets/calendar-x-2-HyQLgpNC.js +6 -0
- langflow/frontend/assets/calendar-x-Cpy6GKI6.js +6 -0
- langflow/frontend/assets/camera-off-BIlnYhlq.js +6 -0
- langflow/frontend/assets/camera-ywBaeb8S.js +6 -0
- langflow/frontend/assets/candy-BQ8CsG90.js +6 -0
- langflow/frontend/assets/candy-cane-8JJF8jaG.js +6 -0
- langflow/frontend/assets/candy-off-BbbqmvLW.js +6 -0
- langflow/frontend/assets/cannabis-BGFSdpxw.js +6 -0
- langflow/frontend/assets/captions-DdkxhQeg.js +6 -0
- langflow/frontend/assets/captions-off-B00MsJ2A.js +6 -0
- langflow/frontend/assets/car-aDRRSv7Q.js +6 -0
- langflow/frontend/assets/car-front-DoHm8SMA.js +6 -0
- langflow/frontend/assets/car-taxi-front-0L5Qx7yY.js +6 -0
- langflow/frontend/assets/caravan-ibEGjjyF.js +6 -0
- langflow/frontend/assets/carrot-iGljcpUG.js +6 -0
- langflow/frontend/assets/case-lower-15EWZMkg.js +6 -0
- langflow/frontend/assets/case-sensitive-DINJsdC_.js +6 -0
- langflow/frontend/assets/case-upper-s7CXflFH.js +6 -0
- langflow/frontend/assets/cassette-tape-B-G5cQWW.js +6 -0
- langflow/frontend/assets/cast-BBOejpnb.js +6 -0
- langflow/frontend/assets/castle-0SY9zumz.js +6 -0
- langflow/frontend/assets/cat-C3JzhddT.js +6 -0
- langflow/frontend/assets/cctv-B4-9RKgu.js +6 -0
- langflow/frontend/assets/chart-area-Cak0Zzgr.js +6 -0
- langflow/frontend/assets/chart-bar-B9THyMZt.js +6 -0
- langflow/frontend/assets/chart-bar-big-k4znZJvR.js +6 -0
- langflow/frontend/assets/chart-bar-decreasing-D8Na3097.js +6 -0
- langflow/frontend/assets/chart-bar-increasing-eG5sllIn.js +6 -0
- langflow/frontend/assets/chart-bar-stacked-DtYcUXFd.js +6 -0
- langflow/frontend/assets/chart-candlestick-BCg9hu0a.js +6 -0
- langflow/frontend/assets/chart-column-big-BCxCvxft.js +6 -0
- langflow/frontend/assets/chart-column-decreasing-QjDFa4JO.js +6 -0
- langflow/frontend/assets/chart-column-increasing-O5XSoQBJ.js +6 -0
- langflow/frontend/assets/chart-column-lBDxTkzD.js +6 -0
- langflow/frontend/assets/chart-column-stacked-CARBnmw1.js +6 -0
- langflow/frontend/assets/chart-gantt-B6IBIGrX.js +6 -0
- langflow/frontend/assets/chart-line-Cyw30Veb.js +6 -0
- langflow/frontend/assets/chart-network-CBj0gj7o.js +6 -0
- langflow/frontend/assets/chart-no-axes-column-PIP_bIV8.js +6 -0
- langflow/frontend/assets/chart-no-axes-column-decreasing-BY77hEvB.js +6 -0
- langflow/frontend/assets/chart-no-axes-column-increasing-TP8xDCl4.js +6 -0
- langflow/frontend/assets/chart-no-axes-combined-D8wtZOZW.js +6 -0
- langflow/frontend/assets/chart-no-axes-gantt-we2F3Cc2.js +6 -0
- langflow/frontend/assets/chart-pie-DT5SBxyN.js +6 -0
- langflow/frontend/assets/chart-scatter-BAzZ8A0h.js +6 -0
- langflow/frontend/assets/chart-spline-D8NOULVu.js +6 -0
- langflow/frontend/assets/check-check-B2FvHdYh.js +6 -0
- langflow/frontend/assets/chef-hat-H8qnGgQM.js +6 -0
- langflow/frontend/assets/cherry-CuIL9Icg.js +6 -0
- langflow/frontend/assets/chevron-first-DZAwrVAK.js +6 -0
- langflow/frontend/assets/chevron-last-57xnxIu7.js +6 -0
- langflow/frontend/assets/chevron-left-D6f7WCnF.js +6 -0
- langflow/frontend/assets/chevron-right-CB9rmCMi.js +6 -0
- langflow/frontend/assets/chevrons-down-C6zUQYVl.js +6 -0
- langflow/frontend/assets/chevrons-down-up-D_48PV_C.js +6 -0
- langflow/frontend/assets/chevrons-left-C4afvuBx.js +6 -0
- langflow/frontend/assets/chevrons-left-right-25ZJMOt4.js +6 -0
- langflow/frontend/assets/chevrons-left-right-ellipsis-B-TSUEzW.js +6 -0
- langflow/frontend/assets/chevrons-right-BSE11jnd.js +6 -0
- langflow/frontend/assets/chevrons-right-left--Nd3_LRR.js +6 -0
- langflow/frontend/assets/chevrons-up-BAVlW_p2.js +6 -0
- langflow/frontend/assets/chrome-C5Gs_BqO.js +6 -0
- langflow/frontend/assets/church-DOZbl0fl.js +6 -0
- langflow/frontend/assets/cigarette-CSBdMeeS.js +6 -0
- langflow/frontend/assets/cigarette-off-CQW9kSb2.js +6 -0
- langflow/frontend/assets/circle-alert-DSlMoAL_.js +6 -0
- langflow/frontend/assets/circle-arrow-down-DsRiWFdS.js +6 -0
- langflow/frontend/assets/circle-arrow-left-Bly-3rDv.js +6 -0
- langflow/frontend/assets/circle-arrow-out-down-left-BQDRDHIz.js +6 -0
- langflow/frontend/assets/circle-arrow-out-down-right-B65-S74O.js +6 -0
- langflow/frontend/assets/circle-arrow-out-up-left-CqKyONUk.js +6 -0
- langflow/frontend/assets/circle-arrow-out-up-right-DAk6ZwT7.js +6 -0
- langflow/frontend/assets/circle-arrow-right-Bfh2o4M6.js +6 -0
- langflow/frontend/assets/circle-arrow-up-D80w7Q2M.js +6 -0
- langflow/frontend/assets/circle-check-CGPfCpi7.js +6 -0
- langflow/frontend/assets/circle-check-big-DXAS2ENY.js +6 -0
- langflow/frontend/assets/circle-chevron-down-BoUT75vn.js +6 -0
- langflow/frontend/assets/circle-chevron-left-CnKhi2Kx.js +6 -0
- langflow/frontend/assets/circle-chevron-right-DpiP85Ej.js +6 -0
- langflow/frontend/assets/circle-chevron-up-DoUL_-TX.js +6 -0
- langflow/frontend/assets/circle-dashed-DJsqLJan.js +6 -0
- langflow/frontend/assets/circle-divide-BCJkuu3A.js +6 -0
- langflow/frontend/assets/circle-dollar-sign-BARKIJ4n.js +6 -0
- langflow/frontend/assets/circle-dot-By6Mhun_.js +6 -0
- langflow/frontend/assets/circle-dot-dashed-1c7JarkQ.js +6 -0
- langflow/frontend/assets/circle-ellipsis-CJfM4e36.js +6 -0
- langflow/frontend/assets/circle-equal-DZ1-dF6g.js +6 -0
- langflow/frontend/assets/circle-fading-arrow-up-BCJiKV-0.js +6 -0
- langflow/frontend/assets/circle-fading-plus-V27joTgY.js +6 -0
- langflow/frontend/assets/circle-gauge-p1BQIbDH.js +6 -0
- langflow/frontend/assets/circle-help-DxL8FhhD.js +6 -0
- langflow/frontend/assets/circle-minus-CjENfR3a.js +6 -0
- langflow/frontend/assets/circle-off-WGaB7cGh.js +6 -0
- langflow/frontend/assets/circle-parking-VJIj2sEP.js +6 -0
- langflow/frontend/assets/circle-parking-off-CApwS7Ek.js +6 -0
- langflow/frontend/assets/circle-pause-Bmgf1Ygg.js +6 -0
- langflow/frontend/assets/circle-percent-CQu5H4V8.js +6 -0
- langflow/frontend/assets/circle-play-oDGhFher.js +6 -0
- langflow/frontend/assets/circle-plus-BWrZVIwX.js +6 -0
- langflow/frontend/assets/circle-power-BnorXyJD.js +6 -0
- langflow/frontend/assets/circle-slash-2-CkCIHM-u.js +6 -0
- langflow/frontend/assets/circle-slash-D8A2JUDs.js +6 -0
- langflow/frontend/assets/circle-small-D4MDv71_.js +6 -0
- langflow/frontend/assets/circle-stop-DZ8k8fGR.js +6 -0
- langflow/frontend/assets/circle-user-DzjEWjHd.js +6 -0
- langflow/frontend/assets/circle-user-round-ZORW0Ndq.js +6 -0
- langflow/frontend/assets/circuit-board-DfnWNRsn.js +6 -0
- langflow/frontend/assets/citrus-Td0opS7K.js +6 -0
- langflow/frontend/assets/clapperboard-BsWqgaFY.js +6 -0
- langflow/frontend/assets/clipboard-BPW08izA.js +6 -0
- langflow/frontend/assets/clipboard-check-DmvfsU1D.js +6 -0
- langflow/frontend/assets/clipboard-copy-Nf55pVIH.js +6 -0
- langflow/frontend/assets/clipboard-list-DFgvOqbT.js +6 -0
- langflow/frontend/assets/clipboard-minus-D-FOqjkU.js +6 -0
- langflow/frontend/assets/clipboard-paste-C1OtqADy.js +6 -0
- langflow/frontend/assets/clipboard-pen-DNv4ZFZM.js +6 -0
- langflow/frontend/assets/clipboard-pen-line-BjHKDYNd.js +6 -0
- langflow/frontend/assets/clipboard-plus-Dx7JQiF6.js +6 -0
- langflow/frontend/assets/clipboard-type-v3ECLQXv.js +6 -0
- langflow/frontend/assets/clipboard-x-3J4AciNn.js +6 -0
- langflow/frontend/assets/clock-1-DDs9l7MD.js +6 -0
- langflow/frontend/assets/clock-10-Cw4-6H1I.js +6 -0
- langflow/frontend/assets/clock-11-1eI8HJFh.js +6 -0
- langflow/frontend/assets/clock-12-BfzzARZJ.js +6 -0
- langflow/frontend/assets/clock-2-CF02GLj7.js +6 -0
- langflow/frontend/assets/clock-3-nB1qLJCQ.js +6 -0
- langflow/frontend/assets/clock-4-CQ3dKckG.js +6 -0
- langflow/frontend/assets/clock-5-RZdoprCK.js +6 -0
- langflow/frontend/assets/clock-5k3iEpCZ.js +6 -0
- langflow/frontend/assets/clock-6-DIp3Tpz8.js +6 -0
- langflow/frontend/assets/clock-7-DSk_3wP5.js +6 -0
- langflow/frontend/assets/clock-8-gezR5xh2.js +6 -0
- langflow/frontend/assets/clock-9-7VxgS6ZQ.js +6 -0
- langflow/frontend/assets/clock-alert-CjSwpP3A.js +6 -0
- langflow/frontend/assets/clock-arrow-down-Fgr1JPf5.js +6 -0
- langflow/frontend/assets/clock-arrow-up-DrOqgsjQ.js +6 -0
- langflow/frontend/assets/clock-fading-Bw3mYnOh.js +6 -0
- langflow/frontend/assets/cloud-alert-CV2UCcaQ.js +6 -0
- langflow/frontend/assets/cloud-cog-DtCH9xnQ.js +6 -0
- langflow/frontend/assets/cloud-download-2ccvBwSA.js +6 -0
- langflow/frontend/assets/cloud-drizzle-Cop3NlOE.js +6 -0
- langflow/frontend/assets/cloud-fog-B_rb-Hyl.js +6 -0
- langflow/frontend/assets/cloud-hail-C9ILZ5V8.js +6 -0
- langflow/frontend/assets/cloud-lightning-BhNfgw20.js +6 -0
- langflow/frontend/assets/cloud-moon-BrVVwMlD.js +6 -0
- langflow/frontend/assets/cloud-moon-rain-uwUHbkZt.js +6 -0
- langflow/frontend/assets/cloud-off-DrAUFD0t.js +6 -0
- langflow/frontend/assets/cloud-rain-DjxW3q4L.js +6 -0
- langflow/frontend/assets/cloud-rain-wind-udNnVgDx.js +6 -0
- langflow/frontend/assets/cloud-snow-69zE5vkK.js +6 -0
- langflow/frontend/assets/cloud-sun-BM-D9Rle.js +6 -0
- langflow/frontend/assets/cloud-sun-rain-BM7iZeNa.js +6 -0
- langflow/frontend/assets/cloud-tabu_hKC.js +6 -0
- langflow/frontend/assets/cloud-upload-C2EYxr5-.js +6 -0
- langflow/frontend/assets/cloudy-DNZwgICG.js +6 -0
- langflow/frontend/assets/clover-C6y1yN8J.js +6 -0
- langflow/frontend/assets/club-B1260YWG.js +6 -0
- langflow/frontend/assets/code-xml-6FkYWvxo.js +6 -0
- langflow/frontend/assets/codepen-0rxnk2vC.js +6 -0
- langflow/frontend/assets/codesandbox-fAjYtduj.js +6 -0
- langflow/frontend/assets/coffee-DmrMxHj3.js +6 -0
- langflow/frontend/assets/cog-oVaj7K_T.js +6 -0
- langflow/frontend/assets/coins-CaWqPZfP.js +6 -0
- langflow/frontend/assets/columns-2-CVUopufC.js +6 -0
- langflow/frontend/assets/columns-3-BfBdACBp.js +6 -0
- langflow/frontend/assets/columns-3-cog-Bsap-dth.js +6 -0
- langflow/frontend/assets/columns-4-BmlSyp9K.js +6 -0
- langflow/frontend/assets/combine-ISVS-62u.js +6 -0
- langflow/frontend/assets/command-Z8GOsKhT.js +6 -0
- langflow/frontend/assets/compass-BkgzdmRY.js +6 -0
- langflow/frontend/assets/component-iUDb5yBH.js +6 -0
- langflow/frontend/assets/computer-qDkBDtPn.js +6 -0
- langflow/frontend/assets/concierge-bell-CUV9ebNw.js +6 -0
- langflow/frontend/assets/cone-DhTsvrAY.js +6 -0
- langflow/frontend/assets/construction-DapA7FK1.js +6 -0
- langflow/frontend/assets/contact-CTK7KEAJ.js +6 -0
- langflow/frontend/assets/contact-round-ZnQkcwxC.js +6 -0
- langflow/frontend/assets/container-_okA947_.js +6 -0
- langflow/frontend/assets/contrast-B-K4Glbj.js +6 -0
- langflow/frontend/assets/cookie-B_o8Lg31.js +6 -0
- langflow/frontend/assets/cooking-pot-BgeHYqhS.js +6 -0
- langflow/frontend/assets/copy-Bg-ADOhw.js +6 -0
- langflow/frontend/assets/copy-check-CBlRjzlH.js +6 -0
- langflow/frontend/assets/copy-minus-BhSxXaJC.js +6 -0
- langflow/frontend/assets/copy-plus-BjcxVK_A.js +6 -0
- langflow/frontend/assets/copy-slash-D1EZTml9.js +6 -0
- langflow/frontend/assets/copy-x-Bg4z-HZX.js +6 -0
- langflow/frontend/assets/copyleft-B-46Kg2j.js +6 -0
- langflow/frontend/assets/copyright-dNcPu5BZ.js +6 -0
- langflow/frontend/assets/corner-down-left-3RjKLzCk.js +6 -0
- langflow/frontend/assets/corner-down-right-nX5TV1A1.js +6 -0
- langflow/frontend/assets/corner-left-down-DF-u_bNG.js +6 -0
- langflow/frontend/assets/corner-left-up-CFn3MLSy.js +6 -0
- langflow/frontend/assets/corner-right-down-DUE6DQXq.js +6 -0
- langflow/frontend/assets/corner-right-up-DH2-sl5u.js +6 -0
- langflow/frontend/assets/corner-up-left-QSYcr4qX.js +6 -0
- langflow/frontend/assets/corner-up-right-Byj6G3EQ.js +6 -0
- langflow/frontend/assets/cpu-BvnxyUTu.js +6 -0
- langflow/frontend/assets/creative-commons-QAfWd2CD.js +6 -0
- langflow/frontend/assets/credit-card-BaaTdJYQ.js +6 -0
- langflow/frontend/assets/croissant-DBfOsvEA.js +6 -0
- langflow/frontend/assets/crop-B03gzQRh.js +6 -0
- langflow/frontend/assets/cross-Bu4qCTAc.js +6 -0
- langflow/frontend/assets/crosshair-hhGS7K5d.js +6 -0
- langflow/frontend/assets/crown-6bEKMvp7.js +6 -0
- langflow/frontend/assets/cuboid-CYP7vY66.js +6 -0
- langflow/frontend/assets/cup-soda-C_6X62nx.js +6 -0
- langflow/frontend/assets/currency-CLU0FNmN.js +6 -0
- langflow/frontend/assets/cylinder-CD5U1FzN.js +6 -0
- langflow/frontend/assets/dam-sH2fmMyh.js +6 -0
- langflow/frontend/assets/database-backup-DY0g10qP.js +6 -0
- langflow/frontend/assets/database-genwKABU.js +6 -0
- langflow/frontend/assets/database-zap-ZROeyYKy.js +6 -0
- langflow/frontend/assets/decimals-arrow-left-C-1ldGH_.js +6 -0
- langflow/frontend/assets/decimals-arrow-right-CXejBsLy.js +6 -0
- langflow/frontend/assets/delete-DiZXY6oG.js +6 -0
- langflow/frontend/assets/dessert-B1iokwD6.js +6 -0
- langflow/frontend/assets/diameter-BRDmVMmp.js +6 -0
- langflow/frontend/assets/diamond-BDYbigW_.js +6 -0
- langflow/frontend/assets/diamond-minus-BOBCkYq3.js +6 -0
- langflow/frontend/assets/diamond-percent-DEguhLIP.js +6 -0
- langflow/frontend/assets/diamond-plus-DbOcSV47.js +6 -0
- langflow/frontend/assets/dice-1-B4u9yynl.js +6 -0
- langflow/frontend/assets/dice-2-vCRIlRlY.js +6 -0
- langflow/frontend/assets/dice-3-DNVJxyGb.js +6 -0
- langflow/frontend/assets/dice-4-DX9QURLZ.js +6 -0
- langflow/frontend/assets/dice-5-DaiR3G1V.js +6 -0
- langflow/frontend/assets/dice-6-rzt4a5y0.js +6 -0
- langflow/frontend/assets/dices-CPBJmZ4K.js +6 -0
- langflow/frontend/assets/diff-Djt9e8g4.js +6 -0
- langflow/frontend/assets/disc-2-CKHP9RvR.js +6 -0
- langflow/frontend/assets/disc-3-DHv30SCG.js +6 -0
- langflow/frontend/assets/disc-Cis7n2J_.js +6 -0
- langflow/frontend/assets/disc-album-Dq809ynm.js +6 -0
- langflow/frontend/assets/divide-Ck08gC0i.js +6 -0
- langflow/frontend/assets/dna-B1mbUf_V.js +6 -0
- langflow/frontend/assets/dna-off-BeEoZhrh.js +6 -0
- langflow/frontend/assets/dock-Dgrwj98o.js +6 -0
- langflow/frontend/assets/dog-BsD6X0If.js +6 -0
- langflow/frontend/assets/dollar-sign-ClojY2rs.js +6 -0
- langflow/frontend/assets/donut-CRD0jTXp.js +6 -0
- langflow/frontend/assets/door-closed-CaTMBrEH.js +6 -0
- langflow/frontend/assets/door-open-CRPn3hVI.js +6 -0
- langflow/frontend/assets/dot-DVKMpWCA.js +6 -0
- langflow/frontend/assets/download-ilHROIc8.js +6 -0
- langflow/frontend/assets/drafting-compass-C9EWLUE5.js +6 -0
- langflow/frontend/assets/drama-BnILyZg6.js +6 -0
- langflow/frontend/assets/dribbble-B59pjUa-.js +6 -0
- langflow/frontend/assets/drill-CmoE6m0D.js +6 -0
- langflow/frontend/assets/droplet-DZsFEhvX.js +6 -0
- langflow/frontend/assets/droplet-off-KBBBzd5A.js +6 -0
- langflow/frontend/assets/droplets-CvkfmvXs.js +6 -0
- langflow/frontend/assets/drum-COBhspLI.js +6 -0
- langflow/frontend/assets/drumstick-DXdShjt3.js +6 -0
- langflow/frontend/assets/dumbbell-SuZu5WPU.js +6 -0
- langflow/frontend/assets/ear-off-BXITnhZD.js +6 -0
- langflow/frontend/assets/ear-qbp8swKI.js +6 -0
- langflow/frontend/assets/earth-DBJbirBs.js +6 -0
- langflow/frontend/assets/earth-lock-CXKr_jhv.js +6 -0
- langflow/frontend/assets/eclipse-BZ7AGLaC.js +6 -0
- langflow/frontend/assets/egg-DEZ6EwRB.js +6 -0
- langflow/frontend/assets/egg-fried-C0X85YlI.js +6 -0
- langflow/frontend/assets/egg-off-COgQrGBN.js +6 -0
- langflow/frontend/assets/ellipsis-DVRoNFgp.js +6 -0
- langflow/frontend/assets/ellipsis-vertical-BQa9tbrV.js +6 -0
- langflow/frontend/assets/equal-DCp6ZHs4.js +6 -0
- langflow/frontend/assets/equal-approximately-D80WWbnR.js +6 -0
- langflow/frontend/assets/equal-not-CdEsRLRH.js +6 -0
- langflow/frontend/assets/eraser-BaNC34RV.js +6 -0
- langflow/frontend/assets/ethernet-port-Cqy1WHvH.js +6 -0
- langflow/frontend/assets/euro-Bu8pkqhR.js +6 -0
- langflow/frontend/assets/expand-BuoSXSX2.js +6 -0
- langflow/frontend/assets/eye-BspCeYDa.js +6 -0
- langflow/frontend/assets/eye-closed-De4xfaIg.js +6 -0
- langflow/frontend/assets/eye-off-RcSAA9WW.js +6 -0
- langflow/frontend/assets/facebook-BoXYsHWp.js +6 -0
- langflow/frontend/assets/factory-BUC0mXem.js +6 -0
- langflow/frontend/assets/fan-CLZ1Vz0V.js +6 -0
- langflow/frontend/assets/fast-forward-D2OP4Q7E.js +6 -0
- langflow/frontend/assets/feather-CnoRavAT.js +6 -0
- langflow/frontend/assets/fence-CtiSZ4Nf.js +6 -0
- langflow/frontend/assets/ferris-wheel-D_hWKt7S.js +6 -0
- langflow/frontend/assets/figma-CQGv9kyE.js +6 -0
- langflow/frontend/assets/file-archive-B5JcqiQL.js +6 -0
- langflow/frontend/assets/file-audio-2-ehTyWhTB.js +6 -0
- langflow/frontend/assets/file-audio-BSZQWfa9.js +6 -0
- langflow/frontend/assets/file-axis-3d-DcVdeQ4u.js +6 -0
- langflow/frontend/assets/file-badge-2-Cmh8nOPi.js +6 -0
- langflow/frontend/assets/file-badge-DPWSByjN.js +6 -0
- langflow/frontend/assets/file-box-BLMD0UaC.js +6 -0
- langflow/frontend/assets/file-chart-column-BH1bIMyz.js +6 -0
- langflow/frontend/assets/file-chart-column-increasing-9TmevT9W.js +6 -0
- langflow/frontend/assets/file-chart-line-Bttw5Q1i.js +6 -0
- langflow/frontend/assets/file-chart-pie-DZb_SYxq.js +6 -0
- langflow/frontend/assets/file-check-2-DDTWXIea.js +6 -0
- langflow/frontend/assets/file-check-BG1Dwdzy.js +6 -0
- langflow/frontend/assets/file-clock-CYHeVB8i.js +6 -0
- langflow/frontend/assets/file-code-2-CXdRFAx7.js +6 -0
- langflow/frontend/assets/file-code-Dd2cxogt.js +6 -0
- langflow/frontend/assets/file-cog-BXbF_7CF.js +6 -0
- langflow/frontend/assets/file-diff-yYFVKGp5.js +6 -0
- langflow/frontend/assets/file-digit-DPGN6j2i.js +6 -0
- langflow/frontend/assets/file-dkPOy6N6.js +6 -0
- langflow/frontend/assets/file-down-CjuHCH1l.js +6 -0
- langflow/frontend/assets/file-heart-CKRzD6X-.js +6 -0
- langflow/frontend/assets/file-image-BS0r66r5.js +6 -0
- langflow/frontend/assets/file-input-aiiEGm-I.js +6 -0
- langflow/frontend/assets/file-json-2-DwRUUeaf.js +6 -0
- langflow/frontend/assets/file-json-C_KFbUtD.js +6 -0
- langflow/frontend/assets/file-key-2-DXfiyFVb.js +6 -0
- langflow/frontend/assets/file-key-D2T375Ip.js +6 -0
- langflow/frontend/assets/file-lock-2-DoNod59h.js +6 -0
- langflow/frontend/assets/file-lock-nVAYS2-S.js +6 -0
- langflow/frontend/assets/file-minus-2-BfiqlmdR.js +6 -0
- langflow/frontend/assets/file-minus-ycyZ6Q1c.js +6 -0
- langflow/frontend/assets/file-music-TiNPR82V.js +6 -0
- langflow/frontend/assets/file-output-DMJK7aeI.js +6 -0
- langflow/frontend/assets/file-pen-CqlkXqxE.js +6 -0
- langflow/frontend/assets/file-pen-line--6CjksAI.js +6 -0
- langflow/frontend/assets/file-plus-2-CtPXOWx4.js +6 -0
- langflow/frontend/assets/file-plus-D0QdYqA3.js +6 -0
- langflow/frontend/assets/file-question-CwwKShiy.js +6 -0
- langflow/frontend/assets/file-scan-DwK-gfXc.js +6 -0
- langflow/frontend/assets/file-search-2-t5cl8Gv1.js +6 -0
- langflow/frontend/assets/file-search-CqvsqOXx.js +6 -0
- langflow/frontend/assets/file-sliders-sgP6oLX5.js +6 -0
- langflow/frontend/assets/file-spreadsheet-BTNt21zX.js +6 -0
- langflow/frontend/assets/file-stack-BHzdx9Jy.js +6 -0
- langflow/frontend/assets/file-symlink-32Cofobi.js +6 -0
- langflow/frontend/assets/file-terminal-DigOI9iZ.js +6 -0
- langflow/frontend/assets/file-text-D1VaORwi.js +6 -0
- langflow/frontend/assets/file-type-2-CArn46yd.js +6 -0
- langflow/frontend/assets/file-type-BlOjTnDW.js +6 -0
- langflow/frontend/assets/file-up-CGpgkngj.js +6 -0
- langflow/frontend/assets/file-user-Ih9Y2h5F.js +6 -0
- langflow/frontend/assets/file-video-2-Bllfv3kj.js +6 -0
- langflow/frontend/assets/file-video-D4x-59KB.js +6 -0
- langflow/frontend/assets/file-volume-2-DpTT-Vpl.js +6 -0
- langflow/frontend/assets/file-volume-3e-mbu_i.js +6 -0
- langflow/frontend/assets/file-warning-DX4HYYVB.js +6 -0
- langflow/frontend/assets/file-x-2-YHCU7JUY.js +6 -0
- langflow/frontend/assets/file-x-DvxhSQ4k.js +6 -0
- langflow/frontend/assets/files-CPXlVjml.js +6 -0
- langflow/frontend/assets/film-CpGxvC34.js +6 -0
- langflow/frontend/assets/fingerprint-BBCJiToC.js +6 -0
- langflow/frontend/assets/fire-extinguisher-C7CSnN-_.js +6 -0
- langflow/frontend/assets/fish-DL5wso0_.js +6 -0
- langflow/frontend/assets/fish-off-Cdz8ZC-U.js +6 -0
- langflow/frontend/assets/fish-symbol-CGnxV8mF.js +6 -0
- langflow/frontend/assets/flag-CEcqbweQ.js +6 -0
- langflow/frontend/assets/flag-off-CkAue95r.js +6 -0
- langflow/frontend/assets/flag-triangle-left-C0jqcls2.js +6 -0
- langflow/frontend/assets/flag-triangle-right-BQgqPZU9.js +6 -0
- langflow/frontend/assets/flame-kindling-zMaH1-Um.js +6 -0
- langflow/frontend/assets/flame-zbvXIMzh.js +6 -0
- langflow/frontend/assets/flashlight-DX1Cp0o8.js +6 -0
- langflow/frontend/assets/flashlight-off-DiXEbTUu.js +6 -0
- langflow/frontend/assets/flask-conical-CyAz3rQ_.js +6 -0
- langflow/frontend/assets/flask-conical-off-Dob9FAbm.js +6 -0
- langflow/frontend/assets/flask-round-Bk6Yvf33.js +6 -0
- langflow/frontend/assets/flip-horizontal-2-C-SzkXvB.js +6 -0
- langflow/frontend/assets/flip-horizontal-C2f-1SfP.js +6 -0
- langflow/frontend/assets/flip-vertical-2-CelDfIKP.js +6 -0
- langflow/frontend/assets/flip-vertical-k0JNK5mJ.js +6 -0
- langflow/frontend/assets/flower-2-_6whyUXy.js +6 -0
- langflow/frontend/assets/flower-C7OSeS8s.js +6 -0
- langflow/frontend/assets/focus-CuWnLxRM.js +6 -0
- langflow/frontend/assets/fold-horizontal-D5npxbNj.js +6 -0
- langflow/frontend/assets/fold-vertical-h-paHN6W.js +6 -0
- langflow/frontend/assets/folder-IhXlYWWi.js +6 -0
- langflow/frontend/assets/folder-archive-SQIWhHwn.js +6 -0
- langflow/frontend/assets/folder-check-Bv46J9kk.js +6 -0
- langflow/frontend/assets/folder-clock-DnSYoldA.js +6 -0
- langflow/frontend/assets/folder-closed-D4908lOX.js +6 -0
- langflow/frontend/assets/folder-code-CHxf51NH.js +6 -0
- langflow/frontend/assets/folder-cog-D8z9qwv7.js +6 -0
- langflow/frontend/assets/folder-dot-DPR1ZLma.js +6 -0
- langflow/frontend/assets/folder-down-Bug8S3dI.js +6 -0
- langflow/frontend/assets/folder-git-2-DK161kt5.js +6 -0
- langflow/frontend/assets/folder-git-lHS-IcSO.js +6 -0
- langflow/frontend/assets/folder-heart-BWYr9_fr.js +6 -0
- langflow/frontend/assets/folder-input-EQTxRH12.js +6 -0
- langflow/frontend/assets/folder-kanban-DPUXVDsk.js +6 -0
- langflow/frontend/assets/folder-key-DrTqlQM5.js +6 -0
- langflow/frontend/assets/folder-lock-DsFJ27Ob.js +6 -0
- langflow/frontend/assets/folder-minus-H3_42Crt.js +6 -0
- langflow/frontend/assets/folder-open-dot-C7UW6sBA.js +6 -0
- langflow/frontend/assets/folder-open-nC1JaZA6.js +6 -0
- langflow/frontend/assets/folder-output-CjClGsyp.js +6 -0
- langflow/frontend/assets/folder-pen-D_8F04y_.js +6 -0
- langflow/frontend/assets/folder-plus-XReh2226.js +6 -0
- langflow/frontend/assets/folder-root-icoglAEd.js +6 -0
- langflow/frontend/assets/folder-search-2-DkCVIVaq.js +6 -0
- langflow/frontend/assets/folder-search-CCDT_GVS.js +6 -0
- langflow/frontend/assets/folder-symlink-DcDjXYGC.js +6 -0
- langflow/frontend/assets/folder-sync-B6SYPyqb.js +6 -0
- langflow/frontend/assets/folder-tree-ufAi4zv1.js +6 -0
- langflow/frontend/assets/folder-up-DT_jRXE0.js +6 -0
- langflow/frontend/assets/folder-x-o686AXZJ.js +6 -0
- langflow/frontend/assets/folders-D9rKCuye.js +6 -0
- langflow/frontend/assets/footprints-DHWCv080.js +6 -0
- langflow/frontend/assets/forklift-CaU-8B38.js +6 -0
- langflow/frontend/assets/forward-RSt31tjz.js +6 -0
- langflow/frontend/assets/frame-Bc2PyMBD.js +6 -0
- langflow/frontend/assets/framer-Ch6Sc7tC.js +6 -0
- langflow/frontend/assets/frown-9aZTHR74.js +6 -0
- langflow/frontend/assets/fuel-D5pe8AOh.js +6 -0
- langflow/frontend/assets/fullscreen-Cr35QoHT.js +6 -0
- langflow/frontend/assets/funnel-BdhivuOW.js +6 -0
- langflow/frontend/assets/funnel-plus-Cu-llsVH.js +6 -0
- langflow/frontend/assets/funnel-x-BE5t9JTw.js +6 -0
- langflow/frontend/assets/gallery-horizontal-CFh_1MjE.js +6 -0
- langflow/frontend/assets/gallery-horizontal-end-D4h80_vH.js +6 -0
- langflow/frontend/assets/gallery-thumbnails-Du4-9yLh.js +6 -0
- langflow/frontend/assets/gallery-vertical-BbkTnh4j.js +6 -0
- langflow/frontend/assets/gallery-vertical-end-fI-aLdJP.js +6 -0
- langflow/frontend/assets/gamepad-2-DvWJJfzL.js +6 -0
- langflow/frontend/assets/gamepad-CFuXrBSS.js +6 -0
- langflow/frontend/assets/gauge-fxWUxfbA.js +6 -0
- langflow/frontend/assets/gavel-C-4u55I_.js +6 -0
- langflow/frontend/assets/gem-CLqUD7zb.js +6 -0
- langflow/frontend/assets/ghost-DPGkE7Ty.js +6 -0
- langflow/frontend/assets/gift-BnJVBj-C.js +6 -0
- langflow/frontend/assets/git-branch-CwF45Cfc.js +6 -0
- langflow/frontend/assets/git-branch-plus-CvNu6INW.js +6 -0
- langflow/frontend/assets/git-commit-horizontal-BTdOtmCb.js +6 -0
- langflow/frontend/assets/git-commit-vertical-BrSwZ_g5.js +6 -0
- langflow/frontend/assets/git-compare-BMQRXhzf.js +6 -0
- langflow/frontend/assets/git-compare-arrows-CPPvz84E.js +6 -0
- langflow/frontend/assets/git-fork-DmBnLwi5.js +6 -0
- langflow/frontend/assets/git-graph-Cvjt1UFq.js +6 -0
- langflow/frontend/assets/git-merge-Cbs2Y7KS.js +6 -0
- langflow/frontend/assets/git-pull-request-DHkQEx49.js +6 -0
- langflow/frontend/assets/git-pull-request-arrow-CIpUQyhG.js +6 -0
- langflow/frontend/assets/git-pull-request-closed-BXJnSnkt.js +6 -0
- langflow/frontend/assets/git-pull-request-create-C6MdThaW.js +6 -0
- langflow/frontend/assets/git-pull-request-create-arrow-BoiHZab0.js +6 -0
- langflow/frontend/assets/git-pull-request-draft-BiHfXtNj.js +6 -0
- langflow/frontend/assets/github-DjP5Qe8z.js +6 -0
- langflow/frontend/assets/gitlab-HvXD9NkC.js +6 -0
- langflow/frontend/assets/glass-water-_cuJLHqm.js +6 -0
- langflow/frontend/assets/glasses-CZwQpe5_.js +6 -0
- langflow/frontend/assets/globe-CO_zgHvp.js +6 -0
- langflow/frontend/assets/globe-lock-3GerQaVn.js +6 -0
- langflow/frontend/assets/goal-B1WNGo5b.js +6 -0
- langflow/frontend/assets/grab-smVMRl7O.js +6 -0
- langflow/frontend/assets/graduation-cap-DWxruIyS.js +6 -0
- langflow/frontend/assets/grape-DPllnPmt.js +6 -0
- langflow/frontend/assets/grid-2x2-BL1YcKIP.js +6 -0
- langflow/frontend/assets/grid-2x2-check-b5BTnjZn.js +6 -0
- langflow/frontend/assets/grid-2x2-plus-UCdVUHHz.js +6 -0
- langflow/frontend/assets/grid-2x2-x-DZndaLZu.js +6 -0
- langflow/frontend/assets/grid-3x3-RK_a5c_V.js +6 -0
- langflow/frontend/assets/grip-CrDKG5y0.js +6 -0
- langflow/frontend/assets/grip-horizontal-CMopiwvD.js +6 -0
- langflow/frontend/assets/grip-vertical-Qzb9veCQ.js +6 -0
- langflow/frontend/assets/group-C75DOoJP.js +6 -0
- langflow/frontend/assets/guitar-Dvh0ayjF.js +6 -0
- langflow/frontend/assets/ham-Bs0bS5so.js +6 -0
- langflow/frontend/assets/hammer-BIJbt42S.js +6 -0
- langflow/frontend/assets/hand-coins-yf08Tvx5.js +6 -0
- langflow/frontend/assets/hand-hAvm3EU_.js +6 -0
- langflow/frontend/assets/hand-heart-CyYUvyAe.js +6 -0
- langflow/frontend/assets/hand-helping-BAHbuwVv.js +6 -0
- langflow/frontend/assets/hand-metal-yseDO2R_.js +6 -0
- langflow/frontend/assets/hand-platter-BXSxzVKa.js +6 -0
- langflow/frontend/assets/handshake-irWzCAgw.js +6 -0
- langflow/frontend/assets/hard-drive-Ckg06LKr.js +6 -0
- langflow/frontend/assets/hard-drive-download-CThPWBVE.js +6 -0
- langflow/frontend/assets/hard-drive-upload-tr7uRX48.js +6 -0
- langflow/frontend/assets/hard-hat-Brkan4P5.js +6 -0
- langflow/frontend/assets/hash-DvfljLlR.js +6 -0
- langflow/frontend/assets/haze-CRGGwGiA.js +6 -0
- langflow/frontend/assets/hdmi-port-OFMy04gQ.js +6 -0
- langflow/frontend/assets/heading-1-BEaWSp-t.js +6 -0
- langflow/frontend/assets/heading-2-C4lIVs5l.js +6 -0
- langflow/frontend/assets/heading-3-B2kREmYX.js +6 -0
- langflow/frontend/assets/heading-4-CsTdgwhx.js +6 -0
- langflow/frontend/assets/heading-5-cEnxtm_J.js +6 -0
- langflow/frontend/assets/heading-6-D6HpuPOc.js +6 -0
- langflow/frontend/assets/heading-BWKOYSQY.js +6 -0
- langflow/frontend/assets/headphone-off-DIWQeFO9.js +6 -0
- langflow/frontend/assets/headphones-D_saDlms.js +6 -0
- langflow/frontend/assets/headset-sHT35i_S.js +6 -0
- langflow/frontend/assets/heart-C4aCBNGq.js +6 -0
- langflow/frontend/assets/heart-crack-5Sx1o-p7.js +6 -0
- langflow/frontend/assets/heart-handshake-DSXckKVz.js +6 -0
- langflow/frontend/assets/heart-minus-DR_3KzE4.js +6 -0
- langflow/frontend/assets/heart-off-CKpqUzhz.js +6 -0
- langflow/frontend/assets/heart-plus-B6Viydrh.js +6 -0
- langflow/frontend/assets/heart-pulse-BM9zR9JM.js +6 -0
- langflow/frontend/assets/heater-BZ4E4GjI.js +6 -0
- langflow/frontend/assets/hexagon-OiuEBaFN.js +6 -0
- langflow/frontend/assets/highlighter-E6ckKqlD.js +6 -0
- langflow/frontend/assets/history-PjfOq7Ia.js +6 -0
- langflow/frontend/assets/hop-D87kpBB_.js +6 -0
- langflow/frontend/assets/hop-off-CUNS7mig.js +6 -0
- langflow/frontend/assets/hospital-DDUpXiCh.js +6 -0
- langflow/frontend/assets/hotel-B1DbgPCP.js +6 -0
- langflow/frontend/assets/hourglass-B4SahFsf.js +6 -0
- langflow/frontend/assets/house-DaBRnJBl.js +6 -0
- langflow/frontend/assets/house-plug-B4ncebTm.js +6 -0
- langflow/frontend/assets/house-plus-DhywZSpb.js +6 -0
- langflow/frontend/assets/house-wifi-CAkAjwjZ.js +6 -0
- langflow/frontend/assets/ice-cream-bowl-CiXt35x_.js +6 -0
- langflow/frontend/assets/ice-cream-cone-BWh3NPGq.js +6 -0
- langflow/frontend/assets/id-card-CBwy8kjN.js +6 -0
- langflow/frontend/assets/image-Bb1E2AJK.js +6 -0
- langflow/frontend/assets/image-down-B__TgzTt.js +6 -0
- langflow/frontend/assets/image-minus-C9Tucpyr.js +6 -0
- langflow/frontend/assets/image-off-CwQaBZmO.js +6 -0
- langflow/frontend/assets/image-play-Cl62_lgn.js +6 -0
- langflow/frontend/assets/image-plus-CRYS_W5h.js +6 -0
- langflow/frontend/assets/image-up-Dis9jbyg.js +6 -0
- langflow/frontend/assets/image-upscale-CVX1dYkP.js +6 -0
- langflow/frontend/assets/images-CEndZY-a.js +6 -0
- langflow/frontend/assets/import-GdW1WSNF.js +6 -0
- langflow/frontend/assets/inbox-CcFrShRK.js +6 -0
- langflow/frontend/assets/indent-decrease-DxNGjN50.js +6 -0
- langflow/frontend/assets/indent-increase-D2TEQVWz.js +6 -0
- langflow/frontend/assets/index-2T1M1c0U.js +1 -0
- langflow/frontend/assets/index-3FZ_aSEp.js +1 -0
- langflow/frontend/assets/index-6GMosZYt.js +1 -0
- langflow/frontend/assets/index-6pg8LI6U.js +1 -0
- langflow/frontend/assets/index-8xKWBJih.js +1 -0
- langflow/frontend/assets/index-A6JoOygL.js +281 -0
- langflow/frontend/assets/index-AjJzvfDL.js +1 -0
- langflow/frontend/assets/index-B-KgI4a5.js +1 -0
- langflow/frontend/assets/index-B0yvh5D3.js +1 -0
- langflow/frontend/assets/index-B3GtvVv9.js +1 -0
- langflow/frontend/assets/index-B5gXkG27.js +1 -0
- langflow/frontend/assets/index-BA73YFLO.js +1 -0
- langflow/frontend/assets/index-BAmYSQER.js +1 -0
- langflow/frontend/assets/index-BAqVmvl6.js +1 -0
- langflow/frontend/assets/index-BDZNF2q0.js +1 -0
- langflow/frontend/assets/index-BEvkC-Sx.js +1 -0
- langflow/frontend/assets/index-BF2mmr9b.js +1 -0
- langflow/frontend/assets/index-BF3rb9wz.js +1 -0
- langflow/frontend/assets/index-BHMo4Hza.js +1 -0
- langflow/frontend/assets/index-BKFZsOXh.js +1 -0
- langflow/frontend/assets/index-BKvvdlUz.js +1 -0
- langflow/frontend/assets/index-BMCB4uDF.js +20 -0
- langflow/frontend/assets/index-BNpL-U42.js +1 -0
- langflow/frontend/assets/index-BNsQ7064.js +1 -0
- langflow/frontend/assets/index-BOAtjsNq.js +1 -0
- langflow/frontend/assets/index-BPlIWjme.js +1 -0
- langflow/frontend/assets/index-BQ2EYYGx.js +1 -0
- langflow/frontend/assets/index-BQnTluA4.js +1 -0
- langflow/frontend/assets/index-BS113QD1.js +1 -0
- langflow/frontend/assets/index-BVQox-W6.js +1 -0
- langflow/frontend/assets/index-BXFeoEKi.js +127 -0
- langflow/frontend/assets/index-BZ6hf8ur.js +1 -0
- langflow/frontend/assets/index-BZgkpTAR.js +1 -0
- langflow/frontend/assets/index-B_wXBhmG.js +1 -0
- langflow/frontend/assets/index-BcEF0hyh.js +1 -0
- langflow/frontend/assets/index-Bcrm2fzm.js +1 -0
- langflow/frontend/assets/index-BdHNdpec.js +1 -0
- langflow/frontend/assets/index-BdXKOjkV.js +1 -0
- langflow/frontend/assets/index-BeCbgbLX.js +1 -0
- langflow/frontend/assets/index-BfrIWQ3r.js +1 -0
- langflow/frontend/assets/index-Bg7EMPRY.js +1 -0
- langflow/frontend/assets/index-Bh6BFceY.js +1 -0
- langflow/frontend/assets/index-BmZnBT1h.js +7 -0
- langflow/frontend/assets/index-BnQMC_-t.js +1 -0
- langflow/frontend/assets/index-BnbC_TNX.js +1 -0
- langflow/frontend/assets/index-BpyF6F6S.js +1 -0
- langflow/frontend/assets/index-BqGLcsSj.js +1 -0
- langflow/frontend/assets/index-BrtJkf0r.js +1 -0
- langflow/frontend/assets/index-Bv02tNd6.js +1 -0
- langflow/frontend/assets/index-Bvw4am-h.js +1 -0
- langflow/frontend/assets/index-BwqMiIm4.js +1 -0
- langflow/frontend/assets/index-Bz2v_STq.js +1 -0
- langflow/frontend/assets/index-C-N-vcnv.js +2 -0
- langflow/frontend/assets/index-C-uJIcP1.js +1 -0
- langflow/frontend/assets/index-C-vvJvx3.js +1 -0
- langflow/frontend/assets/index-C04dkrsd.js +1 -0
- langflow/frontend/assets/index-C1Q-4b7j.js +1 -0
- langflow/frontend/assets/index-C1cSDPn0.js +1 -0
- langflow/frontend/assets/index-C2bbaZHN.js +1 -0
- langflow/frontend/assets/index-C4h8A97w.js +1 -0
- langflow/frontend/assets/index-C5-iCGuZ.js +1 -0
- langflow/frontend/assets/index-C52AfdHe.js +1 -0
- langflow/frontend/assets/index-C75Hsrjn.js +1 -0
- langflow/frontend/assets/index-C8a0bWUs.js +1 -0
- langflow/frontend/assets/index-CEr7GwEI.js +1 -0
- langflow/frontend/assets/index-CGcA9ivW.js +1 -0
- langflow/frontend/assets/index-CI7yneJi.js +1 -0
- langflow/frontend/assets/index-CJcZn2qn.js +1 -0
- langflow/frontend/assets/index-CKTtpNv2.js +1 -0
- langflow/frontend/assets/index-CKwjclCH.js +1 -0
- langflow/frontend/assets/index-CLoXApj6.js +1 -0
- langflow/frontend/assets/index-CM8qOxt-.js +1 -0
- langflow/frontend/assets/index-CMaB_B8t.js +1 -0
- langflow/frontend/assets/index-COkBAFXE.js +1 -0
- langflow/frontend/assets/index-CQpB7vmv.js +1 -0
- langflow/frontend/assets/index-CVQYpWFK.js +1 -0
- langflow/frontend/assets/index-CXCtlXZZ.js +1 -0
- langflow/frontend/assets/index-CXUKDsto.js +1 -0
- langflow/frontend/assets/index-Cay3nUAW.js +1 -0
- langflow/frontend/assets/index-Cb4lZO0v.js +767 -0
- langflow/frontend/assets/index-CdpUh1bj.js +1 -0
- langflow/frontend/assets/index-CemS02fp.js +1 -0
- langflow/frontend/assets/index-Ceth3A9l.js +1 -0
- langflow/frontend/assets/index-Cg27F7k1.js +1 -0
- langflow/frontend/assets/index-Ch8oi6ea.js +1 -0
- langflow/frontend/assets/index-ChNzQkwp.js +1 -0
- langflow/frontend/assets/index-CjCPLt-a.js +1 -0
- langflow/frontend/assets/index-CmOF4CIW.js +1 -0
- langflow/frontend/assets/index-Cnl1PJ4B.js +1 -0
- langflow/frontend/assets/index-Cp7wLBS8.js +1 -0
- langflow/frontend/assets/index-CpUzWUy7.js +1 -0
- langflow/frontend/assets/index-CqVr2GRo.js +1 -0
- langflow/frontend/assets/index-CrVRrFmy.js +1 -0
- langflow/frontend/assets/index-CrlQIkt_.js +1 -0
- langflow/frontend/assets/index-CuA9eqjl.js +21 -0
- langflow/frontend/assets/index-Cv2Zipeh.js +1 -0
- langflow/frontend/assets/index-CvTU9wvF.js +1 -0
- langflow/frontend/assets/index-Cvfr8PyA.js +1 -0
- langflow/frontend/assets/index-Cvnp2yp1.js +205 -0
- langflow/frontend/assets/index-CwS2LepP.js +1 -0
- langflow/frontend/assets/index-Cy6TSFmy.js +1 -0
- langflow/frontend/assets/index-CzuRl_F-.js +185 -0
- langflow/frontend/assets/index-D1WVfIcE.js +1 -0
- langflow/frontend/assets/index-D2fJEFxp.js +1 -0
- langflow/frontend/assets/index-D4YpXx7g.js +1 -0
- langflow/frontend/assets/index-D8CSa8yU.js +1 -0
- langflow/frontend/assets/index-D8x6Rp0D.js +1 -0
- langflow/frontend/assets/index-DB9w3tvI.js +1 -0
- langflow/frontend/assets/index-DCDCGnpk.js +1 -0
- langflow/frontend/assets/index-DEgLO2jX.js +1 -0
- langflow/frontend/assets/index-DF0uedqK.js +1 -0
- langflow/frontend/assets/index-DGPN7CYJ.js +1 -0
- langflow/frontend/assets/index-DHQEkyCx.js +1 -0
- langflow/frontend/assets/index-DLt67ISG.js +381 -0
- langflow/frontend/assets/index-DMLBCnaH.js +1 -0
- langflow/frontend/assets/index-DMONC4gw.js +1 -0
- langflow/frontend/assets/index-DMksTjC_.js +1 -0
- langflow/frontend/assets/index-DNE3Wd9O.js +1 -0
- langflow/frontend/assets/index-DNeKIMy8.js +1 -0
- langflow/frontend/assets/index-DUWKRN_J.js +1 -0
- langflow/frontend/assets/index-DVw30WcW.js +1 -0
- langflow/frontend/assets/index-DXObWOrr.js +1 -0
- langflow/frontend/assets/index-DZioyKzd.js +1 -0
- langflow/frontend/assets/index-DaVs3THU.js +13 -0
- langflow/frontend/assets/index-Dac7brj2.js +1 -0
- langflow/frontend/assets/index-Dcz2v3_j.js +1 -0
- langflow/frontend/assets/index-Dddbcz_J.js +1 -0
- langflow/frontend/assets/index-DecPetUl.js +1 -0
- langflow/frontend/assets/index-DepME8Ar.js +1 -0
- langflow/frontend/assets/index-DhH92hZt.js +1 -0
- langflow/frontend/assets/index-DjLtQNZH.js +1 -0
- langflow/frontend/assets/index-DkxbVG2r.js +1 -0
- langflow/frontend/assets/index-Dl93G4iI.js +1 -0
- langflow/frontend/assets/index-DmZCS9kY.js +1 -0
- langflow/frontend/assets/index-DmtkwZ_Z.js +1 -0
- langflow/frontend/assets/index-DnW5i4vg.js +1 -0
- langflow/frontend/assets/index-DnZ5BlqW.js +108 -0
- langflow/frontend/assets/index-Do8B2lOE.js +1 -0
- langflow/frontend/assets/index-DpAEitAT.js +1 -0
- langflow/frontend/assets/index-DpiXf_Yl.js +1 -0
- langflow/frontend/assets/index-Dprl9Puf.js +1 -0
- langflow/frontend/assets/index-Dqu3P-w_.js +399 -0
- langflow/frontend/assets/index-DsXgoYUp.js +1 -0
- langflow/frontend/assets/index-DwFTdfU8.js +7322 -0
- langflow/frontend/assets/index-DwuJ060x.js +1 -0
- langflow/frontend/assets/index-DyXYNqQ1.js +1 -0
- langflow/frontend/assets/index-DzuFzggn.js +1 -0
- langflow/frontend/assets/index-GLuc4umJ.js +1 -0
- langflow/frontend/assets/index-IWkqNODX.js +1 -0
- langflow/frontend/assets/index-JtZbuy2K.js +1 -0
- langflow/frontend/assets/index-N_aJEt5S.js +1 -0
- langflow/frontend/assets/index-P8VZLrlp.js +1 -0
- langflow/frontend/assets/index-PmbK2bV5.js +1 -0
- langflow/frontend/assets/index-QXItGdQQ.js +1 -0
- langflow/frontend/assets/index-R2dx7ttn.js +1 -0
- langflow/frontend/assets/index-SFzK_-QD.js +1 -0
- langflow/frontend/assets/index-SM0UwsvN.js +1 -0
- langflow/frontend/assets/index-SMyWw6z4.js +1 -0
- langflow/frontend/assets/index-U9DknhAK.js +1 -0
- langflow/frontend/assets/index-Xi1k4Hyo.js +1 -0
- langflow/frontend/assets/index-aoYbNThD.js +1 -0
- langflow/frontend/assets/index-az4bTQet.js +1 -0
- langflow/frontend/assets/index-b6IJOPmG.js +1 -0
- langflow/frontend/assets/index-bgPkTAvf.js +1 -0
- langflow/frontend/assets/index-dD8Ffh79.js +1 -0
- langflow/frontend/assets/index-dbzggNxG.js +1 -0
- langflow/frontend/assets/index-eM5KZVtR.js +1 -0
- langflow/frontend/assets/index-fKljLL8s.js +1 -0
- langflow/frontend/assets/index-fMYwglMD.js +1 -0
- langflow/frontend/assets/index-gD8lz2BM.js +1 -0
- langflow/frontend/assets/index-i978ylvx.js +1 -0
- langflow/frontend/assets/index-lt9r1b_K.js +1 -0
- langflow/frontend/assets/index-mNJVsobz.js +1 -0
- langflow/frontend/assets/index-mTnTCFdQ.js +1 -0
- langflow/frontend/assets/index-oeyCwgBF.js +1 -0
- langflow/frontend/assets/index-tkdvXX2d.js +1 -0
- langflow/frontend/assets/index-tlRo5ggi.js +1 -0
- langflow/frontend/assets/index-vwqm-OhE.js +1 -0
- langflow/frontend/assets/index-y-6wEWKz.js +1 -0
- langflow/frontend/assets/index-y1bsMBZW.js +495 -0
- langflow/frontend/assets/index-yMmmYN0W.js +1 -0
- langflow/frontend/assets/index-yiAOvCBq.js +1 -0
- langflow/frontend/assets/index-zAQjZrBN.js +1 -0
- langflow/frontend/assets/indian-rupee-B3ACSI0U.js +6 -0
- langflow/frontend/assets/infinity-BjaT_Nar.js +6 -0
- langflow/frontend/assets/info-C_4sQg1i.js +6 -0
- langflow/frontend/assets/inspection-panel-C4PbJIOr.js +6 -0
- langflow/frontend/assets/instagram-CW4-mLnt.js +6 -0
- langflow/frontend/assets/italic-D0HUleTC.js +6 -0
- langflow/frontend/assets/iteration-ccw-CZuY3YHW.js +6 -0
- langflow/frontend/assets/iteration-cw-BQeLmzLd.js +6 -0
- langflow/frontend/assets/japanese-yen-DvlYSeXj.js +6 -0
- langflow/frontend/assets/joystick-D_eJ3Uav.js +6 -0
- langflow/frontend/assets/kanban-CFLKDiSy.js +6 -0
- langflow/frontend/assets/key-eqUcHnAT.js +6 -0
- langflow/frontend/assets/key-round-BcITqjNq.js +6 -0
- langflow/frontend/assets/key-square-D690124e.js +6 -0
- langflow/frontend/assets/keyboard-C6_bwPYy.js +6 -0
- langflow/frontend/assets/keyboard-music-C0Fcu-KG.js +6 -0
- langflow/frontend/assets/keyboard-off-D41o3c0N.js +6 -0
- langflow/frontend/assets/lamp-DfHmAGB9.js +6 -0
- langflow/frontend/assets/lamp-ceiling-6Eyrr1Ri.js +6 -0
- langflow/frontend/assets/lamp-desk-MjLMgs0z.js +6 -0
- langflow/frontend/assets/lamp-floor-gU32Iha8.js +6 -0
- langflow/frontend/assets/lamp-wall-down-DPOpAkew.js +6 -0
- langflow/frontend/assets/lamp-wall-up-BCD425DD.js +6 -0
- langflow/frontend/assets/land-plot-C2NzE0U9.js +6 -0
- langflow/frontend/assets/landmark-CDyv1Eh2.js +6 -0
- langflow/frontend/assets/languages-IWG589by.js +6 -0
- langflow/frontend/assets/laptop-DSEOjZve.js +6 -0
- langflow/frontend/assets/laptop-minimal-B8melEfL.js +6 -0
- langflow/frontend/assets/laptop-minimal-check-DkeKVLIE.js +6 -0
- langflow/frontend/assets/lasso-CcUOeSZ_.js +6 -0
- langflow/frontend/assets/lasso-select-DZb1R4yK.js +6 -0
- langflow/frontend/assets/laugh-Cl7Hf5Cn.js +6 -0
- langflow/frontend/assets/layers-2-BwDHsal5.js +6 -0
- langflow/frontend/assets/layers-sv1rQQ4U.js +6 -0
- langflow/frontend/assets/layout-dashboard-CbddX9HO.js +6 -0
- langflow/frontend/assets/layout-grid-DnXeqy0p.js +6 -0
- langflow/frontend/assets/layout-list-CkApZQBY.js +6 -0
- langflow/frontend/assets/layout-panel-left-B2xidzFL.js +6 -0
- langflow/frontend/assets/layout-panel-top-1AYhf_pQ.js +6 -0
- langflow/frontend/assets/layout-template-tKncZoJu.js +6 -0
- langflow/frontend/assets/lazyIconImports-C3wl5bXZ.js +2 -0
- langflow/frontend/assets/leaf-C7p98qZu.js +6 -0
- langflow/frontend/assets/leafy-green-Cb59hHEP.js +6 -0
- langflow/frontend/assets/lectern-Dhya3VoP.js +6 -0
- langflow/frontend/assets/letter-text-CqHrF8N9.js +6 -0
- langflow/frontend/assets/library-CgvNn5wi.js +6 -0
- langflow/frontend/assets/library-big-DzZOC8u-.js +6 -0
- langflow/frontend/assets/life-buoy-BpWKvpuk.js +6 -0
- langflow/frontend/assets/ligature-B_O3VQSn.js +6 -0
- langflow/frontend/assets/lightbulb-Cn4cLfNo.js +6 -0
- langflow/frontend/assets/lightbulb-off-CW8H42OP.js +6 -0
- langflow/frontend/assets/link-2-BzkfqfqZ.js +6 -0
- langflow/frontend/assets/link-2-off-C4WMvyff.js +6 -0
- langflow/frontend/assets/link-BsqGHKWq.js +6 -0
- langflow/frontend/assets/linkedin-CllXoryB.js +6 -0
- langflow/frontend/assets/list-Cy79Mh3X.js +6 -0
- langflow/frontend/assets/list-check-D2NFN0qm.js +6 -0
- langflow/frontend/assets/list-checks-BpNZHWpu.js +6 -0
- langflow/frontend/assets/list-collapse-BaJzw8ip.js +6 -0
- langflow/frontend/assets/list-end-B1nm1hV0.js +6 -0
- langflow/frontend/assets/list-filter-DjAohtKm.js +6 -0
- langflow/frontend/assets/list-filter-plus-CiaW1SGu.js +6 -0
- langflow/frontend/assets/list-minus-_HIJpxKC.js +6 -0
- langflow/frontend/assets/list-music-ePeBU2Q4.js +6 -0
- langflow/frontend/assets/list-ordered-BpaGEgKh.js +6 -0
- langflow/frontend/assets/list-plus-CJ2XzvhO.js +6 -0
- langflow/frontend/assets/list-restart-DTZoGRN3.js +6 -0
- langflow/frontend/assets/list-start-B98STUFc.js +6 -0
- langflow/frontend/assets/list-todo-BsigAYL5.js +6 -0
- langflow/frontend/assets/list-tree-BaQ3O9Jh.js +6 -0
- langflow/frontend/assets/list-video-B0FP7bp-.js +6 -0
- langflow/frontend/assets/list-x-DvrZHIVC.js +6 -0
- langflow/frontend/assets/loader-BnP3yLmJ.js +6 -0
- langflow/frontend/assets/loader-circle-CvcdTWo9.js +6 -0
- langflow/frontend/assets/loader-pinwheel-2TsvfCWv.js +6 -0
- langflow/frontend/assets/locate-BAYspUyp.js +6 -0
- langflow/frontend/assets/locate-fixed-CSoQIE-L.js +6 -0
- langflow/frontend/assets/locate-off-D2IgSUwu.js +6 -0
- langflow/frontend/assets/location-edit-C2lhCM-t.js +6 -0
- langflow/frontend/assets/lock-CtB8GCWL.js +6 -0
- langflow/frontend/assets/lock-keyhole-DZ93PX4W.js +6 -0
- langflow/frontend/assets/lock-keyhole-open-LuR1f3n3.js +6 -0
- langflow/frontend/assets/lock-open-BEhXDBmh.js +6 -0
- langflow/frontend/assets/log-in-D23ikCC9.js +6 -0
- langflow/frontend/assets/log-out-SSxcPiQC.js +6 -0
- langflow/frontend/assets/logs-DeilB2cI.js +6 -0
- langflow/frontend/assets/lollipop-BuY_5kul.js +6 -0
- langflow/frontend/assets/luggage-NNOa6u1V.js +6 -0
- langflow/frontend/assets/magnet--jLk2TXE.js +6 -0
- langflow/frontend/assets/mail--MWU3jFp.js +6 -0
- langflow/frontend/assets/mail-check-DRkL9Pvb.js +6 -0
- langflow/frontend/assets/mail-minus-DjgHoIou.js +6 -0
- langflow/frontend/assets/mail-open-BGijjJyJ.js +6 -0
- langflow/frontend/assets/mail-plus-BdU2Rcki.js +6 -0
- langflow/frontend/assets/mail-question-NGaZmqT4.js +6 -0
- langflow/frontend/assets/mail-search-eMExj1Xv.js +6 -0
- langflow/frontend/assets/mail-warning-CLMjLMzH.js +6 -0
- langflow/frontend/assets/mail-x-G56Z_Ph6.js +6 -0
- langflow/frontend/assets/mailbox-C6rJAiuW.js +6 -0
- langflow/frontend/assets/mails-CHUGtG6Y.js +6 -0
- langflow/frontend/assets/map-Cnbvxa4K.js +6 -0
- langflow/frontend/assets/map-pin-C7FipZ77.js +6 -0
- langflow/frontend/assets/map-pin-check-D7dQ78Tv.js +6 -0
- langflow/frontend/assets/map-pin-check-inside-70dfRkL0.js +6 -0
- langflow/frontend/assets/map-pin-house-Bb24SyYq.js +6 -0
- langflow/frontend/assets/map-pin-minus-C4fuIJTY.js +6 -0
- langflow/frontend/assets/map-pin-minus-inside-Dn5eZGVG.js +6 -0
- langflow/frontend/assets/map-pin-off-BN54eoO4.js +6 -0
- langflow/frontend/assets/map-pin-plus-CTxd2RrK.js +6 -0
- langflow/frontend/assets/map-pin-plus-inside-B-h2nsEh.js +6 -0
- langflow/frontend/assets/map-pin-x-inside-CNznOhU_.js +6 -0
- langflow/frontend/assets/map-pin-x-wiwyj3yH.js +6 -0
- langflow/frontend/assets/map-pinned-BJwHIgLB.js +6 -0
- langflow/frontend/assets/map-plus-Dhoah-cE.js +6 -0
- langflow/frontend/assets/mars-B70dA_LT.js +6 -0
- langflow/frontend/assets/mars-stroke-DKG_ywte.js +6 -0
- langflow/frontend/assets/martini-Cqv8gimC.js +6 -0
- langflow/frontend/assets/maximize-2-C1igL1q5.js +6 -0
- langflow/frontend/assets/maximize-CQkvcNpQ.js +6 -0
- langflow/frontend/assets/medal-Bur2kLwn.js +6 -0
- langflow/frontend/assets/megaphone-DaXGZiDc.js +6 -0
- langflow/frontend/assets/megaphone-off-DG0Js7FK.js +6 -0
- langflow/frontend/assets/meh-CwsiXX4p.js +6 -0
- langflow/frontend/assets/memory-stick-D_jxVacV.js +6 -0
- langflow/frontend/assets/menu-C6TiO48G.js +6 -0
- langflow/frontend/assets/merge-D5QbDbpp.js +6 -0
- langflow/frontend/assets/message-circle-code-BVBWhUYl.js +6 -0
- langflow/frontend/assets/message-circle-dashed-DUoAFkqu.js +6 -0
- langflow/frontend/assets/message-circle-heart-BnD97cNc.js +6 -0
- langflow/frontend/assets/message-circle-kRAhSeht.js +6 -0
- langflow/frontend/assets/message-circle-more-CwbFsy5X.js +6 -0
- langflow/frontend/assets/message-circle-off-D-vaVv9l.js +6 -0
- langflow/frontend/assets/message-circle-plus-IeIQRqsO.js +6 -0
- langflow/frontend/assets/message-circle-question-DeXpy2Mv.js +6 -0
- langflow/frontend/assets/message-circle-reply-DqMS0daX.js +6 -0
- langflow/frontend/assets/message-circle-warning-9wjhToar.js +6 -0
- langflow/frontend/assets/message-circle-x-BT6xSiRx.js +6 -0
- langflow/frontend/assets/message-square-BzpxSLUU.js +6 -0
- langflow/frontend/assets/message-square-code-ppzhw6rS.js +6 -0
- langflow/frontend/assets/message-square-dashed-DbUk38Vm.js +6 -0
- langflow/frontend/assets/message-square-diff-DibjMtrm.js +6 -0
- langflow/frontend/assets/message-square-dot-u8YXxpfd.js +6 -0
- langflow/frontend/assets/message-square-heart-CHLvlK5X.js +6 -0
- langflow/frontend/assets/message-square-lock-t0v_NGXt.js +6 -0
- langflow/frontend/assets/message-square-more-COAY7_v8.js +6 -0
- langflow/frontend/assets/message-square-off-Xna2XHrq.js +6 -0
- langflow/frontend/assets/message-square-plus-BlXa6aGQ.js +6 -0
- langflow/frontend/assets/message-square-quote-GayRHsYb.js +6 -0
- langflow/frontend/assets/message-square-reply-CQN54RIX.js +6 -0
- langflow/frontend/assets/message-square-share-D9gwDXBd.js +6 -0
- langflow/frontend/assets/message-square-text-C2Rp8V9U.js +6 -0
- langflow/frontend/assets/message-square-warning-BoztY8nL.js +6 -0
- langflow/frontend/assets/message-square-x-B--bhbpJ.js +6 -0
- langflow/frontend/assets/messages-square-DBjmfl-B.js +6 -0
- langflow/frontend/assets/mic-CQnL-aF_.js +6 -0
- langflow/frontend/assets/mic-off-Ca_8pXFG.js +6 -0
- langflow/frontend/assets/mic-vocal-BS4RongF.js +6 -0
- langflow/frontend/assets/microchip-CwlLTvkE.js +6 -0
- langflow/frontend/assets/microscope-D13VXh_5.js +6 -0
- langflow/frontend/assets/microwave-M1-UglaO.js +6 -0
- langflow/frontend/assets/milestone-ECvAmMai.js +6 -0
- langflow/frontend/assets/milk-C1CRZPvN.js +6 -0
- langflow/frontend/assets/milk-off-CnWAipBy.js +6 -0
- langflow/frontend/assets/minimize-2-DvL1kRk4.js +6 -0
- langflow/frontend/assets/minimize-BZJ1HjCB.js +6 -0
- langflow/frontend/assets/monitor-CC9HlX74.js +6 -0
- langflow/frontend/assets/monitor-check-BAebuo-s.js +6 -0
- langflow/frontend/assets/monitor-cog-DGsL78Zt.js +6 -0
- langflow/frontend/assets/monitor-dot-DjtYM6RF.js +6 -0
- langflow/frontend/assets/monitor-down-QdzkdIbG.js +6 -0
- langflow/frontend/assets/monitor-off-DXuwiDyq.js +6 -0
- langflow/frontend/assets/monitor-pause-DWiGtTfW.js +6 -0
- langflow/frontend/assets/monitor-play-C6xRuv4V.js +6 -0
- langflow/frontend/assets/monitor-smartphone-CLEk0PbP.js +6 -0
- langflow/frontend/assets/monitor-speaker-BKbpvTCD.js +6 -0
- langflow/frontend/assets/monitor-stop-PZLuI44t.js +6 -0
- langflow/frontend/assets/monitor-up-Bu2Wlgia.js +6 -0
- langflow/frontend/assets/monitor-x-DBpFAz6b.js +6 -0
- langflow/frontend/assets/moon-CejdSRg0.js +6 -0
- langflow/frontend/assets/moon-star-DiR_dFdv.js +6 -0
- langflow/frontend/assets/mountain-CnwrOs19.js +6 -0
- langflow/frontend/assets/mountain-snow-DlfnSL8y.js +6 -0
- langflow/frontend/assets/mouse-QZsxmoxE.js +6 -0
- langflow/frontend/assets/mouse-off-ynmgleTA.js +6 -0
- langflow/frontend/assets/mouse-pointer-2-BWQa7-9H.js +6 -0
- langflow/frontend/assets/mouse-pointer-BnPRzOug.js +6 -0
- langflow/frontend/assets/mouse-pointer-ban-C5QDaLxF.js +6 -0
- langflow/frontend/assets/mouse-pointer-click-DhZqGIB_.js +6 -0
- langflow/frontend/assets/move-3d-CnIz-5zp.js +6 -0
- langflow/frontend/assets/move-B2HBeoAN.js +6 -0
- langflow/frontend/assets/move-diagonal-2-MgutMo8z.js +6 -0
- langflow/frontend/assets/move-diagonal-CvGKJgrY.js +6 -0
- langflow/frontend/assets/move-down-4aDpRLDM.js +6 -0
- langflow/frontend/assets/move-down-left-C-IFzzAV.js +6 -0
- langflow/frontend/assets/move-down-right-MyqEr7nP.js +6 -0
- langflow/frontend/assets/move-horizontal-CwEypXmH.js +6 -0
- langflow/frontend/assets/move-left-DgSxRVjZ.js +6 -0
- langflow/frontend/assets/move-right-CjI7YHzj.js +6 -0
- langflow/frontend/assets/move-up-BHbe90vg.js +6 -0
- langflow/frontend/assets/move-up-left-BAhnXeqv.js +6 -0
- langflow/frontend/assets/move-up-right-DmuBLg8t.js +6 -0
- langflow/frontend/assets/move-vertical-DjSTC4hZ.js +6 -0
- langflow/frontend/assets/music-2-CDYmLW9U.js +6 -0
- langflow/frontend/assets/music-3-z4LjXJkt.js +6 -0
- langflow/frontend/assets/music-4-BLZaL8Ze.js +6 -0
- langflow/frontend/assets/music-jMgtpLrT.js +6 -0
- langflow/frontend/assets/navigation-2-C3Kvr0vZ.js +6 -0
- langflow/frontend/assets/navigation-2-off-BssKaC0m.js +6 -0
- langflow/frontend/assets/navigation-B-iRU1Wn.js +6 -0
- langflow/frontend/assets/navigation-off-BfduMLzA.js +6 -0
- langflow/frontend/assets/network-D-6-gk3L.js +6 -0
- langflow/frontend/assets/newspaper-CXOIBz4q.js +6 -0
- langflow/frontend/assets/nfc-QA9x8yXL.js +6 -0
- langflow/frontend/assets/non-binary-rRXzo5lG.js +6 -0
- langflow/frontend/assets/notebook-ByIL_OLT.js +6 -0
- langflow/frontend/assets/notebook-pen-Dkm6bhYD.js +6 -0
- langflow/frontend/assets/notebook-tabs-CygLyHJa.js +6 -0
- langflow/frontend/assets/notebook-text-D_ZfN2gV.js +6 -0
- langflow/frontend/assets/notepad-text-BRUJ6Zbi.js +6 -0
- langflow/frontend/assets/notepad-text-dashed-C3fsbGu6.js +6 -0
- langflow/frontend/assets/nut-off-RK4lYJOo.js +6 -0
- langflow/frontend/assets/nut-q2ChjOCU.js +6 -0
- langflow/frontend/assets/octagon-CbvDnd_9.js +6 -0
- langflow/frontend/assets/octagon-alert-BtMDs8yV.js +6 -0
- langflow/frontend/assets/octagon-minus-2EViu5Of.js +6 -0
- langflow/frontend/assets/octagon-pause-TzWJNSMY.js +6 -0
- langflow/frontend/assets/octagon-x-D6fJbT3f.js +6 -0
- langflow/frontend/assets/omega-9X3umeGh.js +6 -0
- langflow/frontend/assets/option-BejIchPo.js +6 -0
- langflow/frontend/assets/orbit-D-SCIMLI.js +6 -0
- langflow/frontend/assets/origami-C4rH8C5q.js +6 -0
- langflow/frontend/assets/package-2-CKxOIcTQ.js +6 -0
- langflow/frontend/assets/package-DeRWTkvY.js +6 -0
- langflow/frontend/assets/package-check-CarDm8fB.js +6 -0
- langflow/frontend/assets/package-minus-DzuB6mZS.js +6 -0
- langflow/frontend/assets/package-open-BxKSlktR.js +6 -0
- langflow/frontend/assets/package-plus-Cbxt2okz.js +6 -0
- langflow/frontend/assets/package-search-BNhsL2X8.js +6 -0
- langflow/frontend/assets/package-x-CR5FzdNg.js +6 -0
- langflow/frontend/assets/paint-bucket-BWbC4Ldd.js +6 -0
- langflow/frontend/assets/paint-roller-CHnc_JJF.js +6 -0
- langflow/frontend/assets/paintbrush-CKvnCwIQ.js +6 -0
- langflow/frontend/assets/paintbrush-vertical-IA5weqsU.js +6 -0
- langflow/frontend/assets/palette-DhHNo_ol.js +6 -0
- langflow/frontend/assets/panel-bottom-DPuhKMOA.js +6 -0
- langflow/frontend/assets/panel-bottom-close-grhQwSst.js +6 -0
- langflow/frontend/assets/panel-bottom-dashed-CZV54W5k.js +6 -0
- langflow/frontend/assets/panel-bottom-open-BifwY4Lf.js +6 -0
- langflow/frontend/assets/panel-left-close-CKgaYTaI.js +6 -0
- langflow/frontend/assets/panel-left-dashed-DpMZzsnF.js +6 -0
- langflow/frontend/assets/panel-left-open-BhXl48k7.js +6 -0
- langflow/frontend/assets/panel-right-close-BBRIGnQG.js +6 -0
- langflow/frontend/assets/panel-right-dashed-CEZvZaHP.js +6 -0
- langflow/frontend/assets/panel-right-open-Dp2X-O9d.js +6 -0
- langflow/frontend/assets/panel-right-yINENJzu.js +6 -0
- langflow/frontend/assets/panel-top-CohnD-g2.js +6 -0
- langflow/frontend/assets/panel-top-close-saa1Cfpc.js +6 -0
- langflow/frontend/assets/panel-top-dashed-B0Q8XKOe.js +6 -0
- langflow/frontend/assets/panel-top-open-mjMwTDTr.js +6 -0
- langflow/frontend/assets/panels-left-bottom-C4vhRtF2.js +6 -0
- langflow/frontend/assets/panels-right-bottom-Ct3Q3i4c.js +6 -0
- langflow/frontend/assets/panels-top-left-BZim9CZk.js +6 -0
- langflow/frontend/assets/paperclip-DhS_df_a.js +6 -0
- langflow/frontend/assets/parentheses-D_VrqtDd.js +6 -0
- langflow/frontend/assets/parking-meter-B8mfWAMJ.js +6 -0
- langflow/frontend/assets/party-popper-_Jd7HWAH.js +6 -0
- langflow/frontend/assets/pause-CvN3j7P3.js +6 -0
- langflow/frontend/assets/paw-print-BoDVhUn9.js +6 -0
- langflow/frontend/assets/pc-case-BOedO7oP.js +6 -0
- langflow/frontend/assets/pen-Bb5cFa9z.js +6 -0
- langflow/frontend/assets/pen-line-CE5NIORO.js +6 -0
- langflow/frontend/assets/pen-off-CRRU1jRB.js +6 -0
- langflow/frontend/assets/pen-tool-Bgny3hr-.js +6 -0
- langflow/frontend/assets/pencil-88A3g2KM.js +6 -0
- langflow/frontend/assets/pencil-line-gz8lz7IB.js +6 -0
- langflow/frontend/assets/pencil-off-DL1_oqwg.js +6 -0
- langflow/frontend/assets/pencil-ruler-sIgUj_2K.js +6 -0
- langflow/frontend/assets/pentagon-CA8nUVQo.js +6 -0
- langflow/frontend/assets/percent-C58Iq23e.js +6 -0
- langflow/frontend/assets/person-standing-Cc29nv6A.js +6 -0
- langflow/frontend/assets/philippine-peso-D3XVXmOd.js +6 -0
- langflow/frontend/assets/phone-call-CMfX9NkA.js +6 -0
- langflow/frontend/assets/phone-forwarded-DG8QKdrm.js +6 -0
- langflow/frontend/assets/phone-incoming-B4OfBZC6.js +6 -0
- langflow/frontend/assets/phone-missed-C5JWr11_.js +6 -0
- langflow/frontend/assets/phone-off-Bmf4z0cq.js +6 -0
- langflow/frontend/assets/phone-outgoing-B6TUdLQl.js +6 -0
- langflow/frontend/assets/phone-r9xSJ7jK.js +6 -0
- langflow/frontend/assets/pi-D1NYv__l.js +6 -0
- langflow/frontend/assets/piano-CLKlFT3Y.js +6 -0
- langflow/frontend/assets/pickaxe-CMkjhW01.js +6 -0
- langflow/frontend/assets/picture-in-picture-2-bjxwuQvC.js +6 -0
- langflow/frontend/assets/picture-in-picture-BPYefNhu.js +6 -0
- langflow/frontend/assets/piggy-bank-DaFKxNzw.js +6 -0
- langflow/frontend/assets/pilcrow-DHS_dCx0.js +6 -0
- langflow/frontend/assets/pilcrow-left-CChL_Ibd.js +6 -0
- langflow/frontend/assets/pilcrow-right-Cy2Tm7mD.js +6 -0
- langflow/frontend/assets/pill-BmrdKKGA.js +6 -0
- langflow/frontend/assets/pill-bottle-BO02lE1p.js +6 -0
- langflow/frontend/assets/pin-Dq_rCN8O.js +6 -0
- langflow/frontend/assets/pin-off-j0otDRfJ.js +6 -0
- langflow/frontend/assets/pipette-C30geg2g.js +6 -0
- langflow/frontend/assets/pizza-B1jm4a75.js +6 -0
- langflow/frontend/assets/plane-B3a2jNrL.js +6 -0
- langflow/frontend/assets/plane-landing-BRTRb3Ia.js +6 -0
- langflow/frontend/assets/plane-takeoff-Cf3m__Cl.js +6 -0
- langflow/frontend/assets/play-9BEvQ5l_.js +6 -0
- langflow/frontend/assets/plug-2-CcEC6sdo.js +6 -0
- langflow/frontend/assets/plug-DHgOBJFb.js +6 -0
- langflow/frontend/assets/plug-zap-u16niZlK.js +6 -0
- langflow/frontend/assets/pocket-D0xwfgHB.js +6 -0
- langflow/frontend/assets/pocket-knife-D6DMyASx.js +6 -0
- langflow/frontend/assets/podcast-CZN7acOv.js +6 -0
- langflow/frontend/assets/pointer-CnvrvYAF.js +6 -0
- langflow/frontend/assets/pointer-off-C6mbKCUt.js +6 -0
- langflow/frontend/assets/popcorn-CQFQMDHA.js +6 -0
- langflow/frontend/assets/popsicle-DSWwOAYv.js +6 -0
- langflow/frontend/assets/pound-sterling-DT068KrY.js +6 -0
- langflow/frontend/assets/power-XaGTjFIw.js +6 -0
- langflow/frontend/assets/power-off-BlkgKEz-.js +6 -0
- langflow/frontend/assets/presentation-m1mG9HRz.js +6 -0
- langflow/frontend/assets/printer-CyhmuwOT.js +6 -0
- langflow/frontend/assets/printer-check-C-3ynoUq.js +6 -0
- langflow/frontend/assets/projector-0NE_L_77.js +6 -0
- langflow/frontend/assets/proportions-BeDkb6Sn.js +6 -0
- langflow/frontend/assets/puzzle-CBBAQX-m.js +6 -0
- langflow/frontend/assets/pyramid-CZJO-AiV.js +6 -0
- langflow/frontend/assets/qr-code-DMz8N1zB.js +6 -0
- langflow/frontend/assets/quote-DtZJ9UOV.js +6 -0
- langflow/frontend/assets/rabbit-BWN91Xj9.js +6 -0
- langflow/frontend/assets/radar-Cy_6JwJy.js +6 -0
- langflow/frontend/assets/radiation-D6NmwHi8.js +6 -0
- langflow/frontend/assets/radical-cK9rtriH.js +6 -0
- langflow/frontend/assets/radio-D9N7kSin.js +6 -0
- langflow/frontend/assets/radio-receiver-dkBTReIb.js +6 -0
- langflow/frontend/assets/radio-tower-B3bFPA8s.js +6 -0
- langflow/frontend/assets/radius-7fGT9Wlc.js +6 -0
- langflow/frontend/assets/rail-symbol-DJWPHxlA.js +6 -0
- langflow/frontend/assets/rainbow-Dn1a7RQk.js +6 -0
- langflow/frontend/assets/rat-zpAUB7tU.js +6 -0
- langflow/frontend/assets/ratio-DRXotwb7.js +6 -0
- langflow/frontend/assets/receipt-DXywHPnk.js +6 -0
- langflow/frontend/assets/receipt-cent-C1W8JSx5.js +6 -0
- langflow/frontend/assets/receipt-euro-PkkzyP6y.js +6 -0
- langflow/frontend/assets/receipt-indian-rupee-BV3fS9Oh.js +6 -0
- langflow/frontend/assets/receipt-japanese-yen-B7auL-JQ.js +6 -0
- langflow/frontend/assets/receipt-pound-sterling-DdUqKdOM.js +6 -0
- langflow/frontend/assets/receipt-russian-ruble-DfF48S_4.js +6 -0
- langflow/frontend/assets/receipt-swiss-franc-D5NZUUrc.js +6 -0
- langflow/frontend/assets/receipt-text-Cz39Vyi1.js +6 -0
- langflow/frontend/assets/rectangle-ellipsis-NqH_84tp.js +6 -0
- langflow/frontend/assets/rectangle-goggles-DPUPayMe.js +6 -0
- langflow/frontend/assets/rectangle-horizontal-xj_rg7Ph.js +6 -0
- langflow/frontend/assets/rectangle-vertical-CE_mc01M.js +6 -0
- langflow/frontend/assets/recycle-BTLJJsuI.js +6 -0
- langflow/frontend/assets/redo-2-CG7MWcyy.js +6 -0
- langflow/frontend/assets/redo-BwgHhJM3.js +6 -0
- langflow/frontend/assets/redo-dot-BOu3JHji.js +6 -0
- langflow/frontend/assets/refresh-ccw-WCZd6dY7.js +6 -0
- langflow/frontend/assets/refresh-ccw-dot-DZJQ5AfV.js +6 -0
- langflow/frontend/assets/refresh-cw-DobMdRQe.js +6 -0
- langflow/frontend/assets/refresh-cw-off-DxmiTXnv.js +6 -0
- langflow/frontend/assets/refrigerator-DMqUM03i.js +6 -0
- langflow/frontend/assets/regex-DF9nAQ-b.js +6 -0
- langflow/frontend/assets/remove-formatting-oYtClBk8.js +6 -0
- langflow/frontend/assets/repeat-1-nxqzuTGy.js +6 -0
- langflow/frontend/assets/repeat-2-D2rX0mYL.js +6 -0
- langflow/frontend/assets/repeat-BLB8LC6_.js +6 -0
- langflow/frontend/assets/replace-COYtyxo8.js +6 -0
- langflow/frontend/assets/replace-all-DqHKoNzs.js +6 -0
- langflow/frontend/assets/reply-DDApcgBy.js +6 -0
- langflow/frontend/assets/reply-all-CputKagO.js +6 -0
- langflow/frontend/assets/rewind-0nhveq0n.js +6 -0
- langflow/frontend/assets/ribbon-D-sKd2WS.js +6 -0
- langflow/frontend/assets/rocket-CH_C1brm.js +6 -0
- langflow/frontend/assets/rocking-chair-COZK6ysy.js +6 -0
- langflow/frontend/assets/roller-coaster-mXuSGI26.js +6 -0
- langflow/frontend/assets/rotate-3d-CKx8ahoO.js +6 -0
- langflow/frontend/assets/rotate-ccw-CrtL8fFc.js +6 -0
- langflow/frontend/assets/rotate-ccw-key-CPDeL_2S.js +6 -0
- langflow/frontend/assets/rotate-ccw-square-BPaTQ0NG.js +6 -0
- langflow/frontend/assets/rotate-cw-8hwbbLe0.js +6 -0
- langflow/frontend/assets/rotate-cw-square-Dq6J_3YY.js +6 -0
- langflow/frontend/assets/route-Cl5EW6-Q.js +6 -0
- langflow/frontend/assets/route-off-Nju9Fefd.js +6 -0
- langflow/frontend/assets/router-CIxSzpF5.js +6 -0
- langflow/frontend/assets/rows-2-C65qQQ9v.js +6 -0
- langflow/frontend/assets/rows-3-BmzcArLK.js +6 -0
- langflow/frontend/assets/rows-4-DCJoY0Mk.js +6 -0
- langflow/frontend/assets/rss-LkrAaJSy.js +6 -0
- langflow/frontend/assets/ruler-CSEbJyMz.js +6 -0
- langflow/frontend/assets/ruler-dimension-line-By0r7iKG.js +6 -0
- langflow/frontend/assets/russian-ruble-C_H5DuRV.js +6 -0
- langflow/frontend/assets/sailboat-9PmYU5pr.js +6 -0
- langflow/frontend/assets/salad-Cspe1x0i.js +6 -0
- langflow/frontend/assets/sandwich--zQiCurT.js +6 -0
- langflow/frontend/assets/satellite-4r0e6V-o.js +6 -0
- langflow/frontend/assets/satellite-dish-DBo_puPm.js +6 -0
- langflow/frontend/assets/saudi-riyal-DNFFhbHO.js +6 -0
- langflow/frontend/assets/save-B5yDudBN.js +6 -0
- langflow/frontend/assets/save-all-XrUoLTn3.js +6 -0
- langflow/frontend/assets/save-off-WgqsQVhG.js +6 -0
- langflow/frontend/assets/scale-3d-DUrt_HwK.js +6 -0
- langflow/frontend/assets/scale-LmVOp5IT.js +6 -0
- langflow/frontend/assets/scaling-Bj63dOPj.js +6 -0
- langflow/frontend/assets/scan-DP06q2y3.js +6 -0
- langflow/frontend/assets/scan-barcode-Bf5FWdyJ.js +6 -0
- langflow/frontend/assets/scan-eye-1A6Gg3_y.js +6 -0
- langflow/frontend/assets/scan-face-CB7pio8m.js +6 -0
- langflow/frontend/assets/scan-heart-Dy_zvHVj.js +6 -0
- langflow/frontend/assets/scan-line-DjtJuURl.js +6 -0
- langflow/frontend/assets/scan-qr-code-BPNdQ9h6.js +6 -0
- langflow/frontend/assets/scan-search-B6krGrP0.js +6 -0
- langflow/frontend/assets/scan-text-C9NcpXqY.js +6 -0
- langflow/frontend/assets/school-BHOjuwfg.js +6 -0
- langflow/frontend/assets/scissors-BJrUEZix.js +6 -0
- langflow/frontend/assets/scissors-line-dashed-BqOorE_P.js +6 -0
- langflow/frontend/assets/screen-share-BR0ZOdhS.js +6 -0
- langflow/frontend/assets/screen-share-off-C2FsOcyF.js +6 -0
- langflow/frontend/assets/scroll-ChOcSKxD.js +6 -0
- langflow/frontend/assets/scroll-text-BR3P5OXj.js +6 -0
- langflow/frontend/assets/search-check-CpXBePw9.js +6 -0
- langflow/frontend/assets/search-code-Sjr_toDv.js +6 -0
- langflow/frontend/assets/search-slash-B-01uine.js +6 -0
- langflow/frontend/assets/search-x-CkrjuWwO.js +6 -0
- langflow/frontend/assets/section-E-Tga60i.js +6 -0
- langflow/frontend/assets/send-DW6kCcUu.js +6 -0
- langflow/frontend/assets/send-horizontal-BqjeCmNV.js +6 -0
- langflow/frontend/assets/send-to-back-vyYJUcly.js +6 -0
- langflow/frontend/assets/separator-horizontal-DLeOBK3z.js +6 -0
- langflow/frontend/assets/separator-vertical-BRmadS81.js +6 -0
- langflow/frontend/assets/server-DQpWQymD.js +6 -0
- langflow/frontend/assets/server-cog-BCfkTCPi.js +6 -0
- langflow/frontend/assets/server-crash-CE1EBw45.js +6 -0
- langflow/frontend/assets/server-off-BwWllLGm.js +6 -0
- langflow/frontend/assets/settings-2-CNg1HKzP.js +6 -0
- langflow/frontend/assets/settings-dmJ_L0t7.js +6 -0
- langflow/frontend/assets/shapes-p09PREvM.js +6 -0
- langflow/frontend/assets/share-2-iSyDmKZM.js +6 -0
- langflow/frontend/assets/share-BuTgFEs_.js +6 -0
- langflow/frontend/assets/sheet-Ony7AA5E.js +6 -0
- langflow/frontend/assets/shell-B_0k2wSg.js +6 -0
- langflow/frontend/assets/shield-DDkmQ2fd.js +6 -0
- langflow/frontend/assets/shield-alert-BcU_qYh_.js +6 -0
- langflow/frontend/assets/shield-ban-D5_u22Cn.js +6 -0
- langflow/frontend/assets/shield-check-BG_Ha5ES.js +6 -0
- langflow/frontend/assets/shield-ellipsis-CcTK5Tpw.js +6 -0
- langflow/frontend/assets/shield-half-CXVYC62m.js +6 -0
- langflow/frontend/assets/shield-minus-CRuiFAkk.js +6 -0
- langflow/frontend/assets/shield-off-DtVLv84F.js +6 -0
- langflow/frontend/assets/shield-plus-C79uYd8J.js +6 -0
- langflow/frontend/assets/shield-question-Bx3-tGRD.js +6 -0
- langflow/frontend/assets/shield-user-Btbu2C7g.js +6 -0
- langflow/frontend/assets/shield-x-Bp4sa-Vu.js +6 -0
- langflow/frontend/assets/ship-BMaY_3EL.js +6 -0
- langflow/frontend/assets/ship-wheel-BoMfDmA5.js +6 -0
- langflow/frontend/assets/shirt-Ds6WqK_I.js +6 -0
- langflow/frontend/assets/shopping-bag-t_NKCusA.js +6 -0
- langflow/frontend/assets/shopping-basket-25fLiCJT.js +6 -0
- langflow/frontend/assets/shopping-cart-CsPC5of3.js +6 -0
- langflow/frontend/assets/shovel-BPRUX7t8.js +6 -0
- langflow/frontend/assets/shower-head-5GOt7smm.js +6 -0
- langflow/frontend/assets/shredder-BlK3Dihz.js +6 -0
- langflow/frontend/assets/shrimp-D8h6-ZhY.js +6 -0
- langflow/frontend/assets/shrink-nhzbcS_4.js +6 -0
- langflow/frontend/assets/shrub-i3w_x8Wb.js +6 -0
- langflow/frontend/assets/shuffle-CwlxR-SN.js +6 -0
- langflow/frontend/assets/sigma-EwwYk9Xw.js +6 -0
- langflow/frontend/assets/signal-BMa2YwXY.js +6 -0
- langflow/frontend/assets/signal-high-B6E7OiKg.js +6 -0
- langflow/frontend/assets/signal-low-BmlKRzXu.js +6 -0
- langflow/frontend/assets/signal-medium-BWCJyyij.js +6 -0
- langflow/frontend/assets/signal-zero-DBi66i5s.js +6 -0
- langflow/frontend/assets/signature-BnENmnRI.js +6 -0
- langflow/frontend/assets/signpost-CXdeUCIE.js +6 -0
- langflow/frontend/assets/signpost-big-BcCWJixo.js +6 -0
- langflow/frontend/assets/siren-Df6oWSlZ.js +6 -0
- langflow/frontend/assets/skip-back-CfM5bdaQ.js +6 -0
- langflow/frontend/assets/skip-forward-BAtuvo_W.js +6 -0
- langflow/frontend/assets/skull-CdMDqQJ8.js +6 -0
- langflow/frontend/assets/slack-BSJVJ_95.js +6 -0
- langflow/frontend/assets/slash-D1COIDPE.js +6 -0
- langflow/frontend/assets/slice-Ds6SLAQn.js +6 -0
- langflow/frontend/assets/sliders-horizontal-CGBell0Q.js +6 -0
- langflow/frontend/assets/sliders-vertical-CfpTbgxs.js +6 -0
- langflow/frontend/assets/smartphone-BJ2KObJ1.js +6 -0
- langflow/frontend/assets/smartphone-charging-Bn5b_I9O.js +6 -0
- langflow/frontend/assets/smartphone-nfc-viqrNdqc.js +6 -0
- langflow/frontend/assets/smile-V_eepDHa.js +6 -0
- langflow/frontend/assets/smile-plus-CQmD_Vdk.js +6 -0
- langflow/frontend/assets/snail-DdtIP1Ge.js +6 -0
- langflow/frontend/assets/snowflake-p7o4ZPGp.js +6 -0
- langflow/frontend/assets/sofa-C4uPAy--.js +6 -0
- langflow/frontend/assets/soup-CoLZLodi.js +6 -0
- langflow/frontend/assets/space-C9rChjhF.js +6 -0
- langflow/frontend/assets/spade-gSEhVYCS.js +6 -0
- langflow/frontend/assets/sparkle-DU1krlOv.js +6 -0
- langflow/frontend/assets/sparkles-DJXCjgDV.js +6 -0
- langflow/frontend/assets/speaker-DBzBxCZX.js +6 -0
- langflow/frontend/assets/speech-C23WTEsJ.js +6 -0
- langflow/frontend/assets/spell-check-2-Opd8Gl_y.js +6 -0
- langflow/frontend/assets/spell-check-CKywLLrE.js +6 -0
- langflow/frontend/assets/spline-Bl5h1yGd.js +6 -0
- langflow/frontend/assets/spline-pointer-gAggMGoK.js +6 -0
- langflow/frontend/assets/split-zAgOukN_.js +6 -0
- langflow/frontend/assets/spray-can-u9Wl1Y8K.js +6 -0
- langflow/frontend/assets/sprout-B50lTW3Y.js +6 -0
- langflow/frontend/assets/square-activity-CCiGaX2R.js +6 -0
- langflow/frontend/assets/square-arrow-down-AT0i3Bri.js +6 -0
- langflow/frontend/assets/square-arrow-down-left-7q-4f-TD.js +6 -0
- langflow/frontend/assets/square-arrow-down-right-l3yvYoQf.js +6 -0
- langflow/frontend/assets/square-arrow-left-Bl6OicZ8.js +6 -0
- langflow/frontend/assets/square-arrow-out-down-left-m6UYyGlt.js +6 -0
- langflow/frontend/assets/square-arrow-out-down-right-CwYTAYC0.js +6 -0
- langflow/frontend/assets/square-arrow-out-up-left-gb2JQ-VK.js +6 -0
- langflow/frontend/assets/square-arrow-out-up-right-DblR725n.js +6 -0
- langflow/frontend/assets/square-arrow-right-zkX68M79.js +6 -0
- langflow/frontend/assets/square-arrow-up-left-DYlPLw6q.js +6 -0
- langflow/frontend/assets/square-arrow-up-p09UTrnH.js +6 -0
- langflow/frontend/assets/square-arrow-up-right-DVGt_p0s.js +6 -0
- langflow/frontend/assets/square-asterisk-B8ngu5u2.js +6 -0
- langflow/frontend/assets/square-bottom-dashed-scissors-D4JN0PuW.js +6 -0
- langflow/frontend/assets/square-chart-gantt-BxmSJOp-.js +6 -0
- langflow/frontend/assets/square-check-D6JUeqcK.js +6 -0
- langflow/frontend/assets/square-check-big-Cz8wzlyV.js +6 -0
- langflow/frontend/assets/square-chevron-down-DSQoWrrI.js +6 -0
- langflow/frontend/assets/square-chevron-left-BmYhVq6D.js +6 -0
- langflow/frontend/assets/square-chevron-right-BBSiGf9O.js +6 -0
- langflow/frontend/assets/square-chevron-up-CrNa2uJD.js +6 -0
- langflow/frontend/assets/square-code-DidOazIW.js +6 -0
- langflow/frontend/assets/square-dashed-CsF-4j7w.js +6 -0
- langflow/frontend/assets/square-dashed-bottom-B4Cyvp2q.js +6 -0
- langflow/frontend/assets/square-dashed-bottom-code-DrZ7AlqK.js +6 -0
- langflow/frontend/assets/square-dashed-kanban-BCDqQGLI.js +6 -0
- langflow/frontend/assets/square-dashed-mouse-pointer-ep4CT5b2.js +6 -0
- langflow/frontend/assets/square-divide-F3ly7eJv.js +6 -0
- langflow/frontend/assets/square-dot-BQbPIjWM.js +6 -0
- langflow/frontend/assets/square-equal-VKYGGQG1.js +6 -0
- langflow/frontend/assets/square-fEglh52c.js +6 -0
- langflow/frontend/assets/square-function-D5PzV4Sb.js +6 -0
- langflow/frontend/assets/square-kanban-BA1YAq7B.js +6 -0
- langflow/frontend/assets/square-library-BbRpSxPF.js +6 -0
- langflow/frontend/assets/square-m-DMP1YwKS.js +6 -0
- langflow/frontend/assets/square-menu-CL01_TXY.js +6 -0
- langflow/frontend/assets/square-minus-CdELu0mZ.js +6 -0
- langflow/frontend/assets/square-mouse-pointer-1MqZLWi5.js +6 -0
- langflow/frontend/assets/square-parking-DWWQzkuL.js +6 -0
- langflow/frontend/assets/square-parking-off-CK3w1kkQ.js +6 -0
- langflow/frontend/assets/square-pen-DBogtdBL.js +6 -0
- langflow/frontend/assets/square-percent-BGBiMXHv.js +6 -0
- langflow/frontend/assets/square-pi-ZX1fyfyq.js +6 -0
- langflow/frontend/assets/square-pilcrow-DqPSSwme.js +6 -0
- langflow/frontend/assets/square-play-z9dOT-ZS.js +6 -0
- langflow/frontend/assets/square-plus-hjFB2IY5.js +6 -0
- langflow/frontend/assets/square-power-BBDy-M3u.js +6 -0
- langflow/frontend/assets/square-radical-CmdMw5T-.js +6 -0
- langflow/frontend/assets/square-round-corner-X0hd3ta7.js +6 -0
- langflow/frontend/assets/square-scissors-thrE2sNO.js +6 -0
- langflow/frontend/assets/square-sigma-BmaEKpnj.js +6 -0
- langflow/frontend/assets/square-slash-x4H0fw6m.js +6 -0
- langflow/frontend/assets/square-split-horizontal-B_bwnveR.js +6 -0
- langflow/frontend/assets/square-split-vertical-CV8Uej0u.js +6 -0
- langflow/frontend/assets/square-square-CdBuhBHs.js +6 -0
- langflow/frontend/assets/square-stack-C8pAF-lQ.js +6 -0
- langflow/frontend/assets/square-terminal-B3l6D1OE.js +6 -0
- langflow/frontend/assets/square-user-hcHmb3zS.js +6 -0
- langflow/frontend/assets/square-user-round-Cq31YWyW.js +6 -0
- langflow/frontend/assets/square-x-KQzfhsuH.js +6 -0
- langflow/frontend/assets/squares-exclude-D5LIGfvc.js +6 -0
- langflow/frontend/assets/squares-intersect-BZ0jM4NA.js +6 -0
- langflow/frontend/assets/squares-subtract-CT1Klgeb.js +6 -0
- langflow/frontend/assets/squares-unite-D3_CmZhp.js +6 -0
- langflow/frontend/assets/squircle-DaSjoPEC.js +6 -0
- langflow/frontend/assets/squirrel-4NalZ0F8.js +6 -0
- langflow/frontend/assets/stamp-ugZbX2nh.js +6 -0
- langflow/frontend/assets/star-Bxjo2G9a.js +6 -0
- langflow/frontend/assets/star-half-BnM9XiK2.js +6 -0
- langflow/frontend/assets/star-off-B7ymRhH3.js +6 -0
- langflow/frontend/assets/step-back-BfahAxMN.js +6 -0
- langflow/frontend/assets/step-forward-C80Ocm8J.js +6 -0
- langflow/frontend/assets/stethoscope-DIFrJRsT.js +6 -0
- langflow/frontend/assets/sticker-CCldrzd3.js +6 -0
- langflow/frontend/assets/sticky-note-ODRroxd7.js +6 -0
- langflow/frontend/assets/store-DF8mXmv2.js +6 -0
- langflow/frontend/assets/stretch-horizontal-BzStw9MF.js +6 -0
- langflow/frontend/assets/stretch-vertical-BJEucSQq.js +6 -0
- langflow/frontend/assets/strikethrough-BLlF5WWs.js +6 -0
- langflow/frontend/assets/subscript-CEh_4_73.js +6 -0
- langflow/frontend/assets/sun-CxAtusMS.js +6 -0
- langflow/frontend/assets/sun-dim-BWWcujZ4.js +6 -0
- langflow/frontend/assets/sun-medium-Dvm6SY9M.js +6 -0
- langflow/frontend/assets/sun-moon-CAEKEMXa.js +6 -0
- langflow/frontend/assets/sun-snow-B1asH-mR.js +6 -0
- langflow/frontend/assets/sunrise-3TDtcUun.js +6 -0
- langflow/frontend/assets/sunset-CWcQj9t4.js +6 -0
- langflow/frontend/assets/superscript-BHMIexFt.js +6 -0
- langflow/frontend/assets/swatch-book-Cxj_Opyr.js +6 -0
- langflow/frontend/assets/swiss-franc-Bn--g5S9.js +6 -0
- langflow/frontend/assets/switch-camera-Bq60bFdm.js +6 -0
- langflow/frontend/assets/sword-CzsWNZcs.js +6 -0
- langflow/frontend/assets/swords-Uv21UDzh.js +6 -0
- langflow/frontend/assets/syringe-DwKtgB9C.js +6 -0
- langflow/frontend/assets/table-2-BGGYshxd.js +6 -0
- langflow/frontend/assets/table-CVG9Sy0B.js +6 -0
- langflow/frontend/assets/table-cells-merge-CPFIgzMg.js +6 -0
- langflow/frontend/assets/table-cells-split-CxkmycHU.js +6 -0
- langflow/frontend/assets/table-columns-split-CI9KTuiz.js +6 -0
- langflow/frontend/assets/table-of-contents-Dk9Hw6Sh.js +6 -0
- langflow/frontend/assets/table-properties-Cvuq98TM.js +6 -0
- langflow/frontend/assets/table-rows-split-DKeTq6QE.js +6 -0
- langflow/frontend/assets/tablet-DUpMDwxD.js +6 -0
- langflow/frontend/assets/tablet-smartphone-CUlLFJgX.js +6 -0
- langflow/frontend/assets/tablets-Xm2Ksvzn.js +6 -0
- langflow/frontend/assets/tag-iJE_fvds.js +6 -0
- langflow/frontend/assets/tags-DHes19_F.js +6 -0
- langflow/frontend/assets/tally-1-RT4Uq6sO.js +6 -0
- langflow/frontend/assets/tally-2-E0vFboDt.js +6 -0
- langflow/frontend/assets/tally-3-Bk-0WoHQ.js +6 -0
- langflow/frontend/assets/tally-4-CjHRl0lx.js +6 -0
- langflow/frontend/assets/tally-5-Du59azEU.js +6 -0
- langflow/frontend/assets/tangent-C-kejk4e.js +6 -0
- langflow/frontend/assets/target-Bfe3sW8F.js +6 -0
- langflow/frontend/assets/telescope-LiARh8fT.js +6 -0
- langflow/frontend/assets/tent-CP5nuy7Z.js +6 -0
- langflow/frontend/assets/tent-tree-NZAfbbfd.js +6 -0
- langflow/frontend/assets/terminal-BlsIiX7b.js +6 -0
- langflow/frontend/assets/test-tube-d6Bwz4yK.js +6 -0
- langflow/frontend/assets/test-tube-diagonal-DMSI5ypI.js +6 -0
- langflow/frontend/assets/test-tubes-B5PgLmzH.js +6 -0
- langflow/frontend/assets/text-axEm7tOn.js +6 -0
- langflow/frontend/assets/text-cursor-CY191fOk.js +6 -0
- langflow/frontend/assets/text-cursor-input-BoIFnrTn.js +6 -0
- langflow/frontend/assets/text-quote-BqXaw9-T.js +6 -0
- langflow/frontend/assets/text-search-CvR93Mgy.js +6 -0
- langflow/frontend/assets/text-select-DkZRBdhd.js +6 -0
- langflow/frontend/assets/theater-BCSobEgj.js +6 -0
- langflow/frontend/assets/thermometer-CgxtZ6sg.js +6 -0
- langflow/frontend/assets/thermometer-snowflake-B5hEzGJq.js +6 -0
- langflow/frontend/assets/thermometer-sun-CntaDyPH.js +6 -0
- langflow/frontend/assets/thumbs-down-mxjMX3c8.js +6 -0
- langflow/frontend/assets/thumbs-up-B7pnitS_.js +6 -0
- langflow/frontend/assets/ticket-CmnFKVL6.js +6 -0
- langflow/frontend/assets/ticket-check-CG1tsdRn.js +6 -0
- langflow/frontend/assets/ticket-minus-5oW0b5tq.js +6 -0
- langflow/frontend/assets/ticket-percent-DLzCFFVC.js +6 -0
- langflow/frontend/assets/ticket-plus-BA1ZB-gO.js +6 -0
- langflow/frontend/assets/ticket-slash-CjdNJfD-.js +6 -0
- langflow/frontend/assets/ticket-x-CDCX6US7.js +6 -0
- langflow/frontend/assets/tickets-CLtSxQEd.js +6 -0
- langflow/frontend/assets/tickets-plane-niIl1mIt.js +6 -0
- langflow/frontend/assets/timer-BbqiQ1_d.js +6 -0
- langflow/frontend/assets/timer-off-CKyXRePW.js +6 -0
- langflow/frontend/assets/timer-reset-oyAOtW2L.js +6 -0
- langflow/frontend/assets/toggle-left-HD0KFmDs.js +6 -0
- langflow/frontend/assets/toggle-right-CmwrwEsi.js +6 -0
- langflow/frontend/assets/toilet-DZ28p79_.js +6 -0
- langflow/frontend/assets/tornado-BZ-VANk_.js +6 -0
- langflow/frontend/assets/torus-B5zJDqrW.js +6 -0
- langflow/frontend/assets/touchpad-C_Nls9y6.js +6 -0
- langflow/frontend/assets/touchpad-off-C1RW_RnP.js +6 -0
- langflow/frontend/assets/tower-control-ByJqB3a9.js +6 -0
- langflow/frontend/assets/toy-brick-DcQSnWJ1.js +6 -0
- langflow/frontend/assets/tractor-Bz01gpqd.js +6 -0
- langflow/frontend/assets/traffic-cone-CqpPMvqo.js +6 -0
- langflow/frontend/assets/train-front-DEDsBrpW.js +6 -0
- langflow/frontend/assets/train-front-tunnel-Dv156DXx.js +6 -0
- langflow/frontend/assets/train-track-BiTZaoIw.js +6 -0
- langflow/frontend/assets/tram-front-j2iwLXe5.js +6 -0
- langflow/frontend/assets/transgender-D5jhUDTg.js +6 -0
- langflow/frontend/assets/trash-CzXdaHjL.js +6 -0
- langflow/frontend/assets/tree-deciduous-DrnABGjL.js +6 -0
- langflow/frontend/assets/tree-palm-Ca3HqTot.js +6 -0
- langflow/frontend/assets/tree-pine-D68dESRJ.js +6 -0
- langflow/frontend/assets/trees-DhdoRH3H.js +6 -0
- langflow/frontend/assets/trello-DyGnSY-2.js +6 -0
- langflow/frontend/assets/trending-down-BzgClT7-.js +6 -0
- langflow/frontend/assets/trending-up-BBtm15Bd.js +6 -0
- langflow/frontend/assets/trending-up-down-BM6erocR.js +6 -0
- langflow/frontend/assets/triangle-alert-qDwvpYZE.js +6 -0
- langflow/frontend/assets/triangle-dashed-BoY1sMyo.js +6 -0
- langflow/frontend/assets/triangle-rIBKMIYJ.js +6 -0
- langflow/frontend/assets/triangle-right-DKBZX4oo.js +6 -0
- langflow/frontend/assets/trophy-f4oPYZR_.js +6 -0
- langflow/frontend/assets/truck-CRMUOW93.js +6 -0
- langflow/frontend/assets/truck-electric-BMnLAMUd.js +6 -0
- langflow/frontend/assets/turtle-AZXpHg5F.js +6 -0
- langflow/frontend/assets/tv-Chjil9Fs.js +6 -0
- langflow/frontend/assets/tv-minimal-CUAmcIp3.js +6 -0
- langflow/frontend/assets/tv-minimal-play-CNhlSHFO.js +6 -0
- langflow/frontend/assets/twitch-C8LUZfpw.js +6 -0
- langflow/frontend/assets/twitter-DdDtOi6H.js +6 -0
- langflow/frontend/assets/type-GujSd8MS.js +6 -0
- langflow/frontend/assets/type-outline-KPLSzZFp.js +6 -0
- langflow/frontend/assets/umbrella-BLcWTot-.js +6 -0
- langflow/frontend/assets/umbrella-off-C75jzhdz.js +6 -0
- langflow/frontend/assets/underline-DT4P7EJG.js +6 -0
- langflow/frontend/assets/undo-2-BSIkiwCs.js +6 -0
- langflow/frontend/assets/undo-BN0EGjzZ.js +6 -0
- langflow/frontend/assets/undo-dot-Bi6-7SgQ.js +6 -0
- langflow/frontend/assets/unfold-horizontal-XuWSUCNJ.js +6 -0
- langflow/frontend/assets/unfold-vertical-BQmfiAVo.js +6 -0
- langflow/frontend/assets/ungroup-D8z5LH99.js +6 -0
- langflow/frontend/assets/university-DqYelA5G.js +6 -0
- langflow/frontend/assets/unlink-2-DgnJJnRe.js +6 -0
- langflow/frontend/assets/unlink-bDAFVIK1.js +6 -0
- langflow/frontend/assets/unplug-DdsjI-RY.js +6 -0
- langflow/frontend/assets/upload-H_lXOXa_.js +6 -0
- langflow/frontend/assets/usb-D2UgZRTk.js +6 -0
- langflow/frontend/assets/use-post-add-user-3nH5R3LK.js +1 -0
- langflow/frontend/assets/user-DXhLhnZ-.js +6 -0
- langflow/frontend/assets/user-check-BNrWGbYI.js +6 -0
- langflow/frontend/assets/user-cog-iDUk8EVj.js +6 -0
- langflow/frontend/assets/user-lock-DljObqEO.js +6 -0
- langflow/frontend/assets/user-minus-9Xc1VAnO.js +6 -0
- langflow/frontend/assets/user-pen-B9OT_8ZU.js +6 -0
- langflow/frontend/assets/user-plus-oz6ojBPh.js +6 -0
- langflow/frontend/assets/user-round-BcK09Vxg.js +6 -0
- langflow/frontend/assets/user-round-check-C1Kly-q4.js +6 -0
- langflow/frontend/assets/user-round-cog-CaPC9vMp.js +6 -0
- langflow/frontend/assets/user-round-minus-DBH0j1gf.js +6 -0
- langflow/frontend/assets/user-round-pen-Dy2H_MDJ.js +6 -0
- langflow/frontend/assets/user-round-plus-CkvquXtk.js +6 -0
- langflow/frontend/assets/user-round-search-Dk5TPzHv.js +6 -0
- langflow/frontend/assets/user-round-x-CZbbYB-O.js +6 -0
- langflow/frontend/assets/user-search-BzZ_ofCZ.js +6 -0
- langflow/frontend/assets/user-x-DRIwyJQL.js +6 -0
- langflow/frontend/assets/users-round-DRyhbzqt.js +6 -0
- langflow/frontend/assets/users-yyq23Fa2.js +6 -0
- langflow/frontend/assets/utensils-CWxZuBx0.js +6 -0
- langflow/frontend/assets/utensils-crossed-0WWulfW5.js +6 -0
- langflow/frontend/assets/utility-pole-0OcvEHbK.js +6 -0
- langflow/frontend/assets/variable-1inTAh_O.js +6 -0
- langflow/frontend/assets/vault-BpkkVOWh.js +6 -0
- langflow/frontend/assets/vegan-Ch_dzLdH.js +6 -0
- langflow/frontend/assets/venetian-mask-CYi97mvw.js +6 -0
- langflow/frontend/assets/venus-DlWnhpOY.js +6 -0
- langflow/frontend/assets/venus-and-mars-Clo_DZCy.js +6 -0
- langflow/frontend/assets/vibrate-0V4qwk_a.js +6 -0
- langflow/frontend/assets/vibrate-off-DM0bg_Js.js +6 -0
- langflow/frontend/assets/video-BoJo2Fg1.js +6 -0
- langflow/frontend/assets/video-off-CkItKK3t.js +6 -0
- langflow/frontend/assets/videotape-CPLbKSYJ.js +6 -0
- langflow/frontend/assets/view-BXW4buDv.js +6 -0
- langflow/frontend/assets/voicemail-BM0thXTc.js +6 -0
- langflow/frontend/assets/volleyball-Bqxd44DS.js +6 -0
- langflow/frontend/assets/volume-1-C3UQcS7r.js +6 -0
- langflow/frontend/assets/volume-2-CAd0_yrC.js +6 -0
- langflow/frontend/assets/volume-DPV-qKY-.js +6 -0
- langflow/frontend/assets/volume-off-oLYOFgDc.js +6 -0
- langflow/frontend/assets/volume-x-ts5n0IlR.js +6 -0
- langflow/frontend/assets/vote-oq3p5GXU.js +6 -0
- langflow/frontend/assets/wallet-UybAp5ze.js +6 -0
- langflow/frontend/assets/wallet-cards-BuCI-8WF.js +6 -0
- langflow/frontend/assets/wallet-minimal-B9WWXov3.js +6 -0
- langflow/frontend/assets/wallpaper-DhL7WXZa.js +6 -0
- langflow/frontend/assets/wand-DvnYAmn4.js +6 -0
- langflow/frontend/assets/wand-sparkles-BFUgGfzW.js +6 -0
- langflow/frontend/assets/warehouse-BQA7ncdA.js +6 -0
- langflow/frontend/assets/washing-machine-D0vpSNN6.js +6 -0
- langflow/frontend/assets/watch-Dy9NmN5q.js +6 -0
- langflow/frontend/assets/waves-DdsRREUv.js +6 -0
- langflow/frontend/assets/waves-ladder-CfjpwsnL.js +6 -0
- langflow/frontend/assets/waypoints-BSOIs4MQ.js +6 -0
- langflow/frontend/assets/webcam-BgYzMVwn.js +6 -0
- langflow/frontend/assets/webhook-DMekEtkO.js +6 -0
- langflow/frontend/assets/webhook-off-BgwoLnYq.js +6 -0
- langflow/frontend/assets/weight-BRqznJMW.js +6 -0
- langflow/frontend/assets/wheat-Bwjy_Ve8.js +6 -0
- langflow/frontend/assets/wheat-off-CmIRP2HC.js +6 -0
- langflow/frontend/assets/whole-word-BA_JGhnJ.js +6 -0
- langflow/frontend/assets/wifi-BLh68X8m.js +6 -0
- langflow/frontend/assets/wifi-high-DRKoi30v.js +6 -0
- langflow/frontend/assets/wifi-low-CpWRqr0I.js +6 -0
- langflow/frontend/assets/wifi-off-C9N7rvFr.js +6 -0
- langflow/frontend/assets/wifi-pen-C6FkGIlp.js +6 -0
- langflow/frontend/assets/wifi-zero-BG8U6y7V.js +6 -0
- langflow/frontend/assets/wind-D4cIS0Ry.js +6 -0
- langflow/frontend/assets/wind-arrow-down-BCS7j3Ym.js +6 -0
- langflow/frontend/assets/wine-7Cko5J4H.js +6 -0
- langflow/frontend/assets/wine-off-ur367qpd.js +6 -0
- langflow/frontend/assets/workflow-CVHBIEj0.js +6 -0
- langflow/frontend/assets/worm-BwpEJUNN.js +6 -0
- langflow/frontend/assets/wrap-text-DdtJ0lb2.js +6 -0
- langflow/frontend/assets/wrench-ZA7HItal.js +6 -0
- langflow/frontend/assets/youtube-DnYwJvbC.js +6 -0
- langflow/frontend/assets/zap-DOXKGPMM.js +6 -0
- langflow/frontend/assets/zap-off-BvgHHIhR.js +6 -0
- langflow/frontend/assets/zoom-in-CTsDvN86.js +6 -0
- langflow/frontend/assets/zoom-out-BJPL2-hD.js +6 -0
- langflow/frontend/index.html +1 -1
- langflow/helpers/flow.py +121 -2
- langflow/helpers/user.py +2 -2
- langflow/initial_setup/setup.py +8 -8
- langflow/initial_setup/starter_projects/Basic Prompt Chaining.json +4 -4
- langflow/initial_setup/starter_projects/Basic Prompting.json +4 -4
- langflow/initial_setup/starter_projects/Blog Writer.json +8 -8
- langflow/initial_setup/starter_projects/Custom Component Generator.json +6 -6
- langflow/initial_setup/starter_projects/Document Q&A.json +6 -6
- langflow/initial_setup/starter_projects/Financial Report Parser.json +8 -8
- langflow/initial_setup/starter_projects/Hybrid Search RAG.json +12 -12
- langflow/initial_setup/starter_projects/Image Sentiment Analysis.json +6 -6
- langflow/initial_setup/starter_projects/Instagram Copywriter.json +6 -6
- langflow/initial_setup/starter_projects/Invoice Summarizer.json +4 -4
- langflow/initial_setup/starter_projects/Knowledge Ingestion.json +4 -4
- langflow/initial_setup/starter_projects/Knowledge Retrieval.json +4 -4
- langflow/initial_setup/starter_projects/Market Research.json +8 -8
- langflow/initial_setup/starter_projects/Meeting Summary.json +10 -10
- langflow/initial_setup/starter_projects/Memory Chatbot.json +6 -6
- langflow/initial_setup/starter_projects/News Aggregator.json +6 -6
- langflow/initial_setup/starter_projects/Nvidia Remix.json +8 -8
- langflow/initial_setup/starter_projects/Pok/303/251dex Agent.json" +6 -6
- langflow/initial_setup/starter_projects/Portfolio Website Code Generator.json +8 -8
- langflow/initial_setup/starter_projects/Price Deal Finder.json +4 -4
- langflow/initial_setup/starter_projects/Research Agent.json +4 -4
- langflow/initial_setup/starter_projects/Research Translation Loop.json +10 -10
- langflow/initial_setup/starter_projects/SEO Keyword Generator.json +2 -2
- langflow/initial_setup/starter_projects/SaaS Pricing.json +4 -4
- langflow/initial_setup/starter_projects/Search agent.json +4 -4
- langflow/initial_setup/starter_projects/Sequential Tasks Agents.json +6 -6
- langflow/initial_setup/starter_projects/Simple Agent.json +8 -8
- langflow/initial_setup/starter_projects/Social Media Agent.json +8 -8
- langflow/initial_setup/starter_projects/Text Sentiment Analysis.json +6 -6
- langflow/initial_setup/starter_projects/Travel Planning Agents.json +6 -6
- langflow/initial_setup/starter_projects/Twitter Thread Generator.json +16 -16
- langflow/initial_setup/starter_projects/Vector Store RAG.json +12 -12
- langflow/initial_setup/starter_projects/Youtube Analysis.json +6 -6
- langflow/main.py +2 -3
- langflow/memory.py +19 -9
- langflow/services/auth/utils.py +5 -4
- langflow/services/database/models/api_key/crud.py +6 -17
- langflow/services/database/models/flow/model.py +1 -0
- langflow/services/database/models/folder/utils.py +1 -2
- langflow/services/database/models/message/crud.py +1 -1
- langflow/services/database/models/user/crud.py +1 -2
- langflow/services/database/service.py +36 -18
- langflow/services/deps.py +6 -33
- langflow/services/flow/flow_runner.py +1 -2
- langflow/services/storage/__init__.py +5 -0
- langflow/services/storage/local.py +104 -34
- langflow/services/storage/s3.py +278 -68
- langflow/services/storage/service.py +6 -3
- langflow/services/task/temp_flow_cleanup.py +0 -2
- langflow/services/utils.py +4 -8
- langflow/services/variable/service.py +29 -6
- langflow_base_nightly-1.7.0.dev22.dist-info/METADATA +99 -0
- langflow_base_nightly-1.7.0.dev22.dist-info/RECORD +2277 -0
- langflow/frontend/assets/SlackIcon-CH9tdWyp.js +0 -1
- langflow/frontend/assets/Wikipedia-DkfgHVf0.js +0 -1
- langflow/frontend/assets/Wolfram-BeafYhI_.js +0 -1
- langflow/frontend/assets/a-arrow-down-BEN5qAT6.js +0 -6
- langflow/frontend/assets/a-arrow-up-i3_YI2KH.js +0 -6
- langflow/frontend/assets/a-large-small-WWz6Vwdb.js +0 -6
- langflow/frontend/assets/accessibility-C2nyNCs7.js +0 -6
- langflow/frontend/assets/activity-DQazeHS8.js +0 -6
- langflow/frontend/assets/air-vent-CcgXIo9h.js +0 -6
- langflow/frontend/assets/airplay-BNSzdkZO.js +0 -6
- langflow/frontend/assets/alarm-clock-DTDckDZ0.js +0 -6
- langflow/frontend/assets/alarm-clock-check-BRyoqtME.js +0 -6
- langflow/frontend/assets/alarm-clock-minus-BiuNohzq.js +0 -6
- langflow/frontend/assets/alarm-clock-off-Q8MHDC_K.js +0 -6
- langflow/frontend/assets/alarm-clock-plus-BScaCIzq.js +0 -6
- langflow/frontend/assets/alarm-smoke-DRZhtvxs.js +0 -6
- langflow/frontend/assets/album-D3OGfbwa.js +0 -6
- langflow/frontend/assets/align-center-horizontal-D0m5huHx.js +0 -6
- langflow/frontend/assets/align-center-vertical-DbcV4bkJ.js +0 -6
- langflow/frontend/assets/align-center-wzh2QZXa.js +0 -6
- langflow/frontend/assets/align-end-horizontal-CoR5H86d.js +0 -6
- langflow/frontend/assets/align-end-vertical-DIHfMVwO.js +0 -6
- langflow/frontend/assets/align-horizontal-distribute-center-C__XjkHo.js +0 -6
- langflow/frontend/assets/align-horizontal-distribute-end-i6CyQMcA.js +0 -6
- langflow/frontend/assets/align-horizontal-distribute-start-BBWmY8-H.js +0 -6
- langflow/frontend/assets/align-horizontal-justify-center-CR6e3gSH.js +0 -6
- langflow/frontend/assets/align-horizontal-justify-end-CW5uCOAv.js +0 -6
- langflow/frontend/assets/align-horizontal-justify-start-BuftP6Nc.js +0 -6
- langflow/frontend/assets/align-horizontal-space-around-CJd078Hn.js +0 -6
- langflow/frontend/assets/align-horizontal-space-between-BYOIPi_8.js +0 -6
- langflow/frontend/assets/align-justify-D7FYYnpM.js +0 -6
- langflow/frontend/assets/align-left-IWQhWtwP.js +0 -6
- langflow/frontend/assets/align-right-B2HShrim.js +0 -6
- langflow/frontend/assets/align-start-horizontal-Bhgp4wb_.js +0 -6
- langflow/frontend/assets/align-start-vertical-B36DAluf.js +0 -6
- langflow/frontend/assets/align-vertical-distribute-center-CM2DdOMr.js +0 -6
- langflow/frontend/assets/align-vertical-distribute-end-aOYpuAWp.js +0 -6
- langflow/frontend/assets/align-vertical-distribute-start-CZpn9w38.js +0 -6
- langflow/frontend/assets/align-vertical-justify-center-CxPOzHlR.js +0 -6
- langflow/frontend/assets/align-vertical-justify-end-49fdbOQV.js +0 -6
- langflow/frontend/assets/align-vertical-justify-start-BPXNHYLt.js +0 -6
- langflow/frontend/assets/align-vertical-space-around-BWrUTMpq.js +0 -6
- langflow/frontend/assets/align-vertical-space-between-Cur3ZlWf.js +0 -6
- langflow/frontend/assets/ambulance-Dyp2z1EF.js +0 -6
- langflow/frontend/assets/ampersand-Cq3a76el.js +0 -6
- langflow/frontend/assets/ampersands-3CLem0i6.js +0 -6
- langflow/frontend/assets/amphora-BRw9gaQX.js +0 -6
- langflow/frontend/assets/anchor-CaigXYtk.js +0 -6
- langflow/frontend/assets/angry-DLfrljOW.js +0 -6
- langflow/frontend/assets/annoyed-Canvd2yQ.js +0 -6
- langflow/frontend/assets/antenna-CRd2m5Oe.js +0 -6
- langflow/frontend/assets/anvil-B_bwcYGl.js +0 -6
- langflow/frontend/assets/aperture-Df8xvlVF.js +0 -6
- langflow/frontend/assets/app-window-BoMcfXEW.js +0 -6
- langflow/frontend/assets/app-window-mac-BvzzO-Wj.js +0 -6
- langflow/frontend/assets/apple-CO8wrJRv.js +0 -6
- langflow/frontend/assets/archive-C-E4ToWN.js +0 -6
- langflow/frontend/assets/archive-restore-CjxhmKcS.js +0 -6
- langflow/frontend/assets/archive-x-BU3WsYOl.js +0 -6
- langflow/frontend/assets/armchair-Ch3imxVB.js +0 -6
- langflow/frontend/assets/arrow-big-down-BrmTY2Ii.js +0 -6
- langflow/frontend/assets/arrow-big-down-dash-BGAxmYWY.js +0 -6
- langflow/frontend/assets/arrow-big-left-DJ5b9pTG.js +0 -6
- langflow/frontend/assets/arrow-big-left-dash-fr0NKNvJ.js +0 -6
- langflow/frontend/assets/arrow-big-right-DqP3e98_.js +0 -6
- langflow/frontend/assets/arrow-big-right-dash-7SuXujJZ.js +0 -6
- langflow/frontend/assets/arrow-big-up-dash-gpTpAUkc.js +0 -6
- langflow/frontend/assets/arrow-big-up-zDXC9zFH.js +0 -6
- langflow/frontend/assets/arrow-down-0-1-B_rk06Dq.js +0 -6
- langflow/frontend/assets/arrow-down-1-0-B1F0NDaZ.js +0 -6
- langflow/frontend/assets/arrow-down-GvCqEeTq.js +0 -6
- langflow/frontend/assets/arrow-down-a-z-BJMsp_xn.js +0 -6
- langflow/frontend/assets/arrow-down-from-line-B673YvMt.js +0 -6
- langflow/frontend/assets/arrow-down-left-BwLKrYOP.js +0 -6
- langflow/frontend/assets/arrow-down-narrow-wide-B7GdQV6s.js +0 -6
- langflow/frontend/assets/arrow-down-right-WSOeex9J.js +0 -6
- langflow/frontend/assets/arrow-down-to-dot-SumJ3AII.js +0 -6
- langflow/frontend/assets/arrow-down-to-line-09XTJlqC.js +0 -6
- langflow/frontend/assets/arrow-down-up-DtYAVwZ7.js +0 -6
- langflow/frontend/assets/arrow-down-wide-narrow-BD18XtAI.js +0 -6
- langflow/frontend/assets/arrow-down-z-a-CogZw-RG.js +0 -6
- langflow/frontend/assets/arrow-left-D9ocT_ss.js +0 -6
- langflow/frontend/assets/arrow-left-from-line-BkRg_r3k.js +0 -6
- langflow/frontend/assets/arrow-left-right-Dt8NMDz0.js +0 -6
- langflow/frontend/assets/arrow-left-to-line-D2fGkQZv.js +0 -6
- langflow/frontend/assets/arrow-right-B-E8IpZ0.js +0 -6
- langflow/frontend/assets/arrow-right-from-line-BMm6QmG8.js +0 -6
- langflow/frontend/assets/arrow-right-left-BU85WYQf.js +0 -6
- langflow/frontend/assets/arrow-right-to-line-DAAMBl9i.js +0 -6
- langflow/frontend/assets/arrow-up-0-1-DrOlEdCh.js +0 -6
- langflow/frontend/assets/arrow-up-1-0-CWoU2wIy.js +0 -6
- langflow/frontend/assets/arrow-up-BmFkDf50.js +0 -6
- langflow/frontend/assets/arrow-up-a-z-DaHxANo8.js +0 -6
- langflow/frontend/assets/arrow-up-down-DeWRVUnB.js +0 -6
- langflow/frontend/assets/arrow-up-from-dot-DgaMH6Vf.js +0 -6
- langflow/frontend/assets/arrow-up-from-line-BSIaOLue.js +0 -6
- langflow/frontend/assets/arrow-up-left-ArTtnmdA.js +0 -6
- langflow/frontend/assets/arrow-up-narrow-wide-CVgYIwBE.js +0 -6
- langflow/frontend/assets/arrow-up-right-BBKXfGi1.js +0 -6
- langflow/frontend/assets/arrow-up-to-line-B6HJYcd3.js +0 -6
- langflow/frontend/assets/arrow-up-wide-narrow-CCmVqxkr.js +0 -6
- langflow/frontend/assets/arrow-up-z-a-jhOuDE89.js +0 -6
- langflow/frontend/assets/arrows-up-from-line-D-YCiQz_.js +0 -6
- langflow/frontend/assets/asterisk-Bjc1zPkI.js +0 -6
- langflow/frontend/assets/at-sign-Ccs2uaJm.js +0 -6
- langflow/frontend/assets/atom-CnUOXXhr.js +0 -6
- langflow/frontend/assets/audio-lines-CeTqP-J6.js +0 -6
- langflow/frontend/assets/audio-waveform-UY-mb2A2.js +0 -6
- langflow/frontend/assets/award-D1gGTZYs.js +0 -6
- langflow/frontend/assets/axe-CFds1641.js +0 -6
- langflow/frontend/assets/axis-3d-DYOtBGOM.js +0 -6
- langflow/frontend/assets/baby-EiXUWw5W.js +0 -6
- langflow/frontend/assets/backpack-BW5WwhrS.js +0 -6
- langflow/frontend/assets/badge-ChZoZMV8.js +0 -6
- langflow/frontend/assets/badge-alert-DfYMH-_q.js +0 -6
- langflow/frontend/assets/badge-cent-xWCvlUAA.js +0 -6
- langflow/frontend/assets/badge-check-B3zKgevV.js +0 -6
- langflow/frontend/assets/badge-dollar-sign-BSUVmqzD.js +0 -6
- langflow/frontend/assets/badge-euro-DIUo03hx.js +0 -6
- langflow/frontend/assets/badge-help-dFaxHmVQ.js +0 -6
- langflow/frontend/assets/badge-indian-rupee-W9jfbwX-.js +0 -6
- langflow/frontend/assets/badge-info-BY0XAr0Z.js +0 -6
- langflow/frontend/assets/badge-japanese-yen-CmDpVw9N.js +0 -6
- langflow/frontend/assets/badge-minus-BeZje_tn.js +0 -6
- langflow/frontend/assets/badge-percent-D3eoOre8.js +0 -6
- langflow/frontend/assets/badge-plus-CWJbHQaq.js +0 -6
- langflow/frontend/assets/badge-pound-sterling-Br6d_JvG.js +0 -6
- langflow/frontend/assets/badge-russian-ruble-CDqdelrL.js +0 -6
- langflow/frontend/assets/badge-swiss-franc-C39sIs1w.js +0 -6
- langflow/frontend/assets/badge-x-BgGCQ3l5.js +0 -6
- langflow/frontend/assets/baggage-claim-D4lVlIR6.js +0 -6
- langflow/frontend/assets/ban-DPlsneSq.js +0 -6
- langflow/frontend/assets/banana-D_m2c0de.js +0 -6
- langflow/frontend/assets/bandage-DZYeb_pl.js +0 -6
- langflow/frontend/assets/banknote-Dg_JF6a0.js +0 -6
- langflow/frontend/assets/banknote-arrow-down-CUR51l88.js +0 -6
- langflow/frontend/assets/banknote-arrow-up-Cng0Woim.js +0 -6
- langflow/frontend/assets/banknote-x-CT-4hzWq.js +0 -6
- langflow/frontend/assets/barcode-kjfQS4eI.js +0 -6
- langflow/frontend/assets/baseline-GgMPq29v.js +0 -6
- langflow/frontend/assets/bath-CkJ3f3Hw.js +0 -6
- langflow/frontend/assets/battery-C9gisHtW.js +0 -6
- langflow/frontend/assets/battery-charging-CjyNjhcC.js +0 -6
- langflow/frontend/assets/battery-full-XRJleoud.js +0 -6
- langflow/frontend/assets/battery-low-CAydVPkG.js +0 -6
- langflow/frontend/assets/battery-medium-zi-nWb3x.js +0 -6
- langflow/frontend/assets/battery-plus-BcqE0aqr.js +0 -6
- langflow/frontend/assets/battery-warning-D_Ox2070.js +0 -6
- langflow/frontend/assets/beaker-BgTgKDos.js +0 -6
- langflow/frontend/assets/bean-CbiYGFus.js +0 -6
- langflow/frontend/assets/bean-off-Dxr9WWB0.js +0 -6
- langflow/frontend/assets/bed-BMGw4f0S.js +0 -6
- langflow/frontend/assets/bed-double-BmTt7YIh.js +0 -6
- langflow/frontend/assets/bed-single-Bfdvp_9O.js +0 -6
- langflow/frontend/assets/beef-9E0jLXdQ.js +0 -6
- langflow/frontend/assets/beer-DaBKydBd.js +0 -6
- langflow/frontend/assets/beer-off-Iij7Pp8A.js +0 -6
- langflow/frontend/assets/bell-DxN-z33U.js +0 -6
- langflow/frontend/assets/bell-dot-DWLs7h35.js +0 -6
- langflow/frontend/assets/bell-electric-BlXKBvwx.js +0 -6
- langflow/frontend/assets/bell-minus-DjVPiObN.js +0 -6
- langflow/frontend/assets/bell-off-CPwlBO6x.js +0 -6
- langflow/frontend/assets/bell-plus-BRfAwk9w.js +0 -6
- langflow/frontend/assets/bell-ring-BU9LbxyB.js +0 -6
- langflow/frontend/assets/between-horizontal-end-IQreesop.js +0 -6
- langflow/frontend/assets/between-horizontal-start-BtnK1HRc.js +0 -6
- langflow/frontend/assets/between-vertical-end-CIUoEiOz.js +0 -6
- langflow/frontend/assets/between-vertical-start-DwOMzQ7i.js +0 -6
- langflow/frontend/assets/biceps-flexed-Ogp_-E3h.js +0 -6
- langflow/frontend/assets/bike-tnijozXm.js +0 -6
- langflow/frontend/assets/binary-BOpBzcrP.js +0 -6
- langflow/frontend/assets/binoculars-COtqbKCE.js +0 -6
- langflow/frontend/assets/biohazard-BFmHAGHC.js +0 -6
- langflow/frontend/assets/bird-CkH2aPr7.js +0 -6
- langflow/frontend/assets/bitcoin-Dx72_Cr2.js +0 -6
- langflow/frontend/assets/blend-CMyM4lAV.js +0 -6
- langflow/frontend/assets/blinds-DBHkR1bw.js +0 -6
- langflow/frontend/assets/blocks-D6brq653.js +0 -6
- langflow/frontend/assets/bluetooth-CxujqGwy.js +0 -6
- langflow/frontend/assets/bluetooth-connected-CahoGiWt.js +0 -6
- langflow/frontend/assets/bluetooth-off-BOohhTar.js +0 -6
- langflow/frontend/assets/bluetooth-searching-BwB45tWW.js +0 -6
- langflow/frontend/assets/bold-ahovihLd.js +0 -6
- langflow/frontend/assets/bolt-CGiJG3bn.js +0 -6
- langflow/frontend/assets/bomb-Dha-UvGb.js +0 -6
- langflow/frontend/assets/bone-B2BqfCNs.js +0 -6
- langflow/frontend/assets/book-a-DpTda9TD.js +0 -6
- langflow/frontend/assets/book-audio-DyCDzngO.js +0 -6
- langflow/frontend/assets/book-check-DFuWlFrx.js +0 -6
- langflow/frontend/assets/book-copy-CGc0bNCm.js +0 -6
- langflow/frontend/assets/book-dashed-BzDvjHnu.js +0 -6
- langflow/frontend/assets/book-down-BuhlD5QC.js +0 -6
- langflow/frontend/assets/book-headphones-CrCFGrHs.js +0 -6
- langflow/frontend/assets/book-heart-DCkco680.js +0 -6
- langflow/frontend/assets/book-image-CCb2x9xd.js +0 -6
- langflow/frontend/assets/book-key-DgzUotkU.js +0 -6
- langflow/frontend/assets/book-lock-DmYGN6wc.js +0 -6
- langflow/frontend/assets/book-marked-BnRFxgKT.js +0 -6
- langflow/frontend/assets/book-minus-DlPx65Ne.js +0 -6
- langflow/frontend/assets/book-open-CcKfIZKM.js +0 -6
- langflow/frontend/assets/book-open-check-B02BHw-x.js +0 -6
- langflow/frontend/assets/book-open-text-BGBQkn3D.js +0 -6
- langflow/frontend/assets/book-plus-DUWUV2gb.js +0 -6
- langflow/frontend/assets/book-text-BHfOHwiN.js +0 -6
- langflow/frontend/assets/book-type-DwxWZFem.js +0 -6
- langflow/frontend/assets/book-up-2-D_SXF22P.js +0 -6
- langflow/frontend/assets/book-up-BFFCyvlf.js +0 -6
- langflow/frontend/assets/book-user-BDXGN6rN.js +0 -6
- langflow/frontend/assets/book-x-VP_n8fv1.js +0 -6
- langflow/frontend/assets/book-yYnEUjML.js +0 -6
- langflow/frontend/assets/bookmark-check-rBWot2Zo.js +0 -6
- langflow/frontend/assets/bookmark-minus-BvDe7hol.js +0 -6
- langflow/frontend/assets/bookmark-plus-rYo0_RMV.js +0 -6
- langflow/frontend/assets/bookmark-wRm9YI7G.js +0 -6
- langflow/frontend/assets/bookmark-x-J-b8jOeA.js +0 -6
- langflow/frontend/assets/boom-box-E-zCfaRl.js +0 -6
- langflow/frontend/assets/bot-CHwd7vTa.js +0 -6
- langflow/frontend/assets/bot-message-square-D1LI9Dgh.js +0 -6
- langflow/frontend/assets/bot-off-CDzRDrH4.js +0 -6
- langflow/frontend/assets/bow-arrow-CXFHAcer.js +0 -6
- langflow/frontend/assets/box-BLpk7XlR.js +0 -6
- langflow/frontend/assets/boxes-CTmOgoi0.js +0 -6
- langflow/frontend/assets/braces-DzECLIYU.js +0 -6
- langflow/frontend/assets/brackets-CfHRu7_4.js +0 -6
- langflow/frontend/assets/brain-Dl6MyV1N.js +0 -6
- langflow/frontend/assets/brain-circuit-DZJA-OCE.js +0 -6
- langflow/frontend/assets/brain-cog-1f6PAT0H.js +0 -6
- langflow/frontend/assets/brick-wall-DfKIQEsG.js +0 -6
- langflow/frontend/assets/brick-wall-fire-CuTLGhlo.js +0 -6
- langflow/frontend/assets/briefcase-C8E1s_6c.js +0 -6
- langflow/frontend/assets/briefcase-business-CF5CZYCP.js +0 -6
- langflow/frontend/assets/briefcase-conveyor-belt-DSzoCLAC.js +0 -6
- langflow/frontend/assets/briefcase-medical-qJzs40Wf.js +0 -6
- langflow/frontend/assets/bring-to-front-DiU_EmmE.js +0 -6
- langflow/frontend/assets/brush-CaBqp6DM.js +0 -6
- langflow/frontend/assets/bubbles-D0wSEkME.js +0 -6
- langflow/frontend/assets/bug-cHva2keP.js +0 -6
- langflow/frontend/assets/bug-off-DuCKbLsU.js +0 -6
- langflow/frontend/assets/bug-play-CJQVM_5y.js +0 -6
- langflow/frontend/assets/building-2-0qyyhvKg.js +0 -6
- langflow/frontend/assets/building-ClrycX8d.js +0 -6
- langflow/frontend/assets/bus-front-BP_5Rg_X.js +0 -6
- langflow/frontend/assets/bus-lCX_14l8.js +0 -6
- langflow/frontend/assets/cable-CIOcrAno.js +0 -6
- langflow/frontend/assets/cable-car-CalBuJiQ.js +0 -6
- langflow/frontend/assets/cake-254Da_nR.js +0 -6
- langflow/frontend/assets/cake-slice-CRtjIhjB.js +0 -6
- langflow/frontend/assets/calculator-Bm3Xg8Iw.js +0 -6
- langflow/frontend/assets/calendar-1-BjsmuJcu.js +0 -6
- langflow/frontend/assets/calendar-DMqIMaOz.js +0 -6
- langflow/frontend/assets/calendar-arrow-down-CFsqKHs8.js +0 -6
- langflow/frontend/assets/calendar-arrow-up-CQJBaRrZ.js +0 -6
- langflow/frontend/assets/calendar-check-2-CYTKV2At.js +0 -6
- langflow/frontend/assets/calendar-check-DYZjn3aq.js +0 -6
- langflow/frontend/assets/calendar-clock-Cj1dz6tL.js +0 -6
- langflow/frontend/assets/calendar-cog-BOjrNW0c.js +0 -6
- langflow/frontend/assets/calendar-days-Bat12Ovo.js +0 -6
- langflow/frontend/assets/calendar-fold-Dm3gVwZ1.js +0 -6
- langflow/frontend/assets/calendar-heart-BOt3Pf4W.js +0 -6
- langflow/frontend/assets/calendar-minus-2-Caf9n0Xy.js +0 -6
- langflow/frontend/assets/calendar-minus-CPavNu5A.js +0 -6
- langflow/frontend/assets/calendar-off-DMC78ZGp.js +0 -6
- langflow/frontend/assets/calendar-plus-2-H7ETgSSO.js +0 -6
- langflow/frontend/assets/calendar-plus-URIjqYEn.js +0 -6
- langflow/frontend/assets/calendar-range-BcINkFOM.js +0 -6
- langflow/frontend/assets/calendar-search-CI56K2ZB.js +0 -6
- langflow/frontend/assets/calendar-sync-CfLwc2aD.js +0 -6
- langflow/frontend/assets/calendar-x-2-DJhm5IkF.js +0 -6
- langflow/frontend/assets/calendar-x-Bq4MQGZT.js +0 -6
- langflow/frontend/assets/camera-D-iC9SFG.js +0 -6
- langflow/frontend/assets/camera-off-CP5oVtWm.js +0 -6
- langflow/frontend/assets/candy-DDHMtNnZ.js +0 -6
- langflow/frontend/assets/candy-cane-WfHr4Cja.js +0 -6
- langflow/frontend/assets/candy-off-CBuBhtuU.js +0 -6
- langflow/frontend/assets/cannabis-M9OW8NSr.js +0 -6
- langflow/frontend/assets/captions-CCs3GQAh.js +0 -6
- langflow/frontend/assets/captions-off-BtO933jI.js +0 -6
- langflow/frontend/assets/car-C-V4CpBP.js +0 -6
- langflow/frontend/assets/car-front-fGlEehES.js +0 -6
- langflow/frontend/assets/car-taxi-front-BoJbZQeI.js +0 -6
- langflow/frontend/assets/caravan-fSjBCxRV.js +0 -6
- langflow/frontend/assets/carrot-CkNC_fVY.js +0 -6
- langflow/frontend/assets/case-lower-Bq0iQ47R.js +0 -6
- langflow/frontend/assets/case-sensitive-BztSWFOT.js +0 -6
- langflow/frontend/assets/case-upper-CgE2DUlw.js +0 -6
- langflow/frontend/assets/cassette-tape-DNdEiRVV.js +0 -6
- langflow/frontend/assets/cast-8YQmf-FT.js +0 -6
- langflow/frontend/assets/castle-B-rginON.js +0 -6
- langflow/frontend/assets/cat-DXJ5wKz7.js +0 -6
- langflow/frontend/assets/cctv-Cur-ybDL.js +0 -6
- langflow/frontend/assets/chart-area-C3_of1v1.js +0 -6
- langflow/frontend/assets/chart-bar-Dn52LBVb.js +0 -6
- langflow/frontend/assets/chart-bar-big-BDZRq6YR.js +0 -6
- langflow/frontend/assets/chart-bar-decreasing-Dv-fLH3Z.js +0 -6
- langflow/frontend/assets/chart-bar-increasing-zPyaFzsb.js +0 -6
- langflow/frontend/assets/chart-bar-stacked-MVVgivxI.js +0 -6
- langflow/frontend/assets/chart-candlestick-BATfQtBq.js +0 -6
- langflow/frontend/assets/chart-column-BnXDZnyB.js +0 -6
- langflow/frontend/assets/chart-column-big-DATKHpyP.js +0 -6
- langflow/frontend/assets/chart-column-decreasing-BMhXNJtE.js +0 -6
- langflow/frontend/assets/chart-column-increasing-CnOW1jKg.js +0 -6
- langflow/frontend/assets/chart-column-stacked-Cjy3N9Qy.js +0 -6
- langflow/frontend/assets/chart-gantt-KhjLpgV5.js +0 -6
- langflow/frontend/assets/chart-line-BiTjnmDo.js +0 -6
- langflow/frontend/assets/chart-network-DYueHW_X.js +0 -6
- langflow/frontend/assets/chart-no-axes-column-DiivWQMV.js +0 -6
- langflow/frontend/assets/chart-no-axes-column-decreasing-BHgBcFj1.js +0 -6
- langflow/frontend/assets/chart-no-axes-column-increasing-CA4hrFv5.js +0 -6
- langflow/frontend/assets/chart-no-axes-combined-BGcwSqZx.js +0 -6
- langflow/frontend/assets/chart-no-axes-gantt-Dz3iC8h-.js +0 -6
- langflow/frontend/assets/chart-pie-BAUgZTpf.js +0 -6
- langflow/frontend/assets/chart-scatter-BFJk7Hqq.js +0 -6
- langflow/frontend/assets/chart-spline-BQPQzNFw.js +0 -6
- langflow/frontend/assets/check-check-Bl7_b_QU.js +0 -6
- langflow/frontend/assets/chef-hat-dzpaTlGd.js +0 -6
- langflow/frontend/assets/cherry-BALcTL3I.js +0 -6
- langflow/frontend/assets/chevron-first-VSnUxWUQ.js +0 -6
- langflow/frontend/assets/chevron-last-BxFun42k.js +0 -6
- langflow/frontend/assets/chevron-left-BDhI7RdW.js +0 -6
- langflow/frontend/assets/chevron-right-DhjHPweY.js +0 -6
- langflow/frontend/assets/chevrons-down-Vqso9c7o.js +0 -6
- langflow/frontend/assets/chevrons-down-up-_TLe5vew.js +0 -6
- langflow/frontend/assets/chevrons-left-DlyHGlL_.js +0 -6
- langflow/frontend/assets/chevrons-left-right-J7cNIsfL.js +0 -6
- langflow/frontend/assets/chevrons-left-right-ellipsis-BbmFTl1D.js +0 -6
- langflow/frontend/assets/chevrons-right-CouPeQmN.js +0 -6
- langflow/frontend/assets/chevrons-right-left-RmzLcYUP.js +0 -6
- langflow/frontend/assets/chevrons-up-Byc5FW82.js +0 -6
- langflow/frontend/assets/chrome-CI_BDdUO.js +0 -6
- langflow/frontend/assets/church-XOuemziS.js +0 -6
- langflow/frontend/assets/cigarette-DuJjaUdZ.js +0 -6
- langflow/frontend/assets/cigarette-off-dN0K_NkG.js +0 -6
- langflow/frontend/assets/circle-alert-B-kzQMYL.js +0 -6
- langflow/frontend/assets/circle-arrow-down-DnurNSIq.js +0 -6
- langflow/frontend/assets/circle-arrow-left-Bu4GB--u.js +0 -6
- langflow/frontend/assets/circle-arrow-out-down-left-HEA12LTc.js +0 -6
- langflow/frontend/assets/circle-arrow-out-down-right-BDDsRQht.js +0 -6
- langflow/frontend/assets/circle-arrow-out-up-left-Bscowj2p.js +0 -6
- langflow/frontend/assets/circle-arrow-out-up-right-CwQit0ut.js +0 -6
- langflow/frontend/assets/circle-arrow-right-ZGsqjL0L.js +0 -6
- langflow/frontend/assets/circle-arrow-up-BQHiPjJL.js +0 -6
- langflow/frontend/assets/circle-check-C0Rcfbp0.js +0 -6
- langflow/frontend/assets/circle-check-big-B1OQXwyV.js +0 -6
- langflow/frontend/assets/circle-chevron-down-_MiIDEd4.js +0 -6
- langflow/frontend/assets/circle-chevron-left-DMDnFI-B.js +0 -6
- langflow/frontend/assets/circle-chevron-right-FJ_gDlKW.js +0 -6
- langflow/frontend/assets/circle-chevron-up-C2cyYxPi.js +0 -6
- langflow/frontend/assets/circle-dashed-CaSSzQ5D.js +0 -6
- langflow/frontend/assets/circle-divide-CaOair4t.js +0 -6
- langflow/frontend/assets/circle-dollar-sign-CApwu9PB.js +0 -6
- langflow/frontend/assets/circle-dot-CK0rVvsv.js +0 -6
- langflow/frontend/assets/circle-dot-dashed-Du0gwRGY.js +0 -6
- langflow/frontend/assets/circle-ellipsis-Cquny7ZU.js +0 -6
- langflow/frontend/assets/circle-equal-DtnJJ1VK.js +0 -6
- langflow/frontend/assets/circle-fading-arrow-up-Dgjy0kGx.js +0 -6
- langflow/frontend/assets/circle-fading-plus-GsUgz4uC.js +0 -6
- langflow/frontend/assets/circle-gauge-simTx4gy.js +0 -6
- langflow/frontend/assets/circle-help-oFHefhlW.js +0 -6
- langflow/frontend/assets/circle-minus-ekBMPPFs.js +0 -6
- langflow/frontend/assets/circle-off-UP2M4IoK.js +0 -6
- langflow/frontend/assets/circle-parking-S6-lYOwo.js +0 -6
- langflow/frontend/assets/circle-parking-off-DuAIHwJx.js +0 -6
- langflow/frontend/assets/circle-pause-C6OS1hwy.js +0 -6
- langflow/frontend/assets/circle-percent-BgBD9FZz.js +0 -6
- langflow/frontend/assets/circle-play-C3jpOkzD.js +0 -6
- langflow/frontend/assets/circle-plus-oMjW-wTM.js +0 -6
- langflow/frontend/assets/circle-power-D77l_1I8.js +0 -6
- langflow/frontend/assets/circle-slash-2-BhvWkT0K.js +0 -6
- langflow/frontend/assets/circle-slash-CV2u_8IH.js +0 -6
- langflow/frontend/assets/circle-small-Bc_cVHmc.js +0 -6
- langflow/frontend/assets/circle-stop-CRqhUr5p.js +0 -6
- langflow/frontend/assets/circle-user-Ba7WRnRQ.js +0 -6
- langflow/frontend/assets/circle-user-round-CbI1itNW.js +0 -6
- langflow/frontend/assets/circuit-board-xfiLd_s1.js +0 -6
- langflow/frontend/assets/citrus-D9d23doq.js +0 -6
- langflow/frontend/assets/clapperboard-C9bdDFQW.js +0 -6
- langflow/frontend/assets/clipboard-COY2oQHS.js +0 -6
- langflow/frontend/assets/clipboard-check-BH-b7oQv.js +0 -6
- langflow/frontend/assets/clipboard-copy-qqX_hbxG.js +0 -6
- langflow/frontend/assets/clipboard-list-Cw6n8Pto.js +0 -6
- langflow/frontend/assets/clipboard-minus-CmNYXyLR.js +0 -6
- langflow/frontend/assets/clipboard-paste-ZiNEydPy.js +0 -6
- langflow/frontend/assets/clipboard-pen-B0yp_ni5.js +0 -6
- langflow/frontend/assets/clipboard-pen-line-02RH7QCk.js +0 -6
- langflow/frontend/assets/clipboard-plus-DExFWp5z.js +0 -6
- langflow/frontend/assets/clipboard-type-BP3iLFe6.js +0 -6
- langflow/frontend/assets/clipboard-x-C8vTYWiS.js +0 -6
- langflow/frontend/assets/clock-1-DlOoh2Yp.js +0 -6
- langflow/frontend/assets/clock-10-Byb0MJzF.js +0 -6
- langflow/frontend/assets/clock-11-ecUbFp41.js +0 -6
- langflow/frontend/assets/clock-12-BZyZCGSA.js +0 -6
- langflow/frontend/assets/clock-2-DDYABIm8.js +0 -6
- langflow/frontend/assets/clock-3-DM8BsYyE.js +0 -6
- langflow/frontend/assets/clock-4-Dq98Mfnr.js +0 -6
- langflow/frontend/assets/clock-5-DLYLoR9v.js +0 -6
- langflow/frontend/assets/clock-6-CYWA7TSy.js +0 -6
- langflow/frontend/assets/clock-7-CeAutbCT.js +0 -6
- langflow/frontend/assets/clock-8-BZplNT9b.js +0 -6
- langflow/frontend/assets/clock-9-BYldJA85.js +0 -6
- langflow/frontend/assets/clock-Ba2M1PcP.js +0 -6
- langflow/frontend/assets/clock-alert-CwQA-1ot.js +0 -6
- langflow/frontend/assets/clock-arrow-down-v3pdpRsm.js +0 -6
- langflow/frontend/assets/clock-arrow-up-BZegLp9P.js +0 -6
- langflow/frontend/assets/clock-fading-BZVJxfOY.js +0 -6
- langflow/frontend/assets/cloud-Dd2P5DBm.js +0 -6
- langflow/frontend/assets/cloud-alert-C5u8kSc_.js +0 -6
- langflow/frontend/assets/cloud-cog-0YXtveIS.js +0 -6
- langflow/frontend/assets/cloud-download-Bl7q6HAz.js +0 -6
- langflow/frontend/assets/cloud-drizzle-Dh29HqeX.js +0 -6
- langflow/frontend/assets/cloud-fog-Ck2Ug3wM.js +0 -6
- langflow/frontend/assets/cloud-hail-D7Yhu58V.js +0 -6
- langflow/frontend/assets/cloud-lightning-ybz6-b-5.js +0 -6
- langflow/frontend/assets/cloud-moon-CEUFBTTu.js +0 -6
- langflow/frontend/assets/cloud-moon-rain-rLMia0Ja.js +0 -6
- langflow/frontend/assets/cloud-off-CWaVStBb.js +0 -6
- langflow/frontend/assets/cloud-rain-K5ZP6Km1.js +0 -6
- langflow/frontend/assets/cloud-rain-wind-Bf4N3m9M.js +0 -6
- langflow/frontend/assets/cloud-snow-yTbJ51ZG.js +0 -6
- langflow/frontend/assets/cloud-sun-M9yX8Mog.js +0 -6
- langflow/frontend/assets/cloud-sun-rain-BlNAu8lZ.js +0 -6
- langflow/frontend/assets/cloud-upload-rbsfM4JU.js +0 -6
- langflow/frontend/assets/cloudy-DDscJFzK.js +0 -6
- langflow/frontend/assets/clover-BHLmf_Hf.js +0 -6
- langflow/frontend/assets/club-C4mz33l-.js +0 -6
- langflow/frontend/assets/code-xml-KFyXPWCB.js +0 -6
- langflow/frontend/assets/codepen-CaEj8MYz.js +0 -6
- langflow/frontend/assets/codesandbox-DDId5WBk.js +0 -6
- langflow/frontend/assets/coffee-Cj_3nLPS.js +0 -6
- langflow/frontend/assets/cog-CyDzF3Xv.js +0 -6
- langflow/frontend/assets/coins-DeJ1ZkXq.js +0 -6
- langflow/frontend/assets/columns-2-B0rpgc8h.js +0 -6
- langflow/frontend/assets/columns-3-B-JpTrsh.js +0 -6
- langflow/frontend/assets/columns-3-cog-BfN6XfFc.js +0 -6
- langflow/frontend/assets/columns-4-CR7SFwRY.js +0 -6
- langflow/frontend/assets/combine-CNL4LOJW.js +0 -6
- langflow/frontend/assets/command-BiND_REq.js +0 -6
- langflow/frontend/assets/compass-0Lq1E9jq.js +0 -6
- langflow/frontend/assets/component-BB1a1pxh.js +0 -6
- langflow/frontend/assets/computer-C6AWmbDk.js +0 -6
- langflow/frontend/assets/concierge-bell-0Y42gnYF.js +0 -6
- langflow/frontend/assets/cone-5S8sjlFQ.js +0 -6
- langflow/frontend/assets/construction-Bkp9l3kO.js +0 -6
- langflow/frontend/assets/contact-MRVrPR4B.js +0 -6
- langflow/frontend/assets/contact-round-Cyb-Wkyv.js +0 -6
- langflow/frontend/assets/container-BwP8sFlV.js +0 -6
- langflow/frontend/assets/contrast-DLFY_4pi.js +0 -6
- langflow/frontend/assets/cookie-DCcRKphs.js +0 -6
- langflow/frontend/assets/cooking-pot-zdn1QI8y.js +0 -6
- langflow/frontend/assets/copy-BFJRM2Ys.js +0 -6
- langflow/frontend/assets/copy-check-DBPR_ihx.js +0 -6
- langflow/frontend/assets/copy-minus-CrX_plN2.js +0 -6
- langflow/frontend/assets/copy-plus-96OM-e-a.js +0 -6
- langflow/frontend/assets/copy-slash-D1FGeLsf.js +0 -6
- langflow/frontend/assets/copy-x-cylQjIqJ.js +0 -6
- langflow/frontend/assets/copyleft-DMbGnqfv.js +0 -6
- langflow/frontend/assets/copyright-eSk7LKZm.js +0 -6
- langflow/frontend/assets/corner-down-left-DXwr5A2j.js +0 -6
- langflow/frontend/assets/corner-down-right-BkE7pQE5.js +0 -6
- langflow/frontend/assets/corner-left-down-CxcWplYX.js +0 -6
- langflow/frontend/assets/corner-left-up-BaVHSvSB.js +0 -6
- langflow/frontend/assets/corner-right-down-CQD1fILr.js +0 -6
- langflow/frontend/assets/corner-right-up-BiZJNaQU.js +0 -6
- langflow/frontend/assets/corner-up-left-DUwXmTqr.js +0 -6
- langflow/frontend/assets/corner-up-right-B0jajDcb.js +0 -6
- langflow/frontend/assets/cpu-DIXEHdSH.js +0 -6
- langflow/frontend/assets/creative-commons-BUw2aCmZ.js +0 -6
- langflow/frontend/assets/credit-card-DqcWBej1.js +0 -6
- langflow/frontend/assets/croissant-BTxlKWp6.js +0 -6
- langflow/frontend/assets/crop-BXMDRveE.js +0 -6
- langflow/frontend/assets/cross-CGeGoQCG.js +0 -6
- langflow/frontend/assets/crosshair-dI1JSq21.js +0 -6
- langflow/frontend/assets/crown-Cl6iU52n.js +0 -6
- langflow/frontend/assets/cuboid-43Q4GzU9.js +0 -6
- langflow/frontend/assets/cup-soda-DZXsFjoW.js +0 -6
- langflow/frontend/assets/currency-DRsWsDLp.js +0 -6
- langflow/frontend/assets/cylinder-CDHzYJdI.js +0 -6
- langflow/frontend/assets/dam-CxlZKELk.js +0 -6
- langflow/frontend/assets/database-CJr-FNJ5.js +0 -6
- langflow/frontend/assets/database-backup-o-yYl6nP.js +0 -6
- langflow/frontend/assets/database-zap-DL7YJXpW.js +0 -6
- langflow/frontend/assets/decimals-arrow-left-D-q8HsRd.js +0 -6
- langflow/frontend/assets/decimals-arrow-right-CHREObAO.js +0 -6
- langflow/frontend/assets/delete-D872SUC4.js +0 -6
- langflow/frontend/assets/dessert-f-SG6XBB.js +0 -6
- langflow/frontend/assets/diameter-C19B7GNV.js +0 -6
- langflow/frontend/assets/diamond-CJA930tw.js +0 -6
- langflow/frontend/assets/diamond-minus-BHQcfJ1x.js +0 -6
- langflow/frontend/assets/diamond-percent-CWDLqktF.js +0 -6
- langflow/frontend/assets/diamond-plus-D3Q9mWky.js +0 -6
- langflow/frontend/assets/dice-1-C5FuHk0l.js +0 -6
- langflow/frontend/assets/dice-2-DAoSv18N.js +0 -6
- langflow/frontend/assets/dice-3-2v3VsmmS.js +0 -6
- langflow/frontend/assets/dice-4-BVpD0-Hf.js +0 -6
- langflow/frontend/assets/dice-5-DLeXvvSw.js +0 -6
- langflow/frontend/assets/dice-6-CHXOtUP7.js +0 -6
- langflow/frontend/assets/dices-BrlCqisi.js +0 -6
- langflow/frontend/assets/diff-mKC2Novh.js +0 -6
- langflow/frontend/assets/disc-2-8zBP-orc.js +0 -6
- langflow/frontend/assets/disc-3-DyXi7mYg.js +0 -6
- langflow/frontend/assets/disc-DlWLGtPW.js +0 -6
- langflow/frontend/assets/disc-album-gVsuqQTc.js +0 -6
- langflow/frontend/assets/divide-DMfyrb08.js +0 -6
- langflow/frontend/assets/dna-4FdGgAws.js +0 -6
- langflow/frontend/assets/dna-off-B2s4x5Jm.js +0 -6
- langflow/frontend/assets/dock-BfUEveo5.js +0 -6
- langflow/frontend/assets/dog-CxjaLXdL.js +0 -6
- langflow/frontend/assets/dollar-sign-DkFBfsEv.js +0 -6
- langflow/frontend/assets/donut-Cb9_joe5.js +0 -6
- langflow/frontend/assets/door-closed-B8CHkpLP.js +0 -6
- langflow/frontend/assets/door-open-D4V595vT.js +0 -6
- langflow/frontend/assets/dot-BarDopmQ.js +0 -6
- langflow/frontend/assets/download-gEj1k5Nq.js +0 -6
- langflow/frontend/assets/drafting-compass-MrYr713U.js +0 -6
- langflow/frontend/assets/drama-D0-cRbwh.js +0 -6
- langflow/frontend/assets/dribbble-BDQwNsNH.js +0 -6
- langflow/frontend/assets/drill-Dmhg_4t_.js +0 -6
- langflow/frontend/assets/droplet-JuMfAA2-.js +0 -6
- langflow/frontend/assets/droplet-off-BeYM02ER.js +0 -6
- langflow/frontend/assets/droplets-DaMLRgIF.js +0 -6
- langflow/frontend/assets/drum-BqBwNKmf.js +0 -6
- langflow/frontend/assets/drumstick-DZsM1pIS.js +0 -6
- langflow/frontend/assets/dumbbell-dSG1kBPb.js +0 -6
- langflow/frontend/assets/ear-fqcptM8F.js +0 -6
- langflow/frontend/assets/ear-off-DH6kW97t.js +0 -6
- langflow/frontend/assets/earth-0ZhKod0m.js +0 -6
- langflow/frontend/assets/earth-lock-DAhr18X_.js +0 -6
- langflow/frontend/assets/eclipse-Du3SOCuK.js +0 -6
- langflow/frontend/assets/egg-DcSo0Y4g.js +0 -6
- langflow/frontend/assets/egg-fried-BGxQ6Z_A.js +0 -6
- langflow/frontend/assets/egg-off-8YxmJtq5.js +0 -6
- langflow/frontend/assets/ellipsis-CXF2hSRc.js +0 -6
- langflow/frontend/assets/ellipsis-vertical-gJtOJB4U.js +0 -6
- langflow/frontend/assets/equal-BJwTnDs4.js +0 -6
- langflow/frontend/assets/equal-approximately-9Men7o_q.js +0 -6
- langflow/frontend/assets/equal-not-OIOoJubK.js +0 -6
- langflow/frontend/assets/eraser-Dc2DOnVL.js +0 -6
- langflow/frontend/assets/ethernet-port-5lnUYrQ0.js +0 -6
- langflow/frontend/assets/euro-D_hKEWYm.js +0 -6
- langflow/frontend/assets/expand-DlP77yko.js +0 -6
- langflow/frontend/assets/eye-closed-BY7NqqNi.js +0 -6
- langflow/frontend/assets/eye-off-BjigD_OE.js +0 -6
- langflow/frontend/assets/eye-rW97eEsO.js +0 -6
- langflow/frontend/assets/facebook-bPITr34Z.js +0 -6
- langflow/frontend/assets/factory-B9KOShwp.js +0 -6
- langflow/frontend/assets/fan-Ccg3MXB6.js +0 -6
- langflow/frontend/assets/fast-forward-C8izVlJs.js +0 -6
- langflow/frontend/assets/feather-BzArIA-e.js +0 -6
- langflow/frontend/assets/fence-DzfGXSKu.js +0 -6
- langflow/frontend/assets/ferris-wheel-DUi-JXX7.js +0 -6
- langflow/frontend/assets/figma-4_VvQnxT.js +0 -6
- langflow/frontend/assets/file-DCFrV7Q4.js +0 -6
- langflow/frontend/assets/file-archive-Btkq97E7.js +0 -6
- langflow/frontend/assets/file-audio-2-CDdVb9IQ.js +0 -6
- langflow/frontend/assets/file-audio-BX8aIJWm.js +0 -6
- langflow/frontend/assets/file-axis-3d-DSRX84gl.js +0 -6
- langflow/frontend/assets/file-badge-2-CMqd6IFv.js +0 -6
- langflow/frontend/assets/file-badge-JyAhz1B3.js +0 -6
- langflow/frontend/assets/file-box-QiU4s76c.js +0 -6
- langflow/frontend/assets/file-chart-column-C8oRmu5l.js +0 -6
- langflow/frontend/assets/file-chart-column-increasing-jlLy6Syb.js +0 -6
- langflow/frontend/assets/file-chart-line-nZdECoxK.js +0 -6
- langflow/frontend/assets/file-chart-pie-awDA-wt8.js +0 -6
- langflow/frontend/assets/file-check-2-DGNZ44sF.js +0 -6
- langflow/frontend/assets/file-check-BpuNh2MZ.js +0 -6
- langflow/frontend/assets/file-clock-DBlozspr.js +0 -6
- langflow/frontend/assets/file-code-2-D2CEcyp3.js +0 -6
- langflow/frontend/assets/file-code-DGxt4W1t.js +0 -6
- langflow/frontend/assets/file-cog-J6FH4rF4.js +0 -6
- langflow/frontend/assets/file-diff-BLiWCYSj.js +0 -6
- langflow/frontend/assets/file-digit-CfAFvD7W.js +0 -6
- langflow/frontend/assets/file-down-Bh1ghiKq.js +0 -6
- langflow/frontend/assets/file-heart-LakIvOFW.js +0 -6
- langflow/frontend/assets/file-image-BIeOXYOn.js +0 -6
- langflow/frontend/assets/file-input-CzBJ5XRP.js +0 -6
- langflow/frontend/assets/file-json-2-r2BgbONC.js +0 -6
- langflow/frontend/assets/file-json-DwFkQ-KU.js +0 -6
- langflow/frontend/assets/file-key-2-CvZ5i0ca.js +0 -6
- langflow/frontend/assets/file-key-D81B7nZm.js +0 -6
- langflow/frontend/assets/file-lock-2-CwyonEhg.js +0 -6
- langflow/frontend/assets/file-lock-DDVyrphW.js +0 -6
- langflow/frontend/assets/file-minus-2-CQNg6eu1.js +0 -6
- langflow/frontend/assets/file-minus-7EmXPu_k.js +0 -6
- langflow/frontend/assets/file-music-BstMfMxK.js +0 -6
- langflow/frontend/assets/file-output-BDSeD8UO.js +0 -6
- langflow/frontend/assets/file-pen-BY5ueYAI.js +0 -6
- langflow/frontend/assets/file-pen-line-DX6Th7gy.js +0 -6
- langflow/frontend/assets/file-plus-2-B_QaA744.js +0 -6
- langflow/frontend/assets/file-plus-qQBem2np.js +0 -6
- langflow/frontend/assets/file-question-BPis8YPT.js +0 -6
- langflow/frontend/assets/file-scan-DpL890np.js +0 -6
- langflow/frontend/assets/file-search-2-D4-1Xi4D.js +0 -6
- langflow/frontend/assets/file-search-MybvuYC4.js +0 -6
- langflow/frontend/assets/file-sliders-CmUZEDXi.js +0 -6
- langflow/frontend/assets/file-spreadsheet-r7vUagEb.js +0 -6
- langflow/frontend/assets/file-stack-CJ6ozhfC.js +0 -6
- langflow/frontend/assets/file-symlink-DHorNAse.js +0 -6
- langflow/frontend/assets/file-terminal-RGIyRXl8.js +0 -6
- langflow/frontend/assets/file-text-D4YyCd0h.js +0 -6
- langflow/frontend/assets/file-type-2-CtnIcKp1.js +0 -6
- langflow/frontend/assets/file-type-DFMJrmpc.js +0 -6
- langflow/frontend/assets/file-up-B_6YRo4k.js +0 -6
- langflow/frontend/assets/file-user-B5hJ7ZGf.js +0 -6
- langflow/frontend/assets/file-video-2-CB_cqVf9.js +0 -6
- langflow/frontend/assets/file-video-CqbgfXwz.js +0 -6
- langflow/frontend/assets/file-volume-2-CiP0vHRx.js +0 -6
- langflow/frontend/assets/file-volume-CB48Y7hE.js +0 -6
- langflow/frontend/assets/file-warning-Dlik4Z10.js +0 -6
- langflow/frontend/assets/file-x-2-BOERRQi9.js +0 -6
- langflow/frontend/assets/file-x-Bz7dINCS.js +0 -6
- langflow/frontend/assets/files-BncrwBTO.js +0 -6
- langflow/frontend/assets/film-B2SBGav4.js +0 -6
- langflow/frontend/assets/fingerprint-B7Lkz00j.js +0 -6
- langflow/frontend/assets/fire-extinguisher-D6QDO17J.js +0 -6
- langflow/frontend/assets/fish-POKVJYey.js +0 -6
- langflow/frontend/assets/fish-off-BB2CKSkD.js +0 -6
- langflow/frontend/assets/fish-symbol-C0TqXnen.js +0 -6
- langflow/frontend/assets/flag-CMhcjVQ-.js +0 -6
- langflow/frontend/assets/flag-off-Bk4jZ209.js +0 -6
- langflow/frontend/assets/flag-triangle-left-m4s8ZQKY.js +0 -6
- langflow/frontend/assets/flag-triangle-right-wBBdtI3y.js +0 -6
- langflow/frontend/assets/flame-CGmMQo-g.js +0 -6
- langflow/frontend/assets/flame-kindling-X96U3M2D.js +0 -6
- langflow/frontend/assets/flashlight-BgaVQe9c.js +0 -6
- langflow/frontend/assets/flashlight-off-a8FwZAVg.js +0 -6
- langflow/frontend/assets/flask-conical-BiCOqhl_.js +0 -6
- langflow/frontend/assets/flask-conical-off-DsE6nv63.js +0 -6
- langflow/frontend/assets/flask-round-DjH4Yykt.js +0 -6
- langflow/frontend/assets/flip-horizontal-2-CKKkqCL2.js +0 -6
- langflow/frontend/assets/flip-horizontal-C_oloEAG.js +0 -6
- langflow/frontend/assets/flip-vertical-2-D1ipENxU.js +0 -6
- langflow/frontend/assets/flip-vertical-DrqSkDXn.js +0 -6
- langflow/frontend/assets/flower-2-Do2xuxfw.js +0 -6
- langflow/frontend/assets/flower-BISxxqXh.js +0 -6
- langflow/frontend/assets/focus-DQFkjQQe.js +0 -6
- langflow/frontend/assets/fold-horizontal-BVOxfAu9.js +0 -6
- langflow/frontend/assets/fold-vertical-Jv9nkHIl.js +0 -6
- langflow/frontend/assets/folder-Cqj5hQQA.js +0 -6
- langflow/frontend/assets/folder-archive-FLcMdVZX.js +0 -6
- langflow/frontend/assets/folder-check-BqqeUTie.js +0 -6
- langflow/frontend/assets/folder-clock-BSsiqnuG.js +0 -6
- langflow/frontend/assets/folder-closed-Bj5p2GNo.js +0 -6
- langflow/frontend/assets/folder-code-BbVqSC0B.js +0 -6
- langflow/frontend/assets/folder-cog-DQYJwNRP.js +0 -6
- langflow/frontend/assets/folder-dot-DEkdsaUt.js +0 -6
- langflow/frontend/assets/folder-down-D_bLkcdH.js +0 -6
- langflow/frontend/assets/folder-git-2-YZaov8rm.js +0 -6
- langflow/frontend/assets/folder-git-cImRgTqM.js +0 -6
- langflow/frontend/assets/folder-heart-C4J9TGXV.js +0 -6
- langflow/frontend/assets/folder-input-BQVgp6nA.js +0 -6
- langflow/frontend/assets/folder-kanban-ctz49Aju.js +0 -6
- langflow/frontend/assets/folder-key-BqwWRmH0.js +0 -6
- langflow/frontend/assets/folder-lock-D4RPOR7q.js +0 -6
- langflow/frontend/assets/folder-minus-DAlVmKAp.js +0 -6
- langflow/frontend/assets/folder-open-B9BvzjwG.js +0 -6
- langflow/frontend/assets/folder-open-dot-C4yEPYGc.js +0 -6
- langflow/frontend/assets/folder-output-kpv3zoZi.js +0 -6
- langflow/frontend/assets/folder-pen-K_hfywXx.js +0 -6
- langflow/frontend/assets/folder-plus-CFe-cfqJ.js +0 -6
- langflow/frontend/assets/folder-root-DYBXMzx1.js +0 -6
- langflow/frontend/assets/folder-search-2-BSh2T0gJ.js +0 -6
- langflow/frontend/assets/folder-search-Ddmqg7ew.js +0 -6
- langflow/frontend/assets/folder-symlink-8xMioeAY.js +0 -6
- langflow/frontend/assets/folder-sync-D-Ses2dX.js +0 -6
- langflow/frontend/assets/folder-tree-BWZxYQyx.js +0 -6
- langflow/frontend/assets/folder-up-BNC_9bbn.js +0 -6
- langflow/frontend/assets/folder-x-B3PjCfhi.js +0 -6
- langflow/frontend/assets/folders-D4Wq-LCk.js +0 -6
- langflow/frontend/assets/footprints-DWyxiXFm.js +0 -6
- langflow/frontend/assets/forklift-Z5LzjkHL.js +0 -6
- langflow/frontend/assets/forward-CexpH8kH.js +0 -6
- langflow/frontend/assets/frame-B11eQLFr.js +0 -6
- langflow/frontend/assets/framer-DC3kYcIF.js +0 -6
- langflow/frontend/assets/frown-D38cJawk.js +0 -6
- langflow/frontend/assets/fuel-yOZnwH9Z.js +0 -6
- langflow/frontend/assets/fullscreen-rse7LZDd.js +0 -6
- langflow/frontend/assets/funnel-Bze-WMc6.js +0 -6
- langflow/frontend/assets/funnel-plus-DumpHSQW.js +0 -6
- langflow/frontend/assets/funnel-x-BlzrXJ2i.js +0 -6
- langflow/frontend/assets/gallery-horizontal-end-_ejLtX0i.js +0 -6
- langflow/frontend/assets/gallery-horizontal-yfQHSSE5.js +0 -6
- langflow/frontend/assets/gallery-thumbnails-Bh_kCi7o.js +0 -6
- langflow/frontend/assets/gallery-vertical-B6-e0Ni6.js +0 -6
- langflow/frontend/assets/gallery-vertical-end-Cf4F1Nxs.js +0 -6
- langflow/frontend/assets/gamepad-2-DShw_fj2.js +0 -6
- langflow/frontend/assets/gamepad-CBdn9mvE.js +0 -6
- langflow/frontend/assets/gauge-CNPcm4rt.js +0 -6
- langflow/frontend/assets/gavel-B6ct2Si_.js +0 -6
- langflow/frontend/assets/gem-DzbGxMVW.js +0 -6
- langflow/frontend/assets/ghost-CdNsbE2w.js +0 -6
- langflow/frontend/assets/gift-C_X28YNa.js +0 -6
- langflow/frontend/assets/git-branch-DpL0ndAj.js +0 -6
- langflow/frontend/assets/git-branch-plus-BpVWVplK.js +0 -6
- langflow/frontend/assets/git-commit-horizontal-DE6tF3O6.js +0 -6
- langflow/frontend/assets/git-commit-vertical-nGix-3vC.js +0 -6
- langflow/frontend/assets/git-compare-AhrF-RRS.js +0 -6
- langflow/frontend/assets/git-compare-arrows-B7kwRBJ2.js +0 -6
- langflow/frontend/assets/git-fork-DgPY318R.js +0 -6
- langflow/frontend/assets/git-graph-BpfTuJ2D.js +0 -6
- langflow/frontend/assets/git-merge-ARUHVP2M.js +0 -6
- langflow/frontend/assets/git-pull-request-CK59od2i.js +0 -6
- langflow/frontend/assets/git-pull-request-arrow-DiNfSHJ-.js +0 -6
- langflow/frontend/assets/git-pull-request-closed-CLbmUUdg.js +0 -6
- langflow/frontend/assets/git-pull-request-create-XL6nP3nQ.js +0 -6
- langflow/frontend/assets/git-pull-request-create-arrow-DuIsNnmr.js +0 -6
- langflow/frontend/assets/git-pull-request-draft-CRqnoaOC.js +0 -6
- langflow/frontend/assets/github-DVMZQK-G.js +0 -6
- langflow/frontend/assets/gitlab-Cxom8Bjl.js +0 -6
- langflow/frontend/assets/glass-water-BxkosC8L.js +0 -6
- langflow/frontend/assets/glasses-DqWOdkmJ.js +0 -6
- langflow/frontend/assets/globe-ZLQTD4sx.js +0 -6
- langflow/frontend/assets/globe-lock-DdptaQct.js +0 -6
- langflow/frontend/assets/goal-tiH_NoFu.js +0 -6
- langflow/frontend/assets/grab-DIBYz20P.js +0 -6
- langflow/frontend/assets/graduation-cap-ByZ_qv70.js +0 -6
- langflow/frontend/assets/grape-D3ICIquq.js +0 -6
- langflow/frontend/assets/grid-2x2-check-V91IVAw3.js +0 -6
- langflow/frontend/assets/grid-2x2-plus-BUc_xYLS.js +0 -6
- langflow/frontend/assets/grid-2x2-x-CeWyMeF5.js +0 -6
- langflow/frontend/assets/grid-2x2-x7LlwDu0.js +0 -6
- langflow/frontend/assets/grid-3x3-CTMjkuKA.js +0 -6
- langflow/frontend/assets/grip-BL6GYHTq.js +0 -6
- langflow/frontend/assets/grip-horizontal-BaHUWp_e.js +0 -6
- langflow/frontend/assets/grip-vertical-sDScg1ic.js +0 -6
- langflow/frontend/assets/group-LDwB3Uzk.js +0 -6
- langflow/frontend/assets/guitar-C9zll7Kx.js +0 -6
- langflow/frontend/assets/ham-CB9yMV6O.js +0 -6
- langflow/frontend/assets/hammer-CGb-Mrox.js +0 -6
- langflow/frontend/assets/hand-BQAHCHx1.js +0 -6
- langflow/frontend/assets/hand-coins-Dphsbl_0.js +0 -6
- langflow/frontend/assets/hand-heart-B2xjCT2t.js +0 -6
- langflow/frontend/assets/hand-helping-BWR2WYpz.js +0 -6
- langflow/frontend/assets/hand-metal-DjvSEMzS.js +0 -6
- langflow/frontend/assets/hand-platter-ZB4dfOX0.js +0 -6
- langflow/frontend/assets/handshake-DymEJdT6.js +0 -6
- langflow/frontend/assets/hard-drive-YV_BAntj.js +0 -6
- langflow/frontend/assets/hard-drive-download-Cd3RWQqH.js +0 -6
- langflow/frontend/assets/hard-drive-upload-DxyCK3Sk.js +0 -6
- langflow/frontend/assets/hard-hat-BpZz1qD2.js +0 -6
- langflow/frontend/assets/hash-pYFlep27.js +0 -6
- langflow/frontend/assets/haze-n6Dw-9DV.js +0 -6
- langflow/frontend/assets/hdmi-port-Bjhbglnh.js +0 -6
- langflow/frontend/assets/heading-1-DZceccKk.js +0 -6
- langflow/frontend/assets/heading-2-DgQ9xOoU.js +0 -6
- langflow/frontend/assets/heading-3-COBkDkog.js +0 -6
- langflow/frontend/assets/heading-4-BNiD2sl5.js +0 -6
- langflow/frontend/assets/heading-5-COsRiAIe.js +0 -6
- langflow/frontend/assets/heading-6-BrKthQyL.js +0 -6
- langflow/frontend/assets/heading-Co4-wqD4.js +0 -6
- langflow/frontend/assets/headphone-off-CKZHvYAk.js +0 -6
- langflow/frontend/assets/headphones-Hb_h-xgk.js +0 -6
- langflow/frontend/assets/headset-yPmR9iMu.js +0 -6
- langflow/frontend/assets/heart-OTPiH247.js +0 -6
- langflow/frontend/assets/heart-crack-CJPuUKdr.js +0 -6
- langflow/frontend/assets/heart-handshake-CH7wSKRr.js +0 -6
- langflow/frontend/assets/heart-minus-BOxqcDkS.js +0 -6
- langflow/frontend/assets/heart-off-DYXOwKeJ.js +0 -6
- langflow/frontend/assets/heart-plus-CnP5gTd9.js +0 -6
- langflow/frontend/assets/heart-pulse-C4DrTmPe.js +0 -6
- langflow/frontend/assets/heater-DCR_c8Pn.js +0 -6
- langflow/frontend/assets/hexagon-CqMusHLs.js +0 -6
- langflow/frontend/assets/highlighter-rP2pZrJ8.js +0 -6
- langflow/frontend/assets/history-Du8arOQO.js +0 -6
- langflow/frontend/assets/hop-BEuEObr9.js +0 -6
- langflow/frontend/assets/hop-off-BCK8NMuR.js +0 -6
- langflow/frontend/assets/hospital-D6ud_26T.js +0 -6
- langflow/frontend/assets/hotel-D13Oo-qa.js +0 -6
- langflow/frontend/assets/hourglass-CwCT1KJF.js +0 -6
- langflow/frontend/assets/house-CDeqVDAu.js +0 -6
- langflow/frontend/assets/house-plug-DXrAn-tK.js +0 -6
- langflow/frontend/assets/house-plus-CBHchovT.js +0 -6
- langflow/frontend/assets/house-wifi-ICdCL0Yu.js +0 -6
- langflow/frontend/assets/ice-cream-bowl-DNHS2ppQ.js +0 -6
- langflow/frontend/assets/ice-cream-cone-DWzcwjjz.js +0 -6
- langflow/frontend/assets/id-card-CIFLOi8-.js +0 -6
- langflow/frontend/assets/image-8lrhnK9q.js +0 -6
- langflow/frontend/assets/image-down-MivzztGn.js +0 -6
- langflow/frontend/assets/image-minus-CERFu_4q.js +0 -6
- langflow/frontend/assets/image-off-zz1D7Okh.js +0 -6
- langflow/frontend/assets/image-play-zoQF7erx.js +0 -6
- langflow/frontend/assets/image-plus-CIEH8aUL.js +0 -6
- langflow/frontend/assets/image-up-CT1WjShr.js +0 -6
- langflow/frontend/assets/image-upscale-DdRcDZ4b.js +0 -6
- langflow/frontend/assets/images-CPFHR4mU.js +0 -6
- langflow/frontend/assets/import-DcWWEiZo.js +0 -6
- langflow/frontend/assets/inbox-BDDxFuvW.js +0 -6
- langflow/frontend/assets/indent-decrease-CmDJCBeR.js +0 -6
- langflow/frontend/assets/indent-increase-74C2cRqK.js +0 -6
- langflow/frontend/assets/index--1QMMYIc.js +0 -1
- langflow/frontend/assets/index-0WN6pVwT.js +0 -1
- langflow/frontend/assets/index-0bWf-L-b.js +0 -1
- langflow/frontend/assets/index-1py8E_Tx.js +0 -1
- langflow/frontend/assets/index-1yHdKdth.js +0 -1
- langflow/frontend/assets/index-3qAxyhl0.js +0 -1
- langflow/frontend/assets/index-4EAzqPx4.js +0 -1
- langflow/frontend/assets/index-6v0s4dis.js +0 -1
- langflow/frontend/assets/index-6y8j2y-V.js +0 -1
- langflow/frontend/assets/index-81o9A7OA.js +0 -1
- langflow/frontend/assets/index-9AaoneFI.js +0 -1
- langflow/frontend/assets/index-9ESNmM54.js +0 -1
- langflow/frontend/assets/index-ABP_zOp7.js +0 -767
- langflow/frontend/assets/index-B-3OTSlA.js +0 -1
- langflow/frontend/assets/index-B-T5Td-D.js +0 -1
- langflow/frontend/assets/index-B0jH37wS.js +0 -1
- langflow/frontend/assets/index-B4AXwK-w.js +0 -1
- langflow/frontend/assets/index-B4Gmzhai.js +0 -127
- langflow/frontend/assets/index-B4xCL6g4.js +0 -1
- langflow/frontend/assets/index-B63jL-59.js +0 -1
- langflow/frontend/assets/index-B8fLSnd-.js +0 -1
- langflow/frontend/assets/index-B95vMWcY.js +0 -1
- langflow/frontend/assets/index-B9jzLxxZ.js +0 -7
- langflow/frontend/assets/index-BBq16oa0.js +0 -1
- langflow/frontend/assets/index-BHejvkeO.js +0 -1
- langflow/frontend/assets/index-BIYCMewV.js +0 -1
- langflow/frontend/assets/index-BIwweneq.js +0 -1
- langflow/frontend/assets/index-BJj_mWu7.js +0 -1
- langflow/frontend/assets/index-BM2mE-74.js +0 -1
- langflow/frontend/assets/index-BMo2ApPC.js +0 -1
- langflow/frontend/assets/index-BMt_Krw8.js +0 -1
- langflow/frontend/assets/index-BNQsRPDx.js +0 -1
- langflow/frontend/assets/index-BNbUwl9Q.js +0 -1
- langflow/frontend/assets/index-BPh4cRtl.js +0 -1
- langflow/frontend/assets/index-BPnYilh6.js +0 -1
- langflow/frontend/assets/index-BSRt96De.js +0 -1
- langflow/frontend/assets/index-BSjl5FGL.js +0 -495
- langflow/frontend/assets/index-BSyXWLsw.js +0 -1
- langflow/frontend/assets/index-BU_i9Zbz.js +0 -1
- langflow/frontend/assets/index-BV6_R236.js +0 -1
- langflow/frontend/assets/index-BW9HmKg4.js +0 -1
- langflow/frontend/assets/index-BZRTSMso.js +0 -1
- langflow/frontend/assets/index-B_iU16GD.js +0 -2
- langflow/frontend/assets/index-BaVEhy6J.js +0 -1
- langflow/frontend/assets/index-BbApnSgR.js +0 -1
- langflow/frontend/assets/index-Bf3b-VNo.js +0 -1
- langflow/frontend/assets/index-BgSnQZb1.js +0 -1
- langflow/frontend/assets/index-BieWTUDR.js +0 -1
- langflow/frontend/assets/index-BjGChXQi.js +0 -1
- langflow/frontend/assets/index-Bjn6v5s-.js +0 -1
- langflow/frontend/assets/index-Bk4_fFoi.js +0 -1
- langflow/frontend/assets/index-Bk7jY-8H.js +0 -1
- langflow/frontend/assets/index-Blfeb19y.js +0 -1
- langflow/frontend/assets/index-BoAAZzDw.js +0 -1
- langflow/frontend/assets/index-Bo_2M8J_.js +0 -1
- langflow/frontend/assets/index-Br9Ptc3o.js +0 -1
- langflow/frontend/assets/index-BtUYwrXi.js +0 -1
- langflow/frontend/assets/index-BvNPF0Nj.js +0 -1
- langflow/frontend/assets/index-Bx0j3Zts.js +0 -1
- langflow/frontend/assets/index-Bx_WP072.js +0 -1
- langflow/frontend/assets/index-BznTePCi.js +0 -7322
- langflow/frontend/assets/index-BztxlgQg.js +0 -1
- langflow/frontend/assets/index-C-EGacPa.js +0 -1
- langflow/frontend/assets/index-C1T6hgTG.js +0 -1
- langflow/frontend/assets/index-C1_MhzWh.js +0 -1
- langflow/frontend/assets/index-C1m00tJE.js +0 -1
- langflow/frontend/assets/index-C2ec-hVV.js +0 -1
- langflow/frontend/assets/index-C4WWmwqa.js +0 -1
- langflow/frontend/assets/index-C5575BDe.js +0 -1
- langflow/frontend/assets/index-C5HA5jhu.js +0 -1
- langflow/frontend/assets/index-CANEVJ8J.js +0 -1
- langflow/frontend/assets/index-CDSw7f9V.js +0 -1
- langflow/frontend/assets/index-CKqzp1QY.js +0 -1
- langflow/frontend/assets/index-CNPK18T8.js +0 -1
- langflow/frontend/assets/index-CNkw9ANg.js +0 -185
- langflow/frontend/assets/index-CQU61xEY.js +0 -1
- langflow/frontend/assets/index-CS5QOPtB.js +0 -1
- langflow/frontend/assets/index-CSWWIBhM.js +0 -1
- langflow/frontend/assets/index-CSkRImqM.js +0 -108
- langflow/frontend/assets/index-CT9OiF1-.js +0 -1
- langflow/frontend/assets/index-CT_gHlei.js +0 -1
- langflow/frontend/assets/index-CTlZ7MYL.js +0 -1
- langflow/frontend/assets/index-CUOUcAoG.js +0 -1
- langflow/frontend/assets/index-CVVgqrun.js +0 -1
- langflow/frontend/assets/index-CXROUoKH.js +0 -281
- langflow/frontend/assets/index-CXn2ghl7.js +0 -1
- langflow/frontend/assets/index-CXwF99rT.js +0 -1
- langflow/frontend/assets/index-CYCR1mmr.js +0 -1
- langflow/frontend/assets/index-CYJXTgi9.js +0 -1
- langflow/frontend/assets/index-CYSpVKUw.js +0 -1
- langflow/frontend/assets/index-C_4dzgvU.js +0 -399
- langflow/frontend/assets/index-CfIOcXCx.js +0 -1
- langflow/frontend/assets/index-CguHco91.js +0 -1
- langflow/frontend/assets/index-ChA6wfVn.js +0 -1
- langflow/frontend/assets/index-CiS50XPL.js +0 -1
- langflow/frontend/assets/index-CkUEhGxk.js +0 -1
- langflow/frontend/assets/index-ClzKNpOl.js +0 -1
- langflow/frontend/assets/index-Cm4m6Npi.js +0 -1
- langflow/frontend/assets/index-Cn124NBN.js +0 -1
- langflow/frontend/assets/index-CnnFKUR5.js +0 -1
- langflow/frontend/assets/index-CoQwPFAK.js +0 -1
- langflow/frontend/assets/index-CoiSdp8s.js +0 -1
- langflow/frontend/assets/index-CpIdJ4gh.js +0 -1
- langflow/frontend/assets/index-CqGuzyM6.js +0 -1
- langflow/frontend/assets/index-CsYajpiJ.js +0 -1
- langflow/frontend/assets/index-Ct_3nR15.js +0 -1
- langflow/frontend/assets/index-CtwDWU4c.js +0 -1
- langflow/frontend/assets/index-CxqptvJ_.js +0 -1
- langflow/frontend/assets/index-Cy44xg4x.js +0 -205
- langflow/frontend/assets/index-Cz5NTyl-.js +0 -1
- langflow/frontend/assets/index-Czzd1tfW.js +0 -1
- langflow/frontend/assets/index-D37gwKLY.js +0 -1
- langflow/frontend/assets/index-D3P5EFAs.js +0 -1
- langflow/frontend/assets/index-D62JU5Db.js +0 -1
- langflow/frontend/assets/index-D7-T6gRb.js +0 -1
- langflow/frontend/assets/index-D9KNLamU.js +0 -1
- langflow/frontend/assets/index-DAjY-u8y.js +0 -1
- langflow/frontend/assets/index-DDI0iNar.js +0 -1
- langflow/frontend/assets/index-DEFWXy4-.js +0 -1
- langflow/frontend/assets/index-DFn5Eg1C.js +0 -1
- langflow/frontend/assets/index-DG8--NSu.js +0 -1
- langflow/frontend/assets/index-DGax5Git.js +0 -1
- langflow/frontend/assets/index-DIS_JvoJ.js +0 -1
- langflow/frontend/assets/index-DIgVlr1v.js +0 -1
- langflow/frontend/assets/index-DK4lLYFX.js +0 -1
- langflow/frontend/assets/index-DKiJqNCP.js +0 -1
- langflow/frontend/assets/index-DLu_V5nk.js +0 -1
- langflow/frontend/assets/index-DMZv2ZyO.js +0 -13
- langflow/frontend/assets/index-DNntEwqj.js +0 -1
- langflow/frontend/assets/index-DPS9Bk-8.js +0 -1
- langflow/frontend/assets/index-DQNtcEXP.js +0 -1
- langflow/frontend/assets/index-DQk4U2uA.js +0 -1
- langflow/frontend/assets/index-DSqr7t6Z.js +0 -1
- langflow/frontend/assets/index-DVrhpOCA.js +0 -1
- langflow/frontend/assets/index-DVswP_Qi.js +0 -1
- langflow/frontend/assets/index-DVtxGsgJ.js +0 -1
- langflow/frontend/assets/index-DZT9mTAV.js +0 -1
- langflow/frontend/assets/index-DcPN05Dw.js +0 -1
- langflow/frontend/assets/index-Ddj5z9Km.js +0 -1
- langflow/frontend/assets/index-Df8dVhCf.js +0 -1
- langflow/frontend/assets/index-DjzRGNVZ.js +0 -1
- langflow/frontend/assets/index-Dk2aRJId.js +0 -1
- langflow/frontend/assets/index-DlnPkhvr.js +0 -1
- langflow/frontend/assets/index-Dpquteut.js +0 -1
- langflow/frontend/assets/index-DsT653vS.js +0 -1
- langflow/frontend/assets/index-DuFuREwl.js +0 -1
- langflow/frontend/assets/index-Dv82K-tH.js +0 -1
- langflow/frontend/assets/index-Dvq_zmre.js +0 -20
- langflow/frontend/assets/index-Dx3pLgkm.js +0 -1
- langflow/frontend/assets/index-DygpS7gP.js +0 -1
- langflow/frontend/assets/index-EjmYjP72.js +0 -1
- langflow/frontend/assets/index-FcmJj2ju.js +0 -381
- langflow/frontend/assets/index-GwzICAD0.js +0 -1
- langflow/frontend/assets/index-L9ygHvhW.js +0 -1
- langflow/frontend/assets/index-McZ3t4Qo.js +0 -1
- langflow/frontend/assets/index-O7OKAlRD.js +0 -1
- langflow/frontend/assets/index-QSNe5ipa.js +0 -1
- langflow/frontend/assets/index-Ro3kEprV.js +0 -1
- langflow/frontend/assets/index-VC3YRegy.js +0 -1
- langflow/frontend/assets/index-WTn3-emo.js +0 -1
- langflow/frontend/assets/index-WghflxIk.js +0 -1
- langflow/frontend/assets/index-XQQ6rquB.js +0 -21
- langflow/frontend/assets/index-ZxLPHlth.js +0 -1
- langflow/frontend/assets/index-ah3Ws4tr.js +0 -1
- langflow/frontend/assets/index-an1Tgm1f.js +0 -1
- langflow/frontend/assets/index-cr4EXPMM.js +0 -1
- langflow/frontend/assets/index-eBmHYkgL.js +0 -1
- langflow/frontend/assets/index-hiAdGzSn.js +0 -1
- langflow/frontend/assets/index-i7fheos3.js +0 -1
- langflow/frontend/assets/index-iYq0DNqo.js +0 -1
- langflow/frontend/assets/index-jozeq-_E.js +0 -1
- langflow/frontend/assets/index-kAXxgY1G.js +0 -1
- langflow/frontend/assets/index-orsNUB7f.js +0 -1
- langflow/frontend/assets/index-owYZmokj.js +0 -1
- langflow/frontend/assets/index-qFCHsIrR.js +0 -1
- langflow/frontend/assets/index-sXU42-Tg.js +0 -1
- langflow/frontend/assets/index-vnb9-xeA.js +0 -1
- langflow/frontend/assets/index-xAZM7wa1.js +0 -1
- langflow/frontend/assets/index-xgR9kMB0.js +0 -1
- langflow/frontend/assets/index-xpfKmxOj.js +0 -1
- langflow/frontend/assets/index-xx0kHa98.js +0 -1
- langflow/frontend/assets/index-y0zGBpmq.js +0 -1
- langflow/frontend/assets/index-ypySHcfg.js +0 -1
- langflow/frontend/assets/indian-rupee-BdGpPaBe.js +0 -6
- langflow/frontend/assets/infinity-CXl1GZrA.js +0 -6
- langflow/frontend/assets/info-JLGUqxNa.js +0 -6
- langflow/frontend/assets/inspection-panel-C2CnWfoF.js +0 -6
- langflow/frontend/assets/instagram-DeEZoyaf.js +0 -6
- langflow/frontend/assets/italic-Dl8SID3u.js +0 -6
- langflow/frontend/assets/iteration-ccw-CQwEPkFV.js +0 -6
- langflow/frontend/assets/iteration-cw-BZOoGibY.js +0 -6
- langflow/frontend/assets/japanese-yen-Cu8L6rlR.js +0 -6
- langflow/frontend/assets/joystick-C9wCYVUa.js +0 -6
- langflow/frontend/assets/kanban-DAZM5P27.js +0 -6
- langflow/frontend/assets/key-PpRFXvjs.js +0 -6
- langflow/frontend/assets/key-round-CceZIeGe.js +0 -6
- langflow/frontend/assets/key-square-DNb-b56s.js +0 -6
- langflow/frontend/assets/keyboard-BlJPH3AZ.js +0 -6
- langflow/frontend/assets/keyboard-music-CY7AuZkU.js +0 -6
- langflow/frontend/assets/keyboard-off-CfEB7F5d.js +0 -6
- langflow/frontend/assets/lamp-DPeiDkca.js +0 -6
- langflow/frontend/assets/lamp-ceiling-5zxbJG4N.js +0 -6
- langflow/frontend/assets/lamp-desk-DA4ngo0g.js +0 -6
- langflow/frontend/assets/lamp-floor-Duqktv3R.js +0 -6
- langflow/frontend/assets/lamp-wall-down-CU3cMLgR.js +0 -6
- langflow/frontend/assets/lamp-wall-up-qGBGGKxB.js +0 -6
- langflow/frontend/assets/land-plot-Bx5qaEcP.js +0 -6
- langflow/frontend/assets/landmark--1GqSMof.js +0 -6
- langflow/frontend/assets/languages-DKVBzqlL.js +0 -6
- langflow/frontend/assets/laptop-Bu2iiQaH.js +0 -6
- langflow/frontend/assets/laptop-minimal-Bxp9TXWs.js +0 -6
- langflow/frontend/assets/laptop-minimal-check-l5dg56Q-.js +0 -6
- langflow/frontend/assets/lasso-select-BMQa6phc.js +0 -6
- langflow/frontend/assets/lasso-tcMJO0FR.js +0 -6
- langflow/frontend/assets/laugh-Dq-ddMJN.js +0 -6
- langflow/frontend/assets/layers-2-DdFEmq5e.js +0 -6
- langflow/frontend/assets/layers-BwSa8U3i.js +0 -6
- langflow/frontend/assets/layout-dashboard-BwUjTF60.js +0 -6
- langflow/frontend/assets/layout-grid-DP8xP9Ea.js +0 -6
- langflow/frontend/assets/layout-list-Bt7JnaEy.js +0 -6
- langflow/frontend/assets/layout-panel-left-VJU8zFQa.js +0 -6
- langflow/frontend/assets/layout-panel-top-B8PoXBXV.js +0 -6
- langflow/frontend/assets/layout-template-Cc2KOOrd.js +0 -6
- langflow/frontend/assets/lazyIconImports-CnlUAiLx.js +0 -2
- langflow/frontend/assets/leaf-EwYLMUyE.js +0 -6
- langflow/frontend/assets/leafy-green-8-VmzdDn.js +0 -6
- langflow/frontend/assets/lectern-CqQEU4ih.js +0 -6
- langflow/frontend/assets/letter-text-vv_oUxQJ.js +0 -6
- langflow/frontend/assets/library-DxUDs33R.js +0 -6
- langflow/frontend/assets/library-big-DXdiTxle.js +0 -6
- langflow/frontend/assets/life-buoy-yD13AeY_.js +0 -6
- langflow/frontend/assets/ligature-C4bwJf_r.js +0 -6
- langflow/frontend/assets/lightbulb-DvT8LO_W.js +0 -6
- langflow/frontend/assets/lightbulb-off-VcMfbs_k.js +0 -6
- langflow/frontend/assets/link-2-CQk7G3GB.js +0 -6
- langflow/frontend/assets/link-2-off-A2Khinh3.js +0 -6
- langflow/frontend/assets/link-A1U4i2RU.js +0 -6
- langflow/frontend/assets/linkedin-DGEC522l.js +0 -6
- langflow/frontend/assets/list-cOh4uASj.js +0 -6
- langflow/frontend/assets/list-check-BfBUzeeg.js +0 -6
- langflow/frontend/assets/list-checks-BCZZ42p3.js +0 -6
- langflow/frontend/assets/list-collapse-Ukx1VuOG.js +0 -6
- langflow/frontend/assets/list-end-Bipnnsld.js +0 -6
- langflow/frontend/assets/list-filter-CjOazrwq.js +0 -6
- langflow/frontend/assets/list-filter-plus-CJfT5iPD.js +0 -6
- langflow/frontend/assets/list-minus-Dm1l6u2Y.js +0 -6
- langflow/frontend/assets/list-music-B3V_EZtn.js +0 -6
- langflow/frontend/assets/list-ordered-Djaiepr0.js +0 -6
- langflow/frontend/assets/list-plus-CfXNspHi.js +0 -6
- langflow/frontend/assets/list-restart-5VE8IGbL.js +0 -6
- langflow/frontend/assets/list-start-DWBHAblg.js +0 -6
- langflow/frontend/assets/list-todo-B5Zrm0yo.js +0 -6
- langflow/frontend/assets/list-tree-CNty983W.js +0 -6
- langflow/frontend/assets/list-video-CwobsAoj.js +0 -6
- langflow/frontend/assets/list-x-ConcGJiN.js +0 -6
- langflow/frontend/assets/loader-C3N0Fpfi.js +0 -6
- langflow/frontend/assets/loader-circle-C8WYAOxR.js +0 -6
- langflow/frontend/assets/loader-pinwheel-D3SitjE5.js +0 -6
- langflow/frontend/assets/locate-DwOFyga3.js +0 -6
- langflow/frontend/assets/locate-fixed-DYFoSsh3.js +0 -6
- langflow/frontend/assets/locate-off-DMlS5uHb.js +0 -6
- langflow/frontend/assets/location-edit-DlxEbVcC.js +0 -6
- langflow/frontend/assets/lock-BPptsZlm.js +0 -6
- langflow/frontend/assets/lock-keyhole-BBuXkRwJ.js +0 -6
- langflow/frontend/assets/lock-keyhole-open-COk25wqK.js +0 -6
- langflow/frontend/assets/lock-open-BSMRJ_BG.js +0 -6
- langflow/frontend/assets/log-in--3_Gw77a.js +0 -6
- langflow/frontend/assets/log-out-Ch_EYrit.js +0 -6
- langflow/frontend/assets/logs-SGNW8oSE.js +0 -6
- langflow/frontend/assets/lollipop-Dc-GspZe.js +0 -6
- langflow/frontend/assets/luggage-C_UhHTEv.js +0 -6
- langflow/frontend/assets/magnet-CPViTIx5.js +0 -6
- langflow/frontend/assets/mail-DVbPJq5-.js +0 -6
- langflow/frontend/assets/mail-check-BZ9NmD4C.js +0 -6
- langflow/frontend/assets/mail-minus-VhCRZEQc.js +0 -6
- langflow/frontend/assets/mail-open-BaVSAm-G.js +0 -6
- langflow/frontend/assets/mail-plus-B0oO0sPp.js +0 -6
- langflow/frontend/assets/mail-question-Babysw9Q.js +0 -6
- langflow/frontend/assets/mail-search-4TXvYlXA.js +0 -6
- langflow/frontend/assets/mail-warning-eYPPNUoZ.js +0 -6
- langflow/frontend/assets/mail-x-CY2vjIJ6.js +0 -6
- langflow/frontend/assets/mailbox-BtU9xkhw.js +0 -6
- langflow/frontend/assets/mails-BW6IHCDD.js +0 -6
- langflow/frontend/assets/map-DqmZ0OZu.js +0 -6
- langflow/frontend/assets/map-pin-DGJU3hH8.js +0 -6
- langflow/frontend/assets/map-pin-check-DhQlh1sV.js +0 -6
- langflow/frontend/assets/map-pin-check-inside-B3oo0rgL.js +0 -6
- langflow/frontend/assets/map-pin-house-DpA2n6Wq.js +0 -6
- langflow/frontend/assets/map-pin-minus-E_PToQa4.js +0 -6
- langflow/frontend/assets/map-pin-minus-inside-Cfhv7ZN5.js +0 -6
- langflow/frontend/assets/map-pin-off-ata75prc.js +0 -6
- langflow/frontend/assets/map-pin-plus-Df5KW6Ba.js +0 -6
- langflow/frontend/assets/map-pin-plus-inside-NBgTmxDr.js +0 -6
- langflow/frontend/assets/map-pin-x-CI7gPxg4.js +0 -6
- langflow/frontend/assets/map-pin-x-inside-DlIlFpPi.js +0 -6
- langflow/frontend/assets/map-pinned-dAMkuzeJ.js +0 -6
- langflow/frontend/assets/map-plus-wUzb2v1q.js +0 -6
- langflow/frontend/assets/mars-DrUrEJsY.js +0 -6
- langflow/frontend/assets/mars-stroke-DMt8zpiw.js +0 -6
- langflow/frontend/assets/martini-C17rQMzM.js +0 -6
- langflow/frontend/assets/maximize-2-p_0RDewl.js +0 -6
- langflow/frontend/assets/maximize-BiQMaDdO.js +0 -6
- langflow/frontend/assets/medal-BmHFlq7c.js +0 -6
- langflow/frontend/assets/megaphone-DQKVC9c5.js +0 -6
- langflow/frontend/assets/megaphone-off-J0NmihxO.js +0 -6
- langflow/frontend/assets/meh-BRvssu9W.js +0 -6
- langflow/frontend/assets/memory-stick-Dq3UzdRO.js +0 -6
- langflow/frontend/assets/menu-C0_m5hXI.js +0 -6
- langflow/frontend/assets/merge-CBX7bmBm.js +0 -6
- langflow/frontend/assets/message-circle-B_voUs0v.js +0 -6
- langflow/frontend/assets/message-circle-code-BJ_doWHY.js +0 -6
- langflow/frontend/assets/message-circle-dashed-BdDre0I3.js +0 -6
- langflow/frontend/assets/message-circle-heart-B5fqH2Ea.js +0 -6
- langflow/frontend/assets/message-circle-more-ClEHjYzk.js +0 -6
- langflow/frontend/assets/message-circle-off-C7AzXskG.js +0 -6
- langflow/frontend/assets/message-circle-plus-B2OJNuto.js +0 -6
- langflow/frontend/assets/message-circle-question-CWGNmHKr.js +0 -6
- langflow/frontend/assets/message-circle-reply-BnAFz9rl.js +0 -6
- langflow/frontend/assets/message-circle-warning-CahFMQVp.js +0 -6
- langflow/frontend/assets/message-circle-x-5JbVa9lL.js +0 -6
- langflow/frontend/assets/message-square-C6xSK-2j.js +0 -6
- langflow/frontend/assets/message-square-code-CGKiMRHI.js +0 -6
- langflow/frontend/assets/message-square-dashed-CbK9eVMH.js +0 -6
- langflow/frontend/assets/message-square-diff-q8Uyq09Q.js +0 -6
- langflow/frontend/assets/message-square-dot-kM-C8Mfs.js +0 -6
- langflow/frontend/assets/message-square-heart-ZbYv2ZtM.js +0 -6
- langflow/frontend/assets/message-square-lock-C9Wq8TKP.js +0 -6
- langflow/frontend/assets/message-square-more-BT3K9Joi.js +0 -6
- langflow/frontend/assets/message-square-off-BZxJGC3B.js +0 -6
- langflow/frontend/assets/message-square-plus-ez6eCLVd.js +0 -6
- langflow/frontend/assets/message-square-quote-Cu4UkKcF.js +0 -6
- langflow/frontend/assets/message-square-reply-HRwPNXLs.js +0 -6
- langflow/frontend/assets/message-square-share-2uAPTpWy.js +0 -6
- langflow/frontend/assets/message-square-text-CQYagUpV.js +0 -6
- langflow/frontend/assets/message-square-warning-C3sL19in.js +0 -6
- langflow/frontend/assets/message-square-x-yu2A1LVG.js +0 -6
- langflow/frontend/assets/messages-square-CMDkPpW_.js +0 -6
- langflow/frontend/assets/mic-VLQv65RX.js +0 -6
- langflow/frontend/assets/mic-off-B-O30mah.js +0 -6
- langflow/frontend/assets/mic-vocal-GmsrSghW.js +0 -6
- langflow/frontend/assets/microchip-D_G76KtC.js +0 -6
- langflow/frontend/assets/microscope-Dm1fIYP_.js +0 -6
- langflow/frontend/assets/microwave-h960Mbu_.js +0 -6
- langflow/frontend/assets/milestone-xGjRXEwL.js +0 -6
- langflow/frontend/assets/milk-CIBjXHQG.js +0 -6
- langflow/frontend/assets/milk-off-C1kBCRv5.js +0 -6
- langflow/frontend/assets/minimize-2-C8k1343e.js +0 -6
- langflow/frontend/assets/minimize-Cmkw90l0.js +0 -6
- langflow/frontend/assets/monitor-BefmTIPy.js +0 -6
- langflow/frontend/assets/monitor-check-DLYKlr1x.js +0 -6
- langflow/frontend/assets/monitor-cog-C3T0-eU9.js +0 -6
- langflow/frontend/assets/monitor-dot-Crco8eDf.js +0 -6
- langflow/frontend/assets/monitor-down-CHtSFWNJ.js +0 -6
- langflow/frontend/assets/monitor-off-C9jMZZyo.js +0 -6
- langflow/frontend/assets/monitor-pause-BEDTKa6v.js +0 -6
- langflow/frontend/assets/monitor-play-DminJCVq.js +0 -6
- langflow/frontend/assets/monitor-smartphone-G37NbNIb.js +0 -6
- langflow/frontend/assets/monitor-speaker-DRT7dKW1.js +0 -6
- langflow/frontend/assets/monitor-stop-BpL_DZJZ.js +0 -6
- langflow/frontend/assets/monitor-up-WO8ZK5lk.js +0 -6
- langflow/frontend/assets/monitor-x-BnImIiCg.js +0 -6
- langflow/frontend/assets/moon-DA9I1SYN.js +0 -6
- langflow/frontend/assets/moon-star-DBZ_25GQ.js +0 -6
- langflow/frontend/assets/mountain-CssPGjkt.js +0 -6
- langflow/frontend/assets/mountain-snow-CR640LwG.js +0 -6
- langflow/frontend/assets/mouse-CBawZu-0.js +0 -6
- langflow/frontend/assets/mouse-off-XO-FliGz.js +0 -6
- langflow/frontend/assets/mouse-pointer-2-DatF0JDu.js +0 -6
- langflow/frontend/assets/mouse-pointer-CmhqM_K1.js +0 -6
- langflow/frontend/assets/mouse-pointer-ban-DBulTJvZ.js +0 -6
- langflow/frontend/assets/mouse-pointer-click-DZR_eV_D.js +0 -6
- langflow/frontend/assets/move-3d-BhDB4CHt.js +0 -6
- langflow/frontend/assets/move-BPiiHmwr.js +0 -6
- langflow/frontend/assets/move-diagonal-2-CSb_836w.js +0 -6
- langflow/frontend/assets/move-diagonal-mUQ_mvuD.js +0 -6
- langflow/frontend/assets/move-down-ecYJjrjT.js +0 -6
- langflow/frontend/assets/move-down-left-CkzmP8iL.js +0 -6
- langflow/frontend/assets/move-down-right-BfcY_bNp.js +0 -6
- langflow/frontend/assets/move-horizontal-Zf6JR26T.js +0 -6
- langflow/frontend/assets/move-left-DFy0Je0e.js +0 -6
- langflow/frontend/assets/move-right-J6lvmibn.js +0 -6
- langflow/frontend/assets/move-up-BrRRwhJd.js +0 -6
- langflow/frontend/assets/move-up-left-Vp8vw9j_.js +0 -6
- langflow/frontend/assets/move-up-right-k7oMU8Li.js +0 -6
- langflow/frontend/assets/move-vertical-CJEKzfIC.js +0 -6
- langflow/frontend/assets/music-2-BvagA_Oq.js +0 -6
- langflow/frontend/assets/music-3-4vaM2prH.js +0 -6
- langflow/frontend/assets/music-4-n_hOKm4b.js +0 -6
- langflow/frontend/assets/music-BbgzsmBt.js +0 -6
- langflow/frontend/assets/navigation-2-3Uo7-c2E.js +0 -6
- langflow/frontend/assets/navigation-2-off-aiwHSLna.js +0 -6
- langflow/frontend/assets/navigation-irkyIXIt.js +0 -6
- langflow/frontend/assets/navigation-off-nliSEETI.js +0 -6
- langflow/frontend/assets/network-9gqUj-w6.js +0 -6
- langflow/frontend/assets/newspaper-C4O8a7Nv.js +0 -6
- langflow/frontend/assets/nfc-C5J_NaIV.js +0 -6
- langflow/frontend/assets/non-binary-pq7uslP8.js +0 -6
- langflow/frontend/assets/notebook-B5pRoXY4.js +0 -6
- langflow/frontend/assets/notebook-pen-uqwn-XWg.js +0 -6
- langflow/frontend/assets/notebook-tabs-DRGGsjbu.js +0 -6
- langflow/frontend/assets/notebook-text-ERQtCYDw.js +0 -6
- langflow/frontend/assets/notepad-text-CFB5ljMl.js +0 -6
- langflow/frontend/assets/notepad-text-dashed-CEDUjwd8.js +0 -6
- langflow/frontend/assets/nut-off-0eyVPQtD.js +0 -6
- langflow/frontend/assets/nut-qXcdNyKr.js +0 -6
- langflow/frontend/assets/octagon-DXReEL1w.js +0 -6
- langflow/frontend/assets/octagon-alert-9LagwnJ7.js +0 -6
- langflow/frontend/assets/octagon-minus-D_6IsBKV.js +0 -6
- langflow/frontend/assets/octagon-pause-C5o-rXIC.js +0 -6
- langflow/frontend/assets/octagon-x-BHo-2k3p.js +0 -6
- langflow/frontend/assets/omega-B7K8IIiT.js +0 -6
- langflow/frontend/assets/option-Cwvqd-6M.js +0 -6
- langflow/frontend/assets/orbit-BaPY0TZe.js +0 -6
- langflow/frontend/assets/origami-CDMepbZX.js +0 -6
- langflow/frontend/assets/package-2-DX5gQcnt.js +0 -6
- langflow/frontend/assets/package-B4i-sTpB.js +0 -6
- langflow/frontend/assets/package-check-rL9_tyQ4.js +0 -6
- langflow/frontend/assets/package-minus-Bd6r1UHc.js +0 -6
- langflow/frontend/assets/package-open-kRRhzupl.js +0 -6
- langflow/frontend/assets/package-plus-CSEMKW5y.js +0 -6
- langflow/frontend/assets/package-search-CrD5AZoH.js +0 -6
- langflow/frontend/assets/package-x-TH_1HdB0.js +0 -6
- langflow/frontend/assets/paint-bucket-D8SQd-HA.js +0 -6
- langflow/frontend/assets/paint-roller-DaEB2tPq.js +0 -6
- langflow/frontend/assets/paintbrush-CjMQyHlq.js +0 -6
- langflow/frontend/assets/paintbrush-vertical-Bet3bz9e.js +0 -6
- langflow/frontend/assets/palette-CORkBB2f.js +0 -6
- langflow/frontend/assets/panel-bottom-C4GOPcrG.js +0 -6
- langflow/frontend/assets/panel-bottom-close-CNglo2B6.js +0 -6
- langflow/frontend/assets/panel-bottom-dashed-BmaQQjRl.js +0 -6
- langflow/frontend/assets/panel-bottom-open-By3qS4Hr.js +0 -6
- langflow/frontend/assets/panel-left-close-Ds--fhBX.js +0 -6
- langflow/frontend/assets/panel-left-dashed-waWjiqPD.js +0 -6
- langflow/frontend/assets/panel-left-open-Bf47qukx.js +0 -6
- langflow/frontend/assets/panel-right-DCXAyE2G.js +0 -6
- langflow/frontend/assets/panel-right-close-B5eI_syN.js +0 -6
- langflow/frontend/assets/panel-right-dashed-Dx29u5qg.js +0 -6
- langflow/frontend/assets/panel-right-open-Baf5qsVX.js +0 -6
- langflow/frontend/assets/panel-top-B5wq-Fai.js +0 -6
- langflow/frontend/assets/panel-top-close-C27ZC8aI.js +0 -6
- langflow/frontend/assets/panel-top-dashed-BVxcVRMr.js +0 -6
- langflow/frontend/assets/panel-top-open-qI_eD44t.js +0 -6
- langflow/frontend/assets/panels-left-bottom-G1rWvJij.js +0 -6
- langflow/frontend/assets/panels-right-bottom-Ch5zPDEZ.js +0 -6
- langflow/frontend/assets/panels-top-left-Bt11sbuD.js +0 -6
- langflow/frontend/assets/paperclip-p1U01oOU.js +0 -6
- langflow/frontend/assets/parentheses-Ucl8VF4v.js +0 -6
- langflow/frontend/assets/parking-meter-D-6zZC9G.js +0 -6
- langflow/frontend/assets/party-popper-B0rUdcj4.js +0 -6
- langflow/frontend/assets/pause-CYIMJ6eJ.js +0 -6
- langflow/frontend/assets/paw-print-CWghVeNl.js +0 -6
- langflow/frontend/assets/pc-case-B0Yhk0ek.js +0 -6
- langflow/frontend/assets/pen-BOe4y69p.js +0 -6
- langflow/frontend/assets/pen-line-EIqDFyj7.js +0 -6
- langflow/frontend/assets/pen-off-CrEJ7RIh.js +0 -6
- langflow/frontend/assets/pen-tool-CG62fy_v.js +0 -6
- langflow/frontend/assets/pencil-line-BYNW6-cX.js +0 -6
- langflow/frontend/assets/pencil-off-BPFPM_na.js +0 -6
- langflow/frontend/assets/pencil-ruler-Bg4OOveo.js +0 -6
- langflow/frontend/assets/pencil-y8VyKXDe.js +0 -6
- langflow/frontend/assets/pentagon-eSc-FhDK.js +0 -6
- langflow/frontend/assets/percent-PNLsGinj.js +0 -6
- langflow/frontend/assets/person-standing-CmyVROg4.js +0 -6
- langflow/frontend/assets/philippine-peso-DKFGI0PU.js +0 -6
- langflow/frontend/assets/phone-Dp6GXQI0.js +0 -6
- langflow/frontend/assets/phone-call-BXiSzrCT.js +0 -6
- langflow/frontend/assets/phone-forwarded-B23dg_H-.js +0 -6
- langflow/frontend/assets/phone-incoming-CLQ8IZ0y.js +0 -6
- langflow/frontend/assets/phone-missed-CCSuFDLI.js +0 -6
- langflow/frontend/assets/phone-off-DSBT8LtY.js +0 -6
- langflow/frontend/assets/phone-outgoing-dcmhGO87.js +0 -6
- langflow/frontend/assets/pi-CAXOCW1h.js +0 -6
- langflow/frontend/assets/piano-DfcvG_ob.js +0 -6
- langflow/frontend/assets/pickaxe-nd4_MGt9.js +0 -6
- langflow/frontend/assets/picture-in-picture-2-BOeUxAlp.js +0 -6
- langflow/frontend/assets/picture-in-picture-BoR1YGcs.js +0 -6
- langflow/frontend/assets/piggy-bank-Dgs8lf9z.js +0 -6
- langflow/frontend/assets/pilcrow-BjWTG-ve.js +0 -6
- langflow/frontend/assets/pilcrow-left-fQ4Ys-xg.js +0 -6
- langflow/frontend/assets/pilcrow-right-CrXUqhhH.js +0 -6
- langflow/frontend/assets/pill-Pr4Um9-Q.js +0 -6
- langflow/frontend/assets/pill-bottle-BRL36rfg.js +0 -6
- langflow/frontend/assets/pin-CfZK1Zlm.js +0 -6
- langflow/frontend/assets/pin-off-De4kBCNa.js +0 -6
- langflow/frontend/assets/pipette-ZlHGMIPy.js +0 -6
- langflow/frontend/assets/pizza-lVQj7K3x.js +0 -6
- langflow/frontend/assets/plane-_JNwK-d3.js +0 -6
- langflow/frontend/assets/plane-landing-CdgOOK35.js +0 -6
- langflow/frontend/assets/plane-takeoff-DkAohELl.js +0 -6
- langflow/frontend/assets/play-BYM7lBf5.js +0 -6
- langflow/frontend/assets/plug-2-C4jX9_w5.js +0 -6
- langflow/frontend/assets/plug-BukZG44Y.js +0 -6
- langflow/frontend/assets/plug-zap-CORwwxMQ.js +0 -6
- langflow/frontend/assets/pocket-BHWkQoAk.js +0 -6
- langflow/frontend/assets/pocket-knife-DRyPwgeP.js +0 -6
- langflow/frontend/assets/podcast-m8wdQrwD.js +0 -6
- langflow/frontend/assets/pointer-QFDN5kFZ.js +0 -6
- langflow/frontend/assets/pointer-off-rtSfeNPe.js +0 -6
- langflow/frontend/assets/popcorn-BjcfTXPh.js +0 -6
- langflow/frontend/assets/popsicle-cOy72NCv.js +0 -6
- langflow/frontend/assets/pound-sterling-TW2x00gy.js +0 -6
- langflow/frontend/assets/power-_k9xwmC1.js +0 -6
- langflow/frontend/assets/power-off-DMgcNJ8w.js +0 -6
- langflow/frontend/assets/presentation-CydgTVda.js +0 -6
- langflow/frontend/assets/printer-B2Tp2DQ1.js +0 -6
- langflow/frontend/assets/printer-check-DYE9k_uK.js +0 -6
- langflow/frontend/assets/projector-B6ELhI1U.js +0 -6
- langflow/frontend/assets/proportions-BioP67DD.js +0 -6
- langflow/frontend/assets/puzzle-Dnn0u3xd.js +0 -6
- langflow/frontend/assets/pyramid-BVQ0OfTp.js +0 -6
- langflow/frontend/assets/qr-code-C9OzJf_X.js +0 -6
- langflow/frontend/assets/quote-CcCUzU3i.js +0 -6
- langflow/frontend/assets/rabbit-CWtBmPW0.js +0 -6
- langflow/frontend/assets/radar-DJkmx8dS.js +0 -6
- langflow/frontend/assets/radiation-B36O45b8.js +0 -6
- langflow/frontend/assets/radical-CxEbEpfn.js +0 -6
- langflow/frontend/assets/radio-Bj94lS4M.js +0 -6
- langflow/frontend/assets/radio-receiver-MG3R_JLP.js +0 -6
- langflow/frontend/assets/radio-tower-DtH9vPkS.js +0 -6
- langflow/frontend/assets/radius-45hWVPNS.js +0 -6
- langflow/frontend/assets/rail-symbol-BrWnLVLv.js +0 -6
- langflow/frontend/assets/rainbow-BWH9LLk-.js +0 -6
- langflow/frontend/assets/rat-Dqn7ft0N.js +0 -6
- langflow/frontend/assets/ratio-DuC227_O.js +0 -6
- langflow/frontend/assets/receipt-Bf94UpG8.js +0 -6
- langflow/frontend/assets/receipt-cent-Y9wJv4JJ.js +0 -6
- langflow/frontend/assets/receipt-euro-GPu31UKy.js +0 -6
- langflow/frontend/assets/receipt-indian-rupee-DaeSEI8G.js +0 -6
- langflow/frontend/assets/receipt-japanese-yen-CV4KDO6B.js +0 -6
- langflow/frontend/assets/receipt-pound-sterling-Dt2nVgyo.js +0 -6
- langflow/frontend/assets/receipt-russian-ruble-B0AffP7L.js +0 -6
- langflow/frontend/assets/receipt-swiss-franc-BSJ1JbS7.js +0 -6
- langflow/frontend/assets/receipt-text-B4GmolER.js +0 -6
- langflow/frontend/assets/rectangle-ellipsis-DXopAi3E.js +0 -6
- langflow/frontend/assets/rectangle-goggles-utWG4_0o.js +0 -6
- langflow/frontend/assets/rectangle-horizontal-DAjdpOo-.js +0 -6
- langflow/frontend/assets/rectangle-vertical-Cxb1k66a.js +0 -6
- langflow/frontend/assets/recycle-DUhMcHeJ.js +0 -6
- langflow/frontend/assets/redo-2-JkEIaU5A.js +0 -6
- langflow/frontend/assets/redo-Nb2o_fVS.js +0 -6
- langflow/frontend/assets/redo-dot-B402Sbdh.js +0 -6
- langflow/frontend/assets/refresh-ccw-bv40AbPo.js +0 -6
- langflow/frontend/assets/refresh-ccw-dot-CpLe9EX9.js +0 -6
- langflow/frontend/assets/refresh-cw-CntfliZt.js +0 -6
- langflow/frontend/assets/refresh-cw-off-BBxE02op.js +0 -6
- langflow/frontend/assets/refrigerator-CMiAj4CW.js +0 -6
- langflow/frontend/assets/regex-CVMJaUkp.js +0 -6
- langflow/frontend/assets/remove-formatting-C5kDIMR1.js +0 -6
- langflow/frontend/assets/repeat-1-D6vyjASu.js +0 -6
- langflow/frontend/assets/repeat-2-CPWCkkad.js +0 -6
- langflow/frontend/assets/repeat-Cs8bMh8E.js +0 -6
- langflow/frontend/assets/replace-all-CpABo_lV.js +0 -6
- langflow/frontend/assets/replace-ehbZAo8S.js +0 -6
- langflow/frontend/assets/reply-DlzYgOpt.js +0 -6
- langflow/frontend/assets/reply-all-CRUmk8z2.js +0 -6
- langflow/frontend/assets/rewind-5SUHeRRk.js +0 -6
- langflow/frontend/assets/ribbon-B9JK9qe8.js +0 -6
- langflow/frontend/assets/rocket-Bl1mxGyq.js +0 -6
- langflow/frontend/assets/rocking-chair-xuDG6Bu4.js +0 -6
- langflow/frontend/assets/roller-coaster-DZCge4fV.js +0 -6
- langflow/frontend/assets/rotate-3d-DUjfcFOj.js +0 -6
- langflow/frontend/assets/rotate-ccw-C_Rrm_Eq.js +0 -6
- langflow/frontend/assets/rotate-ccw-key-BYgIqTFY.js +0 -6
- langflow/frontend/assets/rotate-ccw-square-BNcVAXr3.js +0 -6
- langflow/frontend/assets/rotate-cw-BymeBpfd.js +0 -6
- langflow/frontend/assets/rotate-cw-square-BT9MiAOI.js +0 -6
- langflow/frontend/assets/route-C6S5WzGF.js +0 -6
- langflow/frontend/assets/route-off-BN7G8szR.js +0 -6
- langflow/frontend/assets/router-K0nMIDSx.js +0 -6
- langflow/frontend/assets/rows-2-C9fIv2Lu.js +0 -6
- langflow/frontend/assets/rows-3-B7qvJUTL.js +0 -6
- langflow/frontend/assets/rows-4-B2EQ9MXK.js +0 -6
- langflow/frontend/assets/rss-DVpsYU3H.js +0 -6
- langflow/frontend/assets/ruler-BxeSGWOr.js +0 -6
- langflow/frontend/assets/ruler-dimension-line-Ciuxjet9.js +0 -6
- langflow/frontend/assets/russian-ruble-BB_f3XI2.js +0 -6
- langflow/frontend/assets/sailboat-DhsQbIpV.js +0 -6
- langflow/frontend/assets/salad-Bl5ayweY.js +0 -6
- langflow/frontend/assets/sandwich-DuXzIVtJ.js +0 -6
- langflow/frontend/assets/satellite-CHjuGaAr.js +0 -6
- langflow/frontend/assets/satellite-dish-BUz8hCOf.js +0 -6
- langflow/frontend/assets/saudi-riyal--zTmMgWh.js +0 -6
- langflow/frontend/assets/save-all-C9_juMma.js +0 -6
- langflow/frontend/assets/save-off-BJDA7Swa.js +0 -6
- langflow/frontend/assets/save-u6dUzXZF.js +0 -6
- langflow/frontend/assets/scale-3d-3wTvDlhi.js +0 -6
- langflow/frontend/assets/scale-AxIcP8pU.js +0 -6
- langflow/frontend/assets/scaling-Bx5PUS-M.js +0 -6
- langflow/frontend/assets/scan--_1rGcf6.js +0 -6
- langflow/frontend/assets/scan-barcode-LE_nGU4E.js +0 -6
- langflow/frontend/assets/scan-eye-6MlNrH6i.js +0 -6
- langflow/frontend/assets/scan-face-DlB9r0q7.js +0 -6
- langflow/frontend/assets/scan-heart-BEekTVwM.js +0 -6
- langflow/frontend/assets/scan-line-D4WPcOu4.js +0 -6
- langflow/frontend/assets/scan-qr-code-BIjBg1fs.js +0 -6
- langflow/frontend/assets/scan-search-CUJ5QUWM.js +0 -6
- langflow/frontend/assets/scan-text-BXpArFGZ.js +0 -6
- langflow/frontend/assets/school-DyoHAWeZ.js +0 -6
- langflow/frontend/assets/scissors-P_JSyeDi.js +0 -6
- langflow/frontend/assets/scissors-line-dashed-D-iMXDSz.js +0 -6
- langflow/frontend/assets/screen-share-C-QH25Y8.js +0 -6
- langflow/frontend/assets/screen-share-off-B7juKMAI.js +0 -6
- langflow/frontend/assets/scroll-DZZAqxFX.js +0 -6
- langflow/frontend/assets/scroll-text-CkBg5T14.js +0 -6
- langflow/frontend/assets/search-check-CAZiSWyN.js +0 -6
- langflow/frontend/assets/search-code-DpVPFbYc.js +0 -6
- langflow/frontend/assets/search-slash-DMP2Aaf2.js +0 -6
- langflow/frontend/assets/search-x-Hs_x9oAu.js +0 -6
- langflow/frontend/assets/section-v0yphlTY.js +0 -6
- langflow/frontend/assets/send-DRhWQDq7.js +0 -6
- langflow/frontend/assets/send-horizontal-BrOGexs6.js +0 -6
- langflow/frontend/assets/send-to-back-CrckLjkf.js +0 -6
- langflow/frontend/assets/separator-horizontal-Dr_fD4uy.js +0 -6
- langflow/frontend/assets/separator-vertical-CfXv2THC.js +0 -6
- langflow/frontend/assets/server-cog-BDs4UStJ.js +0 -6
- langflow/frontend/assets/server-crash-DCjGt-db.js +0 -6
- langflow/frontend/assets/server-off-C1S_w1fq.js +0 -6
- langflow/frontend/assets/server-xJw6BAPu.js +0 -6
- langflow/frontend/assets/settings-2-3_h2yVgn.js +0 -6
- langflow/frontend/assets/settings-U9e-7JSB.js +0 -6
- langflow/frontend/assets/shapes-DFBL7M-u.js +0 -6
- langflow/frontend/assets/share-2-B2e09xjW.js +0 -6
- langflow/frontend/assets/share-9yUm1xGN.js +0 -6
- langflow/frontend/assets/sheet-n9Htex2-.js +0 -6
- langflow/frontend/assets/shell-C0aEUTfi.js +0 -6
- langflow/frontend/assets/shield-D5DcABQN.js +0 -6
- langflow/frontend/assets/shield-alert-D1m4Tgts.js +0 -6
- langflow/frontend/assets/shield-ban-DiVXqNiI.js +0 -6
- langflow/frontend/assets/shield-check-D_O9v7LF.js +0 -6
- langflow/frontend/assets/shield-ellipsis-BEZSwpEg.js +0 -6
- langflow/frontend/assets/shield-half-Cho99G7W.js +0 -6
- langflow/frontend/assets/shield-minus-BuHrbXm5.js +0 -6
- langflow/frontend/assets/shield-off-Dbfg0qZu.js +0 -6
- langflow/frontend/assets/shield-plus-B3Ua1mVw.js +0 -6
- langflow/frontend/assets/shield-question-vuuOi8FA.js +0 -6
- langflow/frontend/assets/shield-user-gfL4c_sp.js +0 -6
- langflow/frontend/assets/shield-x-DUGov3wo.js +0 -6
- langflow/frontend/assets/ship-CzauyqDt.js +0 -6
- langflow/frontend/assets/ship-wheel-BD10WX3D.js +0 -6
- langflow/frontend/assets/shirt-D6bG36pR.js +0 -6
- langflow/frontend/assets/shopping-bag-BxOe32F4.js +0 -6
- langflow/frontend/assets/shopping-basket-D_M5yWkW.js +0 -6
- langflow/frontend/assets/shopping-cart-cTWTvhjX.js +0 -6
- langflow/frontend/assets/shovel-CstjfZbJ.js +0 -6
- langflow/frontend/assets/shower-head--wcX2RkG.js +0 -6
- langflow/frontend/assets/shredder-Dnq_gKjb.js +0 -6
- langflow/frontend/assets/shrimp-BZCu9nAL.js +0 -6
- langflow/frontend/assets/shrink-D-oyLenr.js +0 -6
- langflow/frontend/assets/shrub-zYnLfdKO.js +0 -6
- langflow/frontend/assets/shuffle-CSOOlXR7.js +0 -6
- langflow/frontend/assets/sigma-Baf8eiiJ.js +0 -6
- langflow/frontend/assets/signal-D6QxROgM.js +0 -6
- langflow/frontend/assets/signal-high-Dy9kGN5j.js +0 -6
- langflow/frontend/assets/signal-low-nUlLCi_F.js +0 -6
- langflow/frontend/assets/signal-medium-Ca-PwNdt.js +0 -6
- langflow/frontend/assets/signal-zero-DsF6ihB7.js +0 -6
- langflow/frontend/assets/signature-CuFMGyKM.js +0 -6
- langflow/frontend/assets/signpost-B_K242Vj.js +0 -6
- langflow/frontend/assets/signpost-big-DqnGctyL.js +0 -6
- langflow/frontend/assets/siren-BIXlZkZY.js +0 -6
- langflow/frontend/assets/skip-back-BNIf4333.js +0 -6
- langflow/frontend/assets/skip-forward-Df3a8DYc.js +0 -6
- langflow/frontend/assets/skull-DqFoWSSO.js +0 -6
- langflow/frontend/assets/slack-D3TmmD-j.js +0 -6
- langflow/frontend/assets/slash-DIBkoUw_.js +0 -6
- langflow/frontend/assets/slice-D7eKpJ77.js +0 -6
- langflow/frontend/assets/sliders-horizontal-CGrr6ZqL.js +0 -6
- langflow/frontend/assets/sliders-vertical-DiXvW3sd.js +0 -6
- langflow/frontend/assets/smartphone-DkyeiBsS.js +0 -6
- langflow/frontend/assets/smartphone-charging-wQic5NW6.js +0 -6
- langflow/frontend/assets/smartphone-nfc-DYtneMYc.js +0 -6
- langflow/frontend/assets/smile-BNZF4CuQ.js +0 -6
- langflow/frontend/assets/smile-plus-BJ6-32AR.js +0 -6
- langflow/frontend/assets/snail-OnymkEIK.js +0 -6
- langflow/frontend/assets/snowflake-eg3S5uni.js +0 -6
- langflow/frontend/assets/sofa-BPe1KVbi.js +0 -6
- langflow/frontend/assets/soup-D2dL0yJG.js +0 -6
- langflow/frontend/assets/space-CplgpqV4.js +0 -6
- langflow/frontend/assets/spade-GX5v_Rvl.js +0 -6
- langflow/frontend/assets/sparkle-D5gBLKya.js +0 -6
- langflow/frontend/assets/sparkles-BEHfAOo9.js +0 -6
- langflow/frontend/assets/speaker-8G4QIkS9.js +0 -6
- langflow/frontend/assets/speech-Dt2aVTN9.js +0 -6
- langflow/frontend/assets/spell-check-2-C9KvvbSw.js +0 -6
- langflow/frontend/assets/spell-check-BCoHRDy3.js +0 -6
- langflow/frontend/assets/spline-pT6kyXVw.js +0 -6
- langflow/frontend/assets/spline-pointer-DuCr2mFS.js +0 -6
- langflow/frontend/assets/split-BzhAVwex.js +0 -6
- langflow/frontend/assets/spray-can-BFOzSsQz.js +0 -6
- langflow/frontend/assets/sprout-BPERAV31.js +0 -6
- langflow/frontend/assets/square-Dwso3LLe.js +0 -6
- langflow/frontend/assets/square-activity-BfKT1ohZ.js +0 -6
- langflow/frontend/assets/square-arrow-down-CRg6fE8r.js +0 -6
- langflow/frontend/assets/square-arrow-down-left-Uq50GdMZ.js +0 -6
- langflow/frontend/assets/square-arrow-down-right-B9r_AqpS.js +0 -6
- langflow/frontend/assets/square-arrow-left-CyGZKkUg.js +0 -6
- langflow/frontend/assets/square-arrow-out-down-left-DyVElWP5.js +0 -6
- langflow/frontend/assets/square-arrow-out-down-right-CzD-PJCL.js +0 -6
- langflow/frontend/assets/square-arrow-out-up-left-B37joCQn.js +0 -6
- langflow/frontend/assets/square-arrow-out-up-right-C1oUSySZ.js +0 -6
- langflow/frontend/assets/square-arrow-right-DVeo3cgL.js +0 -6
- langflow/frontend/assets/square-arrow-up-DD6ZgJjQ.js +0 -6
- langflow/frontend/assets/square-arrow-up-left-CM16lTyf.js +0 -6
- langflow/frontend/assets/square-arrow-up-right-C_Puq2Ex.js +0 -6
- langflow/frontend/assets/square-asterisk-Da5iHbhJ.js +0 -6
- langflow/frontend/assets/square-bottom-dashed-scissors-DPzhWsmT.js +0 -6
- langflow/frontend/assets/square-chart-gantt-We-6_hzq.js +0 -6
- langflow/frontend/assets/square-check-CY3rdbSw.js +0 -6
- langflow/frontend/assets/square-check-big-BxCzelPF.js +0 -6
- langflow/frontend/assets/square-chevron-down-gDNNFMC2.js +0 -6
- langflow/frontend/assets/square-chevron-left-D9CB6EUl.js +0 -6
- langflow/frontend/assets/square-chevron-right-B_T8aTrO.js +0 -6
- langflow/frontend/assets/square-chevron-up-D64QYRcs.js +0 -6
- langflow/frontend/assets/square-code-B3Xp9Y1_.js +0 -6
- langflow/frontend/assets/square-dashed-DFY8t-v9.js +0 -6
- langflow/frontend/assets/square-dashed-bottom-BApSaHVd.js +0 -6
- langflow/frontend/assets/square-dashed-bottom-code-dWerbw89.js +0 -6
- langflow/frontend/assets/square-dashed-kanban-CVtRgZ89.js +0 -6
- langflow/frontend/assets/square-dashed-mouse-pointer-CK8LB_I8.js +0 -6
- langflow/frontend/assets/square-divide-CKNuwO-p.js +0 -6
- langflow/frontend/assets/square-dot-B07zWKHD.js +0 -6
- langflow/frontend/assets/square-equal-D8DbSRuU.js +0 -6
- langflow/frontend/assets/square-function-CfSMB0pG.js +0 -6
- langflow/frontend/assets/square-kanban-CMgaRcAJ.js +0 -6
- langflow/frontend/assets/square-library-DV_V798k.js +0 -6
- langflow/frontend/assets/square-m-vI0XXtyS.js +0 -6
- langflow/frontend/assets/square-menu-BYg42PGg.js +0 -6
- langflow/frontend/assets/square-minus-S6YcLW3Y.js +0 -6
- langflow/frontend/assets/square-mouse-pointer-TooGjW2R.js +0 -6
- langflow/frontend/assets/square-parking-MRFz2LFm.js +0 -6
- langflow/frontend/assets/square-parking-off-C1_Jc3KY.js +0 -6
- langflow/frontend/assets/square-pen-CDBYcffV.js +0 -6
- langflow/frontend/assets/square-percent-DhFI846p.js +0 -6
- langflow/frontend/assets/square-pi-CA3PttNr.js +0 -6
- langflow/frontend/assets/square-pilcrow-WYhshN5v.js +0 -6
- langflow/frontend/assets/square-play-D4USrG1G.js +0 -6
- langflow/frontend/assets/square-plus-DUpS26Cq.js +0 -6
- langflow/frontend/assets/square-power-Csh1xI0n.js +0 -6
- langflow/frontend/assets/square-radical-CrhEVFp1.js +0 -6
- langflow/frontend/assets/square-round-corner-CjvhHyl2.js +0 -6
- langflow/frontend/assets/square-scissors-CzCHxKRn.js +0 -6
- langflow/frontend/assets/square-sigma-DhEPOg9V.js +0 -6
- langflow/frontend/assets/square-slash-mUSDIdpv.js +0 -6
- langflow/frontend/assets/square-split-horizontal-Bzd4Mf7D.js +0 -6
- langflow/frontend/assets/square-split-vertical-kHjC7Nvn.js +0 -6
- langflow/frontend/assets/square-square-DN_DVL5R.js +0 -6
- langflow/frontend/assets/square-stack-Dyed8N93.js +0 -6
- langflow/frontend/assets/square-terminal-Dzc8r2aF.js +0 -6
- langflow/frontend/assets/square-user-B8hTVJ_4.js +0 -6
- langflow/frontend/assets/square-user-round-CJkVABHV.js +0 -6
- langflow/frontend/assets/square-x-9IP-mC19.js +0 -6
- langflow/frontend/assets/squares-exclude-92-k-Xbc.js +0 -6
- langflow/frontend/assets/squares-intersect-BcKa-yXO.js +0 -6
- langflow/frontend/assets/squares-subtract-BstvugcN.js +0 -6
- langflow/frontend/assets/squares-unite-CrhVkBtG.js +0 -6
- langflow/frontend/assets/squircle-Bxgk3W2M.js +0 -6
- langflow/frontend/assets/squirrel-CgptaumE.js +0 -6
- langflow/frontend/assets/stamp-jC9rLSt-.js +0 -6
- langflow/frontend/assets/star-1M_SJT4S.js +0 -6
- langflow/frontend/assets/star-half-CeXTDyUG.js +0 -6
- langflow/frontend/assets/star-off-PEH005G_.js +0 -6
- langflow/frontend/assets/step-back-khGRFPgA.js +0 -6
- langflow/frontend/assets/step-forward-Dt-6kPtG.js +0 -6
- langflow/frontend/assets/stethoscope-DRuhRxc0.js +0 -6
- langflow/frontend/assets/sticker-26l-6bgN.js +0 -6
- langflow/frontend/assets/sticky-note-Cr-kBtRk.js +0 -6
- langflow/frontend/assets/store-BChq7UPX.js +0 -6
- langflow/frontend/assets/stretch-horizontal-BgCSl_VF.js +0 -6
- langflow/frontend/assets/stretch-vertical-DxQe-N0R.js +0 -6
- langflow/frontend/assets/strikethrough-DHi5CFBg.js +0 -6
- langflow/frontend/assets/subscript-CzSaOLLm.js +0 -6
- langflow/frontend/assets/sun-dim-D_EpQSZ1.js +0 -6
- langflow/frontend/assets/sun-medium-551blOr4.js +0 -6
- langflow/frontend/assets/sun-moon-Da5_hqjE.js +0 -6
- langflow/frontend/assets/sun-nhFZFpen.js +0 -6
- langflow/frontend/assets/sun-snow-DyxaEUDz.js +0 -6
- langflow/frontend/assets/sunrise-C9tonCrS.js +0 -6
- langflow/frontend/assets/sunset-CD06Mbmq.js +0 -6
- langflow/frontend/assets/superscript-DmOIONqx.js +0 -6
- langflow/frontend/assets/swatch-book-BwQAsHlS.js +0 -6
- langflow/frontend/assets/swiss-franc-3JMcrDwF.js +0 -6
- langflow/frontend/assets/switch-camera-DNpPZ4fJ.js +0 -6
- langflow/frontend/assets/sword-DijWtHzr.js +0 -6
- langflow/frontend/assets/swords-CgsF-qwX.js +0 -6
- langflow/frontend/assets/syringe-C8nadHKx.js +0 -6
- langflow/frontend/assets/table-2-G-ZVuKFR.js +0 -6
- langflow/frontend/assets/table-cells-merge-B75t0b4x.js +0 -6
- langflow/frontend/assets/table-cells-split-B9twAhtb.js +0 -6
- langflow/frontend/assets/table-columns-split-ZjjZDVhD.js +0 -6
- langflow/frontend/assets/table-of-contents-DKeGUmAu.js +0 -6
- langflow/frontend/assets/table-properties-BT4JYR4h.js +0 -6
- langflow/frontend/assets/table-rows-split-CXHfa0L6.js +0 -6
- langflow/frontend/assets/table-uUp2g9l8.js +0 -6
- langflow/frontend/assets/tablet-C66DQoUW.js +0 -6
- langflow/frontend/assets/tablet-smartphone-3SienPpa.js +0 -6
- langflow/frontend/assets/tablets-CionxNtg.js +0 -6
- langflow/frontend/assets/tag-BFz7h6j0.js +0 -6
- langflow/frontend/assets/tags-Bn3Byi5c.js +0 -6
- langflow/frontend/assets/tally-1-D-O5opNH.js +0 -6
- langflow/frontend/assets/tally-2-47rl7x1A.js +0 -6
- langflow/frontend/assets/tally-3-CRMNowo8.js +0 -6
- langflow/frontend/assets/tally-4-BaA0OW14.js +0 -6
- langflow/frontend/assets/tally-5-BaRCYaAj.js +0 -6
- langflow/frontend/assets/tangent-DK-fQUN-.js +0 -6
- langflow/frontend/assets/target-CQv0K2-h.js +0 -6
- langflow/frontend/assets/telescope-vovn7Hmw.js +0 -6
- langflow/frontend/assets/tent-tree-DT3MvcXz.js +0 -6
- langflow/frontend/assets/tent-v1N5aOOW.js +0 -6
- langflow/frontend/assets/terminal-BIPD9tXW.js +0 -6
- langflow/frontend/assets/test-tube-CHOU1gjW.js +0 -6
- langflow/frontend/assets/test-tube-diagonal-XC8nx34B.js +0 -6
- langflow/frontend/assets/test-tubes-C8O0f6RS.js +0 -6
- langflow/frontend/assets/text-BOpdRg2b.js +0 -6
- langflow/frontend/assets/text-cursor-ias3LO93.js +0 -6
- langflow/frontend/assets/text-cursor-input-H2gaMkp7.js +0 -6
- langflow/frontend/assets/text-quote-DurxfeKj.js +0 -6
- langflow/frontend/assets/text-search-61n8tmlf.js +0 -6
- langflow/frontend/assets/text-select-BfO9MFr2.js +0 -6
- langflow/frontend/assets/theater-DIjE3XbD.js +0 -6
- langflow/frontend/assets/thermometer-C1XDbetA.js +0 -6
- langflow/frontend/assets/thermometer-snowflake-BehyKxlY.js +0 -6
- langflow/frontend/assets/thermometer-sun-j6YVjioj.js +0 -6
- langflow/frontend/assets/thumbs-down-DqWn2Kem.js +0 -6
- langflow/frontend/assets/thumbs-up-DM1x05l-.js +0 -6
- langflow/frontend/assets/ticket-BGbr8vzL.js +0 -6
- langflow/frontend/assets/ticket-check-fVDV7KNG.js +0 -6
- langflow/frontend/assets/ticket-minus-3LvccH-p.js +0 -6
- langflow/frontend/assets/ticket-percent-Me_uH0PT.js +0 -6
- langflow/frontend/assets/ticket-plus-D5rkEJ4Q.js +0 -6
- langflow/frontend/assets/ticket-slash-u_6uJpEO.js +0 -6
- langflow/frontend/assets/ticket-x-DUDfvwNP.js +0 -6
- langflow/frontend/assets/tickets-Dk5lNK2C.js +0 -6
- langflow/frontend/assets/tickets-plane-B-WBrFyU.js +0 -6
- langflow/frontend/assets/timer-FqXCSZRW.js +0 -6
- langflow/frontend/assets/timer-off-mJxNB6Ap.js +0 -6
- langflow/frontend/assets/timer-reset-wdDGkAGI.js +0 -6
- langflow/frontend/assets/toggle-left-Cx4QLhPD.js +0 -6
- langflow/frontend/assets/toggle-right-BaSZ38mS.js +0 -6
- langflow/frontend/assets/toilet-wKfwRGxw.js +0 -6
- langflow/frontend/assets/tornado-CLJoX7vM.js +0 -6
- langflow/frontend/assets/torus-V0aZzbA0.js +0 -6
- langflow/frontend/assets/touchpad-BMHLCedC.js +0 -6
- langflow/frontend/assets/touchpad-off-Cjv1yQ0i.js +0 -6
- langflow/frontend/assets/tower-control-B226_51n.js +0 -6
- langflow/frontend/assets/toy-brick-DI3g1rgj.js +0 -6
- langflow/frontend/assets/tractor-BI2_8acA.js +0 -6
- langflow/frontend/assets/traffic-cone-d2JUCOyj.js +0 -6
- langflow/frontend/assets/train-front-DN9E0VxK.js +0 -6
- langflow/frontend/assets/train-front-tunnel-DzmLvWUF.js +0 -6
- langflow/frontend/assets/train-track-D17R5fNf.js +0 -6
- langflow/frontend/assets/tram-front-qWNA5wpI.js +0 -6
- langflow/frontend/assets/transgender-DgGra8DX.js +0 -6
- langflow/frontend/assets/trash-hLkVWzQl.js +0 -6
- langflow/frontend/assets/tree-deciduous-BsLuJi98.js +0 -6
- langflow/frontend/assets/tree-palm-DUFYctFO.js +0 -6
- langflow/frontend/assets/tree-pine-BTu3oTx-.js +0 -6
- langflow/frontend/assets/trees-DvveXYUR.js +0 -6
- langflow/frontend/assets/trello-BYyusf3e.js +0 -6
- langflow/frontend/assets/trending-down-C10HRpJI.js +0 -6
- langflow/frontend/assets/trending-up-down-C9b8vL9Z.js +0 -6
- langflow/frontend/assets/trending-up-h_mfLkUK.js +0 -6
- langflow/frontend/assets/triangle-N2IQeFss.js +0 -6
- langflow/frontend/assets/triangle-alert-DR0OFN8I.js +0 -6
- langflow/frontend/assets/triangle-dashed-8DxflU0s.js +0 -6
- langflow/frontend/assets/triangle-right-D1cgdzbe.js +0 -6
- langflow/frontend/assets/trophy-mbl8JCvd.js +0 -6
- langflow/frontend/assets/truck-DA8-xTmd.js +0 -6
- langflow/frontend/assets/truck-electric-BnR5TKe2.js +0 -6
- langflow/frontend/assets/turtle-ZmkxTvT4.js +0 -6
- langflow/frontend/assets/tv-CjPN5g_R.js +0 -6
- langflow/frontend/assets/tv-minimal-CIPHdgw1.js +0 -6
- langflow/frontend/assets/tv-minimal-play-DubrWVWR.js +0 -6
- langflow/frontend/assets/twitch-BwS8RGp8.js +0 -6
- langflow/frontend/assets/twitter-iNcwuEdM.js +0 -6
- langflow/frontend/assets/type-DRcIfFm2.js +0 -6
- langflow/frontend/assets/type-outline-zXaonv6n.js +0 -6
- langflow/frontend/assets/umbrella-CmPXzS_i.js +0 -6
- langflow/frontend/assets/umbrella-off-DniESxCp.js +0 -6
- langflow/frontend/assets/underline-Cx9TBHTD.js +0 -6
- langflow/frontend/assets/undo-2-COh52O_B.js +0 -6
- langflow/frontend/assets/undo-B_zczegi.js +0 -6
- langflow/frontend/assets/undo-dot-NaNC_IW8.js +0 -6
- langflow/frontend/assets/unfold-horizontal-BD2O2VCA.js +0 -6
- langflow/frontend/assets/unfold-vertical-CBKn4kGI.js +0 -6
- langflow/frontend/assets/ungroup-BxidgRp8.js +0 -6
- langflow/frontend/assets/university-Cnfx6a-N.js +0 -6
- langflow/frontend/assets/unlink-2-5i7X0qTI.js +0 -6
- langflow/frontend/assets/unlink-CS0v58QY.js +0 -6
- langflow/frontend/assets/unplug-D6ATo-O0.js +0 -6
- langflow/frontend/assets/upload-DSSWCIft.js +0 -6
- langflow/frontend/assets/usb-Drhdkf4h.js +0 -6
- langflow/frontend/assets/use-post-add-user-CDPuGwVE.js +0 -1
- langflow/frontend/assets/user-check-Dbg-AInJ.js +0 -6
- langflow/frontend/assets/user-cog-CeZ_6YkF.js +0 -6
- langflow/frontend/assets/user-iQZoArX8.js +0 -6
- langflow/frontend/assets/user-lock-WOGG7OIZ.js +0 -6
- langflow/frontend/assets/user-minus-ukiNBMbq.js +0 -6
- langflow/frontend/assets/user-pen-CvyjVA7o.js +0 -6
- langflow/frontend/assets/user-plus-CVjKOmkM.js +0 -6
- langflow/frontend/assets/user-round-check-D-DxXiSi.js +0 -6
- langflow/frontend/assets/user-round-cog-CnG7Y6n4.js +0 -6
- langflow/frontend/assets/user-round-j7tGuEdz.js +0 -6
- langflow/frontend/assets/user-round-minus-C3K_aIxb.js +0 -6
- langflow/frontend/assets/user-round-pen-fHpsUtCB.js +0 -6
- langflow/frontend/assets/user-round-plus-p-Xf-A-r.js +0 -6
- langflow/frontend/assets/user-round-search-DU2PNXys.js +0 -6
- langflow/frontend/assets/user-round-x-CL3Ps75G.js +0 -6
- langflow/frontend/assets/user-search-CLwOZU3O.js +0 -6
- langflow/frontend/assets/user-x-DWc00Z_h.js +0 -6
- langflow/frontend/assets/users-DgAm-Czv.js +0 -6
- langflow/frontend/assets/users-round-DRU0Dp53.js +0 -6
- langflow/frontend/assets/utensils-CqNLqAKE.js +0 -6
- langflow/frontend/assets/utensils-crossed-jzoTBKMW.js +0 -6
- langflow/frontend/assets/utility-pole-B4ydv_lW.js +0 -6
- langflow/frontend/assets/variable-eHXkoAzJ.js +0 -6
- langflow/frontend/assets/vault-DyeSTbo3.js +0 -6
- langflow/frontend/assets/vegan-CjYxy6Kx.js +0 -6
- langflow/frontend/assets/venetian-mask-e9ruXmqA.js +0 -6
- langflow/frontend/assets/venus-BSAxI4Q5.js +0 -6
- langflow/frontend/assets/venus-and-mars-BSFD2pth.js +0 -6
- langflow/frontend/assets/vibrate-DTuQnqHL.js +0 -6
- langflow/frontend/assets/vibrate-off-Cr7jkzjd.js +0 -6
- langflow/frontend/assets/video-Rv2mEg1Q.js +0 -6
- langflow/frontend/assets/video-off-CKSxqha6.js +0 -6
- langflow/frontend/assets/videotape-PTTemm3o.js +0 -6
- langflow/frontend/assets/view-xYJ4Kbf0.js +0 -6
- langflow/frontend/assets/voicemail-D4gERIyq.js +0 -6
- langflow/frontend/assets/volleyball-ilUr5BG0.js +0 -6
- langflow/frontend/assets/volume-1-CerDvjrk.js +0 -6
- langflow/frontend/assets/volume-2-D5z-cRyJ.js +0 -6
- langflow/frontend/assets/volume-CS8doUzS.js +0 -6
- langflow/frontend/assets/volume-off-DOBtp-_R.js +0 -6
- langflow/frontend/assets/volume-x-Cc1Mk6ns.js +0 -6
- langflow/frontend/assets/vote-CPwzdmRy.js +0 -6
- langflow/frontend/assets/wallet-CcyaxG1y.js +0 -6
- langflow/frontend/assets/wallet-cards-Bb6N0jvr.js +0 -6
- langflow/frontend/assets/wallet-minimal-BvtFmI5Z.js +0 -6
- langflow/frontend/assets/wallpaper-Dz71EsSn.js +0 -6
- langflow/frontend/assets/wand-Kai6h0Xr.js +0 -6
- langflow/frontend/assets/wand-sparkles-DLbQMKGC.js +0 -6
- langflow/frontend/assets/warehouse-DBoMmdhd.js +0 -6
- langflow/frontend/assets/washing-machine-DHmlFJ3A.js +0 -6
- langflow/frontend/assets/watch-DfkGvUm1.js +0 -6
- langflow/frontend/assets/waves-Cd4JKFbX.js +0 -6
- langflow/frontend/assets/waves-ladder-tjR07mv9.js +0 -6
- langflow/frontend/assets/waypoints-Bb_EYyFE.js +0 -6
- langflow/frontend/assets/webcam-Up9cGsW5.js +0 -6
- langflow/frontend/assets/webhook-drjDWswy.js +0 -6
- langflow/frontend/assets/webhook-off-DG52EKd-.js +0 -6
- langflow/frontend/assets/weight-CZxgLk9R.js +0 -6
- langflow/frontend/assets/wheat-8mjCX3wu.js +0 -6
- langflow/frontend/assets/wheat-off-lOZpqvRC.js +0 -6
- langflow/frontend/assets/whole-word-DkYFC9yl.js +0 -6
- langflow/frontend/assets/wifi-BsCMPxM-.js +0 -6
- langflow/frontend/assets/wifi-high-DGGYdUCW.js +0 -6
- langflow/frontend/assets/wifi-low-a0fn0wut.js +0 -6
- langflow/frontend/assets/wifi-off-fMoWlSdt.js +0 -6
- langflow/frontend/assets/wifi-pen-O5yj5Wcp.js +0 -6
- langflow/frontend/assets/wifi-zero-BrVgapeH.js +0 -6
- langflow/frontend/assets/wind-BDwAcZF4.js +0 -6
- langflow/frontend/assets/wind-arrow-down-B1Inkiyr.js +0 -6
- langflow/frontend/assets/wine-CMXvXaEo.js +0 -6
- langflow/frontend/assets/wine-off-Ko62f_nP.js +0 -6
- langflow/frontend/assets/workflow-MXMJ5DGr.js +0 -6
- langflow/frontend/assets/worm-DOF_TRoD.js +0 -6
- langflow/frontend/assets/wrap-text-WFkJgMM-.js +0 -6
- langflow/frontend/assets/wrench-Bj9Pufgg.js +0 -6
- langflow/frontend/assets/youtube-DPJ24OJB.js +0 -6
- langflow/frontend/assets/zap-Cbcs3ReZ.js +0 -6
- langflow/frontend/assets/zap-off-2yg3tKTw.js +0 -6
- langflow/frontend/assets/zoom-in-CqdW7KV-.js +0 -6
- langflow/frontend/assets/zoom-out-8jqGDP4Q.js +0 -6
- langflow_base_nightly-1.7.0.dev20.dist-info/METADATA +0 -99
- langflow_base_nightly-1.7.0.dev20.dist-info/RECORD +0 -2277
- {langflow_base_nightly-1.7.0.dev20.dist-info → langflow_base_nightly-1.7.0.dev22.dist-info}/WHEEL +0 -0
- {langflow_base_nightly-1.7.0.dev20.dist-info → langflow_base_nightly-1.7.0.dev22.dist-info}/entry_points.txt +0 -0
|
@@ -232,7 +232,7 @@
|
|
|
232
232
|
"legacy": false,
|
|
233
233
|
"lf_version": "1.4.2",
|
|
234
234
|
"metadata": {
|
|
235
|
-
"code_hash": "
|
|
235
|
+
"code_hash": "7a26c54d89ed",
|
|
236
236
|
"dependencies": {
|
|
237
237
|
"dependencies": [
|
|
238
238
|
{
|
|
@@ -281,7 +281,7 @@
|
|
|
281
281
|
"show": true,
|
|
282
282
|
"title_case": false,
|
|
283
283
|
"type": "code",
|
|
284
|
-
"value": "from lfx.base.data.utils import IMG_FILE_TYPES, TEXT_FILE_TYPES\nfrom lfx.base.io.chat import ChatComponent\nfrom lfx.inputs.inputs import BoolInput\nfrom lfx.io import (\n DropdownInput,\n FileInput,\n MessageTextInput,\n MultilineInput,\n Output,\n)\nfrom lfx.schema.message import Message\nfrom lfx.utils.constants import (\n MESSAGE_SENDER_AI,\n MESSAGE_SENDER_NAME_USER,\n MESSAGE_SENDER_USER,\n)\n\n\nclass ChatInput(ChatComponent):\n display_name = \"Chat Input\"\n description = \"Get chat inputs from the Playground.\"\n documentation: str = \"https://docs.langflow.org/
|
|
284
|
+
"value": "from lfx.base.data.utils import IMG_FILE_TYPES, TEXT_FILE_TYPES\nfrom lfx.base.io.chat import ChatComponent\nfrom lfx.inputs.inputs import BoolInput\nfrom lfx.io import (\n DropdownInput,\n FileInput,\n MessageTextInput,\n MultilineInput,\n Output,\n)\nfrom lfx.schema.message import Message\nfrom lfx.utils.constants import (\n MESSAGE_SENDER_AI,\n MESSAGE_SENDER_NAME_USER,\n MESSAGE_SENDER_USER,\n)\n\n\nclass ChatInput(ChatComponent):\n display_name = \"Chat Input\"\n description = \"Get chat inputs from the Playground.\"\n documentation: str = \"https://docs.langflow.org/chat-input-and-output\"\n icon = \"MessagesSquare\"\n name = \"ChatInput\"\n minimized = True\n\n inputs = [\n MultilineInput(\n name=\"input_value\",\n display_name=\"Input Text\",\n value=\"\",\n info=\"Message to be passed as input.\",\n input_types=[],\n ),\n BoolInput(\n name=\"should_store_message\",\n display_name=\"Store Messages\",\n info=\"Store the message in the history.\",\n value=True,\n advanced=True,\n ),\n DropdownInput(\n name=\"sender\",\n display_name=\"Sender Type\",\n options=[MESSAGE_SENDER_AI, MESSAGE_SENDER_USER],\n value=MESSAGE_SENDER_USER,\n info=\"Type of sender.\",\n advanced=True,\n ),\n MessageTextInput(\n name=\"sender_name\",\n display_name=\"Sender Name\",\n info=\"Name of the sender.\",\n value=MESSAGE_SENDER_NAME_USER,\n advanced=True,\n ),\n MessageTextInput(\n name=\"session_id\",\n display_name=\"Session ID\",\n info=\"The session ID of the chat. If empty, the current session ID parameter will be used.\",\n advanced=True,\n ),\n MessageTextInput(\n name=\"context_id\",\n display_name=\"Context ID\",\n info=\"The context ID of the chat. Adds an extra layer to the local memory.\",\n value=\"\",\n advanced=True,\n ),\n FileInput(\n name=\"files\",\n display_name=\"Files\",\n file_types=TEXT_FILE_TYPES + IMG_FILE_TYPES,\n info=\"Files to be sent with the message.\",\n advanced=True,\n is_list=True,\n temp_file=True,\n ),\n ]\n outputs = [\n Output(display_name=\"Chat Message\", name=\"message\", method=\"message_response\"),\n ]\n\n async def message_response(self) -> Message:\n # Ensure files is a list and filter out empty/None values\n files = self.files if self.files else []\n if files and not isinstance(files, list):\n files = [files]\n # Filter out None/empty values\n files = [f for f in files if f is not None and f != \"\"]\n\n session_id = self.session_id or self.graph.session_id or \"\"\n message = await Message.create(\n text=self.input_value,\n sender=self.sender,\n sender_name=self.sender_name,\n session_id=session_id,\n context_id=self.context_id,\n files=files,\n )\n if session_id and isinstance(message, Message) and self.should_store_message:\n stored_message = await self.send_message(\n message,\n )\n self.message.value = stored_message\n message = stored_message\n\n self.status = message\n return message\n"
|
|
285
285
|
},
|
|
286
286
|
"context_id": {
|
|
287
287
|
"_input_type": "MessageTextInput",
|
|
@@ -511,7 +511,7 @@
|
|
|
511
511
|
"legacy": false,
|
|
512
512
|
"lf_version": "1.4.2",
|
|
513
513
|
"metadata": {
|
|
514
|
-
"code_hash": "
|
|
514
|
+
"code_hash": "cae45e2d53f6",
|
|
515
515
|
"dependencies": {
|
|
516
516
|
"dependencies": [
|
|
517
517
|
{
|
|
@@ -586,7 +586,7 @@
|
|
|
586
586
|
"show": true,
|
|
587
587
|
"title_case": false,
|
|
588
588
|
"type": "code",
|
|
589
|
-
"value": "from collections.abc import Generator\nfrom typing import Any\n\nimport orjson\nfrom fastapi.encoders import jsonable_encoder\n\nfrom lfx.base.io.chat import ChatComponent\nfrom lfx.helpers.data import safe_convert\nfrom lfx.inputs.inputs import BoolInput, DropdownInput, HandleInput, MessageTextInput\nfrom lfx.schema.data import Data\nfrom lfx.schema.dataframe import DataFrame\nfrom lfx.schema.message import Message\nfrom lfx.schema.properties import Source\nfrom lfx.template.field.base import Output\nfrom lfx.utils.constants import (\n MESSAGE_SENDER_AI,\n MESSAGE_SENDER_NAME_AI,\n MESSAGE_SENDER_USER,\n)\n\n\nclass ChatOutput(ChatComponent):\n display_name = \"Chat Output\"\n description = \"Display a chat message in the Playground.\"\n documentation: str = \"https://docs.langflow.org/
|
|
589
|
+
"value": "from collections.abc import Generator\nfrom typing import Any\n\nimport orjson\nfrom fastapi.encoders import jsonable_encoder\n\nfrom lfx.base.io.chat import ChatComponent\nfrom lfx.helpers.data import safe_convert\nfrom lfx.inputs.inputs import BoolInput, DropdownInput, HandleInput, MessageTextInput\nfrom lfx.schema.data import Data\nfrom lfx.schema.dataframe import DataFrame\nfrom lfx.schema.message import Message\nfrom lfx.schema.properties import Source\nfrom lfx.template.field.base import Output\nfrom lfx.utils.constants import (\n MESSAGE_SENDER_AI,\n MESSAGE_SENDER_NAME_AI,\n MESSAGE_SENDER_USER,\n)\n\n\nclass ChatOutput(ChatComponent):\n display_name = \"Chat Output\"\n description = \"Display a chat message in the Playground.\"\n documentation: str = \"https://docs.langflow.org/chat-input-and-output\"\n icon = \"MessagesSquare\"\n name = \"ChatOutput\"\n minimized = True\n\n inputs = [\n HandleInput(\n name=\"input_value\",\n display_name=\"Inputs\",\n info=\"Message to be passed as output.\",\n input_types=[\"Data\", \"DataFrame\", \"Message\"],\n required=True,\n ),\n BoolInput(\n name=\"should_store_message\",\n display_name=\"Store Messages\",\n info=\"Store the message in the history.\",\n value=True,\n advanced=True,\n ),\n DropdownInput(\n name=\"sender\",\n display_name=\"Sender Type\",\n options=[MESSAGE_SENDER_AI, MESSAGE_SENDER_USER],\n value=MESSAGE_SENDER_AI,\n advanced=True,\n info=\"Type of sender.\",\n ),\n MessageTextInput(\n name=\"sender_name\",\n display_name=\"Sender Name\",\n info=\"Name of the sender.\",\n value=MESSAGE_SENDER_NAME_AI,\n advanced=True,\n ),\n MessageTextInput(\n name=\"session_id\",\n display_name=\"Session ID\",\n info=\"The session ID of the chat. If empty, the current session ID parameter will be used.\",\n advanced=True,\n ),\n MessageTextInput(\n name=\"context_id\",\n display_name=\"Context ID\",\n info=\"The context ID of the chat. Adds an extra layer to the local memory.\",\n value=\"\",\n advanced=True,\n ),\n MessageTextInput(\n name=\"data_template\",\n display_name=\"Data Template\",\n value=\"{text}\",\n advanced=True,\n info=\"Template to convert Data to Text. If left empty, it will be dynamically set to the Data's text key.\",\n ),\n BoolInput(\n name=\"clean_data\",\n display_name=\"Basic Clean Data\",\n value=True,\n advanced=True,\n info=\"Whether to clean data before converting to string.\",\n ),\n ]\n outputs = [\n Output(\n display_name=\"Output Message\",\n name=\"message\",\n method=\"message_response\",\n ),\n ]\n\n def _build_source(self, id_: str | None, display_name: str | None, source: str | None) -> Source:\n source_dict = {}\n if id_:\n source_dict[\"id\"] = id_\n if display_name:\n source_dict[\"display_name\"] = display_name\n if source:\n # Handle case where source is a ChatOpenAI object\n if hasattr(source, \"model_name\"):\n source_dict[\"source\"] = source.model_name\n elif hasattr(source, \"model\"):\n source_dict[\"source\"] = str(source.model)\n else:\n source_dict[\"source\"] = str(source)\n return Source(**source_dict)\n\n async def message_response(self) -> Message:\n # First convert the input to string if needed\n text = self.convert_to_string()\n\n # Get source properties\n source, _, display_name, source_id = self.get_properties_from_source_component()\n\n # Create or use existing Message object\n if isinstance(self.input_value, Message) and not self.is_connected_to_chat_input():\n message = self.input_value\n # Update message properties\n message.text = text\n else:\n message = Message(text=text)\n\n # Set message properties\n message.sender = self.sender\n message.sender_name = self.sender_name\n message.session_id = self.session_id or self.graph.session_id or \"\"\n message.context_id = self.context_id\n message.flow_id = self.graph.flow_id if hasattr(self, \"graph\") else None\n message.properties.source = self._build_source(source_id, display_name, source)\n\n # Store message if needed\n if message.session_id and self.should_store_message:\n stored_message = await self.send_message(message)\n self.message.value = stored_message\n message = stored_message\n\n self.status = message\n return message\n\n def _serialize_data(self, data: Data) -> str:\n \"\"\"Serialize Data object to JSON string.\"\"\"\n # Convert data.data to JSON-serializable format\n serializable_data = jsonable_encoder(data.data)\n # Serialize with orjson, enabling pretty printing with indentation\n json_bytes = orjson.dumps(serializable_data, option=orjson.OPT_INDENT_2)\n # Convert bytes to string and wrap in Markdown code blocks\n return \"```json\\n\" + json_bytes.decode(\"utf-8\") + \"\\n```\"\n\n def _validate_input(self) -> None:\n \"\"\"Validate the input data and raise ValueError if invalid.\"\"\"\n if self.input_value is None:\n msg = \"Input data cannot be None\"\n raise ValueError(msg)\n if isinstance(self.input_value, list) and not all(\n isinstance(item, Message | Data | DataFrame | str) for item in self.input_value\n ):\n invalid_types = [\n type(item).__name__\n for item in self.input_value\n if not isinstance(item, Message | Data | DataFrame | str)\n ]\n msg = f\"Expected Data or DataFrame or Message or str, got {invalid_types}\"\n raise TypeError(msg)\n if not isinstance(\n self.input_value,\n Message | Data | DataFrame | str | list | Generator | type(None),\n ):\n type_name = type(self.input_value).__name__\n msg = f\"Expected Data or DataFrame or Message or str, Generator or None, got {type_name}\"\n raise TypeError(msg)\n\n def convert_to_string(self) -> str | Generator[Any, None, None]:\n \"\"\"Convert input data to string with proper error handling.\"\"\"\n self._validate_input()\n if isinstance(self.input_value, list):\n clean_data: bool = getattr(self, \"clean_data\", False)\n return \"\\n\".join([safe_convert(item, clean_data=clean_data) for item in self.input_value])\n if isinstance(self.input_value, Generator):\n return self.input_value\n return safe_convert(self.input_value)\n"
|
|
590
590
|
},
|
|
591
591
|
"context_id": {
|
|
592
592
|
"_input_type": "MessageTextInput",
|
|
@@ -1853,7 +1853,7 @@
|
|
|
1853
1853
|
"legacy": false,
|
|
1854
1854
|
"lf_version": "1.4.2",
|
|
1855
1855
|
"metadata": {
|
|
1856
|
-
"code_hash": "
|
|
1856
|
+
"code_hash": "9e44c83a5058",
|
|
1857
1857
|
"dependencies": {
|
|
1858
1858
|
"dependencies": [
|
|
1859
1859
|
{
|
|
@@ -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.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 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 return 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 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 return OllamaEmbeddings(\n model=model,\n base_url=transformed_base_url or \"http://localhost:11434\",\n **model_kwargs,\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 credentials = Credentials(\n api_key=self.api_key,\n url=base_url_ibm_watsonx or \"https://us-south.ml.cloud.ibm.com\",\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 return WatsonxEmbeddings(\n model_id=model,\n params=params,\n watsonx_client=api_client,\n project_id=project_id,\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 ]\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"
|
|
2019
2019
|
},
|
|
2020
2020
|
"dimensions": {
|
|
2021
2021
|
"_input_type": "IntInput",
|
|
@@ -2645,7 +2645,7 @@
|
|
|
2645
2645
|
"legacy": false,
|
|
2646
2646
|
"lf_version": "1.4.2",
|
|
2647
2647
|
"metadata": {
|
|
2648
|
-
"code_hash": "
|
|
2648
|
+
"code_hash": "5cea317b23ca",
|
|
2649
2649
|
"dependencies": {
|
|
2650
2650
|
"dependencies": [
|
|
2651
2651
|
{
|
|
@@ -2705,7 +2705,7 @@
|
|
|
2705
2705
|
"show": true,
|
|
2706
2706
|
"title_case": false,
|
|
2707
2707
|
"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-client\"\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"
|
|
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"
|
|
2709
2709
|
},
|
|
2710
2710
|
"mcp_server": {
|
|
2711
2711
|
"_input_type": "McpInput",
|
|
@@ -112,7 +112,7 @@
|
|
|
112
112
|
"legacy": false,
|
|
113
113
|
"lf_version": "1.2.0",
|
|
114
114
|
"metadata": {
|
|
115
|
-
"code_hash": "
|
|
115
|
+
"code_hash": "7a26c54d89ed",
|
|
116
116
|
"dependencies": {
|
|
117
117
|
"dependencies": [
|
|
118
118
|
{
|
|
@@ -162,7 +162,7 @@
|
|
|
162
162
|
"show": true,
|
|
163
163
|
"title_case": false,
|
|
164
164
|
"type": "code",
|
|
165
|
-
"value": "from lfx.base.data.utils import IMG_FILE_TYPES, TEXT_FILE_TYPES\nfrom lfx.base.io.chat import ChatComponent\nfrom lfx.inputs.inputs import BoolInput\nfrom lfx.io import (\n DropdownInput,\n FileInput,\n MessageTextInput,\n MultilineInput,\n Output,\n)\nfrom lfx.schema.message import Message\nfrom lfx.utils.constants import (\n MESSAGE_SENDER_AI,\n MESSAGE_SENDER_NAME_USER,\n MESSAGE_SENDER_USER,\n)\n\n\nclass ChatInput(ChatComponent):\n display_name = \"Chat Input\"\n description = \"Get chat inputs from the Playground.\"\n documentation: str = \"https://docs.langflow.org/
|
|
165
|
+
"value": "from lfx.base.data.utils import IMG_FILE_TYPES, TEXT_FILE_TYPES\nfrom lfx.base.io.chat import ChatComponent\nfrom lfx.inputs.inputs import BoolInput\nfrom lfx.io import (\n DropdownInput,\n FileInput,\n MessageTextInput,\n MultilineInput,\n Output,\n)\nfrom lfx.schema.message import Message\nfrom lfx.utils.constants import (\n MESSAGE_SENDER_AI,\n MESSAGE_SENDER_NAME_USER,\n MESSAGE_SENDER_USER,\n)\n\n\nclass ChatInput(ChatComponent):\n display_name = \"Chat Input\"\n description = \"Get chat inputs from the Playground.\"\n documentation: str = \"https://docs.langflow.org/chat-input-and-output\"\n icon = \"MessagesSquare\"\n name = \"ChatInput\"\n minimized = True\n\n inputs = [\n MultilineInput(\n name=\"input_value\",\n display_name=\"Input Text\",\n value=\"\",\n info=\"Message to be passed as input.\",\n input_types=[],\n ),\n BoolInput(\n name=\"should_store_message\",\n display_name=\"Store Messages\",\n info=\"Store the message in the history.\",\n value=True,\n advanced=True,\n ),\n DropdownInput(\n name=\"sender\",\n display_name=\"Sender Type\",\n options=[MESSAGE_SENDER_AI, MESSAGE_SENDER_USER],\n value=MESSAGE_SENDER_USER,\n info=\"Type of sender.\",\n advanced=True,\n ),\n MessageTextInput(\n name=\"sender_name\",\n display_name=\"Sender Name\",\n info=\"Name of the sender.\",\n value=MESSAGE_SENDER_NAME_USER,\n advanced=True,\n ),\n MessageTextInput(\n name=\"session_id\",\n display_name=\"Session ID\",\n info=\"The session ID of the chat. If empty, the current session ID parameter will be used.\",\n advanced=True,\n ),\n MessageTextInput(\n name=\"context_id\",\n display_name=\"Context ID\",\n info=\"The context ID of the chat. Adds an extra layer to the local memory.\",\n value=\"\",\n advanced=True,\n ),\n FileInput(\n name=\"files\",\n display_name=\"Files\",\n file_types=TEXT_FILE_TYPES + IMG_FILE_TYPES,\n info=\"Files to be sent with the message.\",\n advanced=True,\n is_list=True,\n temp_file=True,\n ),\n ]\n outputs = [\n Output(display_name=\"Chat Message\", name=\"message\", method=\"message_response\"),\n ]\n\n async def message_response(self) -> Message:\n # Ensure files is a list and filter out empty/None values\n files = self.files if self.files else []\n if files and not isinstance(files, list):\n files = [files]\n # Filter out None/empty values\n files = [f for f in files if f is not None and f != \"\"]\n\n session_id = self.session_id or self.graph.session_id or \"\"\n message = await Message.create(\n text=self.input_value,\n sender=self.sender,\n sender_name=self.sender_name,\n session_id=session_id,\n context_id=self.context_id,\n files=files,\n )\n if session_id and isinstance(message, Message) and self.should_store_message:\n stored_message = await self.send_message(\n message,\n )\n self.message.value = stored_message\n message = stored_message\n\n self.status = message\n return message\n"
|
|
166
166
|
},
|
|
167
167
|
"context_id": {
|
|
168
168
|
"_input_type": "MessageTextInput",
|
|
@@ -392,7 +392,7 @@
|
|
|
392
392
|
"legacy": false,
|
|
393
393
|
"lf_version": "1.2.0",
|
|
394
394
|
"metadata": {
|
|
395
|
-
"code_hash": "
|
|
395
|
+
"code_hash": "cae45e2d53f6",
|
|
396
396
|
"dependencies": {
|
|
397
397
|
"dependencies": [
|
|
398
398
|
{
|
|
@@ -468,7 +468,7 @@
|
|
|
468
468
|
"show": true,
|
|
469
469
|
"title_case": false,
|
|
470
470
|
"type": "code",
|
|
471
|
-
"value": "from collections.abc import Generator\nfrom typing import Any\n\nimport orjson\nfrom fastapi.encoders import jsonable_encoder\n\nfrom lfx.base.io.chat import ChatComponent\nfrom lfx.helpers.data import safe_convert\nfrom lfx.inputs.inputs import BoolInput, DropdownInput, HandleInput, MessageTextInput\nfrom lfx.schema.data import Data\nfrom lfx.schema.dataframe import DataFrame\nfrom lfx.schema.message import Message\nfrom lfx.schema.properties import Source\nfrom lfx.template.field.base import Output\nfrom lfx.utils.constants import (\n MESSAGE_SENDER_AI,\n MESSAGE_SENDER_NAME_AI,\n MESSAGE_SENDER_USER,\n)\n\n\nclass ChatOutput(ChatComponent):\n display_name = \"Chat Output\"\n description = \"Display a chat message in the Playground.\"\n documentation: str = \"https://docs.langflow.org/
|
|
471
|
+
"value": "from collections.abc import Generator\nfrom typing import Any\n\nimport orjson\nfrom fastapi.encoders import jsonable_encoder\n\nfrom lfx.base.io.chat import ChatComponent\nfrom lfx.helpers.data import safe_convert\nfrom lfx.inputs.inputs import BoolInput, DropdownInput, HandleInput, MessageTextInput\nfrom lfx.schema.data import Data\nfrom lfx.schema.dataframe import DataFrame\nfrom lfx.schema.message import Message\nfrom lfx.schema.properties import Source\nfrom lfx.template.field.base import Output\nfrom lfx.utils.constants import (\n MESSAGE_SENDER_AI,\n MESSAGE_SENDER_NAME_AI,\n MESSAGE_SENDER_USER,\n)\n\n\nclass ChatOutput(ChatComponent):\n display_name = \"Chat Output\"\n description = \"Display a chat message in the Playground.\"\n documentation: str = \"https://docs.langflow.org/chat-input-and-output\"\n icon = \"MessagesSquare\"\n name = \"ChatOutput\"\n minimized = True\n\n inputs = [\n HandleInput(\n name=\"input_value\",\n display_name=\"Inputs\",\n info=\"Message to be passed as output.\",\n input_types=[\"Data\", \"DataFrame\", \"Message\"],\n required=True,\n ),\n BoolInput(\n name=\"should_store_message\",\n display_name=\"Store Messages\",\n info=\"Store the message in the history.\",\n value=True,\n advanced=True,\n ),\n DropdownInput(\n name=\"sender\",\n display_name=\"Sender Type\",\n options=[MESSAGE_SENDER_AI, MESSAGE_SENDER_USER],\n value=MESSAGE_SENDER_AI,\n advanced=True,\n info=\"Type of sender.\",\n ),\n MessageTextInput(\n name=\"sender_name\",\n display_name=\"Sender Name\",\n info=\"Name of the sender.\",\n value=MESSAGE_SENDER_NAME_AI,\n advanced=True,\n ),\n MessageTextInput(\n name=\"session_id\",\n display_name=\"Session ID\",\n info=\"The session ID of the chat. If empty, the current session ID parameter will be used.\",\n advanced=True,\n ),\n MessageTextInput(\n name=\"context_id\",\n display_name=\"Context ID\",\n info=\"The context ID of the chat. Adds an extra layer to the local memory.\",\n value=\"\",\n advanced=True,\n ),\n MessageTextInput(\n name=\"data_template\",\n display_name=\"Data Template\",\n value=\"{text}\",\n advanced=True,\n info=\"Template to convert Data to Text. If left empty, it will be dynamically set to the Data's text key.\",\n ),\n BoolInput(\n name=\"clean_data\",\n display_name=\"Basic Clean Data\",\n value=True,\n advanced=True,\n info=\"Whether to clean data before converting to string.\",\n ),\n ]\n outputs = [\n Output(\n display_name=\"Output Message\",\n name=\"message\",\n method=\"message_response\",\n ),\n ]\n\n def _build_source(self, id_: str | None, display_name: str | None, source: str | None) -> Source:\n source_dict = {}\n if id_:\n source_dict[\"id\"] = id_\n if display_name:\n source_dict[\"display_name\"] = display_name\n if source:\n # Handle case where source is a ChatOpenAI object\n if hasattr(source, \"model_name\"):\n source_dict[\"source\"] = source.model_name\n elif hasattr(source, \"model\"):\n source_dict[\"source\"] = str(source.model)\n else:\n source_dict[\"source\"] = str(source)\n return Source(**source_dict)\n\n async def message_response(self) -> Message:\n # First convert the input to string if needed\n text = self.convert_to_string()\n\n # Get source properties\n source, _, display_name, source_id = self.get_properties_from_source_component()\n\n # Create or use existing Message object\n if isinstance(self.input_value, Message) and not self.is_connected_to_chat_input():\n message = self.input_value\n # Update message properties\n message.text = text\n else:\n message = Message(text=text)\n\n # Set message properties\n message.sender = self.sender\n message.sender_name = self.sender_name\n message.session_id = self.session_id or self.graph.session_id or \"\"\n message.context_id = self.context_id\n message.flow_id = self.graph.flow_id if hasattr(self, \"graph\") else None\n message.properties.source = self._build_source(source_id, display_name, source)\n\n # Store message if needed\n if message.session_id and self.should_store_message:\n stored_message = await self.send_message(message)\n self.message.value = stored_message\n message = stored_message\n\n self.status = message\n return message\n\n def _serialize_data(self, data: Data) -> str:\n \"\"\"Serialize Data object to JSON string.\"\"\"\n # Convert data.data to JSON-serializable format\n serializable_data = jsonable_encoder(data.data)\n # Serialize with orjson, enabling pretty printing with indentation\n json_bytes = orjson.dumps(serializable_data, option=orjson.OPT_INDENT_2)\n # Convert bytes to string and wrap in Markdown code blocks\n return \"```json\\n\" + json_bytes.decode(\"utf-8\") + \"\\n```\"\n\n def _validate_input(self) -> None:\n \"\"\"Validate the input data and raise ValueError if invalid.\"\"\"\n if self.input_value is None:\n msg = \"Input data cannot be None\"\n raise ValueError(msg)\n if isinstance(self.input_value, list) and not all(\n isinstance(item, Message | Data | DataFrame | str) for item in self.input_value\n ):\n invalid_types = [\n type(item).__name__\n for item in self.input_value\n if not isinstance(item, Message | Data | DataFrame | str)\n ]\n msg = f\"Expected Data or DataFrame or Message or str, got {invalid_types}\"\n raise TypeError(msg)\n if not isinstance(\n self.input_value,\n Message | Data | DataFrame | str | list | Generator | type(None),\n ):\n type_name = type(self.input_value).__name__\n msg = f\"Expected Data or DataFrame or Message or str, Generator or None, got {type_name}\"\n raise TypeError(msg)\n\n def convert_to_string(self) -> str | Generator[Any, None, None]:\n \"\"\"Convert input data to string with proper error handling.\"\"\"\n self._validate_input()\n if isinstance(self.input_value, list):\n clean_data: bool = getattr(self, \"clean_data\", False)\n return \"\\n\".join([safe_convert(item, clean_data=clean_data) for item in self.input_value])\n if isinstance(self.input_value, Generator):\n return self.input_value\n return safe_convert(self.input_value)\n"
|
|
472
472
|
},
|
|
473
473
|
"context_id": {
|
|
474
474
|
"_input_type": "MessageTextInput",
|
|
@@ -765,7 +765,7 @@
|
|
|
765
765
|
"key": "APIRequest",
|
|
766
766
|
"legacy": false,
|
|
767
767
|
"metadata": {
|
|
768
|
-
"code_hash": "
|
|
768
|
+
"code_hash": "04d62aab3a77",
|
|
769
769
|
"dependencies": {
|
|
770
770
|
"dependencies": [
|
|
771
771
|
{
|
|
@@ -882,7 +882,7 @@
|
|
|
882
882
|
"show": true,
|
|
883
883
|
"title_case": false,
|
|
884
884
|
"type": "code",
|
|
885
|
-
"value": "import json\nimport re\nimport tempfile\nfrom datetime import datetime, timezone\nfrom pathlib import Path\nfrom typing import Any\nfrom urllib.parse import parse_qsl, urlencode, urlparse, urlunparse\n\nimport aiofiles\nimport aiofiles.os as aiofiles_os\nimport httpx\nimport validators\n\nfrom lfx.base.curl.parse import parse_context\nfrom lfx.custom.custom_component.component import Component\nfrom lfx.inputs.inputs import TabInput\nfrom lfx.io import (\n BoolInput,\n DataInput,\n DropdownInput,\n IntInput,\n MessageTextInput,\n MultilineInput,\n Output,\n TableInput,\n)\nfrom lfx.schema.data import Data\nfrom lfx.schema.dotdict import dotdict\nfrom lfx.utils.component_utils import set_current_fields, set_field_advanced, set_field_display\nfrom lfx.utils.ssrf_protection import SSRFProtectionError, validate_url_for_ssrf\n\n# Define fields for each mode\nMODE_FIELDS = {\n \"URL\": [\n \"url_input\",\n \"method\",\n ],\n \"cURL\": [\"curl_input\"],\n}\n\n# Fields that should always be visible\nDEFAULT_FIELDS = [\"mode\"]\n\n\nclass APIRequestComponent(Component):\n display_name = \"API Request\"\n description = \"Make HTTP requests using URL or cURL commands.\"\n documentation: str = \"https://docs.langflow.org/components-data#api-request\"\n icon = \"Globe\"\n name = \"APIRequest\"\n\n inputs = [\n MessageTextInput(\n name=\"url_input\",\n display_name=\"URL\",\n info=\"Enter the URL for the request.\",\n advanced=False,\n tool_mode=True,\n ),\n MultilineInput(\n name=\"curl_input\",\n display_name=\"cURL\",\n info=(\n \"Paste a curl command to populate the fields. \"\n \"This will fill in the dictionary fields for headers and body.\"\n ),\n real_time_refresh=True,\n tool_mode=True,\n advanced=True,\n show=False,\n ),\n DropdownInput(\n name=\"method\",\n display_name=\"Method\",\n options=[\"GET\", \"POST\", \"PATCH\", \"PUT\", \"DELETE\"],\n value=\"GET\",\n info=\"The HTTP method to use.\",\n real_time_refresh=True,\n ),\n TabInput(\n name=\"mode\",\n display_name=\"Mode\",\n options=[\"URL\", \"cURL\"],\n value=\"URL\",\n info=\"Enable cURL mode to populate fields from a cURL command.\",\n real_time_refresh=True,\n ),\n DataInput(\n name=\"query_params\",\n display_name=\"Query Parameters\",\n info=\"The query parameters to append to the URL.\",\n advanced=True,\n ),\n TableInput(\n name=\"body\",\n display_name=\"Body\",\n info=\"The body to send with the request as a dictionary (for POST, PATCH, PUT).\",\n table_schema=[\n {\n \"name\": \"key\",\n \"display_name\": \"Key\",\n \"type\": \"str\",\n \"description\": \"Parameter name\",\n },\n {\n \"name\": \"value\",\n \"display_name\": \"Value\",\n \"description\": \"Parameter value\",\n },\n ],\n value=[],\n input_types=[\"Data\"],\n advanced=True,\n real_time_refresh=True,\n ),\n TableInput(\n name=\"headers\",\n display_name=\"Headers\",\n info=\"The headers to send with the request\",\n table_schema=[\n {\n \"name\": \"key\",\n \"display_name\": \"Header\",\n \"type\": \"str\",\n \"description\": \"Header name\",\n },\n {\n \"name\": \"value\",\n \"display_name\": \"Value\",\n \"type\": \"str\",\n \"description\": \"Header value\",\n },\n ],\n value=[{\"key\": \"User-Agent\", \"value\": \"Langflow/1.0\"}],\n advanced=True,\n input_types=[\"Data\"],\n real_time_refresh=True,\n ),\n IntInput(\n name=\"timeout\",\n display_name=\"Timeout\",\n value=30,\n info=\"The timeout to use for the request.\",\n advanced=True,\n ),\n BoolInput(\n name=\"follow_redirects\",\n display_name=\"Follow Redirects\",\n value=False,\n info=(\n \"Whether to follow HTTP redirects. \"\n \"WARNING: Enabling redirects may allow SSRF bypass attacks where a public URL \"\n \"redirects to internal resources. Only enable if you trust the target server. \"\n \"See OWASP SSRF Prevention Cheat Sheet for details.\"\n ),\n advanced=True,\n ),\n BoolInput(\n name=\"save_to_file\",\n display_name=\"Save to File\",\n value=False,\n info=\"Save the API response to a temporary file\",\n advanced=True,\n ),\n BoolInput(\n name=\"include_httpx_metadata\",\n display_name=\"Include HTTPx Metadata\",\n value=False,\n info=(\n \"Include properties such as headers, status_code, response_headers, \"\n \"and redirection_history in the output.\"\n ),\n advanced=True,\n ),\n ]\n\n outputs = [\n Output(display_name=\"API Response\", name=\"data\", method=\"make_api_request\"),\n ]\n\n def _parse_json_value(self, value: Any) -> Any:\n \"\"\"Parse a value that might be a JSON string.\"\"\"\n if not isinstance(value, str):\n return value\n\n try:\n parsed = json.loads(value)\n except json.JSONDecodeError:\n return value\n else:\n return parsed\n\n def _process_body(self, body: Any) -> dict:\n \"\"\"Process the body input into a valid dictionary.\"\"\"\n if body is None:\n return {}\n if hasattr(body, \"data\"):\n body = body.data\n if isinstance(body, dict):\n return self._process_dict_body(body)\n if isinstance(body, str):\n return self._process_string_body(body)\n if isinstance(body, list):\n return self._process_list_body(body)\n return {}\n\n def _process_dict_body(self, body: dict) -> dict:\n \"\"\"Process dictionary body by parsing JSON values.\"\"\"\n return {k: self._parse_json_value(v) for k, v in body.items()}\n\n def _process_string_body(self, body: str) -> dict:\n \"\"\"Process string body by attempting JSON parse.\"\"\"\n try:\n return self._process_body(json.loads(body))\n except json.JSONDecodeError:\n return {\"data\": body}\n\n def _process_list_body(self, body: list) -> dict:\n \"\"\"Process list body by converting to key-value dictionary.\"\"\"\n processed_dict = {}\n try:\n for item in body:\n # Unwrap Data objects\n current_item = item\n if hasattr(item, \"data\"):\n unwrapped_data = item.data\n # If the unwrapped data is a dict but not key-value format, use it directly\n if isinstance(unwrapped_data, dict) and not self._is_valid_key_value_item(unwrapped_data):\n return unwrapped_data\n current_item = unwrapped_data\n if not self._is_valid_key_value_item(current_item):\n continue\n key = current_item[\"key\"]\n value = self._parse_json_value(current_item[\"value\"])\n processed_dict[key] = value\n except (KeyError, TypeError, ValueError) as e:\n self.log(f\"Failed to process body list: {e}\")\n return {}\n return processed_dict\n\n def _is_valid_key_value_item(self, item: Any) -> bool:\n \"\"\"Check if an item is a valid key-value dictionary.\"\"\"\n return isinstance(item, dict) and \"key\" in item and \"value\" in item\n\n def parse_curl(self, curl: str, build_config: dotdict) -> dotdict:\n \"\"\"Parse a cURL command and update build configuration.\"\"\"\n try:\n parsed = parse_context(curl)\n\n # Update basic configuration\n url = parsed.url\n # Normalize URL before setting it\n url = self._normalize_url(url)\n\n build_config[\"url_input\"][\"value\"] = url\n build_config[\"method\"][\"value\"] = parsed.method.upper()\n\n # Process headers\n headers_list = [{\"key\": k, \"value\": v} for k, v in parsed.headers.items()]\n build_config[\"headers\"][\"value\"] = headers_list\n\n # Process body data\n if not parsed.data:\n build_config[\"body\"][\"value\"] = []\n elif parsed.data:\n try:\n json_data = json.loads(parsed.data)\n if isinstance(json_data, dict):\n body_list = [\n {\"key\": k, \"value\": json.dumps(v) if isinstance(v, dict | list) else str(v)}\n for k, v in json_data.items()\n ]\n build_config[\"body\"][\"value\"] = body_list\n else:\n build_config[\"body\"][\"value\"] = [{\"key\": \"data\", \"value\": json.dumps(json_data)}]\n except json.JSONDecodeError:\n build_config[\"body\"][\"value\"] = [{\"key\": \"data\", \"value\": parsed.data}]\n\n except Exception as exc:\n msg = f\"Error parsing curl: {exc}\"\n self.log(msg)\n raise ValueError(msg) from exc\n\n return build_config\n\n def _normalize_url(self, url: str) -> str:\n \"\"\"Normalize URL by adding https:// if no protocol is specified.\"\"\"\n if not url or not isinstance(url, str):\n msg = \"URL cannot be empty\"\n raise ValueError(msg)\n\n url = url.strip()\n if url.startswith((\"http://\", \"https://\")):\n return url\n return f\"https://{url}\"\n\n async def make_request(\n self,\n client: httpx.AsyncClient,\n method: str,\n url: str,\n headers: dict | None = None,\n body: Any = None,\n timeout: int = 5,\n *,\n follow_redirects: bool = True,\n save_to_file: bool = False,\n include_httpx_metadata: bool = False,\n ) -> Data:\n method = method.upper()\n if method not in {\"GET\", \"POST\", \"PATCH\", \"PUT\", \"DELETE\"}:\n msg = f\"Unsupported method: {method}\"\n raise ValueError(msg)\n\n processed_body = self._process_body(body)\n redirection_history = []\n\n try:\n # Prepare request parameters\n request_params = {\n \"method\": method,\n \"url\": url,\n \"headers\": headers,\n \"json\": processed_body,\n \"timeout\": timeout,\n \"follow_redirects\": follow_redirects,\n }\n response = await client.request(**request_params)\n\n redirection_history = [\n {\n \"url\": redirect.headers.get(\"Location\", str(redirect.url)),\n \"status_code\": redirect.status_code,\n }\n for redirect in response.history\n ]\n\n is_binary, file_path = await self._response_info(response, with_file_path=save_to_file)\n response_headers = self._headers_to_dict(response.headers)\n\n # Base metadata\n metadata = {\n \"source\": url,\n \"status_code\": response.status_code,\n \"response_headers\": response_headers,\n }\n\n if redirection_history:\n metadata[\"redirection_history\"] = redirection_history\n\n if save_to_file:\n mode = \"wb\" if is_binary else \"w\"\n encoding = response.encoding if mode == \"w\" else None\n if file_path:\n await aiofiles_os.makedirs(file_path.parent, exist_ok=True)\n if is_binary:\n async with aiofiles.open(file_path, \"wb\") as f:\n await f.write(response.content)\n await f.flush()\n else:\n async with aiofiles.open(file_path, \"w\", encoding=encoding) as f:\n await f.write(response.text)\n await f.flush()\n metadata[\"file_path\"] = str(file_path)\n\n if include_httpx_metadata:\n metadata.update({\"headers\": headers})\n return Data(data=metadata)\n\n # Handle response content\n if is_binary:\n result = response.content\n else:\n try:\n result = response.json()\n except json.JSONDecodeError:\n self.log(\"Failed to decode JSON response\")\n result = response.text.encode(\"utf-8\")\n\n metadata[\"result\"] = result\n\n if include_httpx_metadata:\n metadata.update({\"headers\": headers})\n\n return Data(data=metadata)\n except (httpx.HTTPError, httpx.RequestError, httpx.TimeoutException) as exc:\n self.log(f\"Error making request to {url}\")\n return Data(\n data={\n \"source\": url,\n \"headers\": headers,\n \"status_code\": 500,\n \"error\": str(exc),\n **({\"redirection_history\": redirection_history} if redirection_history else {}),\n },\n )\n\n def add_query_params(self, url: str, params: dict) -> str:\n \"\"\"Add query parameters to URL efficiently.\"\"\"\n if not params:\n return url\n url_parts = list(urlparse(url))\n query = dict(parse_qsl(url_parts[4]))\n query.update(params)\n url_parts[4] = urlencode(query)\n return urlunparse(url_parts)\n\n def _headers_to_dict(self, headers: httpx.Headers) -> dict[str, str]:\n \"\"\"Convert HTTP headers to a dictionary with lowercased keys.\"\"\"\n return {k.lower(): v for k, v in headers.items()}\n\n def _process_headers(self, headers: Any) -> dict:\n \"\"\"Process the headers input into a valid dictionary.\"\"\"\n if headers is None:\n return {}\n if isinstance(headers, dict):\n return headers\n if isinstance(headers, list):\n return {item[\"key\"]: item[\"value\"] for item in headers if self._is_valid_key_value_item(item)}\n return {}\n\n async def make_api_request(self) -> Data:\n \"\"\"Make HTTP request with optimized parameter handling.\"\"\"\n method = self.method\n url = self.url_input.strip() if isinstance(self.url_input, str) else \"\"\n headers = self.headers or {}\n body = self.body or {}\n timeout = self.timeout\n follow_redirects = self.follow_redirects\n save_to_file = self.save_to_file\n include_httpx_metadata = self.include_httpx_metadata\n\n # Security warning when redirects are enabled\n if follow_redirects:\n self.log(\n \"Security Warning: HTTP redirects are enabled. This may allow SSRF bypass attacks \"\n \"where a public URL redirects to internal resources (e.g., cloud metadata endpoints). \"\n \"Only enable this if you trust the target server.\"\n )\n\n # if self.mode == \"cURL\" and self.curl_input:\n # self._build_config = self.parse_curl(self.curl_input, dotdict())\n # # After parsing curl, get the normalized URL\n # url = self._build_config[\"url_input\"][\"value\"]\n\n # Normalize URL before validation\n url = self._normalize_url(url)\n\n # Validate URL\n if not validators.url(url):\n msg = f\"Invalid URL provided: {url}\"\n raise ValueError(msg)\n\n # SSRF Protection: Validate URL to prevent access to internal resources\n # TODO: In next major version (2.0), remove warn_only=True to enforce blocking\n try:\n validate_url_for_ssrf(url, warn_only=True)\n except SSRFProtectionError as e:\n # This will only raise if SSRF protection is enabled and warn_only=False\n msg = f\"SSRF Protection: {e}\"\n raise ValueError(msg) from e\n\n # Process query parameters\n if isinstance(self.query_params, str):\n query_params = dict(parse_qsl(self.query_params))\n else:\n query_params = self.query_params.data if self.query_params else {}\n\n # Process headers and body\n headers = self._process_headers(headers)\n body = self._process_body(body)\n url = self.add_query_params(url, query_params)\n\n async with httpx.AsyncClient() as client:\n result = await self.make_request(\n client,\n method,\n url,\n headers,\n body,\n timeout,\n follow_redirects=follow_redirects,\n save_to_file=save_to_file,\n include_httpx_metadata=include_httpx_metadata,\n )\n self.status = result\n return result\n\n def update_build_config(self, build_config: dotdict, field_value: Any, field_name: str | None = None) -> dotdict:\n \"\"\"Update the build config based on the selected mode.\"\"\"\n if field_name != \"mode\":\n if field_name == \"curl_input\" and self.mode == \"cURL\" and self.curl_input:\n return self.parse_curl(self.curl_input, build_config)\n return build_config\n\n # print(f\"Current mode: {field_value}\")\n if field_value == \"cURL\":\n set_field_display(build_config, \"curl_input\", value=True)\n if build_config[\"curl_input\"][\"value\"]:\n build_config = self.parse_curl(build_config[\"curl_input\"][\"value\"], build_config)\n else:\n set_field_display(build_config, \"curl_input\", value=False)\n\n return set_current_fields(\n build_config=build_config,\n action_fields=MODE_FIELDS,\n selected_action=field_value,\n default_fields=DEFAULT_FIELDS,\n func=set_field_advanced,\n default_value=True,\n )\n\n async def _response_info(\n self, response: httpx.Response, *, with_file_path: bool = False\n ) -> tuple[bool, Path | None]:\n \"\"\"Determine the file path and whether the response content is binary.\n\n Args:\n response (Response): The HTTP response object.\n with_file_path (bool): Whether to save the response content to a file.\n\n Returns:\n Tuple[bool, Path | None]:\n A tuple containing a boolean indicating if the content is binary and the full file path (if applicable).\n \"\"\"\n content_type = response.headers.get(\"Content-Type\", \"\")\n is_binary = \"application/octet-stream\" in content_type or \"application/binary\" in content_type\n\n if not with_file_path:\n return is_binary, None\n\n component_temp_dir = Path(tempfile.gettempdir()) / self.__class__.__name__\n\n # Create directory asynchronously\n await aiofiles_os.makedirs(component_temp_dir, exist_ok=True)\n\n filename = None\n if \"Content-Disposition\" in response.headers:\n content_disposition = response.headers[\"Content-Disposition\"]\n filename_match = re.search(r'filename=\"(.+?)\"', content_disposition)\n if filename_match:\n extracted_filename = filename_match.group(1)\n filename = extracted_filename\n\n # Step 3: Infer file extension or use part of the request URL if no filename\n if not filename:\n # Extract the last segment of the URL path\n url_path = urlparse(str(response.request.url) if response.request else \"\").path\n base_name = Path(url_path).name # Get the last segment of the path\n if not base_name: # If the path ends with a slash or is empty\n base_name = \"response\"\n\n # Infer file extension\n content_type_to_extension = {\n \"text/plain\": \".txt\",\n \"application/json\": \".json\",\n \"image/jpeg\": \".jpg\",\n \"image/png\": \".png\",\n \"application/octet-stream\": \".bin\",\n }\n extension = content_type_to_extension.get(content_type, \".bin\" if is_binary else \".txt\")\n filename = f\"{base_name}{extension}\"\n\n # Step 4: Define the full file path\n file_path = component_temp_dir / filename\n\n # Step 5: Check if file exists asynchronously and handle accordingly\n try:\n # Try to create the file exclusively (x mode) to check existence\n async with aiofiles.open(file_path, \"x\") as _:\n pass # File created successfully, we can use this path\n except FileExistsError:\n # If file exists, append a timestamp to the filename\n timestamp = datetime.now(timezone.utc).strftime(\"%Y%m%d%H%M%S%f\")\n file_path = component_temp_dir / f\"{timestamp}-{filename}\"\n\n return is_binary, file_path\n"
|
|
885
|
+
"value": "import json\nimport re\nimport tempfile\nfrom datetime import datetime, timezone\nfrom pathlib import Path\nfrom typing import Any\nfrom urllib.parse import parse_qsl, urlencode, urlparse, urlunparse\n\nimport aiofiles\nimport aiofiles.os as aiofiles_os\nimport httpx\nimport validators\n\nfrom lfx.base.curl.parse import parse_context\nfrom lfx.custom.custom_component.component import Component\nfrom lfx.inputs.inputs import TabInput\nfrom lfx.io import (\n BoolInput,\n DataInput,\n DropdownInput,\n IntInput,\n MessageTextInput,\n MultilineInput,\n Output,\n TableInput,\n)\nfrom lfx.schema.data import Data\nfrom lfx.schema.dotdict import dotdict\nfrom lfx.utils.component_utils import set_current_fields, set_field_advanced, set_field_display\nfrom lfx.utils.ssrf_protection import SSRFProtectionError, validate_url_for_ssrf\n\n# Define fields for each mode\nMODE_FIELDS = {\n \"URL\": [\n \"url_input\",\n \"method\",\n ],\n \"cURL\": [\"curl_input\"],\n}\n\n# Fields that should always be visible\nDEFAULT_FIELDS = [\"mode\"]\n\n\nclass APIRequestComponent(Component):\n display_name = \"API Request\"\n description = \"Make HTTP requests using URL or cURL commands.\"\n documentation: str = \"https://docs.langflow.org/api-request\"\n icon = \"Globe\"\n name = \"APIRequest\"\n\n inputs = [\n MessageTextInput(\n name=\"url_input\",\n display_name=\"URL\",\n info=\"Enter the URL for the request.\",\n advanced=False,\n tool_mode=True,\n ),\n MultilineInput(\n name=\"curl_input\",\n display_name=\"cURL\",\n info=(\n \"Paste a curl command to populate the fields. \"\n \"This will fill in the dictionary fields for headers and body.\"\n ),\n real_time_refresh=True,\n tool_mode=True,\n advanced=True,\n show=False,\n ),\n DropdownInput(\n name=\"method\",\n display_name=\"Method\",\n options=[\"GET\", \"POST\", \"PATCH\", \"PUT\", \"DELETE\"],\n value=\"GET\",\n info=\"The HTTP method to use.\",\n real_time_refresh=True,\n ),\n TabInput(\n name=\"mode\",\n display_name=\"Mode\",\n options=[\"URL\", \"cURL\"],\n value=\"URL\",\n info=\"Enable cURL mode to populate fields from a cURL command.\",\n real_time_refresh=True,\n ),\n DataInput(\n name=\"query_params\",\n display_name=\"Query Parameters\",\n info=\"The query parameters to append to the URL.\",\n advanced=True,\n ),\n TableInput(\n name=\"body\",\n display_name=\"Body\",\n info=\"The body to send with the request as a dictionary (for POST, PATCH, PUT).\",\n table_schema=[\n {\n \"name\": \"key\",\n \"display_name\": \"Key\",\n \"type\": \"str\",\n \"description\": \"Parameter name\",\n },\n {\n \"name\": \"value\",\n \"display_name\": \"Value\",\n \"description\": \"Parameter value\",\n },\n ],\n value=[],\n input_types=[\"Data\"],\n advanced=True,\n real_time_refresh=True,\n ),\n TableInput(\n name=\"headers\",\n display_name=\"Headers\",\n info=\"The headers to send with the request\",\n table_schema=[\n {\n \"name\": \"key\",\n \"display_name\": \"Header\",\n \"type\": \"str\",\n \"description\": \"Header name\",\n },\n {\n \"name\": \"value\",\n \"display_name\": \"Value\",\n \"type\": \"str\",\n \"description\": \"Header value\",\n },\n ],\n value=[{\"key\": \"User-Agent\", \"value\": \"Langflow/1.0\"}],\n advanced=True,\n input_types=[\"Data\"],\n real_time_refresh=True,\n ),\n IntInput(\n name=\"timeout\",\n display_name=\"Timeout\",\n value=30,\n info=\"The timeout to use for the request.\",\n advanced=True,\n ),\n BoolInput(\n name=\"follow_redirects\",\n display_name=\"Follow Redirects\",\n value=False,\n info=(\n \"Whether to follow HTTP redirects. \"\n \"WARNING: Enabling redirects may allow SSRF bypass attacks where a public URL \"\n \"redirects to internal resources. Only enable if you trust the target server. \"\n \"See OWASP SSRF Prevention Cheat Sheet for details.\"\n ),\n advanced=True,\n ),\n BoolInput(\n name=\"save_to_file\",\n display_name=\"Save to File\",\n value=False,\n info=\"Save the API response to a temporary file\",\n advanced=True,\n ),\n BoolInput(\n name=\"include_httpx_metadata\",\n display_name=\"Include HTTPx Metadata\",\n value=False,\n info=(\n \"Include properties such as headers, status_code, response_headers, \"\n \"and redirection_history in the output.\"\n ),\n advanced=True,\n ),\n ]\n\n outputs = [\n Output(display_name=\"API Response\", name=\"data\", method=\"make_api_request\"),\n ]\n\n def _parse_json_value(self, value: Any) -> Any:\n \"\"\"Parse a value that might be a JSON string.\"\"\"\n if not isinstance(value, str):\n return value\n\n try:\n parsed = json.loads(value)\n except json.JSONDecodeError:\n return value\n else:\n return parsed\n\n def _process_body(self, body: Any) -> dict:\n \"\"\"Process the body input into a valid dictionary.\"\"\"\n if body is None:\n return {}\n if hasattr(body, \"data\"):\n body = body.data\n if isinstance(body, dict):\n return self._process_dict_body(body)\n if isinstance(body, str):\n return self._process_string_body(body)\n if isinstance(body, list):\n return self._process_list_body(body)\n return {}\n\n def _process_dict_body(self, body: dict) -> dict:\n \"\"\"Process dictionary body by parsing JSON values.\"\"\"\n return {k: self._parse_json_value(v) for k, v in body.items()}\n\n def _process_string_body(self, body: str) -> dict:\n \"\"\"Process string body by attempting JSON parse.\"\"\"\n try:\n return self._process_body(json.loads(body))\n except json.JSONDecodeError:\n return {\"data\": body}\n\n def _process_list_body(self, body: list) -> dict:\n \"\"\"Process list body by converting to key-value dictionary.\"\"\"\n processed_dict = {}\n try:\n for item in body:\n # Unwrap Data objects\n current_item = item\n if hasattr(item, \"data\"):\n unwrapped_data = item.data\n # If the unwrapped data is a dict but not key-value format, use it directly\n if isinstance(unwrapped_data, dict) and not self._is_valid_key_value_item(unwrapped_data):\n return unwrapped_data\n current_item = unwrapped_data\n if not self._is_valid_key_value_item(current_item):\n continue\n key = current_item[\"key\"]\n value = self._parse_json_value(current_item[\"value\"])\n processed_dict[key] = value\n except (KeyError, TypeError, ValueError) as e:\n self.log(f\"Failed to process body list: {e}\")\n return {}\n return processed_dict\n\n def _is_valid_key_value_item(self, item: Any) -> bool:\n \"\"\"Check if an item is a valid key-value dictionary.\"\"\"\n return isinstance(item, dict) and \"key\" in item and \"value\" in item\n\n def parse_curl(self, curl: str, build_config: dotdict) -> dotdict:\n \"\"\"Parse a cURL command and update build configuration.\"\"\"\n try:\n parsed = parse_context(curl)\n\n # Update basic configuration\n url = parsed.url\n # Normalize URL before setting it\n url = self._normalize_url(url)\n\n build_config[\"url_input\"][\"value\"] = url\n build_config[\"method\"][\"value\"] = parsed.method.upper()\n\n # Process headers\n headers_list = [{\"key\": k, \"value\": v} for k, v in parsed.headers.items()]\n build_config[\"headers\"][\"value\"] = headers_list\n\n # Process body data\n if not parsed.data:\n build_config[\"body\"][\"value\"] = []\n elif parsed.data:\n try:\n json_data = json.loads(parsed.data)\n if isinstance(json_data, dict):\n body_list = [\n {\"key\": k, \"value\": json.dumps(v) if isinstance(v, dict | list) else str(v)}\n for k, v in json_data.items()\n ]\n build_config[\"body\"][\"value\"] = body_list\n else:\n build_config[\"body\"][\"value\"] = [{\"key\": \"data\", \"value\": json.dumps(json_data)}]\n except json.JSONDecodeError:\n build_config[\"body\"][\"value\"] = [{\"key\": \"data\", \"value\": parsed.data}]\n\n except Exception as exc:\n msg = f\"Error parsing curl: {exc}\"\n self.log(msg)\n raise ValueError(msg) from exc\n\n return build_config\n\n def _normalize_url(self, url: str) -> str:\n \"\"\"Normalize URL by adding https:// if no protocol is specified.\"\"\"\n if not url or not isinstance(url, str):\n msg = \"URL cannot be empty\"\n raise ValueError(msg)\n\n url = url.strip()\n if url.startswith((\"http://\", \"https://\")):\n return url\n return f\"https://{url}\"\n\n async def make_request(\n self,\n client: httpx.AsyncClient,\n method: str,\n url: str,\n headers: dict | None = None,\n body: Any = None,\n timeout: int = 5,\n *,\n follow_redirects: bool = True,\n save_to_file: bool = False,\n include_httpx_metadata: bool = False,\n ) -> Data:\n method = method.upper()\n if method not in {\"GET\", \"POST\", \"PATCH\", \"PUT\", \"DELETE\"}:\n msg = f\"Unsupported method: {method}\"\n raise ValueError(msg)\n\n processed_body = self._process_body(body)\n redirection_history = []\n\n try:\n # Prepare request parameters\n request_params = {\n \"method\": method,\n \"url\": url,\n \"headers\": headers,\n \"json\": processed_body,\n \"timeout\": timeout,\n \"follow_redirects\": follow_redirects,\n }\n response = await client.request(**request_params)\n\n redirection_history = [\n {\n \"url\": redirect.headers.get(\"Location\", str(redirect.url)),\n \"status_code\": redirect.status_code,\n }\n for redirect in response.history\n ]\n\n is_binary, file_path = await self._response_info(response, with_file_path=save_to_file)\n response_headers = self._headers_to_dict(response.headers)\n\n # Base metadata\n metadata = {\n \"source\": url,\n \"status_code\": response.status_code,\n \"response_headers\": response_headers,\n }\n\n if redirection_history:\n metadata[\"redirection_history\"] = redirection_history\n\n if save_to_file:\n mode = \"wb\" if is_binary else \"w\"\n encoding = response.encoding if mode == \"w\" else None\n if file_path:\n await aiofiles_os.makedirs(file_path.parent, exist_ok=True)\n if is_binary:\n async with aiofiles.open(file_path, \"wb\") as f:\n await f.write(response.content)\n await f.flush()\n else:\n async with aiofiles.open(file_path, \"w\", encoding=encoding) as f:\n await f.write(response.text)\n await f.flush()\n metadata[\"file_path\"] = str(file_path)\n\n if include_httpx_metadata:\n metadata.update({\"headers\": headers})\n return Data(data=metadata)\n\n # Handle response content\n if is_binary:\n result = response.content\n else:\n try:\n result = response.json()\n except json.JSONDecodeError:\n self.log(\"Failed to decode JSON response\")\n result = response.text.encode(\"utf-8\")\n\n metadata[\"result\"] = result\n\n if include_httpx_metadata:\n metadata.update({\"headers\": headers})\n\n return Data(data=metadata)\n except (httpx.HTTPError, httpx.RequestError, httpx.TimeoutException) as exc:\n self.log(f\"Error making request to {url}\")\n return Data(\n data={\n \"source\": url,\n \"headers\": headers,\n \"status_code\": 500,\n \"error\": str(exc),\n **({\"redirection_history\": redirection_history} if redirection_history else {}),\n },\n )\n\n def add_query_params(self, url: str, params: dict) -> str:\n \"\"\"Add query parameters to URL efficiently.\"\"\"\n if not params:\n return url\n url_parts = list(urlparse(url))\n query = dict(parse_qsl(url_parts[4]))\n query.update(params)\n url_parts[4] = urlencode(query)\n return urlunparse(url_parts)\n\n def _headers_to_dict(self, headers: httpx.Headers) -> dict[str, str]:\n \"\"\"Convert HTTP headers to a dictionary with lowercased keys.\"\"\"\n return {k.lower(): v for k, v in headers.items()}\n\n def _process_headers(self, headers: Any) -> dict:\n \"\"\"Process the headers input into a valid dictionary.\"\"\"\n if headers is None:\n return {}\n if isinstance(headers, dict):\n return headers\n if isinstance(headers, list):\n return {item[\"key\"]: item[\"value\"] for item in headers if self._is_valid_key_value_item(item)}\n return {}\n\n async def make_api_request(self) -> Data:\n \"\"\"Make HTTP request with optimized parameter handling.\"\"\"\n method = self.method\n url = self.url_input.strip() if isinstance(self.url_input, str) else \"\"\n headers = self.headers or {}\n body = self.body or {}\n timeout = self.timeout\n follow_redirects = self.follow_redirects\n save_to_file = self.save_to_file\n include_httpx_metadata = self.include_httpx_metadata\n\n # Security warning when redirects are enabled\n if follow_redirects:\n self.log(\n \"Security Warning: HTTP redirects are enabled. This may allow SSRF bypass attacks \"\n \"where a public URL redirects to internal resources (e.g., cloud metadata endpoints). \"\n \"Only enable this if you trust the target server.\"\n )\n\n # if self.mode == \"cURL\" and self.curl_input:\n # self._build_config = self.parse_curl(self.curl_input, dotdict())\n # # After parsing curl, get the normalized URL\n # url = self._build_config[\"url_input\"][\"value\"]\n\n # Normalize URL before validation\n url = self._normalize_url(url)\n\n # Validate URL\n if not validators.url(url):\n msg = f\"Invalid URL provided: {url}\"\n raise ValueError(msg)\n\n # SSRF Protection: Validate URL to prevent access to internal resources\n # TODO: In next major version (2.0), remove warn_only=True to enforce blocking\n try:\n validate_url_for_ssrf(url, warn_only=True)\n except SSRFProtectionError as e:\n # This will only raise if SSRF protection is enabled and warn_only=False\n msg = f\"SSRF Protection: {e}\"\n raise ValueError(msg) from e\n\n # Process query parameters\n if isinstance(self.query_params, str):\n query_params = dict(parse_qsl(self.query_params))\n else:\n query_params = self.query_params.data if self.query_params else {}\n\n # Process headers and body\n headers = self._process_headers(headers)\n body = self._process_body(body)\n url = self.add_query_params(url, query_params)\n\n async with httpx.AsyncClient() as client:\n result = await self.make_request(\n client,\n method,\n url,\n headers,\n body,\n timeout,\n follow_redirects=follow_redirects,\n save_to_file=save_to_file,\n include_httpx_metadata=include_httpx_metadata,\n )\n self.status = result\n return result\n\n def update_build_config(self, build_config: dotdict, field_value: Any, field_name: str | None = None) -> dotdict:\n \"\"\"Update the build config based on the selected mode.\"\"\"\n if field_name != \"mode\":\n if field_name == \"curl_input\" and self.mode == \"cURL\" and self.curl_input:\n return self.parse_curl(self.curl_input, build_config)\n return build_config\n\n # print(f\"Current mode: {field_value}\")\n if field_value == \"cURL\":\n set_field_display(build_config, \"curl_input\", value=True)\n if build_config[\"curl_input\"][\"value\"]:\n build_config = self.parse_curl(build_config[\"curl_input\"][\"value\"], build_config)\n else:\n set_field_display(build_config, \"curl_input\", value=False)\n\n return set_current_fields(\n build_config=build_config,\n action_fields=MODE_FIELDS,\n selected_action=field_value,\n default_fields=DEFAULT_FIELDS,\n func=set_field_advanced,\n default_value=True,\n )\n\n async def _response_info(\n self, response: httpx.Response, *, with_file_path: bool = False\n ) -> tuple[bool, Path | None]:\n \"\"\"Determine the file path and whether the response content is binary.\n\n Args:\n response (Response): The HTTP response object.\n with_file_path (bool): Whether to save the response content to a file.\n\n Returns:\n Tuple[bool, Path | None]:\n A tuple containing a boolean indicating if the content is binary and the full file path (if applicable).\n \"\"\"\n content_type = response.headers.get(\"Content-Type\", \"\")\n is_binary = \"application/octet-stream\" in content_type or \"application/binary\" in content_type\n\n if not with_file_path:\n return is_binary, None\n\n component_temp_dir = Path(tempfile.gettempdir()) / self.__class__.__name__\n\n # Create directory asynchronously\n await aiofiles_os.makedirs(component_temp_dir, exist_ok=True)\n\n filename = None\n if \"Content-Disposition\" in response.headers:\n content_disposition = response.headers[\"Content-Disposition\"]\n filename_match = re.search(r'filename=\"(.+?)\"', content_disposition)\n if filename_match:\n extracted_filename = filename_match.group(1)\n filename = extracted_filename\n\n # Step 3: Infer file extension or use part of the request URL if no filename\n if not filename:\n # Extract the last segment of the URL path\n url_path = urlparse(str(response.request.url) if response.request else \"\").path\n base_name = Path(url_path).name # Get the last segment of the path\n if not base_name: # If the path ends with a slash or is empty\n base_name = \"response\"\n\n # Infer file extension\n content_type_to_extension = {\n \"text/plain\": \".txt\",\n \"application/json\": \".json\",\n \"image/jpeg\": \".jpg\",\n \"image/png\": \".png\",\n \"application/octet-stream\": \".bin\",\n }\n extension = content_type_to_extension.get(content_type, \".bin\" if is_binary else \".txt\")\n filename = f\"{base_name}{extension}\"\n\n # Step 4: Define the full file path\n file_path = component_temp_dir / filename\n\n # Step 5: Check if file exists asynchronously and handle accordingly\n try:\n # Try to create the file exclusively (x mode) to check existence\n async with aiofiles.open(file_path, \"x\") as _:\n pass # File created successfully, we can use this path\n except FileExistsError:\n # If file exists, append a timestamp to the filename\n timestamp = datetime.now(timezone.utc).strftime(\"%Y%m%d%H%M%S%f\")\n file_path = component_temp_dir / f\"{timestamp}-{filename}\"\n\n return is_binary, file_path\n"
|
|
886
886
|
},
|
|
887
887
|
"curl_input": {
|
|
888
888
|
"_input_type": "MultilineInput",
|