langflow-base-nightly 1.7.0.dev51__py3-none-any.whl → 1.7.0.dev55__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/agentic/utils/template_create.py +4 -2
- langflow/api/utils/mcp/agentic_mcp.py +8 -7
- langflow/api/v1/flows.py +122 -19
- langflow/api/v1/login.py +9 -7
- langflow/frontend/assets/SlackIcon-CiDRMRPJ.js +1 -0
- langflow/frontend/assets/Wikipedia-Dy2BbcVZ.js +1 -0
- langflow/frontend/assets/Wolfram-Cqcm65J8.js +1 -0
- langflow/frontend/assets/a-arrow-down-D0QDfPwx.js +6 -0
- langflow/frontend/assets/a-arrow-up-DToMBqme.js +6 -0
- langflow/frontend/assets/a-large-small-DoI6Lbmh.js +6 -0
- langflow/frontend/assets/accessibility-Cw-mNMt4.js +6 -0
- langflow/frontend/assets/activity-hWot7v0y.js +6 -0
- langflow/frontend/assets/air-vent-Byvqj6UO.js +6 -0
- langflow/frontend/assets/airplay-DHukvi2i.js +6 -0
- langflow/frontend/assets/alarm-clock-DtrrEQBq.js +6 -0
- langflow/frontend/assets/alarm-clock-check-D6AI3OPX.js +6 -0
- langflow/frontend/assets/alarm-clock-minus-BL3qcCTv.js +6 -0
- langflow/frontend/assets/alarm-clock-off-Cp1EL8zC.js +6 -0
- langflow/frontend/assets/alarm-clock-plus-kX0kuGbg.js +6 -0
- langflow/frontend/assets/alarm-smoke-B_ihQo4m.js +6 -0
- langflow/frontend/assets/album-C7gkxb6p.js +6 -0
- langflow/frontend/assets/align-center-DtKFvIp-.js +6 -0
- langflow/frontend/assets/align-center-horizontal-CmKZBJ3p.js +6 -0
- langflow/frontend/assets/align-center-vertical-BVHpQ5jm.js +6 -0
- langflow/frontend/assets/align-end-horizontal-CnTv9v1g.js +6 -0
- langflow/frontend/assets/align-end-vertical-DOXV_CPn.js +6 -0
- langflow/frontend/assets/align-horizontal-distribute-center-Gp4cXira.js +6 -0
- langflow/frontend/assets/align-horizontal-distribute-end-TJv5yc-l.js +6 -0
- langflow/frontend/assets/align-horizontal-distribute-start-Dma5h49X.js +6 -0
- langflow/frontend/assets/align-horizontal-justify-center-D_Va6wiK.js +6 -0
- langflow/frontend/assets/align-horizontal-justify-end-C6QiubjB.js +6 -0
- langflow/frontend/assets/align-horizontal-justify-start-XdwaVYgG.js +6 -0
- langflow/frontend/assets/align-horizontal-space-around-X1tLLrkW.js +6 -0
- langflow/frontend/assets/align-horizontal-space-between-Dh3018_K.js +6 -0
- langflow/frontend/assets/align-justify-DHg8_U1g.js +6 -0
- langflow/frontend/assets/align-left-DhwQkbhk.js +6 -0
- langflow/frontend/assets/align-right-BPRo6jGb.js +6 -0
- langflow/frontend/assets/align-start-horizontal-BCuSphdX.js +6 -0
- langflow/frontend/assets/align-start-vertical-ab2DXCS5.js +6 -0
- langflow/frontend/assets/align-vertical-distribute-center-DFhGK-rN.js +6 -0
- langflow/frontend/assets/align-vertical-distribute-end-Dfe56eVW.js +6 -0
- langflow/frontend/assets/align-vertical-distribute-start-URfCfDOt.js +6 -0
- langflow/frontend/assets/align-vertical-justify-center-Io8SQ_x_.js +6 -0
- langflow/frontend/assets/align-vertical-justify-end-BRreSma-.js +6 -0
- langflow/frontend/assets/align-vertical-justify-start-BKE4PAN5.js +6 -0
- langflow/frontend/assets/align-vertical-space-around-BUAWwmKu.js +6 -0
- langflow/frontend/assets/align-vertical-space-between-D0dmJ62l.js +6 -0
- langflow/frontend/assets/ambulance-CBSM6r9I.js +6 -0
- langflow/frontend/assets/ampersand-OwbxfSoT.js +6 -0
- langflow/frontend/assets/ampersands-phDhbc5_.js +6 -0
- langflow/frontend/assets/amphora-XJ0wSntH.js +6 -0
- langflow/frontend/assets/anchor-YZR9yXb1.js +6 -0
- langflow/frontend/assets/angry-7RJyr8Ks.js +6 -0
- langflow/frontend/assets/annoyed-CQgFRIXq.js +6 -0
- langflow/frontend/assets/antenna-DWt3JquC.js +6 -0
- langflow/frontend/assets/anvil-oydRBR5k.js +6 -0
- langflow/frontend/assets/aperture-ConT4Ais.js +6 -0
- langflow/frontend/assets/app-window-BEQBdken.js +6 -0
- langflow/frontend/assets/app-window-mac-derfeq8Q.js +6 -0
- langflow/frontend/assets/apple-oQkXFKHk.js +6 -0
- langflow/frontend/assets/archive-DL4Jju_X.js +6 -0
- langflow/frontend/assets/archive-restore-tbbdtHnz.js +6 -0
- langflow/frontend/assets/archive-x-B9xJPjFQ.js +6 -0
- langflow/frontend/assets/armchair-BZsNazfR.js +6 -0
- langflow/frontend/assets/arrow-big-down-_w3gYubJ.js +6 -0
- langflow/frontend/assets/arrow-big-down-dash-ZWzf7_Vm.js +6 -0
- langflow/frontend/assets/arrow-big-left-CwRD-vU8.js +6 -0
- langflow/frontend/assets/arrow-big-left-dash-CLj6et2F.js +6 -0
- langflow/frontend/assets/arrow-big-right-BU1ZIOoI.js +6 -0
- langflow/frontend/assets/arrow-big-right-dash-mVNtCmy4.js +6 -0
- langflow/frontend/assets/arrow-big-up-MZBxWcLb.js +6 -0
- langflow/frontend/assets/arrow-big-up-dash-BTSaZ3rL.js +6 -0
- langflow/frontend/assets/arrow-down-0-1-CtQvLh_F.js +6 -0
- langflow/frontend/assets/arrow-down-1-0-G0DV_-jJ.js +6 -0
- langflow/frontend/assets/arrow-down-B-l93xHD.js +6 -0
- langflow/frontend/assets/arrow-down-a-z-Tzg5tpD_.js +6 -0
- langflow/frontend/assets/arrow-down-from-line-B66kDVSw.js +6 -0
- langflow/frontend/assets/arrow-down-left-Bb9_3CCF.js +6 -0
- langflow/frontend/assets/arrow-down-narrow-wide-DVQ_iZIB.js +6 -0
- langflow/frontend/assets/arrow-down-right-BrFOGPEk.js +6 -0
- langflow/frontend/assets/arrow-down-to-dot-BUHlbyD0.js +6 -0
- langflow/frontend/assets/arrow-down-to-line-CUx9iPzf.js +6 -0
- langflow/frontend/assets/arrow-down-up-DEGIbqld.js +6 -0
- langflow/frontend/assets/arrow-down-wide-narrow-BDGmkk1h.js +6 -0
- langflow/frontend/assets/arrow-down-z-a-CZLqKUx0.js +6 -0
- langflow/frontend/assets/arrow-left-B_OBt03y.js +6 -0
- langflow/frontend/assets/arrow-left-from-line-9ufi0ecO.js +6 -0
- langflow/frontend/assets/arrow-left-right-gOh2Y7oY.js +6 -0
- langflow/frontend/assets/arrow-left-to-line-D70iFjNH.js +6 -0
- langflow/frontend/assets/arrow-right-CKq9pdal.js +6 -0
- langflow/frontend/assets/arrow-right-from-line-DvnunoU0.js +6 -0
- langflow/frontend/assets/arrow-right-left-_2oF7m9r.js +6 -0
- langflow/frontend/assets/arrow-right-to-line-BxWsuvcP.js +6 -0
- langflow/frontend/assets/arrow-up-0-1-UrjSfDJn.js +6 -0
- langflow/frontend/assets/arrow-up-1-0-CM2dh3AB.js +6 -0
- langflow/frontend/assets/arrow-up-D_Y7BGJZ.js +6 -0
- langflow/frontend/assets/arrow-up-a-z-CZ5_KOss.js +6 -0
- langflow/frontend/assets/arrow-up-down-D-WPBja4.js +6 -0
- langflow/frontend/assets/arrow-up-from-dot-C1ebyeMB.js +6 -0
- langflow/frontend/assets/arrow-up-from-line-BGDFNOIe.js +6 -0
- langflow/frontend/assets/arrow-up-left-oYJa1lK6.js +6 -0
- langflow/frontend/assets/arrow-up-narrow-wide-CL-SemHX.js +6 -0
- langflow/frontend/assets/arrow-up-right-q5RfBzKt.js +6 -0
- langflow/frontend/assets/arrow-up-to-line-D9O_vbe8.js +6 -0
- langflow/frontend/assets/arrow-up-wide-narrow-C1Q3vBuZ.js +6 -0
- langflow/frontend/assets/arrow-up-z-a-D-kVvjSu.js +6 -0
- langflow/frontend/assets/arrows-up-from-line-DJQdeKsZ.js +6 -0
- langflow/frontend/assets/asterisk-Ca3MsPZE.js +6 -0
- langflow/frontend/assets/at-sign-BAJSJ1qU.js +6 -0
- langflow/frontend/assets/atom-BvwGZJ3B.js +6 -0
- langflow/frontend/assets/audio-lines-Du741dSy.js +6 -0
- langflow/frontend/assets/audio-waveform-esSOCFic.js +6 -0
- langflow/frontend/assets/award-B4Q8oZG_.js +6 -0
- langflow/frontend/assets/axe-CVfqqqJ0.js +6 -0
- langflow/frontend/assets/axis-3d-DeT-zV7X.js +6 -0
- langflow/frontend/assets/baby-BdI6Bx5H.js +6 -0
- langflow/frontend/assets/backpack-YYgLRu05.js +6 -0
- langflow/frontend/assets/badge-CtIB0t_6.js +6 -0
- langflow/frontend/assets/badge-alert-BqPiZdq9.js +6 -0
- langflow/frontend/assets/badge-cent-Dzwmq_lP.js +6 -0
- langflow/frontend/assets/badge-check-DszgZEqQ.js +6 -0
- langflow/frontend/assets/badge-dollar-sign-D6_EslRQ.js +6 -0
- langflow/frontend/assets/badge-euro-BQql-pg0.js +6 -0
- langflow/frontend/assets/badge-help-BnNCR5F0.js +6 -0
- langflow/frontend/assets/badge-indian-rupee-BIYCaJCb.js +6 -0
- langflow/frontend/assets/badge-info-Dri8mwgT.js +6 -0
- langflow/frontend/assets/badge-japanese-yen-BwcOCoeZ.js +6 -0
- langflow/frontend/assets/badge-minus-DBkvvSwv.js +6 -0
- langflow/frontend/assets/badge-percent-Cxy2Fo-N.js +6 -0
- langflow/frontend/assets/badge-plus-DE8fShhE.js +6 -0
- langflow/frontend/assets/badge-pound-sterling-BofEzkg2.js +6 -0
- langflow/frontend/assets/badge-russian-ruble-Cm0gaD62.js +6 -0
- langflow/frontend/assets/badge-swiss-franc-DrYVhggb.js +6 -0
- langflow/frontend/assets/badge-x-BX5JqZV7.js +6 -0
- langflow/frontend/assets/baggage-claim-DvpoauZf.js +6 -0
- langflow/frontend/assets/ban-B1KHPWy2.js +6 -0
- langflow/frontend/assets/banana-CfdacHC0.js +6 -0
- langflow/frontend/assets/bandage-D_DmeXTQ.js +6 -0
- langflow/frontend/assets/banknote-CGf35Nu_.js +6 -0
- langflow/frontend/assets/banknote-arrow-down-Bsk5AYgW.js +6 -0
- langflow/frontend/assets/banknote-arrow-up-DxrrWbYd.js +6 -0
- langflow/frontend/assets/banknote-x-CNLoLyte.js +6 -0
- langflow/frontend/assets/barcode-CkAiQpv_.js +6 -0
- langflow/frontend/assets/baseline-DmSN7vJT.js +6 -0
- langflow/frontend/assets/bath-BVUupyhv.js +6 -0
- langflow/frontend/assets/battery-CEAwSkFP.js +6 -0
- langflow/frontend/assets/battery-charging-BfLCX2-h.js +6 -0
- langflow/frontend/assets/battery-full-0iDVp-o0.js +6 -0
- langflow/frontend/assets/battery-low-BcZQ08Dw.js +6 -0
- langflow/frontend/assets/battery-medium-DGqJYD1t.js +6 -0
- langflow/frontend/assets/battery-plus-BOSFZqZe.js +6 -0
- langflow/frontend/assets/battery-warning-ic4lJJVp.js +6 -0
- langflow/frontend/assets/beaker-BFuons2p.js +6 -0
- langflow/frontend/assets/bean-8vnDx1I9.js +6 -0
- langflow/frontend/assets/bean-off-Ysohtf4O.js +6 -0
- langflow/frontend/assets/bed-DuqIrPmN.js +6 -0
- langflow/frontend/assets/bed-double-BAIWPGsm.js +6 -0
- langflow/frontend/assets/bed-single-YYvXUljj.js +6 -0
- langflow/frontend/assets/beef-CK-4EOk9.js +6 -0
- langflow/frontend/assets/beer-DxRkOXll.js +6 -0
- langflow/frontend/assets/beer-off-ca2uo1xU.js +6 -0
- langflow/frontend/assets/bell-Udiy8X0N.js +6 -0
- langflow/frontend/assets/bell-dot-BBHKkc5C.js +6 -0
- langflow/frontend/assets/bell-electric-gUJz2OHW.js +6 -0
- langflow/frontend/assets/bell-minus-CVq_mjkN.js +6 -0
- langflow/frontend/assets/bell-off-0qN--6Yo.js +6 -0
- langflow/frontend/assets/bell-plus-BhRzK6QJ.js +6 -0
- langflow/frontend/assets/bell-ring-DjQSsyYE.js +6 -0
- langflow/frontend/assets/between-horizontal-end-NpyCdfOE.js +6 -0
- langflow/frontend/assets/between-horizontal-start-Dnpc4BAO.js +6 -0
- langflow/frontend/assets/between-vertical-end-CHrjEpfS.js +6 -0
- langflow/frontend/assets/between-vertical-start-DKJs53Sx.js +6 -0
- langflow/frontend/assets/biceps-flexed-CsE7dV3u.js +6 -0
- langflow/frontend/assets/bike-CVR0RzpQ.js +6 -0
- langflow/frontend/assets/binary-Bcih0o69.js +6 -0
- langflow/frontend/assets/binoculars-ICtPwNib.js +6 -0
- langflow/frontend/assets/biohazard-D03rerME.js +6 -0
- langflow/frontend/assets/bird-B5I4-Y1a.js +6 -0
- langflow/frontend/assets/bitcoin-CY0RUO73.js +6 -0
- langflow/frontend/assets/blend-ByVWGP-D.js +6 -0
- langflow/frontend/assets/blinds-8P6aWn71.js +6 -0
- langflow/frontend/assets/blocks-C7fg3_Sh.js +6 -0
- langflow/frontend/assets/bluetooth-DF_2-I3H.js +6 -0
- langflow/frontend/assets/bluetooth-connected-C7eddUdy.js +6 -0
- langflow/frontend/assets/bluetooth-off-Br88awpS.js +6 -0
- langflow/frontend/assets/bluetooth-searching-B4WptJbX.js +6 -0
- langflow/frontend/assets/bold-CqjK5dvo.js +6 -0
- langflow/frontend/assets/bolt-D9ewNwxl.js +6 -0
- langflow/frontend/assets/bomb-D89BBj0x.js +6 -0
- langflow/frontend/assets/bone-DZfW0e9X.js +6 -0
- langflow/frontend/assets/book-CU5lbLsx.js +6 -0
- langflow/frontend/assets/book-a-DyEiNbAO.js +6 -0
- langflow/frontend/assets/book-audio-BOz0SK3h.js +6 -0
- langflow/frontend/assets/book-check-bAiLk1v0.js +6 -0
- langflow/frontend/assets/book-copy-Bjyl8Dxj.js +6 -0
- langflow/frontend/assets/book-dashed-87-hTIj-.js +6 -0
- langflow/frontend/assets/book-down-DMGDvX6c.js +6 -0
- langflow/frontend/assets/book-headphones-DxzgLbtY.js +6 -0
- langflow/frontend/assets/book-heart-CoddRiQc.js +6 -0
- langflow/frontend/assets/book-image-Bvm0otFu.js +6 -0
- langflow/frontend/assets/book-key-Crv25-1b.js +6 -0
- langflow/frontend/assets/book-lock-CE-TUGNT.js +6 -0
- langflow/frontend/assets/book-marked-DyXwsEf8.js +6 -0
- langflow/frontend/assets/book-minus-B4Q7tkGf.js +6 -0
- langflow/frontend/assets/book-open-BwdF_mSV.js +6 -0
- langflow/frontend/assets/book-open-check-DAKXiQog.js +6 -0
- langflow/frontend/assets/book-open-text-DmYpNWDa.js +6 -0
- langflow/frontend/assets/book-plus-nDtW0juH.js +6 -0
- langflow/frontend/assets/book-text-A0c-fc0P.js +6 -0
- langflow/frontend/assets/book-type-Byqm2yjx.js +6 -0
- langflow/frontend/assets/book-up-2-CoIJp0vk.js +6 -0
- langflow/frontend/assets/book-up-PCEt_ENQ.js +6 -0
- langflow/frontend/assets/book-user-TA8Et36C.js +6 -0
- langflow/frontend/assets/book-x-BFRasTEI.js +6 -0
- langflow/frontend/assets/bookmark-BJ6wtUhD.js +6 -0
- langflow/frontend/assets/bookmark-check-CxMqJ7-P.js +6 -0
- langflow/frontend/assets/bookmark-minus-B0_-EHIw.js +6 -0
- langflow/frontend/assets/bookmark-plus-CZbCCZjc.js +6 -0
- langflow/frontend/assets/bookmark-x-CXVmt1v4.js +6 -0
- langflow/frontend/assets/boom-box-CgZrwetT.js +6 -0
- langflow/frontend/assets/bot-DQRMipsE.js +6 -0
- langflow/frontend/assets/bot-message-square-CZBvDG_-.js +6 -0
- langflow/frontend/assets/bot-off-vPdD2RlP.js +6 -0
- langflow/frontend/assets/bow-arrow-EPgHlepf.js +6 -0
- langflow/frontend/assets/box-BgDOdcN1.js +6 -0
- langflow/frontend/assets/boxes-1Ph2c29h.js +6 -0
- langflow/frontend/assets/braces-C3gETHIP.js +6 -0
- langflow/frontend/assets/brackets-DQQ4xUwP.js +6 -0
- langflow/frontend/assets/brain-CKgUPawu.js +6 -0
- langflow/frontend/assets/brain-circuit-71o2XFnH.js +6 -0
- langflow/frontend/assets/brain-cog-CkwmrEVa.js +6 -0
- langflow/frontend/assets/brick-wall-CIfP2291.js +6 -0
- langflow/frontend/assets/brick-wall-fire-CVapRCpF.js +6 -0
- langflow/frontend/assets/briefcase-CUCjqLGO.js +6 -0
- langflow/frontend/assets/briefcase-business-C6KvOrlm.js +6 -0
- langflow/frontend/assets/briefcase-conveyor-belt-D8-KT8xV.js +6 -0
- langflow/frontend/assets/briefcase-medical-BMcjLsMG.js +6 -0
- langflow/frontend/assets/bring-to-front-BglFFtX9.js +6 -0
- langflow/frontend/assets/brush-BlEF7vZs.js +6 -0
- langflow/frontend/assets/bubbles-Cm5afSpk.js +6 -0
- langflow/frontend/assets/bug-CROT4EB9.js +6 -0
- langflow/frontend/assets/bug-off-B5pdze6F.js +6 -0
- langflow/frontend/assets/bug-play-B6XD7tsh.js +6 -0
- langflow/frontend/assets/building-2-CsWtjYjF.js +6 -0
- langflow/frontend/assets/building-CzrfPDJV.js +6 -0
- langflow/frontend/assets/bus-C-85lnrJ.js +6 -0
- langflow/frontend/assets/bus-front-Cxmu9qEn.js +6 -0
- langflow/frontend/assets/cable-B58qv4J-.js +6 -0
- langflow/frontend/assets/cable-car-BHokOmFT.js +6 -0
- langflow/frontend/assets/cake-CGFaGIrC.js +6 -0
- langflow/frontend/assets/cake-slice-BBjohR7D.js +6 -0
- langflow/frontend/assets/calculator-B-0BeATJ.js +6 -0
- langflow/frontend/assets/calendar-1-cuaB_r0e.js +6 -0
- langflow/frontend/assets/calendar-DTeTAlFN.js +6 -0
- langflow/frontend/assets/calendar-arrow-down-C-nN5_4E.js +6 -0
- langflow/frontend/assets/calendar-arrow-up-friUOxYZ.js +6 -0
- langflow/frontend/assets/calendar-check-2-Ddx3rWxC.js +6 -0
- langflow/frontend/assets/calendar-check-CVcw0Oaa.js +6 -0
- langflow/frontend/assets/calendar-clock-DB3BqPqH.js +6 -0
- langflow/frontend/assets/calendar-cog-qufoRfNY.js +6 -0
- langflow/frontend/assets/calendar-days-JGKw613e.js +6 -0
- langflow/frontend/assets/calendar-fold-xVSKci71.js +6 -0
- langflow/frontend/assets/calendar-heart-DVc8QSMQ.js +6 -0
- langflow/frontend/assets/calendar-minus-2-XIDnJ8bN.js +6 -0
- langflow/frontend/assets/calendar-minus-BG-9Gyu2.js +6 -0
- langflow/frontend/assets/calendar-off-U_58_9a9.js +6 -0
- langflow/frontend/assets/calendar-plus-2-DlZ32tDq.js +6 -0
- langflow/frontend/assets/calendar-plus-wPVwP8XH.js +6 -0
- langflow/frontend/assets/calendar-range-Dh3Mn4wk.js +6 -0
- langflow/frontend/assets/calendar-search-BYxcN8lZ.js +6 -0
- langflow/frontend/assets/calendar-sync-Dml9hu0M.js +6 -0
- langflow/frontend/assets/calendar-x-2-BCfg_6G9.js +6 -0
- langflow/frontend/assets/calendar-x-_X2UsDsD.js +6 -0
- langflow/frontend/assets/camera-Bq6YMUSz.js +6 -0
- langflow/frontend/assets/camera-off-D87mM-V8.js +6 -0
- langflow/frontend/assets/candy-B-0zd1zJ.js +6 -0
- langflow/frontend/assets/candy-cane-B02xZ8Yh.js +6 -0
- langflow/frontend/assets/candy-off-B31YgP4X.js +6 -0
- langflow/frontend/assets/cannabis-vbR60kvp.js +6 -0
- langflow/frontend/assets/captions-IapwnCWY.js +6 -0
- langflow/frontend/assets/captions-off-Cqyp0BCZ.js +6 -0
- langflow/frontend/assets/car-CFU8YDmN.js +6 -0
- langflow/frontend/assets/car-front-uwGBK8Yy.js +6 -0
- langflow/frontend/assets/car-taxi-front-9uT_Py1s.js +6 -0
- langflow/frontend/assets/caravan-CucvY9fQ.js +6 -0
- langflow/frontend/assets/carrot-Bb2TYO_E.js +6 -0
- langflow/frontend/assets/case-lower-DAlIbIk7.js +6 -0
- langflow/frontend/assets/case-sensitive-DVwMfk_g.js +6 -0
- langflow/frontend/assets/case-upper-DCIiTCMq.js +6 -0
- langflow/frontend/assets/cassette-tape-Bdfd7Nu2.js +6 -0
- langflow/frontend/assets/cast-C703ktdG.js +6 -0
- langflow/frontend/assets/castle-CMOrKjig.js +6 -0
- langflow/frontend/assets/cat-BAQE-Uvu.js +6 -0
- langflow/frontend/assets/cctv-Bm1ksqgN.js +6 -0
- langflow/frontend/assets/chart-area-0ZVeQsVc.js +6 -0
- langflow/frontend/assets/chart-bar-D9XeOk_i.js +6 -0
- langflow/frontend/assets/chart-bar-big-CW3qe26X.js +6 -0
- langflow/frontend/assets/chart-bar-decreasing-C0-1_ZyP.js +6 -0
- langflow/frontend/assets/chart-bar-increasing-CkeXMrpE.js +6 -0
- langflow/frontend/assets/chart-bar-stacked-LJjgMToq.js +6 -0
- langflow/frontend/assets/chart-candlestick-k1gVX8Te.js +6 -0
- langflow/frontend/assets/chart-column-BBJrPy0c.js +6 -0
- langflow/frontend/assets/chart-column-big-DcVBLwTs.js +6 -0
- langflow/frontend/assets/chart-column-decreasing-Cadd5KDq.js +6 -0
- langflow/frontend/assets/chart-column-increasing-CVGwOZ7O.js +6 -0
- langflow/frontend/assets/chart-column-stacked-nkTWIhS7.js +6 -0
- langflow/frontend/assets/chart-gantt-CDUJnFDM.js +6 -0
- langflow/frontend/assets/chart-line-CZBVm0lz.js +6 -0
- langflow/frontend/assets/chart-network-35pXQTAP.js +6 -0
- langflow/frontend/assets/chart-no-axes-column-cNjR2jbE.js +6 -0
- langflow/frontend/assets/chart-no-axes-column-decreasing-BOmLD1-Q.js +6 -0
- langflow/frontend/assets/chart-no-axes-column-increasing-yAD6_Y5Q.js +6 -0
- langflow/frontend/assets/chart-no-axes-combined-BkyhRYPE.js +6 -0
- langflow/frontend/assets/chart-no-axes-gantt-BnnWuplR.js +6 -0
- langflow/frontend/assets/chart-pie-D345szvo.js +6 -0
- langflow/frontend/assets/chart-scatter-BCE828AF.js +6 -0
- langflow/frontend/assets/chart-spline-DezWqFYo.js +6 -0
- langflow/frontend/assets/check-check-jYR0NdUS.js +6 -0
- langflow/frontend/assets/chef-hat-dWKJciCE.js +6 -0
- langflow/frontend/assets/cherry-C1B8wlvn.js +6 -0
- langflow/frontend/assets/chevron-first-DMbVTlgQ.js +6 -0
- langflow/frontend/assets/chevron-last-DUFi9nfs.js +6 -0
- langflow/frontend/assets/chevron-left-YByHwjJF.js +6 -0
- langflow/frontend/assets/chevron-right-BY1WKmJZ.js +6 -0
- langflow/frontend/assets/chevrons-down-CrEwkPTZ.js +6 -0
- langflow/frontend/assets/chevrons-down-up-B5omkIRL.js +6 -0
- langflow/frontend/assets/chevrons-left-CM5G6uIl.js +6 -0
- langflow/frontend/assets/chevrons-left-right-B3JKONgK.js +6 -0
- langflow/frontend/assets/chevrons-left-right-ellipsis-BsM6mFG_.js +6 -0
- langflow/frontend/assets/chevrons-right-fATY3ztz.js +6 -0
- langflow/frontend/assets/chevrons-right-left-CByP6P6z.js +6 -0
- langflow/frontend/assets/chevrons-up-CbWgePoj.js +6 -0
- langflow/frontend/assets/chrome-CWus5OOn.js +6 -0
- langflow/frontend/assets/church-DpYoZOhe.js +6 -0
- langflow/frontend/assets/cigarette-BmmVmlkc.js +6 -0
- langflow/frontend/assets/cigarette-off-CIEgMxHs.js +6 -0
- langflow/frontend/assets/circle-alert-CGmUq1ya.js +6 -0
- langflow/frontend/assets/circle-arrow-down-8jMDMeCm.js +6 -0
- langflow/frontend/assets/circle-arrow-left-CWYEEHDb.js +6 -0
- langflow/frontend/assets/circle-arrow-out-down-left-PqJt80DA.js +6 -0
- langflow/frontend/assets/circle-arrow-out-down-right-Bo9MkoPr.js +6 -0
- langflow/frontend/assets/circle-arrow-out-up-left-Bc0KGGYv.js +6 -0
- langflow/frontend/assets/circle-arrow-out-up-right-ByDZT4Rk.js +6 -0
- langflow/frontend/assets/circle-arrow-right-HbEOzhU9.js +6 -0
- langflow/frontend/assets/circle-arrow-up-ytUDzbm6.js +6 -0
- langflow/frontend/assets/circle-check-big-CXyZID9v.js +6 -0
- langflow/frontend/assets/circle-check-pEV54vM8.js +6 -0
- langflow/frontend/assets/circle-chevron-down-DS_rpf-8.js +6 -0
- langflow/frontend/assets/circle-chevron-left-CKeX3Rs-.js +6 -0
- langflow/frontend/assets/circle-chevron-right-DCI9ueTi.js +6 -0
- langflow/frontend/assets/circle-chevron-up-CptWpWQz.js +6 -0
- langflow/frontend/assets/circle-dashed-BYSh0yLh.js +6 -0
- langflow/frontend/assets/circle-divide-CaJ8BhKC.js +6 -0
- langflow/frontend/assets/circle-dollar-sign-bP6otW6i.js +6 -0
- langflow/frontend/assets/circle-dot-Dm-xR7J-.js +6 -0
- langflow/frontend/assets/circle-dot-dashed-DgOLrW-Y.js +6 -0
- langflow/frontend/assets/circle-ellipsis-CyuQbkx5.js +6 -0
- langflow/frontend/assets/circle-equal-ssfZnjeF.js +6 -0
- langflow/frontend/assets/circle-fading-arrow-up-CySl1dVh.js +6 -0
- langflow/frontend/assets/circle-fading-plus-DMkF1waP.js +6 -0
- langflow/frontend/assets/circle-gauge-BGrOst9L.js +6 -0
- langflow/frontend/assets/circle-help-CdMXDZFr.js +6 -0
- langflow/frontend/assets/circle-minus-DXLI43-p.js +6 -0
- langflow/frontend/assets/circle-off-C0JmuYH0.js +6 -0
- langflow/frontend/assets/circle-parking-CaoT_oV9.js +6 -0
- langflow/frontend/assets/circle-parking-off-Wl6mU15R.js +6 -0
- langflow/frontend/assets/circle-pause-nra2vq3x.js +6 -0
- langflow/frontend/assets/circle-percent-BtjKjrfI.js +6 -0
- langflow/frontend/assets/circle-play-BE-c8K8S.js +6 -0
- langflow/frontend/assets/circle-plus-PzFpxIZH.js +6 -0
- langflow/frontend/assets/circle-power-Ha2F1tSB.js +6 -0
- langflow/frontend/assets/circle-slash-2-DHcrnWlR.js +6 -0
- langflow/frontend/assets/circle-slash-CA-S0W4g.js +6 -0
- langflow/frontend/assets/circle-small-BvhryrIK.js +6 -0
- langflow/frontend/assets/circle-stop-Ct35yBZk.js +6 -0
- langflow/frontend/assets/circle-user-CPz8bqCl.js +6 -0
- langflow/frontend/assets/circle-user-round-yXIR-WgU.js +6 -0
- langflow/frontend/assets/circuit-board-CVkWlM5E.js +6 -0
- langflow/frontend/assets/citrus-BZCxNd7O.js +6 -0
- langflow/frontend/assets/clapperboard-dK4xZgsP.js +6 -0
- langflow/frontend/assets/clipboard-Ds5Z07sv.js +6 -0
- langflow/frontend/assets/clipboard-check-CT7rgWE7.js +6 -0
- langflow/frontend/assets/clipboard-copy-7ubC4Yza.js +6 -0
- langflow/frontend/assets/clipboard-list-o0oDhA77.js +6 -0
- langflow/frontend/assets/clipboard-minus-0Tz_adOm.js +6 -0
- langflow/frontend/assets/clipboard-paste-CoL1xZzr.js +6 -0
- langflow/frontend/assets/clipboard-pen-DuFR5bFR.js +6 -0
- langflow/frontend/assets/clipboard-pen-line-DGQtHbq3.js +6 -0
- langflow/frontend/assets/clipboard-plus-Y_fHUXMT.js +6 -0
- langflow/frontend/assets/clipboard-type-Du6tDpB5.js +6 -0
- langflow/frontend/assets/clipboard-x-CXlHspQq.js +6 -0
- langflow/frontend/assets/clock-1-Cy6_CrM-.js +6 -0
- langflow/frontend/assets/clock-10-DsU4PSzZ.js +6 -0
- langflow/frontend/assets/clock-11-DW5wXcwz.js +6 -0
- langflow/frontend/assets/clock-12-DRROOWaF.js +6 -0
- langflow/frontend/assets/clock-2-BYx-WvG0.js +6 -0
- langflow/frontend/assets/clock-3-BuBfWBH5.js +6 -0
- langflow/frontend/assets/clock-4-YZVu0Ndv.js +6 -0
- langflow/frontend/assets/clock-4ZjirP4v.js +6 -0
- langflow/frontend/assets/clock-5-OFWQOHb4.js +6 -0
- langflow/frontend/assets/clock-6-DxeICftX.js +6 -0
- langflow/frontend/assets/clock-7-CXQOXN6H.js +6 -0
- langflow/frontend/assets/clock-8-3KkUcd3O.js +6 -0
- langflow/frontend/assets/clock-9-6wbf25s1.js +6 -0
- langflow/frontend/assets/clock-alert-D452LIEg.js +6 -0
- langflow/frontend/assets/clock-arrow-down-TZUf1BSr.js +6 -0
- langflow/frontend/assets/clock-arrow-up-FXv7ULpb.js +6 -0
- langflow/frontend/assets/clock-fading-Da23qbqo.js +6 -0
- langflow/frontend/assets/cloud-Bo7mxJI_.js +6 -0
- langflow/frontend/assets/cloud-alert-BS8A9duL.js +6 -0
- langflow/frontend/assets/cloud-cog-Dpz4nFHS.js +6 -0
- langflow/frontend/assets/cloud-download-BVDMyr-G.js +6 -0
- langflow/frontend/assets/cloud-drizzle-BF3Y0HIk.js +6 -0
- langflow/frontend/assets/cloud-fog-B36RLGg6.js +6 -0
- langflow/frontend/assets/cloud-hail-CIDuu6t8.js +6 -0
- langflow/frontend/assets/cloud-lightning-CAi65H2c.js +6 -0
- langflow/frontend/assets/cloud-moon-qTvrUE7I.js +6 -0
- langflow/frontend/assets/cloud-moon-rain-ow_c2stP.js +6 -0
- langflow/frontend/assets/cloud-off-BLZed7la.js +6 -0
- langflow/frontend/assets/cloud-rain-CkjUfBVa.js +6 -0
- langflow/frontend/assets/cloud-rain-wind-B8R8wlV5.js +6 -0
- langflow/frontend/assets/cloud-snow-jnovgErB.js +6 -0
- langflow/frontend/assets/cloud-sun-Bfiu6mlL.js +6 -0
- langflow/frontend/assets/cloud-sun-rain-DHrnuDTE.js +6 -0
- langflow/frontend/assets/cloud-upload-E5DtpyCY.js +6 -0
- langflow/frontend/assets/cloudy-DpXNakKX.js +6 -0
- langflow/frontend/assets/clover-CSiWVDIr.js +6 -0
- langflow/frontend/assets/club-BwR217MS.js +6 -0
- langflow/frontend/assets/code-xml-DlFYVj3F.js +6 -0
- langflow/frontend/assets/codepen-UiUQU8WH.js +6 -0
- langflow/frontend/assets/codesandbox-B_mdLC3X.js +6 -0
- langflow/frontend/assets/coffee-DikHS02J.js +6 -0
- langflow/frontend/assets/cog-D2FSybxc.js +6 -0
- langflow/frontend/assets/coins-B3Ya8Atq.js +6 -0
- langflow/frontend/assets/columns-2-Drto25WB.js +6 -0
- langflow/frontend/assets/columns-3-CmrffVop.js +6 -0
- langflow/frontend/assets/columns-3-cog-CoWf_Nd8.js +6 -0
- langflow/frontend/assets/columns-4-H_EZ1mDg.js +6 -0
- langflow/frontend/assets/combine-mDtTaynV.js +6 -0
- langflow/frontend/assets/command-DSyz5JVi.js +6 -0
- langflow/frontend/assets/compass-BUS0JqW-.js +6 -0
- langflow/frontend/assets/component-CfzKr799.js +6 -0
- langflow/frontend/assets/computer-CN82ro8w.js +6 -0
- langflow/frontend/assets/concierge-bell-ByYUTkOH.js +6 -0
- langflow/frontend/assets/cone-D28CyZL2.js +6 -0
- langflow/frontend/assets/construction-BXaUJNkf.js +6 -0
- langflow/frontend/assets/contact-BODZSa_7.js +6 -0
- langflow/frontend/assets/contact-round-vAysxw5u.js +6 -0
- langflow/frontend/assets/container-i-a2gr02.js +6 -0
- langflow/frontend/assets/contrast-CbcHXjip.js +6 -0
- langflow/frontend/assets/cookie-hLfPjk6N.js +6 -0
- langflow/frontend/assets/cooking-pot-B4uLRrHG.js +6 -0
- langflow/frontend/assets/copy-4ZcB4prM.js +6 -0
- langflow/frontend/assets/copy-check-CUGgeRgc.js +6 -0
- langflow/frontend/assets/copy-minus-CB5xeyvB.js +6 -0
- langflow/frontend/assets/copy-plus-B8G2k-oB.js +6 -0
- langflow/frontend/assets/copy-slash-5Ap4tA3k.js +6 -0
- langflow/frontend/assets/copy-x-BhfHJzxP.js +6 -0
- langflow/frontend/assets/copyleft-CXRD8E9w.js +6 -0
- langflow/frontend/assets/copyright-BiA3grV6.js +6 -0
- langflow/frontend/assets/corner-down-left-ClJMDHI0.js +6 -0
- langflow/frontend/assets/corner-down-right-DCRPuYSm.js +6 -0
- langflow/frontend/assets/corner-left-down-BvS0G4W9.js +6 -0
- langflow/frontend/assets/corner-left-up-DWHo1WXV.js +6 -0
- langflow/frontend/assets/corner-right-down-BBB10evG.js +6 -0
- langflow/frontend/assets/corner-right-up-DXbv20S0.js +6 -0
- langflow/frontend/assets/corner-up-left-DomYLrA5.js +6 -0
- langflow/frontend/assets/corner-up-right-DEtvY6ys.js +6 -0
- langflow/frontend/assets/cpu-Dh88Q9fD.js +6 -0
- langflow/frontend/assets/creative-commons-BAe3nwZQ.js +6 -0
- langflow/frontend/assets/credit-card-DaB3cpBZ.js +6 -0
- langflow/frontend/assets/croissant-D96TGpzu.js +6 -0
- langflow/frontend/assets/crop-C8FxaeL1.js +6 -0
- langflow/frontend/assets/cross-5bdVltt9.js +6 -0
- langflow/frontend/assets/crosshair-CyZbfDct.js +6 -0
- langflow/frontend/assets/crown-BZnnOYwP.js +6 -0
- langflow/frontend/assets/cuboid-BqWogU5y.js +6 -0
- langflow/frontend/assets/cup-soda-Dz7NtIvF.js +6 -0
- langflow/frontend/assets/currency-5tPdc9Zh.js +6 -0
- langflow/frontend/assets/cylinder-B4mmn8ns.js +6 -0
- langflow/frontend/assets/dam-C2fbdkPV.js +6 -0
- langflow/frontend/assets/database-C8DmijcH.js +6 -0
- langflow/frontend/assets/database-backup-71ce-aHZ.js +6 -0
- langflow/frontend/assets/database-zap-DzH5GBmm.js +6 -0
- langflow/frontend/assets/decimals-arrow-left-DlR2OMIu.js +6 -0
- langflow/frontend/assets/decimals-arrow-right-Dx4ObfYv.js +6 -0
- langflow/frontend/assets/delete-BHxYtCY6.js +6 -0
- langflow/frontend/assets/dessert-CfOk8Cm8.js +6 -0
- langflow/frontend/assets/diameter-PFK47COt.js +6 -0
- langflow/frontend/assets/diamond-D2hRkW3R.js +6 -0
- langflow/frontend/assets/diamond-minus-BmmkztHK.js +6 -0
- langflow/frontend/assets/diamond-percent-Um3urkva.js +6 -0
- langflow/frontend/assets/diamond-plus-BctFfXFQ.js +6 -0
- langflow/frontend/assets/dice-1-iAashtM4.js +6 -0
- langflow/frontend/assets/dice-2-DYFUv-fQ.js +6 -0
- langflow/frontend/assets/dice-3-BKhH_7UE.js +6 -0
- langflow/frontend/assets/dice-4-DXL3N_4x.js +6 -0
- langflow/frontend/assets/dice-5-DnplP8dS.js +6 -0
- langflow/frontend/assets/dice-6-B60nh8vo.js +6 -0
- langflow/frontend/assets/dices-Dhvt0dI6.js +6 -0
- langflow/frontend/assets/diff-C0ITnBBr.js +6 -0
- langflow/frontend/assets/disc-2-BuaKHZRj.js +6 -0
- langflow/frontend/assets/disc-3-NMQNF-ZM.js +6 -0
- langflow/frontend/assets/disc-album-BcLrWjhq.js +6 -0
- langflow/frontend/assets/disc-yALpXpks.js +6 -0
- langflow/frontend/assets/divide-Dh7ujBOW.js +6 -0
- langflow/frontend/assets/dna-Bjifao3X.js +6 -0
- langflow/frontend/assets/dna-off-BUJlgzYb.js +6 -0
- langflow/frontend/assets/dock-B7EXITnl.js +6 -0
- langflow/frontend/assets/dog-B7U04mka.js +6 -0
- langflow/frontend/assets/dollar-sign-BMgFrD98.js +6 -0
- langflow/frontend/assets/donut-Bi1ebPXI.js +6 -0
- langflow/frontend/assets/door-closed-CSJ7S_5P.js +6 -0
- langflow/frontend/assets/door-open-DETl8Hsq.js +6 -0
- langflow/frontend/assets/dot-D3t9y3Ei.js +6 -0
- langflow/frontend/assets/download-QVQHjJbn.js +6 -0
- langflow/frontend/assets/drafting-compass-C_G_-w6o.js +6 -0
- langflow/frontend/assets/drama-C3d5snUt.js +6 -0
- langflow/frontend/assets/dribbble-gc8Hu2iM.js +6 -0
- langflow/frontend/assets/drill-C-_x7kVx.js +6 -0
- langflow/frontend/assets/droplet-CGpBURa1.js +6 -0
- langflow/frontend/assets/droplet-off-Pzyqut0G.js +6 -0
- langflow/frontend/assets/droplets-DUbFcMnM.js +6 -0
- langflow/frontend/assets/drum-Dc54lUwD.js +6 -0
- langflow/frontend/assets/drumstick-HKILk0Ot.js +6 -0
- langflow/frontend/assets/dumbbell-CW1875td.js +6 -0
- langflow/frontend/assets/ear-0Ch7ti8X.js +6 -0
- langflow/frontend/assets/ear-off-DraFLzw1.js +6 -0
- langflow/frontend/assets/earth-CFLvTzOE.js +6 -0
- langflow/frontend/assets/earth-lock-DnZmTPsn.js +6 -0
- langflow/frontend/assets/eclipse-CUbD3Qmh.js +6 -0
- langflow/frontend/assets/egg-Cbjn6S80.js +6 -0
- langflow/frontend/assets/egg-fried-CdBx5g4H.js +6 -0
- langflow/frontend/assets/egg-off-CxJ1u2w-.js +6 -0
- langflow/frontend/assets/ellipsis-BlbxdKlT.js +6 -0
- langflow/frontend/assets/ellipsis-vertical-COL6TUrg.js +6 -0
- langflow/frontend/assets/equal-BAjxFHm9.js +6 -0
- langflow/frontend/assets/equal-approximately-C_CIwv4D.js +6 -0
- langflow/frontend/assets/equal-not-Do3tztaX.js +6 -0
- langflow/frontend/assets/eraser-DF0f0uKS.js +6 -0
- langflow/frontend/assets/ethernet-port-WBTFOR3g.js +6 -0
- langflow/frontend/assets/euro-CEzliHoa.js +6 -0
- langflow/frontend/assets/expand-CuqWvmGR.js +6 -0
- langflow/frontend/assets/eye-BGqdGvP5.js +6 -0
- langflow/frontend/assets/eye-closed-DLJqwgv0.js +6 -0
- langflow/frontend/assets/eye-off-KDImmRkJ.js +6 -0
- langflow/frontend/assets/facebook-CYcXd9Iu.js +6 -0
- langflow/frontend/assets/factory-BWOF7gQH.js +6 -0
- langflow/frontend/assets/fan-CbdBZoHh.js +6 -0
- langflow/frontend/assets/fast-forward-nZ4kgGaR.js +6 -0
- langflow/frontend/assets/feather-Bpthyo1u.js +6 -0
- langflow/frontend/assets/fence-Cme7hk6F.js +6 -0
- langflow/frontend/assets/ferris-wheel-jGi85-Eg.js +6 -0
- langflow/frontend/assets/figma-Cjv8Tt79.js +6 -0
- langflow/frontend/assets/file-archive-Dly_3YF2.js +6 -0
- langflow/frontend/assets/file-audio-2-xj82e07p.js +6 -0
- langflow/frontend/assets/file-audio-9pU0xORZ.js +6 -0
- langflow/frontend/assets/file-axis-3d-BnYGLTM3.js +6 -0
- langflow/frontend/assets/file-badge-2-D0HG_ejF.js +6 -0
- langflow/frontend/assets/file-badge-BuHpQjAI.js +6 -0
- langflow/frontend/assets/file-box-D1VeNtpk.js +6 -0
- langflow/frontend/assets/file-chart-column-CnCcp9LE.js +6 -0
- langflow/frontend/assets/file-chart-column-increasing-C1rCConI.js +6 -0
- langflow/frontend/assets/file-chart-line-hgrAAx_4.js +6 -0
- langflow/frontend/assets/file-chart-pie-Dib4XDbW.js +6 -0
- langflow/frontend/assets/file-check-2-rLTogQx4.js +6 -0
- langflow/frontend/assets/file-check-DsnWAUT2.js +6 -0
- langflow/frontend/assets/file-clock---MrJeyO.js +6 -0
- langflow/frontend/assets/file-code-2-BdBTEdln.js +6 -0
- langflow/frontend/assets/file-code-BSD6ungW.js +6 -0
- langflow/frontend/assets/file-cog-BZQy-ba9.js +6 -0
- langflow/frontend/assets/file-dKQZYwuH.js +6 -0
- langflow/frontend/assets/file-diff-CH7EDtJC.js +6 -0
- langflow/frontend/assets/file-digit-D7_d-0CW.js +6 -0
- langflow/frontend/assets/file-down-Dt_7usLA.js +6 -0
- langflow/frontend/assets/file-heart-DT8xufAg.js +6 -0
- langflow/frontend/assets/file-image-DxvKruYd.js +6 -0
- langflow/frontend/assets/file-input-DxHp4Alf.js +6 -0
- langflow/frontend/assets/file-json-1-XvNhLQ.js +6 -0
- langflow/frontend/assets/file-json-2-DRiAa60m.js +6 -0
- langflow/frontend/assets/file-key-2-MRdv5jhW.js +6 -0
- langflow/frontend/assets/file-key-BzyIQNd6.js +6 -0
- langflow/frontend/assets/file-lock-2-Bkidiloq.js +6 -0
- langflow/frontend/assets/file-lock-D7DhBd2i.js +6 -0
- langflow/frontend/assets/file-minus-2-DyXNKy2T.js +6 -0
- langflow/frontend/assets/file-minus-DF3g9dIu.js +6 -0
- langflow/frontend/assets/file-music-DqiM-iAp.js +6 -0
- langflow/frontend/assets/file-output-D_Wg1CeJ.js +6 -0
- langflow/frontend/assets/file-pen-Bxm1mc6w.js +6 -0
- langflow/frontend/assets/file-pen-line-C4OMd3fE.js +6 -0
- langflow/frontend/assets/file-plus-2-kLdziRLd.js +6 -0
- langflow/frontend/assets/file-plus-CTa-OXIp.js +6 -0
- langflow/frontend/assets/file-question-CfxvLxIm.js +6 -0
- langflow/frontend/assets/file-scan-pgmy9fvz.js +6 -0
- langflow/frontend/assets/file-search-2-BwkJ5R6W.js +6 -0
- langflow/frontend/assets/file-search-DgBAyK6K.js +6 -0
- langflow/frontend/assets/file-sliders-B_OpLmha.js +6 -0
- langflow/frontend/assets/file-spreadsheet-DOtP8Gg9.js +6 -0
- langflow/frontend/assets/file-stack-DgDtpiMd.js +6 -0
- langflow/frontend/assets/file-symlink-vbXhuo8H.js +6 -0
- langflow/frontend/assets/file-terminal-DVvboZq6.js +6 -0
- langflow/frontend/assets/file-text-DGC7sdsW.js +6 -0
- langflow/frontend/assets/file-type-2-CfUahUxh.js +6 -0
- langflow/frontend/assets/file-type-BfSvTYPv.js +6 -0
- langflow/frontend/assets/file-up-Bvvikwm4.js +6 -0
- langflow/frontend/assets/file-user-DaUm7IPn.js +6 -0
- langflow/frontend/assets/file-video-2-DKvfIpuU.js +6 -0
- langflow/frontend/assets/file-video-Bu3OwNfA.js +6 -0
- langflow/frontend/assets/file-volume-2-9TCupQJ0.js +6 -0
- langflow/frontend/assets/file-volume-B79HFEYG.js +6 -0
- langflow/frontend/assets/file-warning-ox5Dn4wi.js +6 -0
- langflow/frontend/assets/file-x-2-BIUsvjws.js +6 -0
- langflow/frontend/assets/file-x-BbofT8LN.js +6 -0
- langflow/frontend/assets/files-DDq74A_H.js +6 -0
- langflow/frontend/assets/film-Cc-5l2Ug.js +6 -0
- langflow/frontend/assets/fingerprint-Bk43daa2.js +6 -0
- langflow/frontend/assets/fire-extinguisher-BpYWRcDE.js +6 -0
- langflow/frontend/assets/fish-CcgTXDr0.js +6 -0
- langflow/frontend/assets/fish-off-CTSoMjtL.js +6 -0
- langflow/frontend/assets/fish-symbol-4qaq4eUT.js +6 -0
- langflow/frontend/assets/flag-off-B6WIJPdA.js +6 -0
- langflow/frontend/assets/flag-s8A97f1C.js +6 -0
- langflow/frontend/assets/flag-triangle-left-Cb13gKSR.js +6 -0
- langflow/frontend/assets/flag-triangle-right-B2eU89J-.js +6 -0
- langflow/frontend/assets/flame-BdBUc1r8.js +6 -0
- langflow/frontend/assets/flame-kindling-B7n5jjlj.js +6 -0
- langflow/frontend/assets/flashlight-fNk35AiJ.js +6 -0
- langflow/frontend/assets/flashlight-off-D_RazXUc.js +6 -0
- langflow/frontend/assets/flask-conical-BGnLLMGf.js +6 -0
- langflow/frontend/assets/flask-conical-off-CnQAoWVR.js +6 -0
- langflow/frontend/assets/flask-round-fIBIuEdL.js +6 -0
- langflow/frontend/assets/flip-horizontal-2-CrrY3ni3.js +6 -0
- langflow/frontend/assets/flip-horizontal-hx2JiivV.js +6 -0
- langflow/frontend/assets/flip-vertical-2-DwP6Bzum.js +6 -0
- langflow/frontend/assets/flip-vertical-DcWXhqJt.js +6 -0
- langflow/frontend/assets/flower-2-BVqurWNh.js +6 -0
- langflow/frontend/assets/flower-DJSvFbmv.js +6 -0
- langflow/frontend/assets/focus-DdtKbmAh.js +6 -0
- langflow/frontend/assets/fold-horizontal-ZEKAo_f5.js +6 -0
- langflow/frontend/assets/fold-vertical-tn9KV2gT.js +6 -0
- langflow/frontend/assets/folder-D65_ctxW.js +6 -0
- langflow/frontend/assets/folder-archive-CSZUIv0L.js +6 -0
- langflow/frontend/assets/folder-check-DAD0Wbb0.js +6 -0
- langflow/frontend/assets/folder-clock-DKBSEbt1.js +6 -0
- langflow/frontend/assets/folder-closed-Da_IyQl-.js +6 -0
- langflow/frontend/assets/folder-code-BjK12yQl.js +6 -0
- langflow/frontend/assets/folder-cog-gMICaCve.js +6 -0
- langflow/frontend/assets/folder-dot-YKXGT1nq.js +6 -0
- langflow/frontend/assets/folder-down-U1ORGhse.js +6 -0
- langflow/frontend/assets/folder-git-2-CbITkZ8X.js +6 -0
- langflow/frontend/assets/folder-git-DqiNhlgf.js +6 -0
- langflow/frontend/assets/folder-heart-D3Oj_-2a.js +6 -0
- langflow/frontend/assets/folder-input-nAAMicET.js +6 -0
- langflow/frontend/assets/folder-kanban-CSdvrbDp.js +6 -0
- langflow/frontend/assets/folder-key-DLXTk8pJ.js +6 -0
- langflow/frontend/assets/folder-lock-WUABa7Oe.js +6 -0
- langflow/frontend/assets/folder-minus-B5xGdFAn.js +6 -0
- langflow/frontend/assets/folder-open-Bgv6WmI3.js +6 -0
- langflow/frontend/assets/folder-open-dot-DC2HgEPN.js +6 -0
- langflow/frontend/assets/folder-output-DwyLKy4X.js +6 -0
- langflow/frontend/assets/folder-pen-tcF02hyr.js +6 -0
- langflow/frontend/assets/folder-plus-B9_vaYDU.js +6 -0
- langflow/frontend/assets/folder-root-VwCr5OUC.js +6 -0
- langflow/frontend/assets/folder-search-2-BfQXzu7L.js +6 -0
- langflow/frontend/assets/folder-search-paV45aMl.js +6 -0
- langflow/frontend/assets/folder-symlink-COgmF5VW.js +6 -0
- langflow/frontend/assets/folder-sync-DrURUnNI.js +6 -0
- langflow/frontend/assets/folder-tree-CdICwYAj.js +6 -0
- langflow/frontend/assets/folder-up-D4WwIsp_.js +6 -0
- langflow/frontend/assets/folder-x-J2_4fdUF.js +6 -0
- langflow/frontend/assets/folders-7Xpsj7jV.js +6 -0
- langflow/frontend/assets/footprints-DVRSLXMk.js +6 -0
- langflow/frontend/assets/forklift-VMigNBFJ.js +6 -0
- langflow/frontend/assets/forward-CE54kWRO.js +6 -0
- langflow/frontend/assets/frame-BdXE1XDm.js +6 -0
- langflow/frontend/assets/framer-CA5fZhO7.js +6 -0
- langflow/frontend/assets/frown-oWG9DrD9.js +6 -0
- langflow/frontend/assets/fuel-ClmPVHZi.js +6 -0
- langflow/frontend/assets/fullscreen-DZIeVmwf.js +6 -0
- langflow/frontend/assets/funnel-DXZIwh3S.js +6 -0
- langflow/frontend/assets/funnel-plus-I5y8cnUa.js +6 -0
- langflow/frontend/assets/funnel-x-BRv8lJ4W.js +6 -0
- langflow/frontend/assets/gallery-horizontal-CTWQRiwE.js +6 -0
- langflow/frontend/assets/gallery-horizontal-end-CgCNLcQc.js +6 -0
- langflow/frontend/assets/gallery-thumbnails-DN-r2ZhB.js +6 -0
- langflow/frontend/assets/gallery-vertical-BsYEUvUD.js +6 -0
- langflow/frontend/assets/gallery-vertical-end-B3eXPsrk.js +6 -0
- langflow/frontend/assets/gamepad-2-Dw8h7uZr.js +6 -0
- langflow/frontend/assets/gamepad-CCft0e71.js +6 -0
- langflow/frontend/assets/gauge-mS-OblJR.js +6 -0
- langflow/frontend/assets/gavel-CupBXWg7.js +6 -0
- langflow/frontend/assets/gem-BUEaPolw.js +6 -0
- langflow/frontend/assets/ghost-3ME0nRk0.js +6 -0
- langflow/frontend/assets/gift-BtPeSI-o.js +6 -0
- langflow/frontend/assets/git-branch-D6kfZJaL.js +6 -0
- langflow/frontend/assets/git-branch-plus-3njkIJRK.js +6 -0
- langflow/frontend/assets/git-commit-horizontal-CFXGXdxi.js +6 -0
- langflow/frontend/assets/git-commit-vertical-CodAcvyH.js +6 -0
- langflow/frontend/assets/git-compare-DFPGVUFR.js +6 -0
- langflow/frontend/assets/git-compare-arrows-G2uE17iL.js +6 -0
- langflow/frontend/assets/git-fork-QJnff6sK.js +6 -0
- langflow/frontend/assets/git-graph-BucU4GOG.js +6 -0
- langflow/frontend/assets/git-merge-B0MmNtRI.js +6 -0
- langflow/frontend/assets/git-pull-request-DSB5VAZk.js +6 -0
- langflow/frontend/assets/git-pull-request-arrow-CmrmZgBw.js +6 -0
- langflow/frontend/assets/git-pull-request-closed-IdMIAzQ5.js +6 -0
- langflow/frontend/assets/git-pull-request-create-BaiY-zu7.js +6 -0
- langflow/frontend/assets/git-pull-request-create-arrow-Boj2Q1Ag.js +6 -0
- langflow/frontend/assets/git-pull-request-draft-BrbDUuPH.js +6 -0
- langflow/frontend/assets/github-B_uKXLGN.js +6 -0
- langflow/frontend/assets/gitlab-Dssfz-7b.js +6 -0
- langflow/frontend/assets/glass-water-DctUWtdy.js +6 -0
- langflow/frontend/assets/glasses-CJUqREJR.js +6 -0
- langflow/frontend/assets/globe-CW-N7YFg.js +6 -0
- langflow/frontend/assets/globe-lock-DmWaI8LB.js +6 -0
- langflow/frontend/assets/goal-C-A92vzq.js +6 -0
- langflow/frontend/assets/grab-DXNtbqNu.js +6 -0
- langflow/frontend/assets/graduation-cap-BvKxds3-.js +6 -0
- langflow/frontend/assets/grape-vxg-QmAa.js +6 -0
- langflow/frontend/assets/grid-2x2-Bda9xvw8.js +6 -0
- langflow/frontend/assets/grid-2x2-check-Cq4oXCG_.js +6 -0
- langflow/frontend/assets/grid-2x2-plus-DlbSyK4w.js +6 -0
- langflow/frontend/assets/grid-2x2-x-COkPyLW2.js +6 -0
- langflow/frontend/assets/grid-3x3-P5m98H0I.js +6 -0
- langflow/frontend/assets/grip-C8l1seJj.js +6 -0
- langflow/frontend/assets/grip-horizontal-C8xf9EqD.js +6 -0
- langflow/frontend/assets/grip-vertical-Dp8b3qVy.js +6 -0
- langflow/frontend/assets/group-NMh_xbhf.js +6 -0
- langflow/frontend/assets/guitar-Dohq_76_.js +6 -0
- langflow/frontend/assets/ham-CmDFmjBB.js +6 -0
- langflow/frontend/assets/hammer-_CGQRxth.js +6 -0
- langflow/frontend/assets/hand-CHd9erzR.js +6 -0
- langflow/frontend/assets/hand-coins-BhEGokvW.js +6 -0
- langflow/frontend/assets/hand-heart-7Oby7SAS.js +6 -0
- langflow/frontend/assets/hand-helping-CXMrHB_F.js +6 -0
- langflow/frontend/assets/hand-metal-C6MrIW5O.js +6 -0
- langflow/frontend/assets/hand-platter-Cbs2yD55.js +6 -0
- langflow/frontend/assets/handshake-DnW2f3e-.js +6 -0
- langflow/frontend/assets/hard-drive-B5MqVYDD.js +6 -0
- langflow/frontend/assets/hard-drive-download-DQm3Jx-J.js +6 -0
- langflow/frontend/assets/hard-drive-upload-UyeC7okZ.js +6 -0
- langflow/frontend/assets/hard-hat-DuBdE6ld.js +6 -0
- langflow/frontend/assets/hash-41NgbFLv.js +6 -0
- langflow/frontend/assets/haze-BoMT93pB.js +6 -0
- langflow/frontend/assets/hdmi-port-CKp8ZzL2.js +6 -0
- langflow/frontend/assets/heading-1-OsGkodnl.js +6 -0
- langflow/frontend/assets/heading-2-ByrEnN6x.js +6 -0
- langflow/frontend/assets/heading-3-C5NsklPz.js +6 -0
- langflow/frontend/assets/heading-4-Bhl4hzbe.js +6 -0
- langflow/frontend/assets/heading-5-DBI6pawb.js +6 -0
- langflow/frontend/assets/heading-6-DfxwQfT7.js +6 -0
- langflow/frontend/assets/heading-zd0OZwON.js +6 -0
- langflow/frontend/assets/headphone-off-mURIsBWJ.js +6 -0
- langflow/frontend/assets/headphones-BFe-lgHV.js +6 -0
- langflow/frontend/assets/headset-Bwf3fpi7.js +6 -0
- langflow/frontend/assets/heart-Dq1D84te.js +6 -0
- langflow/frontend/assets/heart-crack-CG--JiGk.js +6 -0
- langflow/frontend/assets/heart-handshake-oDkkGSno.js +6 -0
- langflow/frontend/assets/heart-minus-CCNRC1c0.js +6 -0
- langflow/frontend/assets/heart-off-BAPYXlds.js +6 -0
- langflow/frontend/assets/heart-plus-CvC3EhpP.js +6 -0
- langflow/frontend/assets/heart-pulse-DF-ORHct.js +6 -0
- langflow/frontend/assets/heater-eJfnwYYQ.js +6 -0
- langflow/frontend/assets/hexagon-BcDEx4Wb.js +6 -0
- langflow/frontend/assets/highlighter-j24gyp2u.js +6 -0
- langflow/frontend/assets/history-myIN6jVF.js +6 -0
- langflow/frontend/assets/hop-DSJJg5IW.js +6 -0
- langflow/frontend/assets/hop-off-CDIpY23y.js +6 -0
- langflow/frontend/assets/hospital-C2kjtT3N.js +6 -0
- langflow/frontend/assets/hotel-BiI9qopK.js +6 -0
- langflow/frontend/assets/hourglass-DdgptFb-.js +6 -0
- langflow/frontend/assets/house-D9nykhn2.js +6 -0
- langflow/frontend/assets/house-plug-CE2Jg8bl.js +6 -0
- langflow/frontend/assets/house-plus-DT80fPIW.js +6 -0
- langflow/frontend/assets/house-wifi-BB9Ytt9Q.js +6 -0
- langflow/frontend/assets/ice-cream-bowl-BtGfB4bc.js +6 -0
- langflow/frontend/assets/ice-cream-cone-q1HuFU8K.js +6 -0
- langflow/frontend/assets/id-card-CT13zAKZ.js +6 -0
- langflow/frontend/assets/image-D0ZjsAQs.js +6 -0
- langflow/frontend/assets/image-down-Du2TxYUV.js +6 -0
- langflow/frontend/assets/image-minus-DtJgK1SX.js +6 -0
- langflow/frontend/assets/image-off-CJM0L0Pm.js +6 -0
- langflow/frontend/assets/image-play-rO_sigy3.js +6 -0
- langflow/frontend/assets/image-plus-BtHXKAhF.js +6 -0
- langflow/frontend/assets/image-up-BedomcGK.js +6 -0
- langflow/frontend/assets/image-upscale-CTytoZQ7.js +6 -0
- langflow/frontend/assets/images-DQdzA8PB.js +6 -0
- langflow/frontend/assets/import-BSj_tVee.js +6 -0
- langflow/frontend/assets/inbox-CLdA6iO6.js +6 -0
- langflow/frontend/assets/indent-decrease-eBOWpxsA.js +6 -0
- langflow/frontend/assets/indent-increase-PUZyQsBH.js +6 -0
- langflow/frontend/assets/index--3O3NqKN.js +1 -0
- langflow/frontend/assets/index--IHrpBoo.js +1 -0
- langflow/frontend/assets/index-2kWQOuop.js +1 -0
- langflow/frontend/assets/index-5KYiBJ4r.js +1 -0
- langflow/frontend/assets/index-7l4lKqCJ.js +1 -0
- langflow/frontend/assets/index-8zD_EsG6.js +1 -0
- langflow/frontend/assets/index-9-TuTYSh.js +1 -0
- langflow/frontend/assets/index-Ayc8Z_Hb.js +1 -0
- langflow/frontend/assets/index-B0jfUxmL.js +1 -0
- langflow/frontend/assets/index-B12iJWz4.js +1 -0
- langflow/frontend/assets/index-B2tpdHrx.js +1 -0
- langflow/frontend/assets/index-B5ecjJUs.js +1 -0
- langflow/frontend/assets/index-B8V3us4q.js +1 -0
- langflow/frontend/assets/index-B94OQ3jt.js +1 -0
- langflow/frontend/assets/index-B9ommOZl.js +1 -0
- langflow/frontend/assets/index-BCAS0lQ_.js +1 -0
- langflow/frontend/assets/index-BDRoIsie.js +1 -0
- langflow/frontend/assets/index-BEDcwmO-.js +1 -0
- langflow/frontend/assets/index-BG8kF-GV.js +1 -0
- langflow/frontend/assets/index-BHAQc8Wu.js +1 -0
- langflow/frontend/assets/index-BI78KkAp.js +1 -0
- langflow/frontend/assets/index-BIK_Gncf.js +1 -0
- langflow/frontend/assets/index-BIitGLYF.js +1 -0
- langflow/frontend/assets/index-BJ2E8Jz2.js +1 -0
- langflow/frontend/assets/index-BJJAM1fq.js +1 -0
- langflow/frontend/assets/index-BJvXXLH0.js +1 -0
- langflow/frontend/assets/index-BK7ASEdZ.js +1 -0
- langflow/frontend/assets/index-BL9t0aq2.js +1 -0
- langflow/frontend/assets/index-BMw6t_pn.js +1 -0
- langflow/frontend/assets/index-BN_YNwOx.js +1 -0
- langflow/frontend/assets/index-BPkpEYRa.js +1 -0
- langflow/frontend/assets/index-BPoAfmHl.js +1 -0
- langflow/frontend/assets/index-BQ4YbPOt.js +1 -0
- langflow/frontend/assets/index-BRWCSHPL.js +1 -0
- langflow/frontend/assets/index-BTIO2Hd1.js +1 -0
- langflow/frontend/assets/index-BTn9ARUB.js +13 -0
- langflow/frontend/assets/index-BVLcStRP.js +1 -0
- langflow/frontend/assets/index-BVTk2F-Y.js +1 -0
- langflow/frontend/assets/index-BVnY-2eL.js +1 -0
- langflow/frontend/assets/index-BW_0_NQR.js +1 -0
- langflow/frontend/assets/index-BYGyku6g.js +1 -0
- langflow/frontend/assets/index-BYVzErJa.js +1 -0
- langflow/frontend/assets/index-BYaZbRmc.js +1 -0
- langflow/frontend/assets/index-BYnidR2j.js +1 -0
- langflow/frontend/assets/index-B_WRaKpb.js +1 -0
- langflow/frontend/assets/index-Bbd-X_I4.js +1 -0
- langflow/frontend/assets/index-BebbP1_3.js +2 -0
- langflow/frontend/assets/index-BfpDvtx9.js +1 -0
- langflow/frontend/assets/index-BguOvTIt.js +1 -0
- langflow/frontend/assets/index-Bh4jFZOt.js +1 -0
- langflow/frontend/assets/index-BlbxL0_F.js +1 -0
- langflow/frontend/assets/index-BlpMuHC1.js +1 -0
- langflow/frontend/assets/index-BmILSNO1.js +1 -0
- langflow/frontend/assets/index-Bnb_9gFT.js +1 -0
- langflow/frontend/assets/index-BnhOQvim.js +1 -0
- langflow/frontend/assets/index-BpQ_FwEx.js +1 -0
- langflow/frontend/assets/index-BrhCPWHl.js +1 -0
- langflow/frontend/assets/index-Bs66S-cg.js +1 -0
- langflow/frontend/assets/index-Bt8ozu-9.js +1 -0
- langflow/frontend/assets/index-Bte_MSlg.js +21 -0
- langflow/frontend/assets/index-Bu9UBPcf.js +1 -0
- langflow/frontend/assets/index-BuWUz5Es.js +1 -0
- langflow/frontend/assets/index-BxDCY7GA.js +1 -0
- langflow/frontend/assets/index-ByYWULC4.js +1 -0
- langflow/frontend/assets/index-Bylvmlsj.js +399 -0
- langflow/frontend/assets/index-BzcJzsWn.js +1 -0
- langflow/frontend/assets/index-C6jWT2p-.js +1 -0
- langflow/frontend/assets/index-C9Y1VV1M.js +1 -0
- langflow/frontend/assets/index-C9k7xHBe.js +1 -0
- langflow/frontend/assets/index-CB1BfuBr.js +1 -0
- langflow/frontend/assets/index-CDtwENIK.js +1 -0
- langflow/frontend/assets/index-CE488wQD.js +1 -0
- langflow/frontend/assets/index-CGvfR3yr.js +1 -0
- langflow/frontend/assets/index-CHJ-CBzq.js +1 -0
- langflow/frontend/assets/index-CHZjBnIE.js +1 -0
- langflow/frontend/assets/index-CI-vC5Lq.js +1 -0
- langflow/frontend/assets/index-CIZmTxGi.js +1 -0
- langflow/frontend/assets/index-CIcq7OmA.js +1 -0
- langflow/frontend/assets/index-CKMr8E1p.js +1 -0
- langflow/frontend/assets/index-CKTmIMMn.js +1 -0
- langflow/frontend/assets/index-CKpOimEN.js +381 -0
- langflow/frontend/assets/index-CLcE4nRm.js +1 -0
- langflow/frontend/assets/index-CM1jxAtr.js +1 -0
- langflow/frontend/assets/index-CM9ccl8R.js +1 -0
- langflow/frontend/assets/index-CN1xk2bm.js +1 -0
- langflow/frontend/assets/index-CPhJ9MJ3.js +1 -0
- langflow/frontend/assets/index-CPq9Cq75.js +1 -0
- langflow/frontend/assets/index-CQLuLC1H.js +1 -0
- langflow/frontend/assets/index-CQtCkREE.js +1 -0
- langflow/frontend/assets/index-CRzDwBcv.js +1 -0
- langflow/frontend/assets/index-CSKeDy3F.js +1 -0
- langflow/frontend/assets/index-CTTFx3hy.js +1 -0
- langflow/frontend/assets/index-CWO6aLRj.js +1 -0
- langflow/frontend/assets/index-CXJx-x2V.js +1 -0
- langflow/frontend/assets/index-CY8ExIlC.js +1 -0
- langflow/frontend/assets/index-CYS-koZD.js +1 -0
- langflow/frontend/assets/index-CYlls8yU.js +1 -0
- langflow/frontend/assets/index-CZDezo23.js +1 -0
- langflow/frontend/assets/index-Cc6LQgxi.js +1 -0
- langflow/frontend/assets/index-Cea1VdoP.js +20 -0
- langflow/frontend/assets/index-Ch73zLO7.js +1 -0
- langflow/frontend/assets/index-Chvm9gnt.js +1 -0
- langflow/frontend/assets/index-CiMhzwVm.js +1 -0
- langflow/frontend/assets/index-CjIpaN28.js +1 -0
- langflow/frontend/assets/index-Cmqey3tV.js +1 -0
- langflow/frontend/assets/index-CpKrIPML.js +205 -0
- langflow/frontend/assets/index-CpXuZ5Yj.js +1 -0
- langflow/frontend/assets/index-Cql8nLGl.js +1 -0
- langflow/frontend/assets/index-Cu5di6tV.js +1 -0
- langflow/frontend/assets/index-Cy2hauYT.js +185 -0
- langflow/frontend/assets/index-CyPXGUjM.js +1 -0
- langflow/frontend/assets/index-CzVx1ZZG.js +1 -0
- langflow/frontend/assets/index-D-sbAj3-.js +767 -0
- langflow/frontend/assets/index-D0faXIRw.js +1 -0
- langflow/frontend/assets/index-D2F1nNcS.js +1 -0
- langflow/frontend/assets/index-D6rNZM8d.js +1 -0
- langflow/frontend/assets/index-D7c71Ncp.js +7323 -0
- langflow/frontend/assets/index-D7nicSdX.js +1 -0
- langflow/frontend/assets/index-D8b32AEu.js +1 -0
- langflow/frontend/assets/index-DAp88IjZ.js +1 -0
- langflow/frontend/assets/index-DBLewSdZ.js +1 -0
- langflow/frontend/assets/index-DCAYv_9J.js +1 -0
- langflow/frontend/assets/index-DCdIQCmd.js +281 -0
- langflow/frontend/assets/index-DCjaZqzk.js +1 -0
- langflow/frontend/assets/index-DFsk-5F7.js +1 -0
- langflow/frontend/assets/index-DGHIyISG.js +1 -0
- langflow/frontend/assets/index-DHr2zhC0.js +1 -0
- langflow/frontend/assets/index-DJYsexlm.js +1 -0
- langflow/frontend/assets/index-DK6ZzpFl.js +1 -0
- langflow/frontend/assets/index-DL-XWPcx.js +7 -0
- langflow/frontend/assets/index-DNRIGLMN.js +1 -0
- langflow/frontend/assets/index-DORDRALN.js +1 -0
- langflow/frontend/assets/index-DOVsIs1Y.js +1 -0
- langflow/frontend/assets/index-DOYJ_CZN.js +1 -0
- langflow/frontend/assets/index-DQvsXVLs.js +1 -0
- langflow/frontend/assets/index-DThcEP2S.js +1 -0
- langflow/frontend/assets/index-DWW4i1mS.js +1 -0
- langflow/frontend/assets/index-DZydxXk-.js +1 -0
- langflow/frontend/assets/index-Daw8xyJf.js +1 -0
- langflow/frontend/assets/index-Dc0nF4D_.js +1 -0
- langflow/frontend/assets/index-DctkFwnK.js +108 -0
- langflow/frontend/assets/index-DjCcbnqJ.js +127 -0
- langflow/frontend/assets/index-DjG319lz.js +1 -0
- langflow/frontend/assets/index-DkxwwfUL.js +1 -0
- langflow/frontend/assets/index-DlNYEnyO.js +1 -0
- langflow/frontend/assets/index-DpNGpygE.js +14 -0
- langflow/frontend/assets/index-DwGroZ5i.js +1 -0
- langflow/frontend/assets/index-DwdF4A_k.js +1 -0
- langflow/frontend/assets/index-DwupFUE1.js +1 -0
- langflow/frontend/assets/index-DyFJaxvz.js +1 -0
- langflow/frontend/assets/index-DylRhyva.js +1 -0
- langflow/frontend/assets/index-Dz6LtjFc.js +1 -0
- langflow/frontend/assets/index-E_woFm9H.js +1 -0
- langflow/frontend/assets/index-IYvFl1oN.js +1 -0
- langflow/frontend/assets/index-KWmSW1LE.js +1 -0
- langflow/frontend/assets/index-KyJaEIZu.js +495 -0
- langflow/frontend/assets/index-L2r_nVW-.js +1 -0
- langflow/frontend/assets/index-LKY1_Kuv.js +1 -0
- langflow/frontend/assets/index-LykvuH3z.js +1 -0
- langflow/frontend/assets/index-PgeGlQPr.js +1 -0
- langflow/frontend/assets/index-Pj0GaUuE.js +1 -0
- langflow/frontend/assets/index-RHN6mdhz.js +1 -0
- langflow/frontend/assets/index-T-7O_UCg.js +1 -0
- langflow/frontend/assets/index-TaFYKyCQ.js +1 -0
- langflow/frontend/assets/index-V652fUKL.js +1 -0
- langflow/frontend/assets/index-WVOTQJ09.js +1 -0
- langflow/frontend/assets/index-WuyU7hfS.js +1 -0
- langflow/frontend/assets/index-XdlnxfM1.js +1 -0
- langflow/frontend/assets/index-Zb3do5-I.js +1 -0
- langflow/frontend/assets/index-_msEUPyj.js +1 -0
- langflow/frontend/assets/index-cP7Rj7nE.js +1 -0
- langflow/frontend/assets/index-dHzQlvPn.js +1 -0
- langflow/frontend/assets/index-gItsUULG.js +1 -0
- langflow/frontend/assets/index-heRrRQYO.js +1 -0
- langflow/frontend/assets/index-iP58GKwK.js +1 -0
- langflow/frontend/assets/index-iwuC6nMx.js +1 -0
- langflow/frontend/assets/index-jONH7mX0.js +1 -0
- langflow/frontend/assets/index-mj8XK9Tl.js +1 -0
- langflow/frontend/assets/index-oiBWx4w9.js +1 -0
- langflow/frontend/assets/index-pKCSZFwa.js +1 -0
- langflow/frontend/assets/index-qF5m8J6W.js +1 -0
- langflow/frontend/assets/index-s2HlLerd.js +1 -0
- langflow/frontend/assets/index-sDM3dLyW.js +1 -0
- langflow/frontend/assets/index-twqYNsoX.js +1 -0
- langflow/frontend/assets/index-ukjxiqG1.js +1 -0
- langflow/frontend/assets/indian-rupee-DDsHHnpw.js +6 -0
- langflow/frontend/assets/infinity-BBPXbhl6.js +6 -0
- langflow/frontend/assets/info-pijX_lAI.js +6 -0
- langflow/frontend/assets/inspection-panel-B3s01EPS.js +6 -0
- langflow/frontend/assets/instagram-DQjEVc1a.js +6 -0
- langflow/frontend/assets/italic-DmZqJc3s.js +6 -0
- langflow/frontend/assets/iteration-ccw-Btg_E23q.js +6 -0
- langflow/frontend/assets/iteration-cw-Db00y5_M.js +6 -0
- langflow/frontend/assets/japanese-yen-GDtYmkLT.js +6 -0
- langflow/frontend/assets/joystick-oCzqrBnq.js +6 -0
- langflow/frontend/assets/kanban-we0yz9mS.js +6 -0
- langflow/frontend/assets/key-DAr2T7wP.js +6 -0
- langflow/frontend/assets/key-round-BlVlTn-g.js +6 -0
- langflow/frontend/assets/key-square-QfUsUzpk.js +6 -0
- langflow/frontend/assets/keyboard-BU9Zjv_Y.js +6 -0
- langflow/frontend/assets/keyboard-music-Gpxy8HJ1.js +6 -0
- langflow/frontend/assets/keyboard-off-DyG_chgi.js +6 -0
- langflow/frontend/assets/lamp-CHwGph0N.js +6 -0
- langflow/frontend/assets/lamp-ceiling-BvzzpZjI.js +6 -0
- langflow/frontend/assets/lamp-desk-wFruCDAT.js +6 -0
- langflow/frontend/assets/lamp-floor-BmL4iQON.js +6 -0
- langflow/frontend/assets/lamp-wall-down-CqQUSQrD.js +6 -0
- langflow/frontend/assets/lamp-wall-up-DaIm2ZHs.js +6 -0
- langflow/frontend/assets/land-plot-BOPhLWQf.js +6 -0
- langflow/frontend/assets/landmark-CDhFL2--.js +6 -0
- langflow/frontend/assets/languages-DeYdLiLU.js +6 -0
- langflow/frontend/assets/laptop-bZpl3U9i.js +6 -0
- langflow/frontend/assets/laptop-minimal-D3HG41A6.js +6 -0
- langflow/frontend/assets/laptop-minimal-check-BCTwuOkq.js +6 -0
- langflow/frontend/assets/lasso-8Rzjwdvb.js +6 -0
- langflow/frontend/assets/lasso-select-KR_FJ8Sz.js +6 -0
- langflow/frontend/assets/laugh-DPLw2kQc.js +6 -0
- langflow/frontend/assets/layers-2-ccTMvAQJ.js +6 -0
- langflow/frontend/assets/layers-C9PBhMbR.js +6 -0
- langflow/frontend/assets/layout-dashboard-DWhDHJLb.js +6 -0
- langflow/frontend/assets/layout-grid-j545VrOo.js +6 -0
- langflow/frontend/assets/layout-list-B6mdFVQM.js +6 -0
- langflow/frontend/assets/layout-panel-left-DNm1Lb-C.js +6 -0
- langflow/frontend/assets/layout-panel-top--RhZXVol.js +6 -0
- langflow/frontend/assets/layout-template-Bqrsfj6g.js +6 -0
- langflow/frontend/assets/lazyIconImports-DRfFaNPB.js +2 -0
- langflow/frontend/assets/leaf-C4sMkYhR.js +6 -0
- langflow/frontend/assets/leafy-green-C6iBk6n7.js +6 -0
- langflow/frontend/assets/lectern-D_jCIZYa.js +6 -0
- langflow/frontend/assets/letter-text-C20LU8vc.js +6 -0
- langflow/frontend/assets/library-C6q6nxw1.js +6 -0
- langflow/frontend/assets/library-big-BMOPwYLP.js +6 -0
- langflow/frontend/assets/life-buoy-BdTs-3qm.js +6 -0
- langflow/frontend/assets/ligature-59BNBdFO.js +6 -0
- langflow/frontend/assets/lightbulb-B6rFe3OL.js +6 -0
- langflow/frontend/assets/lightbulb-off-B21C0ap6.js +6 -0
- langflow/frontend/assets/link-2-DFDRgD6E.js +6 -0
- langflow/frontend/assets/link-2-off-DuyJz9Te.js +6 -0
- langflow/frontend/assets/link-BW7ikAR2.js +6 -0
- langflow/frontend/assets/linkedin-BC54gln0.js +6 -0
- langflow/frontend/assets/list-D9uknRtj.js +6 -0
- langflow/frontend/assets/list-check-CZp0P9j8.js +6 -0
- langflow/frontend/assets/list-checks-DtbWypeT.js +6 -0
- langflow/frontend/assets/list-collapse-BYTfMbYt.js +6 -0
- langflow/frontend/assets/list-end-CNOAFpq7.js +6 -0
- langflow/frontend/assets/list-filter-B0frV5dv.js +6 -0
- langflow/frontend/assets/list-filter-plus-CK5Lcsa4.js +6 -0
- langflow/frontend/assets/list-minus-C6ulm7vt.js +6 -0
- langflow/frontend/assets/list-music-B4L-9duN.js +6 -0
- langflow/frontend/assets/list-ordered-C86H0C6g.js +6 -0
- langflow/frontend/assets/list-plus-D78K3DjW.js +6 -0
- langflow/frontend/assets/list-restart-CVZZyeJ2.js +6 -0
- langflow/frontend/assets/list-start-gDuX8tMg.js +6 -0
- langflow/frontend/assets/list-todo-DtkFXzaW.js +6 -0
- langflow/frontend/assets/list-tree-Oi6vkVwR.js +6 -0
- langflow/frontend/assets/list-video-DE73_LYJ.js +6 -0
- langflow/frontend/assets/list-x-CgQzsjRB.js +6 -0
- langflow/frontend/assets/loader-RDvq_gck.js +6 -0
- langflow/frontend/assets/loader-circle-DkJY-7be.js +6 -0
- langflow/frontend/assets/loader-pinwheel-DqLtT1OW.js +6 -0
- langflow/frontend/assets/locate-27R1wayC.js +6 -0
- langflow/frontend/assets/locate-fixed-B25GqMPm.js +6 -0
- langflow/frontend/assets/locate-off-DxcIo3ue.js +6 -0
- langflow/frontend/assets/location-edit-C8GKuWlO.js +6 -0
- langflow/frontend/assets/lock-DbdTPRie.js +6 -0
- langflow/frontend/assets/lock-keyhole-Cx4a6BYs.js +6 -0
- langflow/frontend/assets/lock-keyhole-open-DTLQHZiP.js +6 -0
- langflow/frontend/assets/lock-open-CnTQhpTU.js +6 -0
- langflow/frontend/assets/log-in-DEu4f9CT.js +6 -0
- langflow/frontend/assets/log-out-Rw31_grB.js +6 -0
- langflow/frontend/assets/logs-C_xcALe5.js +6 -0
- langflow/frontend/assets/lollipop-B6UBSkOr.js +6 -0
- langflow/frontend/assets/luggage-B759at-b.js +6 -0
- langflow/frontend/assets/magnet-CeNQFjoD.js +6 -0
- langflow/frontend/assets/mail-De4rBGVq.js +6 -0
- langflow/frontend/assets/mail-check-CbJ1IOaN.js +6 -0
- langflow/frontend/assets/mail-minus-RnPcqZ0v.js +6 -0
- langflow/frontend/assets/mail-open-D9M_LY0y.js +6 -0
- langflow/frontend/assets/mail-plus-BT5pdOrC.js +6 -0
- langflow/frontend/assets/mail-question-C2SIW5_-.js +6 -0
- langflow/frontend/assets/mail-search-Cyt39aW3.js +6 -0
- langflow/frontend/assets/mail-warning-DeMRXgCc.js +6 -0
- langflow/frontend/assets/mail-x-B8pe3ypI.js +6 -0
- langflow/frontend/assets/mailbox-DOr4Jgda.js +6 -0
- langflow/frontend/assets/mails-Ce7xii1i.js +6 -0
- langflow/frontend/assets/map-DpiPYH-Q.js +6 -0
- langflow/frontend/assets/map-pin-Cc26OxY-.js +6 -0
- langflow/frontend/assets/map-pin-check-CByGWxEF.js +6 -0
- langflow/frontend/assets/map-pin-check-inside-DiG2kXfQ.js +6 -0
- langflow/frontend/assets/map-pin-house-23Gzpmu2.js +6 -0
- langflow/frontend/assets/map-pin-minus-ITQdHJk5.js +6 -0
- langflow/frontend/assets/map-pin-minus-inside-B679vGwS.js +6 -0
- langflow/frontend/assets/map-pin-off-CWKH97P5.js +6 -0
- langflow/frontend/assets/map-pin-plus-DfAOd7pB.js +6 -0
- langflow/frontend/assets/map-pin-plus-inside-JzHwlP76.js +6 -0
- langflow/frontend/assets/map-pin-x-DUyBhfDm.js +6 -0
- langflow/frontend/assets/map-pin-x-inside-C6k1KmNh.js +6 -0
- langflow/frontend/assets/map-pinned-BpuyCi6Y.js +6 -0
- langflow/frontend/assets/map-plus-DO7OUsBp.js +6 -0
- langflow/frontend/assets/mars-09Pgjyim.js +6 -0
- langflow/frontend/assets/mars-stroke-DoS_IHT5.js +6 -0
- langflow/frontend/assets/martini-C4dLdwZz.js +6 -0
- langflow/frontend/assets/maximize-2-BgGWLpMa.js +6 -0
- langflow/frontend/assets/maximize-BnmFD7Ea.js +6 -0
- langflow/frontend/assets/medal-CVtEX92m.js +6 -0
- langflow/frontend/assets/megaphone-B_S1jdP6.js +6 -0
- langflow/frontend/assets/megaphone-off-CRjvXD1m.js +6 -0
- langflow/frontend/assets/meh-C8uPKyUp.js +6 -0
- langflow/frontend/assets/memory-stick-Bj3nN5dk.js +6 -0
- langflow/frontend/assets/menu-B9s_-3BK.js +6 -0
- langflow/frontend/assets/merge-J8TxoB_I.js +6 -0
- langflow/frontend/assets/message-circle-code-f4mtGDDw.js +6 -0
- langflow/frontend/assets/message-circle-dashed-r3VtirOd.js +6 -0
- langflow/frontend/assets/message-circle-heart-Bgz1ew21.js +6 -0
- langflow/frontend/assets/message-circle-jUyFs-es.js +6 -0
- langflow/frontend/assets/message-circle-more-Bla7Vdfj.js +6 -0
- langflow/frontend/assets/message-circle-off-CLEvmyW9.js +6 -0
- langflow/frontend/assets/message-circle-plus-a11z-ovw.js +6 -0
- langflow/frontend/assets/message-circle-question-B5_XYWTb.js +6 -0
- langflow/frontend/assets/message-circle-reply-CPOzJ66g.js +6 -0
- langflow/frontend/assets/message-circle-warning-DRIi-daa.js +6 -0
- langflow/frontend/assets/message-circle-x-CIBETEKZ.js +6 -0
- langflow/frontend/assets/message-square-code-B2wt6I5-.js +6 -0
- langflow/frontend/assets/message-square-dashed-4X0h0pQb.js +6 -0
- langflow/frontend/assets/message-square-diff-xWeaewsx.js +6 -0
- langflow/frontend/assets/message-square-dot--0-tnQXG.js +6 -0
- langflow/frontend/assets/message-square-heart-5g8BhHmh.js +6 -0
- langflow/frontend/assets/message-square-k6VTaNBS.js +6 -0
- langflow/frontend/assets/message-square-lock-RQv6B-95.js +6 -0
- langflow/frontend/assets/message-square-more-CG788VX0.js +6 -0
- langflow/frontend/assets/message-square-off-BhjWfl1b.js +6 -0
- langflow/frontend/assets/message-square-plus-BI-H6jxM.js +6 -0
- langflow/frontend/assets/message-square-quote-Cp8iAUVq.js +6 -0
- langflow/frontend/assets/message-square-reply-ciwL0PNR.js +6 -0
- langflow/frontend/assets/message-square-share-BtRNOwXY.js +6 -0
- langflow/frontend/assets/message-square-text-CQcrmsOB.js +6 -0
- langflow/frontend/assets/message-square-warning-BW_paLfj.js +6 -0
- langflow/frontend/assets/message-square-x-CzT3l51X.js +6 -0
- langflow/frontend/assets/messages-square-Bk4KnQ8F.js +6 -0
- langflow/frontend/assets/mic-CVjPC0nA.js +6 -0
- langflow/frontend/assets/mic-off-cvNpAnCO.js +6 -0
- langflow/frontend/assets/mic-vocal-Bvu_7-1P.js +6 -0
- langflow/frontend/assets/microchip-CL7Q_1xX.js +6 -0
- langflow/frontend/assets/microscope-DRVScFmr.js +6 -0
- langflow/frontend/assets/microwave--4oIy06y.js +6 -0
- langflow/frontend/assets/milestone-KpASYh3p.js +6 -0
- langflow/frontend/assets/milk-ZOs_y1PL.js +6 -0
- langflow/frontend/assets/milk-off-CvETS96K.js +6 -0
- langflow/frontend/assets/minimize-2-ZcENftRc.js +6 -0
- langflow/frontend/assets/minimize-D7d37njo.js +6 -0
- langflow/frontend/assets/monitor-DOlbFky5.js +6 -0
- langflow/frontend/assets/monitor-check-DmUCeR9A.js +6 -0
- langflow/frontend/assets/monitor-cog-m74VAarh.js +6 -0
- langflow/frontend/assets/monitor-dot-CaDHU0F7.js +6 -0
- langflow/frontend/assets/monitor-down-5IIJ7Hp3.js +6 -0
- langflow/frontend/assets/monitor-off-BF07OCtl.js +6 -0
- langflow/frontend/assets/monitor-pause-BWHoCkC-.js +6 -0
- langflow/frontend/assets/monitor-play-xck1Q3K3.js +6 -0
- langflow/frontend/assets/monitor-smartphone-BAz_rtXC.js +6 -0
- langflow/frontend/assets/monitor-speaker-CSzIdDUR.js +6 -0
- langflow/frontend/assets/monitor-stop-Cg4Yysvq.js +6 -0
- langflow/frontend/assets/monitor-up-BibsRz8A.js +6 -0
- langflow/frontend/assets/monitor-x-CnIc-XPo.js +6 -0
- langflow/frontend/assets/moon-CwBh9jCb.js +6 -0
- langflow/frontend/assets/moon-star-Cqz6Au_k.js +6 -0
- langflow/frontend/assets/mountain-DBNjOkPk.js +6 -0
- langflow/frontend/assets/mountain-snow-o4r6usrx.js +6 -0
- langflow/frontend/assets/mouse-C1nhRUcr.js +6 -0
- langflow/frontend/assets/mouse-off-CASRo_QW.js +6 -0
- langflow/frontend/assets/mouse-pointer-2-Mb8VGr0o.js +6 -0
- langflow/frontend/assets/mouse-pointer-D94fPNG2.js +6 -0
- langflow/frontend/assets/mouse-pointer-ban-KUQlGU-A.js +6 -0
- langflow/frontend/assets/mouse-pointer-click-CaZdrkEQ.js +6 -0
- langflow/frontend/assets/move-3d-C0T67La1.js +6 -0
- langflow/frontend/assets/move-Bpi1PuOT.js +6 -0
- langflow/frontend/assets/move-diagonal-2-uxLMwSLU.js +6 -0
- langflow/frontend/assets/move-diagonal-BI_kq6Ri.js +6 -0
- langflow/frontend/assets/move-down-BaiJALD6.js +6 -0
- langflow/frontend/assets/move-down-left-DvHTc324.js +6 -0
- langflow/frontend/assets/move-down-right-bDhB8pmN.js +6 -0
- langflow/frontend/assets/move-horizontal-Gg4hQwWM.js +6 -0
- langflow/frontend/assets/move-left-DyKB1bwc.js +6 -0
- langflow/frontend/assets/move-right-BA7N--Qc.js +6 -0
- langflow/frontend/assets/move-up-DFrSH8tg.js +6 -0
- langflow/frontend/assets/move-up-left-BTjfll8R.js +6 -0
- langflow/frontend/assets/move-up-right-CtNx6SNy.js +6 -0
- langflow/frontend/assets/move-vertical-DL7X4ZR7.js +6 -0
- langflow/frontend/assets/music-2-mR0Ncuz9.js +6 -0
- langflow/frontend/assets/music-3-D5hWNdP9.js +6 -0
- langflow/frontend/assets/music-4-C02EtyPP.js +6 -0
- langflow/frontend/assets/music-JFE7Sjcf.js +6 -0
- langflow/frontend/assets/navigation-2-BdKxOaeL.js +6 -0
- langflow/frontend/assets/navigation-2-off-DRqqqtsH.js +6 -0
- langflow/frontend/assets/navigation-BXXLD9fO.js +6 -0
- langflow/frontend/assets/navigation-off-BXq2L8Di.js +6 -0
- langflow/frontend/assets/network-B0vJejCu.js +6 -0
- langflow/frontend/assets/newspaper-DOjvrahU.js +6 -0
- langflow/frontend/assets/nfc-DjQCvvsE.js +6 -0
- langflow/frontend/assets/non-binary-D9LpkBPk.js +6 -0
- langflow/frontend/assets/notebook-DndOO5LI.js +6 -0
- langflow/frontend/assets/notebook-pen-BUm3h1SI.js +6 -0
- langflow/frontend/assets/notebook-tabs-K5Tr_Osa.js +6 -0
- langflow/frontend/assets/notebook-text-eJKgVHF9.js +6 -0
- langflow/frontend/assets/notepad-text-DdGjs0YI.js +6 -0
- langflow/frontend/assets/notepad-text-dashed-CAnbEisZ.js +6 -0
- langflow/frontend/assets/nut-B_EAyVRW.js +6 -0
- langflow/frontend/assets/nut-off-Dj7aFgNZ.js +6 -0
- langflow/frontend/assets/octagon-BkhRt-4I.js +6 -0
- langflow/frontend/assets/octagon-alert-CqRFnA7H.js +6 -0
- langflow/frontend/assets/octagon-minus-DLVOuzms.js +6 -0
- langflow/frontend/assets/octagon-pause-js4QzBZA.js +6 -0
- langflow/frontend/assets/octagon-x-Dk9a4j2g.js +6 -0
- langflow/frontend/assets/omega-mYamy5wP.js +6 -0
- langflow/frontend/assets/option-CUYRIOMu.js +6 -0
- langflow/frontend/assets/orbit-CKv-3NP9.js +6 -0
- langflow/frontend/assets/origami-Db03P-HH.js +6 -0
- langflow/frontend/assets/package-2-2Juwg_5K.js +6 -0
- langflow/frontend/assets/package-BRGSHC5m.js +6 -0
- langflow/frontend/assets/package-check-B2UvoBTd.js +6 -0
- langflow/frontend/assets/package-minus-eCu1HcH4.js +6 -0
- langflow/frontend/assets/package-open-D5apDq0b.js +6 -0
- langflow/frontend/assets/package-plus-DcmauE5Y.js +6 -0
- langflow/frontend/assets/package-search-DPrIAldx.js +6 -0
- langflow/frontend/assets/package-x-XPlCRqVg.js +6 -0
- langflow/frontend/assets/paint-bucket-Dtt7DipG.js +6 -0
- langflow/frontend/assets/paint-roller-D54hQ9EL.js +6 -0
- langflow/frontend/assets/paintbrush-D6DVlQY-.js +6 -0
- langflow/frontend/assets/paintbrush-vertical-Cvrh0dv8.js +6 -0
- langflow/frontend/assets/palette-DZjLqWEE.js +6 -0
- langflow/frontend/assets/panel-bottom-DKkfhNbE.js +6 -0
- langflow/frontend/assets/panel-bottom-close-Y9inZ-Lg.js +6 -0
- langflow/frontend/assets/panel-bottom-dashed-BkJIn8pA.js +6 -0
- langflow/frontend/assets/panel-bottom-open-q4f0GVbZ.js +6 -0
- langflow/frontend/assets/panel-left-close-BmtAQrKJ.js +6 -0
- langflow/frontend/assets/panel-left-dashed-ChlwFy74.js +6 -0
- langflow/frontend/assets/panel-left-open-XHXZVNWv.js +6 -0
- langflow/frontend/assets/panel-right-B_GO73R6.js +6 -0
- langflow/frontend/assets/panel-right-close-CjTH2SAn.js +6 -0
- langflow/frontend/assets/panel-right-dashed-L5Yp190t.js +6 -0
- langflow/frontend/assets/panel-right-open--iHtcOYZ.js +6 -0
- langflow/frontend/assets/panel-top-DOXfrMML.js +6 -0
- langflow/frontend/assets/panel-top-close-CfDHwCd3.js +6 -0
- langflow/frontend/assets/panel-top-dashed-CLOfFL5Y.js +6 -0
- langflow/frontend/assets/panel-top-open-C6x3bGks.js +6 -0
- langflow/frontend/assets/panels-left-bottom-DErJphT8.js +6 -0
- langflow/frontend/assets/panels-right-bottom-D81AMxRS.js +6 -0
- langflow/frontend/assets/panels-top-left-C2K8WXtA.js +6 -0
- langflow/frontend/assets/paperclip-DoulwVXo.js +6 -0
- langflow/frontend/assets/parentheses-D1sMSJok.js +6 -0
- langflow/frontend/assets/parking-meter-kicxVB57.js +6 -0
- langflow/frontend/assets/party-popper-DOehfOsh.js +6 -0
- langflow/frontend/assets/pause-DC3AS1_H.js +6 -0
- langflow/frontend/assets/paw-print-DjOLImjW.js +6 -0
- langflow/frontend/assets/pc-case-DQC3GYeR.js +6 -0
- langflow/frontend/assets/pen-DM7kR0Jw.js +6 -0
- langflow/frontend/assets/pen-line-Bsvdd4jV.js +6 -0
- langflow/frontend/assets/pen-off-CAEWPqXv.js +6 -0
- langflow/frontend/assets/pen-tool-BcVfRopU.js +6 -0
- langflow/frontend/assets/pencil-BlUEec4X.js +6 -0
- langflow/frontend/assets/pencil-line-L2QYrPj8.js +6 -0
- langflow/frontend/assets/pencil-off-CGzZM-T2.js +6 -0
- langflow/frontend/assets/pencil-ruler-B3oatjJU.js +6 -0
- langflow/frontend/assets/pentagon-BLB278_6.js +6 -0
- langflow/frontend/assets/percent-BDXmF2EC.js +6 -0
- langflow/frontend/assets/person-standing-Dzk1Z3_N.js +6 -0
- langflow/frontend/assets/philippine-peso-8pW6097O.js +6 -0
- langflow/frontend/assets/phone-BSB5gkXg.js +6 -0
- langflow/frontend/assets/phone-call-DaUk93Y4.js +6 -0
- langflow/frontend/assets/phone-forwarded-Dc7TrVMY.js +6 -0
- langflow/frontend/assets/phone-incoming-BDqjCVEn.js +6 -0
- langflow/frontend/assets/phone-missed-C6jXid_r.js +6 -0
- langflow/frontend/assets/phone-off-DX2bd0Rz.js +6 -0
- langflow/frontend/assets/phone-outgoing-CIBRSzlg.js +6 -0
- langflow/frontend/assets/pi-DFvu6Rvd.js +6 -0
- langflow/frontend/assets/piano-BrBrplYm.js +6 -0
- langflow/frontend/assets/pickaxe-C-_uD3S4.js +6 -0
- langflow/frontend/assets/picture-in-picture-2-CYPLZgIz.js +6 -0
- langflow/frontend/assets/picture-in-picture-CzJMCFL0.js +6 -0
- langflow/frontend/assets/piggy-bank-VrsksHBR.js +6 -0
- langflow/frontend/assets/pilcrow-CRVQVjXq.js +6 -0
- langflow/frontend/assets/pilcrow-left-Bw5MDtcD.js +6 -0
- langflow/frontend/assets/pilcrow-right-BSvYW3Bs.js +6 -0
- langflow/frontend/assets/pill-CCgZIZaU.js +6 -0
- langflow/frontend/assets/pill-bottle-Bz8L-myc.js +6 -0
- langflow/frontend/assets/pin-CpcZfyaQ.js +6 -0
- langflow/frontend/assets/pin-off-BWxMlSF9.js +6 -0
- langflow/frontend/assets/pipette-DIOU6U4M.js +6 -0
- langflow/frontend/assets/pizza-DPndoBkE.js +6 -0
- langflow/frontend/assets/plane-BjKU1SMi.js +6 -0
- langflow/frontend/assets/plane-landing-BwaoIaxM.js +6 -0
- langflow/frontend/assets/plane-takeoff-cJrbN5JR.js +6 -0
- langflow/frontend/assets/play-JWwcgO_a.js +6 -0
- langflow/frontend/assets/plug-2-BkULzhLG.js +6 -0
- langflow/frontend/assets/plug-EGvNpePB.js +6 -0
- langflow/frontend/assets/plug-zap-PocgL_HA.js +6 -0
- langflow/frontend/assets/pocket-B1PYQMj8.js +6 -0
- langflow/frontend/assets/pocket-knife-W8PnIhO8.js +6 -0
- langflow/frontend/assets/podcast-Bn9vBhTr.js +6 -0
- langflow/frontend/assets/pointer-ZXX5ydr8.js +6 -0
- langflow/frontend/assets/pointer-off-DGMoG6N9.js +6 -0
- langflow/frontend/assets/popcorn-CjKmsViy.js +6 -0
- langflow/frontend/assets/popsicle-CEJfaRsa.js +6 -0
- langflow/frontend/assets/pound-sterling-4pIuM8qN.js +6 -0
- langflow/frontend/assets/power-Ce_RpKLS.js +6 -0
- langflow/frontend/assets/power-off-BTk6a4jN.js +6 -0
- langflow/frontend/assets/presentation-zDaQAcCi.js +6 -0
- langflow/frontend/assets/printer-DiHhWOSl.js +6 -0
- langflow/frontend/assets/printer-check-DD2-75np.js +6 -0
- langflow/frontend/assets/projector-BPXyhKc4.js +6 -0
- langflow/frontend/assets/proportions-CMaVT9lx.js +6 -0
- langflow/frontend/assets/puzzle-Dt6QmOyl.js +6 -0
- langflow/frontend/assets/pyramid-Bv9KPys4.js +6 -0
- langflow/frontend/assets/qr-code-BQh4vsHb.js +6 -0
- langflow/frontend/assets/quote-BIyJsKFu.js +6 -0
- langflow/frontend/assets/rabbit-CwpQ58xh.js +6 -0
- langflow/frontend/assets/radar-BPXLopgw.js +6 -0
- langflow/frontend/assets/radiation-XiU5J_0y.js +6 -0
- langflow/frontend/assets/radical-DBsO9JOZ.js +6 -0
- langflow/frontend/assets/radio-8plMkBKD.js +6 -0
- langflow/frontend/assets/radio-receiver-DGCIRtlV.js +6 -0
- langflow/frontend/assets/radio-tower-D-K-Dq1j.js +6 -0
- langflow/frontend/assets/radius-BtxdGraC.js +6 -0
- langflow/frontend/assets/rail-symbol-2saYAXmw.js +6 -0
- langflow/frontend/assets/rainbow-D-vQhn_P.js +6 -0
- langflow/frontend/assets/rat-ksp-2Opn.js +6 -0
- langflow/frontend/assets/ratio-b2pIUzfC.js +6 -0
- langflow/frontend/assets/receipt-DnxW2sTC.js +6 -0
- langflow/frontend/assets/receipt-cent-DgTFiFsN.js +6 -0
- langflow/frontend/assets/receipt-euro-CroU75OQ.js +6 -0
- langflow/frontend/assets/receipt-indian-rupee-BelGNdhL.js +6 -0
- langflow/frontend/assets/receipt-japanese-yen-Dneos7wW.js +6 -0
- langflow/frontend/assets/receipt-pound-sterling-D9oMyPW3.js +6 -0
- langflow/frontend/assets/receipt-russian-ruble-BaAMI2z5.js +6 -0
- langflow/frontend/assets/receipt-swiss-franc-CApWMWoy.js +6 -0
- langflow/frontend/assets/receipt-text-DWaWoT63.js +6 -0
- langflow/frontend/assets/rectangle-ellipsis-Dy7FN8ah.js +6 -0
- langflow/frontend/assets/rectangle-goggles-BZVdtly_.js +6 -0
- langflow/frontend/assets/rectangle-horizontal-DhnV4Cu8.js +6 -0
- langflow/frontend/assets/rectangle-vertical-SWDCzzA3.js +6 -0
- langflow/frontend/assets/recycle-BXD3AUyp.js +6 -0
- langflow/frontend/assets/redo-2-W_Any8U_.js +6 -0
- langflow/frontend/assets/redo-BxyriiyO.js +6 -0
- langflow/frontend/assets/redo-dot-DXqHkWDY.js +6 -0
- langflow/frontend/assets/refresh-ccw-DDJPywZK.js +6 -0
- langflow/frontend/assets/refresh-ccw-dot-CaQZuaz7.js +6 -0
- langflow/frontend/assets/refresh-cw-off-BAgYS8rV.js +6 -0
- langflow/frontend/assets/refresh-cw-qPmtnxQM.js +6 -0
- langflow/frontend/assets/refrigerator-79QxWziD.js +6 -0
- langflow/frontend/assets/regex-DAMPVDJy.js +6 -0
- langflow/frontend/assets/remove-formatting-Bzr7ewLV.js +6 -0
- langflow/frontend/assets/repeat-1-CoOD4iUH.js +6 -0
- langflow/frontend/assets/repeat-2-go-DpP_V.js +6 -0
- langflow/frontend/assets/repeat-Cb229YM9.js +6 -0
- langflow/frontend/assets/replace-CEVfl2u6.js +6 -0
- langflow/frontend/assets/replace-all-DWkdmDKo.js +6 -0
- langflow/frontend/assets/reply-7f-PQSmd.js +6 -0
- langflow/frontend/assets/reply-all-REIVdVRK.js +6 -0
- langflow/frontend/assets/rewind-jMTQjdh4.js +6 -0
- langflow/frontend/assets/ribbon-DwOcydsj.js +6 -0
- langflow/frontend/assets/rocket-B3qiDK0E.js +6 -0
- langflow/frontend/assets/rocking-chair-DVFxjG7x.js +6 -0
- langflow/frontend/assets/roller-coaster-B_hAk2yh.js +6 -0
- langflow/frontend/assets/rotate-3d-CJDyYXfO.js +6 -0
- langflow/frontend/assets/rotate-ccw-DTYUML5q.js +6 -0
- langflow/frontend/assets/rotate-ccw-key-B6lAxVk3.js +6 -0
- langflow/frontend/assets/rotate-ccw-square-ZpzHg3BG.js +6 -0
- langflow/frontend/assets/rotate-cw--goANcZb.js +6 -0
- langflow/frontend/assets/rotate-cw-square-CQme4RDc.js +6 -0
- langflow/frontend/assets/route-U0PdlpK1.js +6 -0
- langflow/frontend/assets/route-off-Dmd6qmJr.js +6 -0
- langflow/frontend/assets/router-CqVHwsp4.js +6 -0
- langflow/frontend/assets/rows-2-DZd3r_d1.js +6 -0
- langflow/frontend/assets/rows-3-DlRhRNBS.js +6 -0
- langflow/frontend/assets/rows-4-Bnr3F5Ig.js +6 -0
- langflow/frontend/assets/rss-hfQ63sRl.js +6 -0
- langflow/frontend/assets/ruler-CNOWvm8e.js +6 -0
- langflow/frontend/assets/ruler-dimension-line-B-_7fa-e.js +6 -0
- langflow/frontend/assets/russian-ruble-CWj2DXGa.js +6 -0
- langflow/frontend/assets/sailboat-BN755CkX.js +6 -0
- langflow/frontend/assets/salad-B1FASsWL.js +6 -0
- langflow/frontend/assets/sandwich-B8Gbp6Uu.js +6 -0
- langflow/frontend/assets/satellite-DJ_-Qrkd.js +6 -0
- langflow/frontend/assets/satellite-dish-C5W00Cw4.js +6 -0
- langflow/frontend/assets/saudi-riyal-BaHsEeX2.js +6 -0
- langflow/frontend/assets/save-all-Cq-IUzX0.js +6 -0
- langflow/frontend/assets/save-off-BFUHSfZB.js +6 -0
- langflow/frontend/assets/save-rUXWuhsE.js +6 -0
- langflow/frontend/assets/scale-3d-DRHbTf94.js +6 -0
- langflow/frontend/assets/scale-Bwvd5eQq.js +6 -0
- langflow/frontend/assets/scaling-T7W3r6OS.js +6 -0
- langflow/frontend/assets/scan-BYcsyfUO.js +6 -0
- langflow/frontend/assets/scan-barcode-WDmK-SAE.js +6 -0
- langflow/frontend/assets/scan-eye-DvLqoQk9.js +6 -0
- langflow/frontend/assets/scan-face-ErJORfeD.js +6 -0
- langflow/frontend/assets/scan-heart-B17SEF1b.js +6 -0
- langflow/frontend/assets/scan-line-DJVPfHlj.js +6 -0
- langflow/frontend/assets/scan-qr-code-Dp5pDTe9.js +6 -0
- langflow/frontend/assets/scan-search-CyMMc6uG.js +6 -0
- langflow/frontend/assets/scan-text-BvfPVvZd.js +6 -0
- langflow/frontend/assets/school-6RZvHm3Y.js +6 -0
- langflow/frontend/assets/scissors-BnZH5FLV.js +6 -0
- langflow/frontend/assets/scissors-line-dashed-B8CnhLpp.js +6 -0
- langflow/frontend/assets/screen-share-B-IdJsWf.js +6 -0
- langflow/frontend/assets/screen-share-off-BcLgB-QY.js +6 -0
- langflow/frontend/assets/scroll-BAbvzFhw.js +6 -0
- langflow/frontend/assets/scroll-text-CTyVAGzP.js +6 -0
- langflow/frontend/assets/search-check-ZLjbC5QE.js +6 -0
- langflow/frontend/assets/search-code-Dz2bEMJ1.js +6 -0
- langflow/frontend/assets/search-slash-C0GPHmeV.js +6 -0
- langflow/frontend/assets/search-x-DSRVo8Q0.js +6 -0
- langflow/frontend/assets/section-BXtLLfVB.js +6 -0
- langflow/frontend/assets/send-horizontal-Bk0C5xTn.js +6 -0
- langflow/frontend/assets/send-to-back-DVDTCTmY.js +6 -0
- langflow/frontend/assets/send-y3xac-Z8.js +6 -0
- langflow/frontend/assets/separator-horizontal-DjhyGqlL.js +6 -0
- langflow/frontend/assets/separator-vertical-C8yHKi3A.js +6 -0
- langflow/frontend/assets/server-DLMBtLRi.js +6 -0
- langflow/frontend/assets/server-cog-C_acTz3o.js +6 -0
- langflow/frontend/assets/server-crash-DiB_eAS0.js +6 -0
- langflow/frontend/assets/server-off-Ce2m2PO8.js +6 -0
- langflow/frontend/assets/settings-2-BXS8p9yd.js +6 -0
- langflow/frontend/assets/settings-CECtcUku.js +6 -0
- langflow/frontend/assets/shapes-CyAdB2p1.js +6 -0
- langflow/frontend/assets/share-2-CkR2XJ4w.js +6 -0
- langflow/frontend/assets/share-aU1oQycm.js +6 -0
- langflow/frontend/assets/sheet-wd6yVF1G.js +6 -0
- langflow/frontend/assets/shell-BsVxCNun.js +6 -0
- langflow/frontend/assets/shield-BYup7Kta.js +6 -0
- langflow/frontend/assets/shield-alert-jWbvzd7t.js +6 -0
- langflow/frontend/assets/shield-ban-CMOWtw6F.js +6 -0
- langflow/frontend/assets/shield-check-CGQOVQ5t.js +6 -0
- langflow/frontend/assets/shield-ellipsis-BjZtu1ZK.js +6 -0
- langflow/frontend/assets/shield-half-hSgNZ-Dk.js +6 -0
- langflow/frontend/assets/shield-minus-vA1GzWXQ.js +6 -0
- langflow/frontend/assets/shield-off-BI1Unp0c.js +6 -0
- langflow/frontend/assets/shield-plus-jS3THPuG.js +6 -0
- langflow/frontend/assets/shield-question-CvfF4Pzd.js +6 -0
- langflow/frontend/assets/shield-user-BET3N5mT.js +6 -0
- langflow/frontend/assets/shield-x-COkQc8o5.js +6 -0
- langflow/frontend/assets/ship-CcNhSIdY.js +6 -0
- langflow/frontend/assets/ship-wheel-Bw6rSHjc.js +6 -0
- langflow/frontend/assets/shirt-C5JGmzKr.js +6 -0
- langflow/frontend/assets/shopping-bag-BQ76dBeS.js +6 -0
- langflow/frontend/assets/shopping-basket-Dblk_9d-.js +6 -0
- langflow/frontend/assets/shopping-cart-CZAlfqop.js +6 -0
- langflow/frontend/assets/shovel-CDBUKSze.js +6 -0
- langflow/frontend/assets/shower-head-CpzqDVGY.js +6 -0
- langflow/frontend/assets/shredder-JSFjoB_H.js +6 -0
- langflow/frontend/assets/shrimp-CFl1_DR9.js +6 -0
- langflow/frontend/assets/shrink-hfrXOzVx.js +6 -0
- langflow/frontend/assets/shrub-qz_D8MIN.js +6 -0
- langflow/frontend/assets/shuffle-B0RZ6qeq.js +6 -0
- langflow/frontend/assets/sigma-DgOloNah.js +6 -0
- langflow/frontend/assets/signal-MDPVUvhX.js +6 -0
- langflow/frontend/assets/signal-high-D1zK4rF8.js +6 -0
- langflow/frontend/assets/signal-low-Dua5YeAL.js +6 -0
- langflow/frontend/assets/signal-medium-BmB_4ag4.js +6 -0
- langflow/frontend/assets/signal-zero-D3JYrbLc.js +6 -0
- langflow/frontend/assets/signature-BfLVCz_j.js +6 -0
- langflow/frontend/assets/signpost-C9alkE0N.js +6 -0
- langflow/frontend/assets/signpost-big-CZqm-mwM.js +6 -0
- langflow/frontend/assets/siren-C5_yv4zf.js +6 -0
- langflow/frontend/assets/skip-back-CoBWwFvy.js +6 -0
- langflow/frontend/assets/skip-forward-BvNbx8_A.js +6 -0
- langflow/frontend/assets/skull-CoN9k39Z.js +6 -0
- langflow/frontend/assets/slack-DR-xhp_D.js +6 -0
- langflow/frontend/assets/slash-YOt-xLyu.js +6 -0
- langflow/frontend/assets/slice-CTm9mXYF.js +6 -0
- langflow/frontend/assets/sliders-horizontal-Bbllrlfg.js +6 -0
- langflow/frontend/assets/sliders-vertical-BqJXkXug.js +6 -0
- langflow/frontend/assets/smartphone-charging-qqe-f_oj.js +6 -0
- langflow/frontend/assets/smartphone-nfc-gg3LXEcw.js +6 -0
- langflow/frontend/assets/smartphone-pTpD7ZG6.js +6 -0
- langflow/frontend/assets/smile-C9kL5Bua.js +6 -0
- langflow/frontend/assets/smile-plus-btM6Cy_d.js +6 -0
- langflow/frontend/assets/snail-CGrap-4v.js +6 -0
- langflow/frontend/assets/snowflake-CVgE3j4c.js +6 -0
- langflow/frontend/assets/sofa-B9ORaq0V.js +6 -0
- langflow/frontend/assets/soup-9KCvJm6J.js +6 -0
- langflow/frontend/assets/space-CawtjWB3.js +6 -0
- langflow/frontend/assets/spade-W3RW53k8.js +6 -0
- langflow/frontend/assets/sparkle-C0YNDR10.js +6 -0
- langflow/frontend/assets/sparkles-BAmY14PC.js +6 -0
- langflow/frontend/assets/speaker-CLczsiCK.js +6 -0
- langflow/frontend/assets/speech-LrPI1Bg8.js +6 -0
- langflow/frontend/assets/spell-check-2-vl6PmkgZ.js +6 -0
- langflow/frontend/assets/spell-check-B6_0sdGp.js +6 -0
- langflow/frontend/assets/spline-Cps3LTJ7.js +6 -0
- langflow/frontend/assets/spline-pointer-CgACMmpv.js +6 -0
- langflow/frontend/assets/split-Du8iRMG7.js +6 -0
- langflow/frontend/assets/spray-can-CRoAiiwu.js +6 -0
- langflow/frontend/assets/sprout-CMvJ56QM.js +6 -0
- langflow/frontend/assets/square-CkroTjSQ.js +6 -0
- langflow/frontend/assets/square-activity-CcOSYBrS.js +6 -0
- langflow/frontend/assets/square-arrow-down-BVdJOZEJ.js +6 -0
- langflow/frontend/assets/square-arrow-down-left-Cmzi6p1x.js +6 -0
- langflow/frontend/assets/square-arrow-down-right-CZLHVnQz.js +6 -0
- langflow/frontend/assets/square-arrow-left-DjVpjsrO.js +6 -0
- langflow/frontend/assets/square-arrow-out-down-left-wXj5IWRk.js +6 -0
- langflow/frontend/assets/square-arrow-out-down-right-CwtDp41D.js +6 -0
- langflow/frontend/assets/square-arrow-out-up-left-FRvjXB1a.js +6 -0
- langflow/frontend/assets/square-arrow-out-up-right-DlPfPEyw.js +6 -0
- langflow/frontend/assets/square-arrow-right-CXsKizML.js +6 -0
- langflow/frontend/assets/square-arrow-up-CEkTBxex.js +6 -0
- langflow/frontend/assets/square-arrow-up-left-BP02lXAS.js +6 -0
- langflow/frontend/assets/square-arrow-up-right-BmSDFkDr.js +6 -0
- langflow/frontend/assets/square-asterisk-hbwvBM2B.js +6 -0
- langflow/frontend/assets/square-bottom-dashed-scissors-DYKrJw1y.js +6 -0
- langflow/frontend/assets/square-chart-gantt-Vwnfo_Pn.js +6 -0
- langflow/frontend/assets/square-check-C04cs5ZB.js +6 -0
- langflow/frontend/assets/square-check-big-BF3AAHOB.js +6 -0
- langflow/frontend/assets/square-chevron-down-DmNdYA3q.js +6 -0
- langflow/frontend/assets/square-chevron-left-BtlOVCVY.js +6 -0
- langflow/frontend/assets/square-chevron-right-GIZBQEzx.js +6 -0
- langflow/frontend/assets/square-chevron-up-CQEO5ONV.js +6 -0
- langflow/frontend/assets/square-code-CD0gAgvN.js +6 -0
- langflow/frontend/assets/square-dashed-BDrI1c-R.js +6 -0
- langflow/frontend/assets/square-dashed-bottom-BJL9d4pa.js +6 -0
- langflow/frontend/assets/square-dashed-bottom-code-BeOBZkR0.js +6 -0
- langflow/frontend/assets/square-dashed-kanban-CErbmiES.js +6 -0
- langflow/frontend/assets/square-dashed-mouse-pointer-Zmi5agfp.js +6 -0
- langflow/frontend/assets/square-divide-B6A6zkw1.js +6 -0
- langflow/frontend/assets/square-dot-P6fcdHPf.js +6 -0
- langflow/frontend/assets/square-equal-WJbHP_t4.js +6 -0
- langflow/frontend/assets/square-function-CettiR3X.js +6 -0
- langflow/frontend/assets/square-kanban-BsXU8E_y.js +6 -0
- langflow/frontend/assets/square-library-BmQ3hTyB.js +6 -0
- langflow/frontend/assets/square-m-DwfZ-vok.js +6 -0
- langflow/frontend/assets/square-menu-Dpthf6jm.js +6 -0
- langflow/frontend/assets/square-minus-Tj5ClIqx.js +6 -0
- langflow/frontend/assets/square-mouse-pointer-mr8timW7.js +6 -0
- langflow/frontend/assets/square-parking-Bk9SzHc8.js +6 -0
- langflow/frontend/assets/square-parking-off-IrrpobT0.js +6 -0
- langflow/frontend/assets/square-pen-KiRrTvtS.js +6 -0
- langflow/frontend/assets/square-percent-C8aOSpg0.js +6 -0
- langflow/frontend/assets/square-pi-DgKhv0At.js +6 -0
- langflow/frontend/assets/square-pilcrow-COH3OK9n.js +6 -0
- langflow/frontend/assets/square-play-CAUGl-72.js +6 -0
- langflow/frontend/assets/square-plus-CRlzaeG6.js +6 -0
- langflow/frontend/assets/square-power-BUV-DpO9.js +6 -0
- langflow/frontend/assets/square-radical-mDbhE1Jp.js +6 -0
- langflow/frontend/assets/square-round-corner-D8ikBzW8.js +6 -0
- langflow/frontend/assets/square-scissors-sOPUwUTq.js +6 -0
- langflow/frontend/assets/square-sigma-pZR7i2en.js +6 -0
- langflow/frontend/assets/square-slash-CecdJ-2g.js +6 -0
- langflow/frontend/assets/square-split-horizontal-Cn1YMMw-.js +6 -0
- langflow/frontend/assets/square-split-vertical-C3Z8n5KC.js +6 -0
- langflow/frontend/assets/square-square-CiXxR3Ie.js +6 -0
- langflow/frontend/assets/square-stack-B2uKFYXm.js +6 -0
- langflow/frontend/assets/square-terminal-DE1v-WES.js +6 -0
- langflow/frontend/assets/square-user-CdQ5nItk.js +6 -0
- langflow/frontend/assets/square-user-round-BAGRGZ4p.js +6 -0
- langflow/frontend/assets/square-x-BI3Pn3yZ.js +6 -0
- langflow/frontend/assets/squares-exclude-CBt3NOOB.js +6 -0
- langflow/frontend/assets/squares-intersect-C1ol5eE2.js +6 -0
- langflow/frontend/assets/squares-subtract-CxQ-opYW.js +6 -0
- langflow/frontend/assets/squares-unite-bHbJjImE.js +6 -0
- langflow/frontend/assets/squircle-BKxd9XrI.js +6 -0
- langflow/frontend/assets/squirrel-BdGL91Qm.js +6 -0
- langflow/frontend/assets/stamp-BIQg-SUE.js +6 -0
- langflow/frontend/assets/star-Cpa4WlZd.js +6 -0
- langflow/frontend/assets/star-half-BnsiPaVT.js +6 -0
- langflow/frontend/assets/star-off-AO1QRqoS.js +6 -0
- langflow/frontend/assets/step-back-CcOvZiFD.js +6 -0
- langflow/frontend/assets/step-forward-C4x-q-G6.js +6 -0
- langflow/frontend/assets/stethoscope-CANnOOAi.js +6 -0
- langflow/frontend/assets/sticker-Q5M0hcLB.js +6 -0
- langflow/frontend/assets/sticky-note-C4QwXCe_.js +6 -0
- langflow/frontend/assets/store-CJCVnYZH.js +6 -0
- langflow/frontend/assets/stretch-horizontal-3ZhE2sCc.js +6 -0
- langflow/frontend/assets/stretch-vertical-mf41Xa4e.js +6 -0
- langflow/frontend/assets/strikethrough-yFT7jPwx.js +6 -0
- langflow/frontend/assets/subscript-VCxtxqO7.js +6 -0
- langflow/frontend/assets/sun-dim-4VSc0tI8.js +6 -0
- langflow/frontend/assets/sun-medium-CJ4xVMuF.js +6 -0
- langflow/frontend/assets/sun-moon-BO47Jkl4.js +6 -0
- langflow/frontend/assets/sun-rRloNURd.js +6 -0
- langflow/frontend/assets/sun-snow-BlSdUi7g.js +6 -0
- langflow/frontend/assets/sunrise-sO4wXyPP.js +6 -0
- langflow/frontend/assets/sunset-E9GFs51P.js +6 -0
- langflow/frontend/assets/superscript-BWmyCaUT.js +6 -0
- langflow/frontend/assets/swatch-book-BmWfAu49.js +6 -0
- langflow/frontend/assets/swiss-franc-hV1KP_fg.js +6 -0
- langflow/frontend/assets/switch-camera-BWkYvwXl.js +6 -0
- langflow/frontend/assets/sword-BDSHehSN.js +6 -0
- langflow/frontend/assets/swords-BRibwz0-.js +6 -0
- langflow/frontend/assets/syringe-C7_FV9Po.js +6 -0
- langflow/frontend/assets/table-2-CkYqc62r.js +6 -0
- langflow/frontend/assets/table-CASDU2H0.js +6 -0
- langflow/frontend/assets/table-cells-merge-DpXjO7d-.js +6 -0
- langflow/frontend/assets/table-cells-split-aydpayp8.js +6 -0
- langflow/frontend/assets/table-columns-split-B8VrYcuj.js +6 -0
- langflow/frontend/assets/table-of-contents-oGuU6U6i.js +6 -0
- langflow/frontend/assets/table-properties-DAgm8rqw.js +6 -0
- langflow/frontend/assets/table-rows-split-BFIJj2J8.js +6 -0
- langflow/frontend/assets/tablet-BliqtQBM.js +6 -0
- langflow/frontend/assets/tablet-smartphone-CE2tqU0B.js +6 -0
- langflow/frontend/assets/tablets-CswnoDNg.js +6 -0
- langflow/frontend/assets/tag-BerZ0133.js +6 -0
- langflow/frontend/assets/tags-DYlK_nbG.js +6 -0
- langflow/frontend/assets/tally-1-IN24qgmu.js +6 -0
- langflow/frontend/assets/tally-2-D02oV5rO.js +6 -0
- langflow/frontend/assets/tally-3-DYlGnbrA.js +6 -0
- langflow/frontend/assets/tally-4-D2KLKgKj.js +6 -0
- langflow/frontend/assets/tally-5-Cd0kRXrn.js +6 -0
- langflow/frontend/assets/tangent-G01MUkHP.js +6 -0
- langflow/frontend/assets/target-DbUvoffS.js +6 -0
- langflow/frontend/assets/telescope-KhvkA8ff.js +6 -0
- langflow/frontend/assets/tent-BgTD0ty8.js +6 -0
- langflow/frontend/assets/tent-tree-_R3-gT0M.js +6 -0
- langflow/frontend/assets/terminal-CqO1pA0S.js +6 -0
- langflow/frontend/assets/test-tube-Cosu5dmV.js +6 -0
- langflow/frontend/assets/test-tube-diagonal-BdAA9XeL.js +6 -0
- langflow/frontend/assets/test-tubes-Cd4n2GvV.js +6 -0
- langflow/frontend/assets/text-B0Xnj4ft.js +6 -0
- langflow/frontend/assets/text-cursor-Cy8p6TjV.js +6 -0
- langflow/frontend/assets/text-cursor-input-DgOo4wY8.js +6 -0
- langflow/frontend/assets/text-quote-C92ek5Lo.js +6 -0
- langflow/frontend/assets/text-search-Cy6e1fBt.js +6 -0
- langflow/frontend/assets/text-select-BdMHFJow.js +6 -0
- langflow/frontend/assets/theater-DK0cChU_.js +6 -0
- langflow/frontend/assets/thermometer-BcSnLB44.js +6 -0
- langflow/frontend/assets/thermometer-snowflake-BFFQB-J0.js +6 -0
- langflow/frontend/assets/thermometer-sun-By6M7z2S.js +6 -0
- langflow/frontend/assets/thumbs-down-DpArakqZ.js +6 -0
- langflow/frontend/assets/thumbs-up-OCTYaIsr.js +6 -0
- langflow/frontend/assets/ticket-DKk9KFsa.js +6 -0
- langflow/frontend/assets/ticket-check-CxlmH0TZ.js +6 -0
- langflow/frontend/assets/ticket-minus-yYNVgAXv.js +6 -0
- langflow/frontend/assets/ticket-percent-DTK_Eij8.js +6 -0
- langflow/frontend/assets/ticket-plus-DZH6kdc0.js +6 -0
- langflow/frontend/assets/ticket-slash-DaT9cJnH.js +6 -0
- langflow/frontend/assets/ticket-x-C91cugzp.js +6 -0
- langflow/frontend/assets/tickets-D8_swpjZ.js +6 -0
- langflow/frontend/assets/tickets-plane-Bs7N6tut.js +6 -0
- langflow/frontend/assets/timer-D1A5dgcp.js +6 -0
- langflow/frontend/assets/timer-off-Bnj53uqH.js +6 -0
- langflow/frontend/assets/timer-reset-CH2_6LXB.js +6 -0
- langflow/frontend/assets/toggle-left-Bms5HJPp.js +6 -0
- langflow/frontend/assets/toggle-right-Cm22-5tq.js +6 -0
- langflow/frontend/assets/toilet-B_EZH3rv.js +6 -0
- langflow/frontend/assets/tornado-DH7xrdf8.js +6 -0
- langflow/frontend/assets/torus-CeDcEzNl.js +6 -0
- langflow/frontend/assets/touchpad-BkFD1ONX.js +6 -0
- langflow/frontend/assets/touchpad-off-B0uLi6UN.js +6 -0
- langflow/frontend/assets/tower-control-vAS-GcnT.js +6 -0
- langflow/frontend/assets/toy-brick-Cp_hT2tX.js +6 -0
- langflow/frontend/assets/tractor-C6J-q888.js +6 -0
- langflow/frontend/assets/traffic-cone-Bf6tu1aR.js +6 -0
- langflow/frontend/assets/train-front-DFS_gdr7.js +6 -0
- langflow/frontend/assets/train-front-tunnel-B_B45p2C.js +6 -0
- langflow/frontend/assets/train-track-BYxDcy6T.js +6 -0
- langflow/frontend/assets/tram-front-mrGC7NJo.js +6 -0
- langflow/frontend/assets/transgender-imH1_ahf.js +6 -0
- langflow/frontend/assets/trash-CLIJ7hzA.js +6 -0
- langflow/frontend/assets/tree-deciduous-CcMF7uqB.js +6 -0
- langflow/frontend/assets/tree-palm-Cz7loG-5.js +6 -0
- langflow/frontend/assets/tree-pine-_KnmdDVv.js +6 -0
- langflow/frontend/assets/trees-DcMR2K_M.js +6 -0
- langflow/frontend/assets/trello-BNZfFWYi.js +6 -0
- langflow/frontend/assets/trending-down-BWrM4zQ0.js +6 -0
- langflow/frontend/assets/trending-up-BWgdc-K5.js +6 -0
- langflow/frontend/assets/trending-up-down-DQhSV3Za.js +6 -0
- langflow/frontend/assets/triangle-BQ6LFOFJ.js +6 -0
- langflow/frontend/assets/triangle-alert-BdJuJY-l.js +6 -0
- langflow/frontend/assets/triangle-dashed-Ch_AzxG9.js +6 -0
- langflow/frontend/assets/triangle-right-DqHR4ZXG.js +6 -0
- langflow/frontend/assets/trophy-eLjuXzFa.js +6 -0
- langflow/frontend/assets/truck-DXuqRqEe.js +6 -0
- langflow/frontend/assets/truck-electric-D3HyVQnU.js +6 -0
- langflow/frontend/assets/turtle-BuFnjN3h.js +6 -0
- langflow/frontend/assets/tv-BlUmv2d2.js +6 -0
- langflow/frontend/assets/tv-minimal-CpWoecoV.js +6 -0
- langflow/frontend/assets/tv-minimal-play-CPnVQl2f.js +6 -0
- langflow/frontend/assets/twitch-BkdmleL2.js +6 -0
- langflow/frontend/assets/twitter-05QHmZD0.js +6 -0
- langflow/frontend/assets/type-DNr3dfa5.js +6 -0
- langflow/frontend/assets/type-outline-CIrmdXWg.js +6 -0
- langflow/frontend/assets/umbrella-BdhvIGDz.js +6 -0
- langflow/frontend/assets/umbrella-off-BHSI8Bue.js +6 -0
- langflow/frontend/assets/underline-BslkaCEJ.js +6 -0
- langflow/frontend/assets/undo-2-BMx3oDcQ.js +6 -0
- langflow/frontend/assets/undo-CH0IX0A-.js +6 -0
- langflow/frontend/assets/undo-dot-B6yP9J8b.js +6 -0
- langflow/frontend/assets/unfold-horizontal-qqXqOLiN.js +6 -0
- langflow/frontend/assets/unfold-vertical-CLJkyOZ8.js +6 -0
- langflow/frontend/assets/ungroup--gpU_yyB.js +6 -0
- langflow/frontend/assets/university-DcMAR2QE.js +6 -0
- langflow/frontend/assets/unlink-2-DgHQM-Ol.js +6 -0
- langflow/frontend/assets/unlink-CFlKKKjg.js +6 -0
- langflow/frontend/assets/unplug-t7thfy3A.js +6 -0
- langflow/frontend/assets/upload-B47QANX4.js +6 -0
- langflow/frontend/assets/usb-Bao-9jlF.js +6 -0
- langflow/frontend/assets/use-post-add-user-DcUHAOql.js +1 -0
- langflow/frontend/assets/user-Drfvifu4.js +6 -0
- langflow/frontend/assets/user-check-Cl2Cugpa.js +6 -0
- langflow/frontend/assets/user-cog-yKYAgaSS.js +6 -0
- langflow/frontend/assets/user-lock-BspYeCuz.js +6 -0
- langflow/frontend/assets/user-minus-AkYkI7UT.js +6 -0
- langflow/frontend/assets/user-pen-nm0syYEm.js +6 -0
- langflow/frontend/assets/user-plus-ClieQhai.js +6 -0
- langflow/frontend/assets/user-round-DOm2Rvec.js +6 -0
- langflow/frontend/assets/user-round-check-CkC7KhO_.js +6 -0
- langflow/frontend/assets/user-round-cog-B40OFz4y.js +6 -0
- langflow/frontend/assets/user-round-minus-DzKXVvj5.js +6 -0
- langflow/frontend/assets/user-round-pen-B7Hx7T-z.js +6 -0
- langflow/frontend/assets/user-round-plus-gPUNVs5p.js +6 -0
- langflow/frontend/assets/user-round-search-BuCrN7rk.js +6 -0
- langflow/frontend/assets/user-round-x-Clw_HKFu.js +6 -0
- langflow/frontend/assets/user-search-7r9kPJdn.js +6 -0
- langflow/frontend/assets/user-x-D-08UDtO.js +6 -0
- langflow/frontend/assets/users-C4G9vyGr.js +6 -0
- langflow/frontend/assets/users-round-C3zj8mhR.js +6 -0
- langflow/frontend/assets/utensils-BVhMMIp4.js +6 -0
- langflow/frontend/assets/utensils-crossed-DwXOXddJ.js +6 -0
- langflow/frontend/assets/utility-pole-CPmMsN8O.js +6 -0
- langflow/frontend/assets/variable-ihOqLInK.js +6 -0
- langflow/frontend/assets/vault-BL-zlOyC.js +6 -0
- langflow/frontend/assets/vegan-HSv936HT.js +6 -0
- langflow/frontend/assets/venetian-mask-CPF9ez22.js +6 -0
- langflow/frontend/assets/venus-WD9kncdm.js +6 -0
- langflow/frontend/assets/venus-and-mars-DJuedjXD.js +6 -0
- langflow/frontend/assets/vibrate-BlIj-Jgh.js +6 -0
- langflow/frontend/assets/vibrate-off-Bs5X_4sP.js +6 -0
- langflow/frontend/assets/video-Cp1GFFC_.js +6 -0
- langflow/frontend/assets/video-off-BYJF_42a.js +6 -0
- langflow/frontend/assets/videotape-CuedGIlK.js +6 -0
- langflow/frontend/assets/view-uwAlPOmt.js +6 -0
- langflow/frontend/assets/voicemail-IRTIXCuv.js +6 -0
- langflow/frontend/assets/volleyball-Dm8hJeFi.js +6 -0
- langflow/frontend/assets/volume-1-B7dG7AaQ.js +6 -0
- langflow/frontend/assets/volume-1UMvsCQJ.js +6 -0
- langflow/frontend/assets/volume-2-Dbb7rUtl.js +6 -0
- langflow/frontend/assets/volume-off-kXe4C-Hg.js +6 -0
- langflow/frontend/assets/volume-x-Bd5C5IxT.js +6 -0
- langflow/frontend/assets/vote-CBtMBPq5.js +6 -0
- langflow/frontend/assets/wallet-D8Q8uawC.js +6 -0
- langflow/frontend/assets/wallet-cards-_GGB7vF_.js +6 -0
- langflow/frontend/assets/wallet-minimal-CucBi0Jd.js +6 -0
- langflow/frontend/assets/wallpaper-C_9hKf-n.js +6 -0
- langflow/frontend/assets/wand-DPL3CBte.js +6 -0
- langflow/frontend/assets/wand-sparkles-Cl_E8IQM.js +6 -0
- langflow/frontend/assets/warehouse-si5e0uad.js +6 -0
- langflow/frontend/assets/washing-machine-DAoYXz8S.js +6 -0
- langflow/frontend/assets/watch-vHRKFSRo.js +6 -0
- langflow/frontend/assets/waves-DIE8r4QU.js +6 -0
- langflow/frontend/assets/waves-ladder-DmCrSafi.js +6 -0
- langflow/frontend/assets/waypoints-BxAb3sb6.js +6 -0
- langflow/frontend/assets/webcam-DXKnwxjx.js +6 -0
- langflow/frontend/assets/webhook-DIcfjt0z.js +6 -0
- langflow/frontend/assets/webhook-off-Cizw6u19.js +6 -0
- langflow/frontend/assets/weight-C8waPDsY.js +6 -0
- langflow/frontend/assets/wheat-DjhsGbzN.js +6 -0
- langflow/frontend/assets/wheat-off-D159TbMR.js +6 -0
- langflow/frontend/assets/whole-word-BWpJx-dg.js +6 -0
- langflow/frontend/assets/wifi-Bvv6U9Hi.js +6 -0
- langflow/frontend/assets/wifi-high-Ct1ZekJ4.js +6 -0
- langflow/frontend/assets/wifi-low-BfylmAcn.js +6 -0
- langflow/frontend/assets/wifi-off-BD5Wk1pw.js +6 -0
- langflow/frontend/assets/wifi-pen-Bxkh4qXC.js +6 -0
- langflow/frontend/assets/wifi-zero-CqfrN4bl.js +6 -0
- langflow/frontend/assets/wind-D6hRFy66.js +6 -0
- langflow/frontend/assets/wind-arrow-down-DGVpj5j-.js +6 -0
- langflow/frontend/assets/wine-Dbt_7b9f.js +6 -0
- langflow/frontend/assets/wine-off-BuB0kkR9.js +6 -0
- langflow/frontend/assets/workflow-Cfb_GZf0.js +6 -0
- langflow/frontend/assets/worm-B7O5ml_A.js +6 -0
- langflow/frontend/assets/wrap-text-Pa-62zfV.js +6 -0
- langflow/frontend/assets/wrench-BIR5N1wl.js +6 -0
- langflow/frontend/assets/youtube-DvEYbar7.js +6 -0
- langflow/frontend/assets/zap-B7FF_DHv.js +6 -0
- langflow/frontend/assets/zap-off-ZtPxT6cL.js +6 -0
- langflow/frontend/assets/zoom-in-B0wOuivz.js +6 -0
- langflow/frontend/assets/zoom-out-DEmL9kzZ.js +6 -0
- langflow/frontend/index.html +1 -1
- langflow/initial_setup/setup.py +9 -1
- langflow/initial_setup/starter_projects/Document Q&A.json +2 -2
- langflow/initial_setup/starter_projects/Knowledge Ingestion.json +2 -2
- langflow/initial_setup/starter_projects/Knowledge Retrieval.json +2 -2
- langflow/initial_setup/starter_projects/Portfolio Website Code Generator.json +2 -2
- langflow/initial_setup/starter_projects/Research Translation Loop.json +341 -361
- langflow/initial_setup/starter_projects/Text Sentiment Analysis.json +2 -2
- langflow/initial_setup/starter_projects/Vector Store RAG.json +2 -2
- langflow_base_nightly-1.7.0.dev55.dist-info/METADATA +99 -0
- langflow_base_nightly-1.7.0.dev55.dist-info/RECORD +2283 -0
- langflow/frontend/assets/SlackIcon-Bbvro-sB.js +0 -1
- langflow/frontend/assets/Wikipedia-DZUGYJId.js +0 -1
- langflow/frontend/assets/Wolfram-dCsfR0oL.js +0 -1
- langflow/frontend/assets/a-arrow-down-CWD_aDNl.js +0 -6
- langflow/frontend/assets/a-arrow-up--yC24057.js +0 -6
- langflow/frontend/assets/a-large-small-BC295V7l.js +0 -6
- langflow/frontend/assets/accessibility-qbVOTMcQ.js +0 -6
- langflow/frontend/assets/activity-BF7EbBkZ.js +0 -6
- langflow/frontend/assets/air-vent-D68jLtkI.js +0 -6
- langflow/frontend/assets/airplay-BbZoNrZK.js +0 -6
- langflow/frontend/assets/alarm-clock-BOMxykJu.js +0 -6
- langflow/frontend/assets/alarm-clock-check-UNylamwH.js +0 -6
- langflow/frontend/assets/alarm-clock-minus-DN6gBzH3.js +0 -6
- langflow/frontend/assets/alarm-clock-off-BJxK52Js.js +0 -6
- langflow/frontend/assets/alarm-clock-plus-CUBfW__5.js +0 -6
- langflow/frontend/assets/alarm-smoke-hbneU5ko.js +0 -6
- langflow/frontend/assets/album-BddXGyBI.js +0 -6
- langflow/frontend/assets/align-center-6iRk-241.js +0 -6
- langflow/frontend/assets/align-center-horizontal-iTbwfu49.js +0 -6
- langflow/frontend/assets/align-center-vertical-BpcCgM6x.js +0 -6
- langflow/frontend/assets/align-end-horizontal-CVAB1D6J.js +0 -6
- langflow/frontend/assets/align-end-vertical-DoozwMPu.js +0 -6
- langflow/frontend/assets/align-horizontal-distribute-center-Ddp3YN_K.js +0 -6
- langflow/frontend/assets/align-horizontal-distribute-end-Dj3gjKiQ.js +0 -6
- langflow/frontend/assets/align-horizontal-distribute-start-Bd5h8l_3.js +0 -6
- langflow/frontend/assets/align-horizontal-justify-center-D9ONnoXi.js +0 -6
- langflow/frontend/assets/align-horizontal-justify-end-BtxBWlPB.js +0 -6
- langflow/frontend/assets/align-horizontal-justify-start-YPe2omZJ.js +0 -6
- langflow/frontend/assets/align-horizontal-space-around-BYwEbTRQ.js +0 -6
- langflow/frontend/assets/align-horizontal-space-between-RKoun0Kj.js +0 -6
- langflow/frontend/assets/align-justify-Dj3xa3OF.js +0 -6
- langflow/frontend/assets/align-left-C9AsO1xJ.js +0 -6
- langflow/frontend/assets/align-right-DYO47ZGI.js +0 -6
- langflow/frontend/assets/align-start-horizontal-D5tSpEUN.js +0 -6
- langflow/frontend/assets/align-start-vertical-D_xs9JS_.js +0 -6
- langflow/frontend/assets/align-vertical-distribute-center-CsIiB4Oo.js +0 -6
- langflow/frontend/assets/align-vertical-distribute-end-PRxCgr8J.js +0 -6
- langflow/frontend/assets/align-vertical-distribute-start-vyJzRLEk.js +0 -6
- langflow/frontend/assets/align-vertical-justify-center-Cw7esQKy.js +0 -6
- langflow/frontend/assets/align-vertical-justify-end-CMX6MUOP.js +0 -6
- langflow/frontend/assets/align-vertical-justify-start-BibyJSui.js +0 -6
- langflow/frontend/assets/align-vertical-space-around-rtkzGvrD.js +0 -6
- langflow/frontend/assets/align-vertical-space-between-DIex0QjT.js +0 -6
- langflow/frontend/assets/ambulance-CnNadGCw.js +0 -6
- langflow/frontend/assets/ampersand-CM_6LkPb.js +0 -6
- langflow/frontend/assets/ampersands-DkkBTd7P.js +0 -6
- langflow/frontend/assets/amphora-Dq5BmBaR.js +0 -6
- langflow/frontend/assets/anchor-Rb64MMbT.js +0 -6
- langflow/frontend/assets/angry-B3u1siJk.js +0 -6
- langflow/frontend/assets/annoyed-0VaQS5-T.js +0 -6
- langflow/frontend/assets/antenna-CSmTIFLU.js +0 -6
- langflow/frontend/assets/anvil-DamQHejs.js +0 -6
- langflow/frontend/assets/aperture-Bf0y9i2l.js +0 -6
- langflow/frontend/assets/app-window-CvLa-Ucn.js +0 -6
- langflow/frontend/assets/app-window-mac-D_YNJR9E.js +0 -6
- langflow/frontend/assets/apple-BjhxQzif.js +0 -6
- langflow/frontend/assets/archive-BOsQKiGC.js +0 -6
- langflow/frontend/assets/archive-restore-WqMEUJXP.js +0 -6
- langflow/frontend/assets/archive-x-BzIPxjU_.js +0 -6
- langflow/frontend/assets/armchair-C9AyWHMG.js +0 -6
- langflow/frontend/assets/arrow-big-down-Ds72VA29.js +0 -6
- langflow/frontend/assets/arrow-big-down-dash-sllLzSWu.js +0 -6
- langflow/frontend/assets/arrow-big-left-D-sgvsJb.js +0 -6
- langflow/frontend/assets/arrow-big-left-dash-DygfKtXm.js +0 -6
- langflow/frontend/assets/arrow-big-right-NfPHZSlY.js +0 -6
- langflow/frontend/assets/arrow-big-right-dash-Bw-QP7Pp.js +0 -6
- langflow/frontend/assets/arrow-big-up-B3JyeBd3.js +0 -6
- langflow/frontend/assets/arrow-big-up-dash-BsypMjej.js +0 -6
- langflow/frontend/assets/arrow-down-0-1-1qMtH3bF.js +0 -6
- langflow/frontend/assets/arrow-down-1-0-RS8ttrR1.js +0 -6
- langflow/frontend/assets/arrow-down-PPHpE-E9.js +0 -6
- langflow/frontend/assets/arrow-down-a-z-DsXIcyJp.js +0 -6
- langflow/frontend/assets/arrow-down-from-line-BR86bTSF.js +0 -6
- langflow/frontend/assets/arrow-down-left-B7-d-P1C.js +0 -6
- langflow/frontend/assets/arrow-down-narrow-wide-Bt0GXdYS.js +0 -6
- langflow/frontend/assets/arrow-down-right-BltSCwUA.js +0 -6
- langflow/frontend/assets/arrow-down-to-dot-Dko53G0D.js +0 -6
- langflow/frontend/assets/arrow-down-to-line-XMwvWBvA.js +0 -6
- langflow/frontend/assets/arrow-down-up-D6X54MrY.js +0 -6
- langflow/frontend/assets/arrow-down-wide-narrow-BYsuYpSl.js +0 -6
- langflow/frontend/assets/arrow-down-z-a-Ch0kiEPa.js +0 -6
- langflow/frontend/assets/arrow-left-CrHaS5du.js +0 -6
- langflow/frontend/assets/arrow-left-from-line-Opjg-Fjp.js +0 -6
- langflow/frontend/assets/arrow-left-right-B5dY-pCw.js +0 -6
- langflow/frontend/assets/arrow-left-to-line-CNexWsHP.js +0 -6
- langflow/frontend/assets/arrow-right-Dz01bm8Q.js +0 -6
- langflow/frontend/assets/arrow-right-from-line-BmGCqx4-.js +0 -6
- langflow/frontend/assets/arrow-right-left-C7UaSozF.js +0 -6
- langflow/frontend/assets/arrow-right-to-line-k4OU_BsF.js +0 -6
- langflow/frontend/assets/arrow-up-0-1-C_-EZpYc.js +0 -6
- langflow/frontend/assets/arrow-up-1-0-D_gzu4yf.js +0 -6
- langflow/frontend/assets/arrow-up-CCFP9mEm.js +0 -6
- langflow/frontend/assets/arrow-up-a-z-BSB1Xstl.js +0 -6
- langflow/frontend/assets/arrow-up-down-B_GBWugo.js +0 -6
- langflow/frontend/assets/arrow-up-from-dot-CtQ_VMnx.js +0 -6
- langflow/frontend/assets/arrow-up-from-line-BO2Ubp-K.js +0 -6
- langflow/frontend/assets/arrow-up-left-DxNStJX6.js +0 -6
- langflow/frontend/assets/arrow-up-narrow-wide-C9x4OxXT.js +0 -6
- langflow/frontend/assets/arrow-up-right-DLdHtkqy.js +0 -6
- langflow/frontend/assets/arrow-up-to-line-BXSqH_w1.js +0 -6
- langflow/frontend/assets/arrow-up-wide-narrow-D4OR4hDt.js +0 -6
- langflow/frontend/assets/arrow-up-z-a-BOeAqL89.js +0 -6
- langflow/frontend/assets/arrows-up-from-line-BctJi2_q.js +0 -6
- langflow/frontend/assets/asterisk-BbNBtKgM.js +0 -6
- langflow/frontend/assets/at-sign-qg4wB2an.js +0 -6
- langflow/frontend/assets/atom-DTCUcX_x.js +0 -6
- langflow/frontend/assets/audio-lines-CBXzAu9k.js +0 -6
- langflow/frontend/assets/audio-waveform-DARVVwjd.js +0 -6
- langflow/frontend/assets/award-CLm1Wf4T.js +0 -6
- langflow/frontend/assets/axe-BK6cJZbD.js +0 -6
- langflow/frontend/assets/axis-3d-BantQRAv.js +0 -6
- langflow/frontend/assets/baby-_u0WTccc.js +0 -6
- langflow/frontend/assets/backpack-Dpji9PLm.js +0 -6
- langflow/frontend/assets/badge-BUKSGQtm.js +0 -6
- langflow/frontend/assets/badge-alert-1bLrea8l.js +0 -6
- langflow/frontend/assets/badge-cent-ByrXgKx3.js +0 -6
- langflow/frontend/assets/badge-check-CiRH37Z4.js +0 -6
- langflow/frontend/assets/badge-dollar-sign-DXnU7uP6.js +0 -6
- langflow/frontend/assets/badge-euro-Qoz8a4m_.js +0 -6
- langflow/frontend/assets/badge-help-DkWIL-P-.js +0 -6
- langflow/frontend/assets/badge-indian-rupee-CINtal3E.js +0 -6
- langflow/frontend/assets/badge-info-hO7R4bQp.js +0 -6
- langflow/frontend/assets/badge-japanese-yen-B22XlKaS.js +0 -6
- langflow/frontend/assets/badge-minus-DiMUBfbA.js +0 -6
- langflow/frontend/assets/badge-percent-BarnhtJ1.js +0 -6
- langflow/frontend/assets/badge-plus-gyX4huee.js +0 -6
- langflow/frontend/assets/badge-pound-sterling-zZuxVn33.js +0 -6
- langflow/frontend/assets/badge-russian-ruble-C_bYsCYa.js +0 -6
- langflow/frontend/assets/badge-swiss-franc-KGFVH-uI.js +0 -6
- langflow/frontend/assets/badge-x-DBb5R0iy.js +0 -6
- langflow/frontend/assets/baggage-claim-CKdndBRx.js +0 -6
- langflow/frontend/assets/ban-DBu2ySE3.js +0 -6
- langflow/frontend/assets/banana-Bb71IxxO.js +0 -6
- langflow/frontend/assets/bandage-CQrJ7JYQ.js +0 -6
- langflow/frontend/assets/banknote-DNYcaoFk.js +0 -6
- langflow/frontend/assets/banknote-arrow-down-DOlnp8gD.js +0 -6
- langflow/frontend/assets/banknote-arrow-up-CsmDNjcr.js +0 -6
- langflow/frontend/assets/banknote-x-DKSTAp_3.js +0 -6
- langflow/frontend/assets/barcode-Dha6fZbx.js +0 -6
- langflow/frontend/assets/baseline-Dx302Fk5.js +0 -6
- langflow/frontend/assets/bath-Cj8bICk9.js +0 -6
- langflow/frontend/assets/battery-OHYaPNTQ.js +0 -6
- langflow/frontend/assets/battery-charging-YFD_83uY.js +0 -6
- langflow/frontend/assets/battery-full-D8USII5F.js +0 -6
- langflow/frontend/assets/battery-low-BbuvoBrx.js +0 -6
- langflow/frontend/assets/battery-medium-B-QmNUWs.js +0 -6
- langflow/frontend/assets/battery-plus-C2wlfQon.js +0 -6
- langflow/frontend/assets/battery-warning-BzBIeL3N.js +0 -6
- langflow/frontend/assets/beaker-CxKle9N8.js +0 -6
- langflow/frontend/assets/bean-DFeaww6B.js +0 -6
- langflow/frontend/assets/bean-off-D0ECkSA_.js +0 -6
- langflow/frontend/assets/bed-C77Pcr6g.js +0 -6
- langflow/frontend/assets/bed-double-F56D1rn4.js +0 -6
- langflow/frontend/assets/bed-single-CCtlzN7l.js +0 -6
- langflow/frontend/assets/beef-DqwKqyYr.js +0 -6
- langflow/frontend/assets/beer-Z3RUdy7D.js +0 -6
- langflow/frontend/assets/beer-off-7_oemLA5.js +0 -6
- langflow/frontend/assets/bell-Cho5ql4J.js +0 -6
- langflow/frontend/assets/bell-dot-BBGGjnse.js +0 -6
- langflow/frontend/assets/bell-electric-pihPyizf.js +0 -6
- langflow/frontend/assets/bell-minus-B-fuPJlD.js +0 -6
- langflow/frontend/assets/bell-off-C0dulBqq.js +0 -6
- langflow/frontend/assets/bell-plus-yOrxxWs7.js +0 -6
- langflow/frontend/assets/bell-ring-BRDeHxfG.js +0 -6
- langflow/frontend/assets/between-horizontal-end-3qKiLoiM.js +0 -6
- langflow/frontend/assets/between-horizontal-start-D1icuM_5.js +0 -6
- langflow/frontend/assets/between-vertical-end-CEJ8-i6H.js +0 -6
- langflow/frontend/assets/between-vertical-start-DabGGAPP.js +0 -6
- langflow/frontend/assets/biceps-flexed-qgYeomb0.js +0 -6
- langflow/frontend/assets/bike-BZ4cEhpH.js +0 -6
- langflow/frontend/assets/binary-8n4E1PHE.js +0 -6
- langflow/frontend/assets/binoculars-mLSNuv81.js +0 -6
- langflow/frontend/assets/biohazard-CH2ValFV.js +0 -6
- langflow/frontend/assets/bird-Cy9rDEHy.js +0 -6
- langflow/frontend/assets/bitcoin-BEubV91G.js +0 -6
- langflow/frontend/assets/blend-Bm0PgmAQ.js +0 -6
- langflow/frontend/assets/blinds-DknzSfwB.js +0 -6
- langflow/frontend/assets/blocks-TQrfvD9P.js +0 -6
- langflow/frontend/assets/bluetooth-DVpxT9Yu.js +0 -6
- langflow/frontend/assets/bluetooth-connected-DhH5vcgm.js +0 -6
- langflow/frontend/assets/bluetooth-off-Du72cibR.js +0 -6
- langflow/frontend/assets/bluetooth-searching-DI_R7OX_.js +0 -6
- langflow/frontend/assets/bold-DyBkJykK.js +0 -6
- langflow/frontend/assets/bolt-Vsfdl787.js +0 -6
- langflow/frontend/assets/bomb-DOFY5Wtz.js +0 -6
- langflow/frontend/assets/bone-vY1lRAvW.js +0 -6
- langflow/frontend/assets/book-a-5iEk-TrP.js +0 -6
- langflow/frontend/assets/book-audio-BgEe30Ha.js +0 -6
- langflow/frontend/assets/book-check-BJjamW6K.js +0 -6
- langflow/frontend/assets/book-copy-iZ8H6kRE.js +0 -6
- langflow/frontend/assets/book-dashed-CdFr0AHo.js +0 -6
- langflow/frontend/assets/book-down-ByKrNrjN.js +0 -6
- langflow/frontend/assets/book-headphones-Bi_XVTKJ.js +0 -6
- langflow/frontend/assets/book-heart-_gDbgMOW.js +0 -6
- langflow/frontend/assets/book-image-BkY4vc-K.js +0 -6
- langflow/frontend/assets/book-key-CYfel9HT.js +0 -6
- langflow/frontend/assets/book-lock-CflKj9FA.js +0 -6
- langflow/frontend/assets/book-marked-DCLWL4cc.js +0 -6
- langflow/frontend/assets/book-minus-Bo6-e42y.js +0 -6
- langflow/frontend/assets/book-open-CNuhkFHE.js +0 -6
- langflow/frontend/assets/book-open-check-CqIgnc7D.js +0 -6
- langflow/frontend/assets/book-open-text-DT-b5Kjn.js +0 -6
- langflow/frontend/assets/book-plus-JXYRt6GL.js +0 -6
- langflow/frontend/assets/book-text-BfSZntDY.js +0 -6
- langflow/frontend/assets/book-type-DuSVYLB9.js +0 -6
- langflow/frontend/assets/book-up-2-C91nlcbb.js +0 -6
- langflow/frontend/assets/book-up-BWsh8pfz.js +0 -6
- langflow/frontend/assets/book-user-BEVKkAVX.js +0 -6
- langflow/frontend/assets/book-x-B0XHOMyO.js +0 -6
- langflow/frontend/assets/book-zt5K2xfz.js +0 -6
- langflow/frontend/assets/bookmark-Cy_q5Mjj.js +0 -6
- langflow/frontend/assets/bookmark-check-DC300dlM.js +0 -6
- langflow/frontend/assets/bookmark-minus-B0vTJdRE.js +0 -6
- langflow/frontend/assets/bookmark-plus-DsP_Orvr.js +0 -6
- langflow/frontend/assets/bookmark-x-BFg7yrva.js +0 -6
- langflow/frontend/assets/boom-box-CH0OAyG1.js +0 -6
- langflow/frontend/assets/bot-DkJoQyfx.js +0 -6
- langflow/frontend/assets/bot-message-square-C-ULpQyM.js +0 -6
- langflow/frontend/assets/bot-off-D5J_pE0f.js +0 -6
- langflow/frontend/assets/bow-arrow-COWy_QYs.js +0 -6
- langflow/frontend/assets/box-CvDHMseu.js +0 -6
- langflow/frontend/assets/boxes-MWaOrNvB.js +0 -6
- langflow/frontend/assets/braces-C7GKwous.js +0 -6
- langflow/frontend/assets/brackets-m1AJy1Wj.js +0 -6
- langflow/frontend/assets/brain-C7RVyZp2.js +0 -6
- langflow/frontend/assets/brain-circuit-DdWcqmZX.js +0 -6
- langflow/frontend/assets/brain-cog-BzhUUc1n.js +0 -6
- langflow/frontend/assets/brick-wall-DWAhmgm7.js +0 -6
- langflow/frontend/assets/brick-wall-fire-u2tpSaWu.js +0 -6
- langflow/frontend/assets/briefcase-Dg0keRjX.js +0 -6
- langflow/frontend/assets/briefcase-business-PmjjSTsH.js +0 -6
- langflow/frontend/assets/briefcase-conveyor-belt-DK82_Fsu.js +0 -6
- langflow/frontend/assets/briefcase-medical-i1sOCJ1p.js +0 -6
- langflow/frontend/assets/bring-to-front-B4vX8R8c.js +0 -6
- langflow/frontend/assets/brush-D9UEyLbJ.js +0 -6
- langflow/frontend/assets/bubbles-D7tner57.js +0 -6
- langflow/frontend/assets/bug-6m3hyp57.js +0 -6
- langflow/frontend/assets/bug-off-DSu7jjBm.js +0 -6
- langflow/frontend/assets/bug-play-DPPoVVll.js +0 -6
- langflow/frontend/assets/building-2-BPfKqjxK.js +0 -6
- langflow/frontend/assets/building-BHTMqvjl.js +0 -6
- langflow/frontend/assets/bus-3Kmve2o8.js +0 -6
- langflow/frontend/assets/bus-front-CturjryB.js +0 -6
- langflow/frontend/assets/cable-DxRj6NCY.js +0 -6
- langflow/frontend/assets/cable-car-BWoZw8vy.js +0 -6
- langflow/frontend/assets/cake-BUSIE6uv.js +0 -6
- langflow/frontend/assets/cake-slice-Bhh-QsKi.js +0 -6
- langflow/frontend/assets/calculator-CX9E7lKD.js +0 -6
- langflow/frontend/assets/calendar-1-CtJXtE0M.js +0 -6
- langflow/frontend/assets/calendar-Z11KHwSt.js +0 -6
- langflow/frontend/assets/calendar-arrow-down-DvTC2PV8.js +0 -6
- langflow/frontend/assets/calendar-arrow-up-QbCNTxGt.js +0 -6
- langflow/frontend/assets/calendar-check-2-cA7Yk2Vg.js +0 -6
- langflow/frontend/assets/calendar-check-Dtk03Xen.js +0 -6
- langflow/frontend/assets/calendar-clock-ZLR3RLlS.js +0 -6
- langflow/frontend/assets/calendar-cog-B_9nynql.js +0 -6
- langflow/frontend/assets/calendar-days-FhdUUh7K.js +0 -6
- langflow/frontend/assets/calendar-fold-ug-QV_4P.js +0 -6
- langflow/frontend/assets/calendar-heart-CVVKdVAA.js +0 -6
- langflow/frontend/assets/calendar-minus-2-CG-KtHZT.js +0 -6
- langflow/frontend/assets/calendar-minus-CSPJMW6T.js +0 -6
- langflow/frontend/assets/calendar-off-DBRCKkk0.js +0 -6
- langflow/frontend/assets/calendar-plus-2-B8740xOK.js +0 -6
- langflow/frontend/assets/calendar-plus-CkiYy7TU.js +0 -6
- langflow/frontend/assets/calendar-range-BApQ8bi3.js +0 -6
- langflow/frontend/assets/calendar-search-BVPJdcjU.js +0 -6
- langflow/frontend/assets/calendar-sync-D8jNJBHs.js +0 -6
- langflow/frontend/assets/calendar-x-2-CVorhE3n.js +0 -6
- langflow/frontend/assets/calendar-x-CRv8AI2m.js +0 -6
- langflow/frontend/assets/camera-BUJgj493.js +0 -6
- langflow/frontend/assets/camera-off-DYGW8oDc.js +0 -6
- langflow/frontend/assets/candy-Bg-RE5cJ.js +0 -6
- langflow/frontend/assets/candy-cane-BzU4BZ11.js +0 -6
- langflow/frontend/assets/candy-off-CCZb2_P0.js +0 -6
- langflow/frontend/assets/cannabis-Ds8Tdo6_.js +0 -6
- langflow/frontend/assets/captions-BkZ0wR3d.js +0 -6
- langflow/frontend/assets/captions-off-BvGGIj5I.js +0 -6
- langflow/frontend/assets/car-DXXmedbI.js +0 -6
- langflow/frontend/assets/car-front-Deuz0bZG.js +0 -6
- langflow/frontend/assets/car-taxi-front-D0P9dOFO.js +0 -6
- langflow/frontend/assets/caravan-cey7Y6h7.js +0 -6
- langflow/frontend/assets/carrot-Wv1ZkRVU.js +0 -6
- langflow/frontend/assets/case-lower-Bo3obJIj.js +0 -6
- langflow/frontend/assets/case-sensitive-C3_DunSg.js +0 -6
- langflow/frontend/assets/case-upper-CQuWeMCG.js +0 -6
- langflow/frontend/assets/cassette-tape-DjWf6cOr.js +0 -6
- langflow/frontend/assets/cast-BKx4WRrn.js +0 -6
- langflow/frontend/assets/castle-DhUntYXe.js +0 -6
- langflow/frontend/assets/cat-Co2W1DEm.js +0 -6
- langflow/frontend/assets/cctv-BN2PKkuD.js +0 -6
- langflow/frontend/assets/chart-area-BjX8OoJt.js +0 -6
- langflow/frontend/assets/chart-bar-Bnv8ZUmB.js +0 -6
- langflow/frontend/assets/chart-bar-big-CGgLnrpg.js +0 -6
- langflow/frontend/assets/chart-bar-decreasing-Cej-bpiZ.js +0 -6
- langflow/frontend/assets/chart-bar-increasing-DMuJfFWS.js +0 -6
- langflow/frontend/assets/chart-bar-stacked-C5yJEwvP.js +0 -6
- langflow/frontend/assets/chart-candlestick-BFRMip8Z.js +0 -6
- langflow/frontend/assets/chart-column-C3cpR9N3.js +0 -6
- langflow/frontend/assets/chart-column-big-CfEx1YKe.js +0 -6
- langflow/frontend/assets/chart-column-decreasing-BF-BKpSK.js +0 -6
- langflow/frontend/assets/chart-column-increasing-BVOaQVFd.js +0 -6
- langflow/frontend/assets/chart-column-stacked-BYTLPBOa.js +0 -6
- langflow/frontend/assets/chart-gantt-CA_-tB0r.js +0 -6
- langflow/frontend/assets/chart-line-BWG3Ro49.js +0 -6
- langflow/frontend/assets/chart-network-Bt4a_975.js +0 -6
- langflow/frontend/assets/chart-no-axes-column-D2Pk8or4.js +0 -6
- langflow/frontend/assets/chart-no-axes-column-decreasing-DHO7lDfR.js +0 -6
- langflow/frontend/assets/chart-no-axes-column-increasing-DD4mi0Yg.js +0 -6
- langflow/frontend/assets/chart-no-axes-combined-DDkqOKxh.js +0 -6
- langflow/frontend/assets/chart-no-axes-gantt-Cbsi7FcC.js +0 -6
- langflow/frontend/assets/chart-pie-jeE6uejf.js +0 -6
- langflow/frontend/assets/chart-scatter-C5FjN8pU.js +0 -6
- langflow/frontend/assets/chart-spline-CV2ylRj5.js +0 -6
- langflow/frontend/assets/check-check-6uZ6IFRu.js +0 -6
- langflow/frontend/assets/chef-hat-D-FbsBC5.js +0 -6
- langflow/frontend/assets/cherry-Bk-rGQK1.js +0 -6
- langflow/frontend/assets/chevron-first-Bk46d7MH.js +0 -6
- langflow/frontend/assets/chevron-last-DxRRW0fN.js +0 -6
- langflow/frontend/assets/chevron-left-Slk4k7ge.js +0 -6
- langflow/frontend/assets/chevron-right-DpXfUPcl.js +0 -6
- langflow/frontend/assets/chevrons-down-BnWY0w_f.js +0 -6
- langflow/frontend/assets/chevrons-down-up-DNE45foV.js +0 -6
- langflow/frontend/assets/chevrons-left-NfN-P9za.js +0 -6
- langflow/frontend/assets/chevrons-left-right-ellipsis-BBclwuaI.js +0 -6
- langflow/frontend/assets/chevrons-left-right-woqxTd9u.js +0 -6
- langflow/frontend/assets/chevrons-right-CNlpMrAq.js +0 -6
- langflow/frontend/assets/chevrons-right-left-CbTmSmgw.js +0 -6
- langflow/frontend/assets/chevrons-up-Cs1dhXBu.js +0 -6
- langflow/frontend/assets/chrome-CaliE8tX.js +0 -6
- langflow/frontend/assets/church-BPyLX9M4.js +0 -6
- langflow/frontend/assets/cigarette-Ypva3nvl.js +0 -6
- langflow/frontend/assets/cigarette-off-CfygXWgK.js +0 -6
- langflow/frontend/assets/circle-alert-DXiQsdAx.js +0 -6
- langflow/frontend/assets/circle-arrow-down-Dt8X3SMQ.js +0 -6
- langflow/frontend/assets/circle-arrow-left-C0NWB4L3.js +0 -6
- langflow/frontend/assets/circle-arrow-out-down-left-D2BTMyIS.js +0 -6
- langflow/frontend/assets/circle-arrow-out-down-right-CBhkGLDX.js +0 -6
- langflow/frontend/assets/circle-arrow-out-up-left-BOTR-3x3.js +0 -6
- langflow/frontend/assets/circle-arrow-out-up-right-DzWe6f2q.js +0 -6
- langflow/frontend/assets/circle-arrow-right-MSFTh9lx.js +0 -6
- langflow/frontend/assets/circle-arrow-up-CdzDwb63.js +0 -6
- langflow/frontend/assets/circle-check-big-3yIUcUyL.js +0 -6
- langflow/frontend/assets/circle-check-upnDLbi_.js +0 -6
- langflow/frontend/assets/circle-chevron-down-D_s97fna.js +0 -6
- langflow/frontend/assets/circle-chevron-left-C3y2unB5.js +0 -6
- langflow/frontend/assets/circle-chevron-right-DymUj1Yi.js +0 -6
- langflow/frontend/assets/circle-chevron-up-DrSIGbGY.js +0 -6
- langflow/frontend/assets/circle-dashed-BnauYlYI.js +0 -6
- langflow/frontend/assets/circle-divide-CE3uZhd7.js +0 -6
- langflow/frontend/assets/circle-dollar-sign-CYKi9HlR.js +0 -6
- langflow/frontend/assets/circle-dot-CG-_5zz-.js +0 -6
- langflow/frontend/assets/circle-dot-dashed-BecGbdV9.js +0 -6
- langflow/frontend/assets/circle-ellipsis-B7miyUdM.js +0 -6
- langflow/frontend/assets/circle-equal-DLZ9WAq5.js +0 -6
- langflow/frontend/assets/circle-fading-arrow-up-Cy21TDng.js +0 -6
- langflow/frontend/assets/circle-fading-plus-BCJWQlSW.js +0 -6
- langflow/frontend/assets/circle-gauge-D381RvDS.js +0 -6
- langflow/frontend/assets/circle-help-S8JMppLe.js +0 -6
- langflow/frontend/assets/circle-minus-m6iS3bNH.js +0 -6
- langflow/frontend/assets/circle-off-Df1xyX_h.js +0 -6
- langflow/frontend/assets/circle-parking-off-BPH4apg4.js +0 -6
- langflow/frontend/assets/circle-parking-zZv6T4ln.js +0 -6
- langflow/frontend/assets/circle-pause-CNvkMF64.js +0 -6
- langflow/frontend/assets/circle-percent-ShaT7Eu9.js +0 -6
- langflow/frontend/assets/circle-play-DWEb_N84.js +0 -6
- langflow/frontend/assets/circle-plus-BGW5LP5J.js +0 -6
- langflow/frontend/assets/circle-power-BTbVU-MZ.js +0 -6
- langflow/frontend/assets/circle-slash-2-wkLoWT68.js +0 -6
- langflow/frontend/assets/circle-slash-CzzQ39kz.js +0 -6
- langflow/frontend/assets/circle-small-N5W955sz.js +0 -6
- langflow/frontend/assets/circle-stop-CXIUvxqi.js +0 -6
- langflow/frontend/assets/circle-user-CAID5Tjm.js +0 -6
- langflow/frontend/assets/circle-user-round-BCtjFam9.js +0 -6
- langflow/frontend/assets/circuit-board-CugtpD1c.js +0 -6
- langflow/frontend/assets/citrus-cbipVhfG.js +0 -6
- langflow/frontend/assets/clapperboard-BrSNYnEF.js +0 -6
- langflow/frontend/assets/clipboard-DmzQzIIP.js +0 -6
- langflow/frontend/assets/clipboard-check-CW_Ju_3T.js +0 -6
- langflow/frontend/assets/clipboard-copy-BbR_ddrL.js +0 -6
- langflow/frontend/assets/clipboard-list-D0rHd9wv.js +0 -6
- langflow/frontend/assets/clipboard-minus-CNNRY59b.js +0 -6
- langflow/frontend/assets/clipboard-paste-Cfd86iip.js +0 -6
- langflow/frontend/assets/clipboard-pen-DdbHlUbC.js +0 -6
- langflow/frontend/assets/clipboard-pen-line-R3n3MY-k.js +0 -6
- langflow/frontend/assets/clipboard-plus-BwdVHoHk.js +0 -6
- langflow/frontend/assets/clipboard-type-DTr3PNCy.js +0 -6
- langflow/frontend/assets/clipboard-x-BjkZX99o.js +0 -6
- langflow/frontend/assets/clock-1-DiyCoORz.js +0 -6
- langflow/frontend/assets/clock-10-Cu3njcb1.js +0 -6
- langflow/frontend/assets/clock-11-IhzgZZs_.js +0 -6
- langflow/frontend/assets/clock-12-CJGvtm3I.js +0 -6
- langflow/frontend/assets/clock-2-lMsNkmEq.js +0 -6
- langflow/frontend/assets/clock-3-DPiJ0jK_.js +0 -6
- langflow/frontend/assets/clock-4-Ry2ol709.js +0 -6
- langflow/frontend/assets/clock-5-CnE2DUz8.js +0 -6
- langflow/frontend/assets/clock-6-DOPTR4Yu.js +0 -6
- langflow/frontend/assets/clock-7-D7UqgZ96.js +0 -6
- langflow/frontend/assets/clock-8-BF_raUmL.js +0 -6
- langflow/frontend/assets/clock-9-BTXGP9hF.js +0 -6
- langflow/frontend/assets/clock-BYNDIZgo.js +0 -6
- langflow/frontend/assets/clock-alert-B4Mh1yOY.js +0 -6
- langflow/frontend/assets/clock-arrow-down-C0C0b7iB.js +0 -6
- langflow/frontend/assets/clock-arrow-up-5nODR2Vv.js +0 -6
- langflow/frontend/assets/clock-fading-DNGA8gd-.js +0 -6
- langflow/frontend/assets/cloud-BWbKvZqN.js +0 -6
- langflow/frontend/assets/cloud-alert-C_NkPC-7.js +0 -6
- langflow/frontend/assets/cloud-cog-B0XGktfA.js +0 -6
- langflow/frontend/assets/cloud-download-azWJ66Qx.js +0 -6
- langflow/frontend/assets/cloud-drizzle-mM4_IDiP.js +0 -6
- langflow/frontend/assets/cloud-fog-C2krb23s.js +0 -6
- langflow/frontend/assets/cloud-hail-TIhEepwT.js +0 -6
- langflow/frontend/assets/cloud-lightning-oDnyLRKK.js +0 -6
- langflow/frontend/assets/cloud-moon-CU05hDgQ.js +0 -6
- langflow/frontend/assets/cloud-moon-rain-XeNg5jLo.js +0 -6
- langflow/frontend/assets/cloud-off-wtLVRmRH.js +0 -6
- langflow/frontend/assets/cloud-rain-DlY5VNvP.js +0 -6
- langflow/frontend/assets/cloud-rain-wind-DxH_2Y4y.js +0 -6
- langflow/frontend/assets/cloud-snow-KjoqL_Bd.js +0 -6
- langflow/frontend/assets/cloud-sun-Cyy57f6k.js +0 -6
- langflow/frontend/assets/cloud-sun-rain-CSXlNm_0.js +0 -6
- langflow/frontend/assets/cloud-upload-6iTfsqo1.js +0 -6
- langflow/frontend/assets/cloudy-CQ-E5VCG.js +0 -6
- langflow/frontend/assets/clover-4qLxqNF4.js +0 -6
- langflow/frontend/assets/club-B4lPhEHY.js +0 -6
- langflow/frontend/assets/code-xml-BmuzvXIU.js +0 -6
- langflow/frontend/assets/codepen-CbqQ4yfx.js +0 -6
- langflow/frontend/assets/codesandbox-3f7mHd61.js +0 -6
- langflow/frontend/assets/coffee-BBu6fE5h.js +0 -6
- langflow/frontend/assets/cog-Hg0RC36K.js +0 -6
- langflow/frontend/assets/coins-ChWqGhsL.js +0 -6
- langflow/frontend/assets/columns-2-CEYh-mgR.js +0 -6
- langflow/frontend/assets/columns-3-BVA66aSr.js +0 -6
- langflow/frontend/assets/columns-3-cog-X7YHWHnu.js +0 -6
- langflow/frontend/assets/columns-4-vLJ-xvYm.js +0 -6
- langflow/frontend/assets/combine-BiIk0ewj.js +0 -6
- langflow/frontend/assets/command-Fo8hfGqC.js +0 -6
- langflow/frontend/assets/compass-fsgp6k5A.js +0 -6
- langflow/frontend/assets/component-CNjiBZKH.js +0 -6
- langflow/frontend/assets/computer-D-t1spY0.js +0 -6
- langflow/frontend/assets/concierge-bell-Bvq4a5E3.js +0 -6
- langflow/frontend/assets/cone-uj_WKPNW.js +0 -6
- langflow/frontend/assets/construction-rSp3c-Ku.js +0 -6
- langflow/frontend/assets/contact-CK2lA8fr.js +0 -6
- langflow/frontend/assets/contact-round-BU7fYjYd.js +0 -6
- langflow/frontend/assets/container-C03Muyim.js +0 -6
- langflow/frontend/assets/contrast-DMHxk_9Y.js +0 -6
- langflow/frontend/assets/cookie-uXHWMyAq.js +0 -6
- langflow/frontend/assets/cooking-pot-DBeI1lgd.js +0 -6
- langflow/frontend/assets/copy-BCC-vl0n.js +0 -6
- langflow/frontend/assets/copy-check-6YCz2Nt4.js +0 -6
- langflow/frontend/assets/copy-minus-CD9Y0mb6.js +0 -6
- langflow/frontend/assets/copy-plus-dyDSax-7.js +0 -6
- langflow/frontend/assets/copy-slash-DOCozP8h.js +0 -6
- langflow/frontend/assets/copy-x-CC1YUqyV.js +0 -6
- langflow/frontend/assets/copyleft-Dmdhhe-E.js +0 -6
- langflow/frontend/assets/copyright-7CvYnQSx.js +0 -6
- langflow/frontend/assets/corner-down-left-ClrEiCnw.js +0 -6
- langflow/frontend/assets/corner-down-right-CPOQJZPN.js +0 -6
- langflow/frontend/assets/corner-left-down-BDkrYpim.js +0 -6
- langflow/frontend/assets/corner-left-up-CCbBBbPa.js +0 -6
- langflow/frontend/assets/corner-right-down-lwMiAOvk.js +0 -6
- langflow/frontend/assets/corner-right-up-TvaPuShi.js +0 -6
- langflow/frontend/assets/corner-up-left-Blyjx_2o.js +0 -6
- langflow/frontend/assets/corner-up-right-D97D0h-n.js +0 -6
- langflow/frontend/assets/cpu-M9wlE6Jw.js +0 -6
- langflow/frontend/assets/creative-commons-DAmYfmKt.js +0 -6
- langflow/frontend/assets/credit-card-DMY5snx8.js +0 -6
- langflow/frontend/assets/croissant-DoU-HeMS.js +0 -6
- langflow/frontend/assets/crop-AKi-ph2c.js +0 -6
- langflow/frontend/assets/cross-yf6UJ-JE.js +0 -6
- langflow/frontend/assets/crosshair-Dj1kkGWU.js +0 -6
- langflow/frontend/assets/crown-BLk6B0mu.js +0 -6
- langflow/frontend/assets/cuboid-Bdp2BteV.js +0 -6
- langflow/frontend/assets/cup-soda-DzWtYCNR.js +0 -6
- langflow/frontend/assets/currency-CUdsCKNb.js +0 -6
- langflow/frontend/assets/cylinder-COxlDj9S.js +0 -6
- langflow/frontend/assets/dam-C0yMccB4.js +0 -6
- langflow/frontend/assets/database-CLmuy8jS.js +0 -6
- langflow/frontend/assets/database-backup-CkfFNKeo.js +0 -6
- langflow/frontend/assets/database-zap-d1i-oXS_.js +0 -6
- langflow/frontend/assets/decimals-arrow-left-B_rLn9fH.js +0 -6
- langflow/frontend/assets/decimals-arrow-right-BtxL9807.js +0 -6
- langflow/frontend/assets/delete-BSrMReXn.js +0 -6
- langflow/frontend/assets/dessert-rBmX4jhN.js +0 -6
- langflow/frontend/assets/diameter-DSCKun7M.js +0 -6
- langflow/frontend/assets/diamond-BX0hE3E2.js +0 -6
- langflow/frontend/assets/diamond-minus-OVFkhQ5e.js +0 -6
- langflow/frontend/assets/diamond-percent-C-UWwFtE.js +0 -6
- langflow/frontend/assets/diamond-plus-DXYW14ip.js +0 -6
- langflow/frontend/assets/dice-1-sJQsxgn6.js +0 -6
- langflow/frontend/assets/dice-2-IPdZoDA7.js +0 -6
- langflow/frontend/assets/dice-3-vge-ENmC.js +0 -6
- langflow/frontend/assets/dice-4-BlUu-cwK.js +0 -6
- langflow/frontend/assets/dice-5-B4h1rg6T.js +0 -6
- langflow/frontend/assets/dice-6-BPAmFH9j.js +0 -6
- langflow/frontend/assets/dices-DjLliiUj.js +0 -6
- langflow/frontend/assets/diff-BHQyJR-J.js +0 -6
- langflow/frontend/assets/disc-2-D3JzT4vl.js +0 -6
- langflow/frontend/assets/disc-3-kFMEHzEi.js +0 -6
- langflow/frontend/assets/disc-album-D5I6AdwL.js +0 -6
- langflow/frontend/assets/disc-jMWwyoGT.js +0 -6
- langflow/frontend/assets/divide-BHb4meOE.js +0 -6
- langflow/frontend/assets/dna-DKaaAGZ4.js +0 -6
- langflow/frontend/assets/dna-off-CXDNiIcw.js +0 -6
- langflow/frontend/assets/dock-cSaQPMep.js +0 -6
- langflow/frontend/assets/dog-BLV6Kswj.js +0 -6
- langflow/frontend/assets/dollar-sign-DIp6IqfV.js +0 -6
- langflow/frontend/assets/donut-CQfDXzkV.js +0 -6
- langflow/frontend/assets/door-closed-dEp75Rjn.js +0 -6
- langflow/frontend/assets/door-open-CX-JS1qH.js +0 -6
- langflow/frontend/assets/dot-d0T1ApTj.js +0 -6
- langflow/frontend/assets/download-Cs3P3A9H.js +0 -6
- langflow/frontend/assets/drafting-compass-B-nBXa0b.js +0 -6
- langflow/frontend/assets/drama-C2XcPChs.js +0 -6
- langflow/frontend/assets/dribbble-DcyFupxm.js +0 -6
- langflow/frontend/assets/drill-PDSs9QJV.js +0 -6
- langflow/frontend/assets/droplet-MngjfCZd.js +0 -6
- langflow/frontend/assets/droplet-off-DteXX1yq.js +0 -6
- langflow/frontend/assets/droplets-COH-i9MA.js +0 -6
- langflow/frontend/assets/drum-C65cj1Me.js +0 -6
- langflow/frontend/assets/drumstick-Bf0iayPF.js +0 -6
- langflow/frontend/assets/dumbbell-BzX6BRao.js +0 -6
- langflow/frontend/assets/ear-DCqqRjhE.js +0 -6
- langflow/frontend/assets/ear-off-CYykuquE.js +0 -6
- langflow/frontend/assets/earth-Hdmp1MSj.js +0 -6
- langflow/frontend/assets/earth-lock-_1R58cVp.js +0 -6
- langflow/frontend/assets/eclipse-CUV_ZREC.js +0 -6
- langflow/frontend/assets/egg-BfVebZKf.js +0 -6
- langflow/frontend/assets/egg-fried-BQGzJmGe.js +0 -6
- langflow/frontend/assets/egg-off-4zw-XT4R.js +0 -6
- langflow/frontend/assets/ellipsis-CyOnJQ74.js +0 -6
- langflow/frontend/assets/ellipsis-vertical-CIxrIMLw.js +0 -6
- langflow/frontend/assets/equal-DeUXtSz2.js +0 -6
- langflow/frontend/assets/equal-approximately-B_StEmsc.js +0 -6
- langflow/frontend/assets/equal-not-CcJZa9ta.js +0 -6
- langflow/frontend/assets/eraser-Cdwggvka.js +0 -6
- langflow/frontend/assets/ethernet-port-BHjoRm2F.js +0 -6
- langflow/frontend/assets/euro-Ca-w5PtQ.js +0 -6
- langflow/frontend/assets/expand-BctduW1r.js +0 -6
- langflow/frontend/assets/eye-DT5AXrd-.js +0 -6
- langflow/frontend/assets/eye-closed-R2q5aXwf.js +0 -6
- langflow/frontend/assets/eye-off-BrajBHwJ.js +0 -6
- langflow/frontend/assets/facebook-DxrjI4EK.js +0 -6
- langflow/frontend/assets/factory-DyrwCF-I.js +0 -6
- langflow/frontend/assets/fan-C8y0ljfG.js +0 -6
- langflow/frontend/assets/fast-forward-Ci26uobx.js +0 -6
- langflow/frontend/assets/feather-hMHm8vKt.js +0 -6
- langflow/frontend/assets/fence-DeMqSEQv.js +0 -6
- langflow/frontend/assets/ferris-wheel-oa4NykYW.js +0 -6
- langflow/frontend/assets/figma-2Mo32Qed.js +0 -6
- langflow/frontend/assets/file-Bv5hCI9F.js +0 -6
- langflow/frontend/assets/file-archive-VeoYay9e.js +0 -6
- langflow/frontend/assets/file-audio-2-MN9Xb2x-.js +0 -6
- langflow/frontend/assets/file-audio-B0EZuX5_.js +0 -6
- langflow/frontend/assets/file-axis-3d-CGgk1Q0w.js +0 -6
- langflow/frontend/assets/file-badge-2-DkeaJU1i.js +0 -6
- langflow/frontend/assets/file-badge-ZinDecmR.js +0 -6
- langflow/frontend/assets/file-box-DQzlbqIi.js +0 -6
- langflow/frontend/assets/file-chart-column-CuOex95B.js +0 -6
- langflow/frontend/assets/file-chart-column-increasing-Csrs0InK.js +0 -6
- langflow/frontend/assets/file-chart-line-Cl25SjNH.js +0 -6
- langflow/frontend/assets/file-chart-pie-BTZd6eS6.js +0 -6
- langflow/frontend/assets/file-check-2-DCt71lpZ.js +0 -6
- langflow/frontend/assets/file-check-3LPUHeMX.js +0 -6
- langflow/frontend/assets/file-clock-CwB7kN3j.js +0 -6
- langflow/frontend/assets/file-code-2-CEDH5HCh.js +0 -6
- langflow/frontend/assets/file-code-CYvVXM2c.js +0 -6
- langflow/frontend/assets/file-cog-B4AxlJtn.js +0 -6
- langflow/frontend/assets/file-diff-zaeNlgCX.js +0 -6
- langflow/frontend/assets/file-digit-CRb19Ttb.js +0 -6
- langflow/frontend/assets/file-down-CEgyoFOe.js +0 -6
- langflow/frontend/assets/file-heart-sGig246y.js +0 -6
- langflow/frontend/assets/file-image-CIkHnVRI.js +0 -6
- langflow/frontend/assets/file-input-BRVCu0MU.js +0 -6
- langflow/frontend/assets/file-json-2-CoOgF5I_.js +0 -6
- langflow/frontend/assets/file-json-CyHQgLTR.js +0 -6
- langflow/frontend/assets/file-key-0awWqR2e.js +0 -6
- langflow/frontend/assets/file-key-2-DXF0dOa7.js +0 -6
- langflow/frontend/assets/file-lock-2-DYiAJxc5.js +0 -6
- langflow/frontend/assets/file-lock-BlNRlGlC.js +0 -6
- langflow/frontend/assets/file-minus-2-BzqOMN5H.js +0 -6
- langflow/frontend/assets/file-minus-bRTFE36w.js +0 -6
- langflow/frontend/assets/file-music-hOEqsv78.js +0 -6
- langflow/frontend/assets/file-output-jMOWvnJ7.js +0 -6
- langflow/frontend/assets/file-pen-line-D0M4KF1g.js +0 -6
- langflow/frontend/assets/file-pen-tDg-AnJl.js +0 -6
- langflow/frontend/assets/file-plus-2-01pgCUK7.js +0 -6
- langflow/frontend/assets/file-plus-ChPBzxo0.js +0 -6
- langflow/frontend/assets/file-question-BD0vq1nC.js +0 -6
- langflow/frontend/assets/file-scan-mSv4F6oI.js +0 -6
- langflow/frontend/assets/file-search-2-Bu6BNXRn.js +0 -6
- langflow/frontend/assets/file-search-DNtdK9Ly.js +0 -6
- langflow/frontend/assets/file-sliders-DtEAA28w.js +0 -6
- langflow/frontend/assets/file-spreadsheet-CxC6ZcSB.js +0 -6
- langflow/frontend/assets/file-stack-CXzTfMnj.js +0 -6
- langflow/frontend/assets/file-symlink-CRM94wsH.js +0 -6
- langflow/frontend/assets/file-terminal-aw3CocJ5.js +0 -6
- langflow/frontend/assets/file-text-DRd2iM99.js +0 -6
- langflow/frontend/assets/file-type-2-0vaENle2.js +0 -6
- langflow/frontend/assets/file-type-DqROFN5M.js +0 -6
- langflow/frontend/assets/file-up-D9B18foX.js +0 -6
- langflow/frontend/assets/file-user-BN1m_kz5.js +0 -6
- langflow/frontend/assets/file-video-2-DzJEBxNy.js +0 -6
- langflow/frontend/assets/file-video-C4aTHvWg.js +0 -6
- langflow/frontend/assets/file-volume-2-HybMwO53.js +0 -6
- langflow/frontend/assets/file-volume-qDdeSO7l.js +0 -6
- langflow/frontend/assets/file-warning-CPgCHwLw.js +0 -6
- langflow/frontend/assets/file-x-2-DMu0abCF.js +0 -6
- langflow/frontend/assets/file-x-PwY4daM5.js +0 -6
- langflow/frontend/assets/files-cqVBfIDU.js +0 -6
- langflow/frontend/assets/film-Df8jBof9.js +0 -6
- langflow/frontend/assets/fingerprint-DAPl10-y.js +0 -6
- langflow/frontend/assets/fire-extinguisher-ohqpDeek.js +0 -6
- langflow/frontend/assets/fish-B8IJ-miI.js +0 -6
- langflow/frontend/assets/fish-off-DVGYKH_J.js +0 -6
- langflow/frontend/assets/fish-symbol-BthnBu2-.js +0 -6
- langflow/frontend/assets/flag-off-C54xctfG.js +0 -6
- langflow/frontend/assets/flag-triangle-left-DlFW_bN2.js +0 -6
- langflow/frontend/assets/flag-triangle-right-pUSzCt2s.js +0 -6
- langflow/frontend/assets/flag-yBTeCgVH.js +0 -6
- langflow/frontend/assets/flame-kindling-BmxeUy3k.js +0 -6
- langflow/frontend/assets/flame-pzMhyDdm.js +0 -6
- langflow/frontend/assets/flashlight-C7CRnYs2.js +0 -6
- langflow/frontend/assets/flashlight-off-BEYHna9E.js +0 -6
- langflow/frontend/assets/flask-conical-_iXws0Gx.js +0 -6
- langflow/frontend/assets/flask-conical-off-DTPXsdfE.js +0 -6
- langflow/frontend/assets/flask-round-DrORGqn1.js +0 -6
- langflow/frontend/assets/flip-horizontal-2-BBht0HZ5.js +0 -6
- langflow/frontend/assets/flip-horizontal-D3Trq5xN.js +0 -6
- langflow/frontend/assets/flip-vertical-2-BVmxEN-2.js +0 -6
- langflow/frontend/assets/flip-vertical-CWVvQ8-v.js +0 -6
- langflow/frontend/assets/flower-2-BKv6RaCu.js +0 -6
- langflow/frontend/assets/flower-Co3KKtqQ.js +0 -6
- langflow/frontend/assets/focus-DzHb4Vzf.js +0 -6
- langflow/frontend/assets/fold-horizontal-D4dZBAW6.js +0 -6
- langflow/frontend/assets/fold-vertical-CbQcEyur.js +0 -6
- langflow/frontend/assets/folder-CNwgy645.js +0 -6
- langflow/frontend/assets/folder-archive-CUzMV5md.js +0 -6
- langflow/frontend/assets/folder-check-DpHbQxG2.js +0 -6
- langflow/frontend/assets/folder-clock-CNPMUc18.js +0 -6
- langflow/frontend/assets/folder-closed-CnFe-R1Q.js +0 -6
- langflow/frontend/assets/folder-code-BCX6INwg.js +0 -6
- langflow/frontend/assets/folder-cog-C5I3NN5f.js +0 -6
- langflow/frontend/assets/folder-dot-BU0E6n4o.js +0 -6
- langflow/frontend/assets/folder-down-B2Hp8voQ.js +0 -6
- langflow/frontend/assets/folder-git-2-xXbPTx1O.js +0 -6
- langflow/frontend/assets/folder-git-Y0RY54uu.js +0 -6
- langflow/frontend/assets/folder-heart-C4zJ2qag.js +0 -6
- langflow/frontend/assets/folder-input-COSP4n7p.js +0 -6
- langflow/frontend/assets/folder-kanban-BR2ioLUI.js +0 -6
- langflow/frontend/assets/folder-key-BAnQ6yGW.js +0 -6
- langflow/frontend/assets/folder-lock-DpBr6Uq0.js +0 -6
- langflow/frontend/assets/folder-minus-xZDF3oZo.js +0 -6
- langflow/frontend/assets/folder-open-def-S6LF.js +0 -6
- langflow/frontend/assets/folder-open-dot-Cirnj8Hp.js +0 -6
- langflow/frontend/assets/folder-output-D53MQyX9.js +0 -6
- langflow/frontend/assets/folder-pen-BUk5tbYD.js +0 -6
- langflow/frontend/assets/folder-plus-DatOHUjs.js +0 -6
- langflow/frontend/assets/folder-root-CG8kV_E1.js +0 -6
- langflow/frontend/assets/folder-search-2-BpJVL7vT.js +0 -6
- langflow/frontend/assets/folder-search-BpcuvLGc.js +0 -6
- langflow/frontend/assets/folder-symlink-DoEL70pH.js +0 -6
- langflow/frontend/assets/folder-sync-CUMme2MC.js +0 -6
- langflow/frontend/assets/folder-tree-BcyqK4rJ.js +0 -6
- langflow/frontend/assets/folder-up-C4AsWElK.js +0 -6
- langflow/frontend/assets/folder-x-DSjnXE6j.js +0 -6
- langflow/frontend/assets/folders-0p-g7apR.js +0 -6
- langflow/frontend/assets/footprints-DJ_J0PzL.js +0 -6
- langflow/frontend/assets/forklift-CLoLDxIj.js +0 -6
- langflow/frontend/assets/forward-TCDEVHxY.js +0 -6
- langflow/frontend/assets/frame-Bl0X4ZVc.js +0 -6
- langflow/frontend/assets/framer-BexjtJM-.js +0 -6
- langflow/frontend/assets/frown-D_r4JSMc.js +0 -6
- langflow/frontend/assets/fuel-CBnFGDKZ.js +0 -6
- langflow/frontend/assets/fullscreen-D71Y1Xex.js +0 -6
- langflow/frontend/assets/funnel-CqiYJRlI.js +0 -6
- langflow/frontend/assets/funnel-plus-Dj2sEQ3U.js +0 -6
- langflow/frontend/assets/funnel-x-C871fWxu.js +0 -6
- langflow/frontend/assets/gallery-horizontal-BBEd7HJe.js +0 -6
- langflow/frontend/assets/gallery-horizontal-end-p3sDNPdX.js +0 -6
- langflow/frontend/assets/gallery-thumbnails-BEQUCSbx.js +0 -6
- langflow/frontend/assets/gallery-vertical-DB9I8K9r.js +0 -6
- langflow/frontend/assets/gallery-vertical-end-CysDG2g-.js +0 -6
- langflow/frontend/assets/gamepad-2-Cj2Lro77.js +0 -6
- langflow/frontend/assets/gamepad-DSX5zyZG.js +0 -6
- langflow/frontend/assets/gauge-fg6_Lbyq.js +0 -6
- langflow/frontend/assets/gavel-BuNbe3D4.js +0 -6
- langflow/frontend/assets/gem-CBftq56b.js +0 -6
- langflow/frontend/assets/ghost-DNPuDcl2.js +0 -6
- langflow/frontend/assets/gift-Bi8D2jLY.js +0 -6
- langflow/frontend/assets/git-branch-plus-CZqLMeJp.js +0 -6
- langflow/frontend/assets/git-branch-u8Gcfq90.js +0 -6
- langflow/frontend/assets/git-commit-horizontal-C_YvUbas.js +0 -6
- langflow/frontend/assets/git-commit-vertical-Z2oRw26u.js +0 -6
- langflow/frontend/assets/git-compare-C4RYy17P.js +0 -6
- langflow/frontend/assets/git-compare-arrows-DqQSR160.js +0 -6
- langflow/frontend/assets/git-fork-Bm_J9uO-.js +0 -6
- langflow/frontend/assets/git-graph-hHJEzOu-.js +0 -6
- langflow/frontend/assets/git-merge-D8EwW88H.js +0 -6
- langflow/frontend/assets/git-pull-request-B2iiOwRp.js +0 -6
- langflow/frontend/assets/git-pull-request-arrow-Dbw7VujC.js +0 -6
- langflow/frontend/assets/git-pull-request-closed-C9Fc-CVz.js +0 -6
- langflow/frontend/assets/git-pull-request-create-DV4wBr5N.js +0 -6
- langflow/frontend/assets/git-pull-request-create-arrow-C8l7LWHw.js +0 -6
- langflow/frontend/assets/git-pull-request-draft-2c1v2bWx.js +0 -6
- langflow/frontend/assets/github-CpsHIcar.js +0 -6
- langflow/frontend/assets/gitlab-Uayvd9xv.js +0 -6
- langflow/frontend/assets/glass-water-BjdMisSP.js +0 -6
- langflow/frontend/assets/glasses-Bop5B6i9.js +0 -6
- langflow/frontend/assets/globe-B3-Z9pFD.js +0 -6
- langflow/frontend/assets/globe-lock-DGRguCls.js +0 -6
- langflow/frontend/assets/goal-CODDKwD8.js +0 -6
- langflow/frontend/assets/grab-BUQDoY4h.js +0 -6
- langflow/frontend/assets/graduation-cap-CuGzuyda.js +0 -6
- langflow/frontend/assets/grape-BsJsF4zu.js +0 -6
- langflow/frontend/assets/grid-2x2-Dj_fLh5t.js +0 -6
- langflow/frontend/assets/grid-2x2-check-BiENnike.js +0 -6
- langflow/frontend/assets/grid-2x2-plus-CUAfEVbj.js +0 -6
- langflow/frontend/assets/grid-2x2-x-JBP_156W.js +0 -6
- langflow/frontend/assets/grid-3x3-BG6jOxlh.js +0 -6
- langflow/frontend/assets/grip-horizontal-BIDVke6r.js +0 -6
- langflow/frontend/assets/grip-s0bItoJs.js +0 -6
- langflow/frontend/assets/grip-vertical-lq8OLfKM.js +0 -6
- langflow/frontend/assets/group-BLnT9j_W.js +0 -6
- langflow/frontend/assets/guitar-DwyHSmtG.js +0 -6
- langflow/frontend/assets/ham-C43fHMbA.js +0 -6
- langflow/frontend/assets/hammer-BhG_hvAr.js +0 -6
- langflow/frontend/assets/hand-CFFtaq_i.js +0 -6
- langflow/frontend/assets/hand-coins-CtUe3b8W.js +0 -6
- langflow/frontend/assets/hand-heart-ChWMuab-.js +0 -6
- langflow/frontend/assets/hand-helping-a8Uk7Hx0.js +0 -6
- langflow/frontend/assets/hand-metal-BC7ETDKx.js +0 -6
- langflow/frontend/assets/hand-platter-DkqglzQz.js +0 -6
- langflow/frontend/assets/handshake-HRs03Dph.js +0 -6
- langflow/frontend/assets/hard-drive-download-BxfqqYc7.js +0 -6
- langflow/frontend/assets/hard-drive-gQ-_oRLV.js +0 -6
- langflow/frontend/assets/hard-drive-upload-Cbjg_s3P.js +0 -6
- langflow/frontend/assets/hard-hat-QkAG9wVl.js +0 -6
- langflow/frontend/assets/hash-CHBOarlW.js +0 -6
- langflow/frontend/assets/haze-C80TVpjs.js +0 -6
- langflow/frontend/assets/hdmi-port-BKkD_NHR.js +0 -6
- langflow/frontend/assets/heading-1-b3_TNzOx.js +0 -6
- langflow/frontend/assets/heading-2-BHKr9KCJ.js +0 -6
- langflow/frontend/assets/heading-3-D3yzm6jd.js +0 -6
- langflow/frontend/assets/heading-4-sHhtnjBW.js +0 -6
- langflow/frontend/assets/heading-5-D0mDD1rQ.js +0 -6
- langflow/frontend/assets/heading-6-C1aB6Rl7.js +0 -6
- langflow/frontend/assets/heading-B1cgkPPX.js +0 -6
- langflow/frontend/assets/headphone-off-DNFqOe6R.js +0 -6
- langflow/frontend/assets/headphones-Bj1O-0eX.js +0 -6
- langflow/frontend/assets/headset-BJHFPyPU.js +0 -6
- langflow/frontend/assets/heart-DGlxS00Z.js +0 -6
- langflow/frontend/assets/heart-crack-9mRcIGNv.js +0 -6
- langflow/frontend/assets/heart-handshake-B4Hi_Rb9.js +0 -6
- langflow/frontend/assets/heart-minus-g1HyH6MB.js +0 -6
- langflow/frontend/assets/heart-off-vQD5XciU.js +0 -6
- langflow/frontend/assets/heart-plus-CjRysdI5.js +0 -6
- langflow/frontend/assets/heart-pulse-BmIYeXsO.js +0 -6
- langflow/frontend/assets/heater-BFbyUnIy.js +0 -6
- langflow/frontend/assets/hexagon-DvnW5A2A.js +0 -6
- langflow/frontend/assets/highlighter-CzzRT02j.js +0 -6
- langflow/frontend/assets/history-4I4Pu9-m.js +0 -6
- langflow/frontend/assets/hop-C1pyI9Go.js +0 -6
- langflow/frontend/assets/hop-off-Aer50L_D.js +0 -6
- langflow/frontend/assets/hospital-CDBhHQB9.js +0 -6
- langflow/frontend/assets/hotel-CUYHyEqE.js +0 -6
- langflow/frontend/assets/hourglass-B5Bov1SY.js +0 -6
- langflow/frontend/assets/house-C695bXtL.js +0 -6
- langflow/frontend/assets/house-plug-DAYpe8-Z.js +0 -6
- langflow/frontend/assets/house-plus-C00z695P.js +0 -6
- langflow/frontend/assets/house-wifi-vCMisV36.js +0 -6
- langflow/frontend/assets/ice-cream-bowl-Cl8LJQxm.js +0 -6
- langflow/frontend/assets/ice-cream-cone-Dr8dGYC6.js +0 -6
- langflow/frontend/assets/id-card-IUBBvYYf.js +0 -6
- langflow/frontend/assets/image-down-BJwGzwKF.js +0 -6
- langflow/frontend/assets/image-minus-wIcjVWr7.js +0 -6
- langflow/frontend/assets/image-off-DwXImqrL.js +0 -6
- langflow/frontend/assets/image-play-DJB6bww3.js +0 -6
- langflow/frontend/assets/image-plus-DJyWsaha.js +0 -6
- langflow/frontend/assets/image-rJnpHW6S.js +0 -6
- langflow/frontend/assets/image-up-Wv1ylERU.js +0 -6
- langflow/frontend/assets/image-upscale-BI0oHwOH.js +0 -6
- langflow/frontend/assets/images-BW9Za7vR.js +0 -6
- langflow/frontend/assets/import-B8zp7DaS.js +0 -6
- langflow/frontend/assets/inbox-CdbFXoNb.js +0 -6
- langflow/frontend/assets/indent-decrease-BUho7_Bt.js +0 -6
- langflow/frontend/assets/indent-increase-BQLGmdvU.js +0 -6
- langflow/frontend/assets/index--ztIJV9M.js +0 -1
- langflow/frontend/assets/index-0anREjcA.js +0 -7
- langflow/frontend/assets/index-282O4mFx.js +0 -1
- langflow/frontend/assets/index-3W5P5j67.js +0 -1
- langflow/frontend/assets/index-5LB1VKKj.js +0 -1
- langflow/frontend/assets/index-5TyOGxwc.js +0 -1
- langflow/frontend/assets/index-61bLHef-.js +0 -1
- langflow/frontend/assets/index-AWWYbXca.js +0 -1
- langflow/frontend/assets/index-AzAaHeEe.js +0 -1
- langflow/frontend/assets/index-B-0fAqiS.js +0 -1
- langflow/frontend/assets/index-B-hGyfXO.js +0 -205
- langflow/frontend/assets/index-B0I3C83j.js +0 -1
- langflow/frontend/assets/index-B4UFzNcF.js +0 -1
- langflow/frontend/assets/index-B5ciUfMo.js +0 -21
- langflow/frontend/assets/index-B6_7YvIH.js +0 -1
- langflow/frontend/assets/index-B7UU1S0t.js +0 -399
- langflow/frontend/assets/index-B9VNblYb.js +0 -1
- langflow/frontend/assets/index-BCClrKFP.js +0 -1
- langflow/frontend/assets/index-BCJ6s00T.js +0 -1
- langflow/frontend/assets/index-BCXPMQVs.js +0 -1
- langflow/frontend/assets/index-BFchObYC.js +0 -1
- langflow/frontend/assets/index-BGmDG4W7.js +0 -1
- langflow/frontend/assets/index-BHDfXXlY.js +0 -1
- langflow/frontend/assets/index-BI7_7uZs.js +0 -1
- langflow/frontend/assets/index-BKd9_Gw2.js +0 -1
- langflow/frontend/assets/index-BNjuUVgh.js +0 -1
- langflow/frontend/assets/index-BOBR3sw8.js +0 -1
- langflow/frontend/assets/index-BOdbWP8K.js +0 -1
- langflow/frontend/assets/index-BQ1v7ON0.js +0 -1
- langflow/frontend/assets/index-BS12HGpf.js +0 -1
- langflow/frontend/assets/index-BScRA9vh.js +0 -1
- langflow/frontend/assets/index-BTltR91M.js +0 -1
- langflow/frontend/assets/index-BUvAx8xq.js +0 -1
- langflow/frontend/assets/index-BXd78V3I.js +0 -1
- langflow/frontend/assets/index-BY5dz5eH.js +0 -2
- langflow/frontend/assets/index-BYVcSMhh.js +0 -1
- langflow/frontend/assets/index-BajC4pxw.js +0 -1
- langflow/frontend/assets/index-Bd5ombdF.js +0 -1
- langflow/frontend/assets/index-Bd7ShLEW.js +0 -1
- langflow/frontend/assets/index-BeOXEgAr.js +0 -1
- langflow/frontend/assets/index-BfUpb5al.js +0 -1
- langflow/frontend/assets/index-BffoxKNW.js +0 -1
- langflow/frontend/assets/index-BgLeKjf5.js +0 -1
- langflow/frontend/assets/index-BiHylQZ5.js +0 -1
- langflow/frontend/assets/index-BikLXFS2.js +0 -1
- langflow/frontend/assets/index-Bl_woior.js +0 -1
- langflow/frontend/assets/index-BmuVuJjB.js +0 -1
- langflow/frontend/assets/index-Bow1sXIZ.js +0 -1
- langflow/frontend/assets/index-BpPG1wn4.js +0 -1
- langflow/frontend/assets/index-Bsan7_mi.js +0 -1
- langflow/frontend/assets/index-Bst2SlWl.js +0 -1
- langflow/frontend/assets/index-Bwra457x.js +0 -14
- langflow/frontend/assets/index-BxS9bj1l.js +0 -1
- langflow/frontend/assets/index-BxsQK_z_.js +0 -1
- langflow/frontend/assets/index-C0JpzCry.js +0 -1
- langflow/frontend/assets/index-C0wj2yeF.js +0 -127
- langflow/frontend/assets/index-C1UdHM-M.js +0 -1
- langflow/frontend/assets/index-C2IKGiBP.js +0 -1
- langflow/frontend/assets/index-C33GdCbH.js +0 -1
- langflow/frontend/assets/index-C4AMamXK.js +0 -1
- langflow/frontend/assets/index-C4hiC-EB.js +0 -1
- langflow/frontend/assets/index-C5aWTXot.js +0 -1
- langflow/frontend/assets/index-C5nCP99_.js +0 -1
- langflow/frontend/assets/index-C7Tm0aRx.js +0 -1
- langflow/frontend/assets/index-C9iaMUQG.js +0 -1
- langflow/frontend/assets/index-C9mIU6X6.js +0 -1
- langflow/frontend/assets/index-CAkTDLdJ.js +0 -1
- langflow/frontend/assets/index-CBnsnZcd.js +0 -281
- langflow/frontend/assets/index-CCTN9r7m.js +0 -1
- langflow/frontend/assets/index-CCok6CbH.js +0 -1
- langflow/frontend/assets/index-CDebD3NP.js +0 -1
- langflow/frontend/assets/index-CEBozX9z.js +0 -1
- langflow/frontend/assets/index-CFPMWdx0.js +0 -1
- langflow/frontend/assets/index-CH65PBRV.js +0 -1
- langflow/frontend/assets/index-CJaEJT-W.js +0 -1
- langflow/frontend/assets/index-CJtF_Keu.js +0 -381
- langflow/frontend/assets/index-CKTC9wSg.js +0 -1
- langflow/frontend/assets/index-CMYdT6T9.js +0 -1
- langflow/frontend/assets/index-COpB8jA4.js +0 -1
- langflow/frontend/assets/index-CQfS8GHw.js +0 -1
- langflow/frontend/assets/index-CQzYQlH3.js +0 -1
- langflow/frontend/assets/index-CRnWbRW1.js +0 -1
- langflow/frontend/assets/index-CU16OfHh.js +0 -1
- langflow/frontend/assets/index-CUmokk-U.js +0 -1
- langflow/frontend/assets/index-CVGW39ej.js +0 -1
- langflow/frontend/assets/index-CVTm5E_1.js +0 -1
- langflow/frontend/assets/index-CWSA2cPz.js +0 -185
- langflow/frontend/assets/index-CX6I7rl4.js +0 -1
- langflow/frontend/assets/index-CXiiB9dc.js +0 -1
- langflow/frontend/assets/index-CXxMfBmw.js +0 -1
- langflow/frontend/assets/index-CaMJJD0D.js +0 -1
- langflow/frontend/assets/index-CcT7HKQA.js +0 -1
- langflow/frontend/assets/index-Ce1IN5G-.js +0 -1
- langflow/frontend/assets/index-Cfx_DxUr.js +0 -1
- langflow/frontend/assets/index-CgvyXj3c.js +0 -1
- langflow/frontend/assets/index-CiMXwmbK.js +0 -1
- langflow/frontend/assets/index-CjnwTgd4.js +0 -1
- langflow/frontend/assets/index-Ckl3rgV-.js +0 -1
- langflow/frontend/assets/index-Cl5nSwO0.js +0 -1
- langflow/frontend/assets/index-Cl6BbrWb.js +0 -1
- langflow/frontend/assets/index-CljNmbZQ.js +0 -1
- langflow/frontend/assets/index-CnvDNTPI.js +0 -1
- langflow/frontend/assets/index-CqoGrgax.js +0 -1
- langflow/frontend/assets/index-Cs-FasLn.js +0 -1
- langflow/frontend/assets/index-CtVxPAvl.js +0 -1
- langflow/frontend/assets/index-Ctc4udTT.js +0 -1
- langflow/frontend/assets/index-CvDgdtlN.js +0 -1
- langflow/frontend/assets/index-Cwsx_1xd.js +0 -1
- langflow/frontend/assets/index-CydKY-nr.js +0 -1
- langflow/frontend/assets/index-CylX3q9k.js +0 -1
- langflow/frontend/assets/index-Cyn8xeUp.js +0 -1
- langflow/frontend/assets/index-Cz1fWJIG.js +0 -1
- langflow/frontend/assets/index-D3JGuBbS.js +0 -1
- langflow/frontend/assets/index-D4JXbLUZ.js +0 -1
- langflow/frontend/assets/index-D4zTVPWh.js +0 -1
- langflow/frontend/assets/index-D50L7gLX.js +0 -1
- langflow/frontend/assets/index-D6EIrPV7.js +0 -1
- langflow/frontend/assets/index-D8sa96z8.js +0 -7325
- langflow/frontend/assets/index-D9Lq7GBq.js +0 -1
- langflow/frontend/assets/index-DE2SmHHQ.js +0 -1
- langflow/frontend/assets/index-DE5YcmiW.js +0 -1
- langflow/frontend/assets/index-DEG-8VMe.js +0 -1
- langflow/frontend/assets/index-DEzwYcr1.js +0 -1
- langflow/frontend/assets/index-DFGcgG-x.js +0 -1
- langflow/frontend/assets/index-DNHb423a.js +0 -13
- langflow/frontend/assets/index-DR1JOcSY.js +0 -1
- langflow/frontend/assets/index-DWWflUe9.js +0 -1
- langflow/frontend/assets/index-DZIc9MtR.js +0 -1
- langflow/frontend/assets/index-D_hw6D8Y.js +0 -1
- langflow/frontend/assets/index-DbEbIR4a.js +0 -1
- langflow/frontend/assets/index-DbGbq6je.js +0 -1
- langflow/frontend/assets/index-DdRce37z.js +0 -1
- langflow/frontend/assets/index-Dgx_5cit.js +0 -495
- langflow/frontend/assets/index-Di401IOb.js +0 -1
- langflow/frontend/assets/index-Djr0sNWO.js +0 -1
- langflow/frontend/assets/index-Dko7DHrr.js +0 -1
- langflow/frontend/assets/index-DlDkgYZd.js +0 -1
- langflow/frontend/assets/index-DlKdhoTJ.js +0 -1
- langflow/frontend/assets/index-Dn5L3SZh.js +0 -1
- langflow/frontend/assets/index-DoeNL7DI.js +0 -108
- langflow/frontend/assets/index-DpAGKtxf.js +0 -1
- langflow/frontend/assets/index-Dt1MtbEg.js +0 -1
- langflow/frontend/assets/index-DuydUVGi.js +0 -1
- langflow/frontend/assets/index-DvJepHiw.js +0 -1
- langflow/frontend/assets/index-DvkPtzXD.js +0 -1
- langflow/frontend/assets/index-DxYHSRLX.js +0 -1
- langflow/frontend/assets/index-DzbnAh7w.js +0 -1
- langflow/frontend/assets/index-GjOZGp2t.js +0 -1
- langflow/frontend/assets/index-GpRDQizy.js +0 -1
- langflow/frontend/assets/index-I7p71N0x.js +0 -1
- langflow/frontend/assets/index-IcQ2S8hj.js +0 -1
- langflow/frontend/assets/index-JIr9Y8CJ.js +0 -1
- langflow/frontend/assets/index-L3dJERer.js +0 -1
- langflow/frontend/assets/index-M1JwXN7G.js +0 -1
- langflow/frontend/assets/index-MHlLhDce.js +0 -1
- langflow/frontend/assets/index-NADq_DuD.js +0 -1
- langflow/frontend/assets/index-NHzZ29bR.js +0 -1
- langflow/frontend/assets/index-PjMKaJEK.js +0 -767
- langflow/frontend/assets/index-TmBb8fl6.js +0 -1
- langflow/frontend/assets/index-U4XZ6YZy.js +0 -1
- langflow/frontend/assets/index-YB2bospP.js +0 -1
- langflow/frontend/assets/index-YrBr97Uy.js +0 -1
- langflow/frontend/assets/index-ZJDGeBNo.js +0 -1
- langflow/frontend/assets/index-b-gMinNY.js +0 -1
- langflow/frontend/assets/index-elfZV5CX.js +0 -1
- langflow/frontend/assets/index-hcYWdQ3S.js +0 -20
- langflow/frontend/assets/index-iSFgjgoK.js +0 -1
- langflow/frontend/assets/index-iTVBt6Nb.js +0 -1
- langflow/frontend/assets/index-ieaI4mbH.js +0 -1
- langflow/frontend/assets/index-kwoWnlUF.js +0 -1
- langflow/frontend/assets/index-pzkcEG5b.js +0 -1
- langflow/frontend/assets/index-qr4In3Y0.js +0 -1
- langflow/frontend/assets/index-rM-Os4M_.js +0 -1
- langflow/frontend/assets/index-rl_p9ByV.js +0 -1
- langflow/frontend/assets/index-ssZO0dxk.js +0 -1
- langflow/frontend/assets/index-tantPSbp.js +0 -1
- langflow/frontend/assets/index-tbHJsVyC.js +0 -1
- langflow/frontend/assets/index-tkMMaAAA.js +0 -1
- langflow/frontend/assets/index-vD_G9uBh.js +0 -1
- langflow/frontend/assets/index-vMZvmahD.js +0 -1
- langflow/frontend/assets/index-vO0POUFX.js +0 -1
- langflow/frontend/assets/index-vuJctGTM.js +0 -1
- langflow/frontend/assets/index-wSeVSJTE.js +0 -1
- langflow/frontend/assets/index-yj2_LR3I.js +0 -1
- langflow/frontend/assets/index-yxPLQ0tU.js +0 -1
- langflow/frontend/assets/indian-rupee-BxkOgKzs.js +0 -6
- langflow/frontend/assets/infinity-B9HwskGA.js +0 -6
- langflow/frontend/assets/info-DiJPGpNA.js +0 -6
- langflow/frontend/assets/inspection-panel-DVqoWXui.js +0 -6
- langflow/frontend/assets/instagram-BTV2TLGc.js +0 -6
- langflow/frontend/assets/italic-DNFCz_AD.js +0 -6
- langflow/frontend/assets/iteration-ccw-uUsSdvKE.js +0 -6
- langflow/frontend/assets/iteration-cw-Bo1fkVe3.js +0 -6
- langflow/frontend/assets/japanese-yen-CNYzx_aS.js +0 -6
- langflow/frontend/assets/joystick-LeIITkss.js +0 -6
- langflow/frontend/assets/kanban-BOhCjEuI.js +0 -6
- langflow/frontend/assets/key-DEKLmthN.js +0 -6
- langflow/frontend/assets/key-round-CPTdbEs4.js +0 -6
- langflow/frontend/assets/key-square-Cel-eyMn.js +0 -6
- langflow/frontend/assets/keyboard-B4gXZlsV.js +0 -6
- langflow/frontend/assets/keyboard-music-MifSR_Ck.js +0 -6
- langflow/frontend/assets/keyboard-off-YJ7Ta5ws.js +0 -6
- langflow/frontend/assets/lamp-ceiling-CeIowsLN.js +0 -6
- langflow/frontend/assets/lamp-desk-ByNmDtwD.js +0 -6
- langflow/frontend/assets/lamp-floor-B654f5jo.js +0 -6
- langflow/frontend/assets/lamp-g3Cyo2vz.js +0 -6
- langflow/frontend/assets/lamp-wall-down-jy11L5aD.js +0 -6
- langflow/frontend/assets/lamp-wall-up-CJzwaxvw.js +0 -6
- langflow/frontend/assets/land-plot-C1teYpAA.js +0 -6
- langflow/frontend/assets/landmark-CImqGCL4.js +0 -6
- langflow/frontend/assets/languages-BGo7_T6s.js +0 -6
- langflow/frontend/assets/laptop-Dw-IpTA1.js +0 -6
- langflow/frontend/assets/laptop-minimal-BwVcjfwe.js +0 -6
- langflow/frontend/assets/laptop-minimal-check-BGmv0weS.js +0 -6
- langflow/frontend/assets/lasso-BudLaUJR.js +0 -6
- langflow/frontend/assets/lasso-select-s8DI53V7.js +0 -6
- langflow/frontend/assets/laugh-RjinOXx-.js +0 -6
- langflow/frontend/assets/layers-2-BlUS5Cfu.js +0 -6
- langflow/frontend/assets/layers-CzhpTRNp.js +0 -6
- langflow/frontend/assets/layout-dashboard-BGhNag1N.js +0 -6
- langflow/frontend/assets/layout-grid-CcUOJx-_.js +0 -6
- langflow/frontend/assets/layout-list-DL33JyOO.js +0 -6
- langflow/frontend/assets/layout-panel-left-DVP-n8ZM.js +0 -6
- langflow/frontend/assets/layout-panel-top-C3-crFQu.js +0 -6
- langflow/frontend/assets/layout-template-C7Cb4bfO.js +0 -6
- langflow/frontend/assets/lazyIconImports-DkIkPdJT.js +0 -2
- langflow/frontend/assets/leaf-D19WWwMg.js +0 -6
- langflow/frontend/assets/leafy-green-DW-1w3WS.js +0 -6
- langflow/frontend/assets/lectern-BiyuAliZ.js +0 -6
- langflow/frontend/assets/letter-text-PeYk9GQI.js +0 -6
- langflow/frontend/assets/library-B8fMno2o.js +0 -6
- langflow/frontend/assets/library-big-CnO47pIH.js +0 -6
- langflow/frontend/assets/life-buoy-Z3p_pQAs.js +0 -6
- langflow/frontend/assets/ligature-DXcZouGU.js +0 -6
- langflow/frontend/assets/lightbulb-1H8Wxfqp.js +0 -6
- langflow/frontend/assets/lightbulb-off-sxjoZwJA.js +0 -6
- langflow/frontend/assets/link-2-D7NpQ7rE.js +0 -6
- langflow/frontend/assets/link-2-off-IgbfFzWo.js +0 -6
- langflow/frontend/assets/link-D3HLRVBg.js +0 -6
- langflow/frontend/assets/linkedin-9toetEIr.js +0 -6
- langflow/frontend/assets/list-CIXYmz7i.js +0 -6
- langflow/frontend/assets/list-check-CqmOL8Ry.js +0 -6
- langflow/frontend/assets/list-checks-BgUkCzNv.js +0 -6
- langflow/frontend/assets/list-collapse-Cy_-ezdt.js +0 -6
- langflow/frontend/assets/list-end-CHjJHsJd.js +0 -6
- langflow/frontend/assets/list-filter-Bprl3ki0.js +0 -6
- langflow/frontend/assets/list-filter-plus-DgIfmCS2.js +0 -6
- langflow/frontend/assets/list-minus-CtxeG-B-.js +0 -6
- langflow/frontend/assets/list-music-Datg_6m4.js +0 -6
- langflow/frontend/assets/list-ordered-CtwBqOVK.js +0 -6
- langflow/frontend/assets/list-plus-D3AphcKq.js +0 -6
- langflow/frontend/assets/list-restart-DlqRhRJR.js +0 -6
- langflow/frontend/assets/list-start-DHWj2OxB.js +0 -6
- langflow/frontend/assets/list-todo-XRjWqNXd.js +0 -6
- langflow/frontend/assets/list-tree-0FTRCTmA.js +0 -6
- langflow/frontend/assets/list-video-VQtXWdIv.js +0 -6
- langflow/frontend/assets/list-x-CA41cs3p.js +0 -6
- langflow/frontend/assets/loader-CEqYISHq.js +0 -6
- langflow/frontend/assets/loader-circle-VcMfKurt.js +0 -6
- langflow/frontend/assets/loader-pinwheel-Bfhr8Vso.js +0 -6
- langflow/frontend/assets/locate-C6XqZT_O.js +0 -6
- langflow/frontend/assets/locate-fixed-BAOo6jnw.js +0 -6
- langflow/frontend/assets/locate-off-B8_qVWrE.js +0 -6
- langflow/frontend/assets/location-edit-B7r2jWrD.js +0 -6
- langflow/frontend/assets/lock-CVJSn3b1.js +0 -6
- langflow/frontend/assets/lock-keyhole-DdHTdgEg.js +0 -6
- langflow/frontend/assets/lock-keyhole-open-BXT1NjM5.js +0 -6
- langflow/frontend/assets/lock-open-BUU-_Kcd.js +0 -6
- langflow/frontend/assets/log-in-BRQzzVK4.js +0 -6
- langflow/frontend/assets/log-out-CzQTNijp.js +0 -6
- langflow/frontend/assets/logs-BDc7n0kP.js +0 -6
- langflow/frontend/assets/lollipop-CrALX3Ed.js +0 -6
- langflow/frontend/assets/luggage-CLWbv5GC.js +0 -6
- langflow/frontend/assets/magnet-B7cwPhmB.js +0 -6
- langflow/frontend/assets/mail-D_2Nd958.js +0 -6
- langflow/frontend/assets/mail-check-D2MgFn_q.js +0 -6
- langflow/frontend/assets/mail-minus-uou_sSTc.js +0 -6
- langflow/frontend/assets/mail-open-DdTDpS0M.js +0 -6
- langflow/frontend/assets/mail-plus-CVgMsy9c.js +0 -6
- langflow/frontend/assets/mail-question-qqJb4igu.js +0 -6
- langflow/frontend/assets/mail-search-BKjGzFb6.js +0 -6
- langflow/frontend/assets/mail-warning-6ToFExdE.js +0 -6
- langflow/frontend/assets/mail-x-BQnNDjkJ.js +0 -6
- langflow/frontend/assets/mailbox-CsQxPeJ0.js +0 -6
- langflow/frontend/assets/mails-DtYBwMiS.js +0 -6
- langflow/frontend/assets/map-CWPlRiXM.js +0 -6
- langflow/frontend/assets/map-pin-CnKLwf1G.js +0 -6
- langflow/frontend/assets/map-pin-check-MHItS-b1.js +0 -6
- langflow/frontend/assets/map-pin-check-inside-CijZw62Z.js +0 -6
- langflow/frontend/assets/map-pin-house-DztscZyc.js +0 -6
- langflow/frontend/assets/map-pin-minus-CxjesMoz.js +0 -6
- langflow/frontend/assets/map-pin-minus-inside-CV3tC0Lx.js +0 -6
- langflow/frontend/assets/map-pin-off-D2bJX_wb.js +0 -6
- langflow/frontend/assets/map-pin-plus-PILz_4cq.js +0 -6
- langflow/frontend/assets/map-pin-plus-inside-cZyRsDSJ.js +0 -6
- langflow/frontend/assets/map-pin-x-BHTupevf.js +0 -6
- langflow/frontend/assets/map-pin-x-inside-DhdawDEr.js +0 -6
- langflow/frontend/assets/map-pinned-BolLHPBM.js +0 -6
- langflow/frontend/assets/map-plus-DODqgcHK.js +0 -6
- langflow/frontend/assets/mars-CLaEpEut.js +0 -6
- langflow/frontend/assets/mars-stroke-BSU61ibq.js +0 -6
- langflow/frontend/assets/martini-DQV5yH0B.js +0 -6
- langflow/frontend/assets/maximize-2-b8co_pqz.js +0 -6
- langflow/frontend/assets/maximize-Bo9s4q_r.js +0 -6
- langflow/frontend/assets/medal-DnqAUxGX.js +0 -6
- langflow/frontend/assets/megaphone-DX3A9J2N.js +0 -6
- langflow/frontend/assets/megaphone-off-BVGxM5N9.js +0 -6
- langflow/frontend/assets/meh-CorKa7kZ.js +0 -6
- langflow/frontend/assets/memory-stick-D_0iFBOa.js +0 -6
- langflow/frontend/assets/menu-_mfypsaj.js +0 -6
- langflow/frontend/assets/merge-DLd-f_3P.js +0 -6
- langflow/frontend/assets/message-circle-Ddk4Kqtf.js +0 -6
- langflow/frontend/assets/message-circle-code-BaRw-v8q.js +0 -6
- langflow/frontend/assets/message-circle-dashed-eUBwzGu8.js +0 -6
- langflow/frontend/assets/message-circle-heart-CKCEsgsk.js +0 -6
- langflow/frontend/assets/message-circle-more-BiMflHt2.js +0 -6
- langflow/frontend/assets/message-circle-off-DgT6RdiN.js +0 -6
- langflow/frontend/assets/message-circle-plus-CQxOjotW.js +0 -6
- langflow/frontend/assets/message-circle-question-DkraGtDK.js +0 -6
- langflow/frontend/assets/message-circle-reply-Dwu8VDOd.js +0 -6
- langflow/frontend/assets/message-circle-warning-DVgaKqhY.js +0 -6
- langflow/frontend/assets/message-circle-x--9RudnYl.js +0 -6
- langflow/frontend/assets/message-square-BI6tiphQ.js +0 -6
- langflow/frontend/assets/message-square-code-4gwli1QN.js +0 -6
- langflow/frontend/assets/message-square-dashed-sJB8fczZ.js +0 -6
- langflow/frontend/assets/message-square-diff-mp_rEAij.js +0 -6
- langflow/frontend/assets/message-square-dot-Ym2DfI78.js +0 -6
- langflow/frontend/assets/message-square-heart-Dm8I3gGe.js +0 -6
- langflow/frontend/assets/message-square-lock-B_-hfyKj.js +0 -6
- langflow/frontend/assets/message-square-more-C-NFsXid.js +0 -6
- langflow/frontend/assets/message-square-off-D1kd1Nkw.js +0 -6
- langflow/frontend/assets/message-square-plus-DwrqCJh3.js +0 -6
- langflow/frontend/assets/message-square-quote-516BouAY.js +0 -6
- langflow/frontend/assets/message-square-reply-3jAdKKAK.js +0 -6
- langflow/frontend/assets/message-square-share-BotFYw0b.js +0 -6
- langflow/frontend/assets/message-square-text-BGywCwMP.js +0 -6
- langflow/frontend/assets/message-square-warning-DFFKEkVI.js +0 -6
- langflow/frontend/assets/message-square-x-6Xddnbl0.js +0 -6
- langflow/frontend/assets/messages-square-CXftKWD2.js +0 -6
- langflow/frontend/assets/mic-off-DlCpYMYh.js +0 -6
- langflow/frontend/assets/mic-vocal-B_NXibDO.js +0 -6
- langflow/frontend/assets/mic-yOO_6GCd.js +0 -6
- langflow/frontend/assets/microchip-CcgxjQs4.js +0 -6
- langflow/frontend/assets/microscope-6W2_BRd2.js +0 -6
- langflow/frontend/assets/microwave-C5prptPq.js +0 -6
- langflow/frontend/assets/milestone-Cqn7hpSB.js +0 -6
- langflow/frontend/assets/milk-CSBfTiUV.js +0 -6
- langflow/frontend/assets/milk-off-BPdLIAGP.js +0 -6
- langflow/frontend/assets/minimize-2-Cn28AGav.js +0 -6
- langflow/frontend/assets/minimize-DGNUfl9Z.js +0 -6
- langflow/frontend/assets/monitor-Cn5hCmRo.js +0 -6
- langflow/frontend/assets/monitor-check-CQlgb2Fl.js +0 -6
- langflow/frontend/assets/monitor-cog-CBA7vUSc.js +0 -6
- langflow/frontend/assets/monitor-dot-CtNCbunT.js +0 -6
- langflow/frontend/assets/monitor-down-D84Qi-s1.js +0 -6
- langflow/frontend/assets/monitor-off-UbMvtFgF.js +0 -6
- langflow/frontend/assets/monitor-pause-uo_voczn.js +0 -6
- langflow/frontend/assets/monitor-play-Do9R5aP8.js +0 -6
- langflow/frontend/assets/monitor-smartphone-9IbZkmbi.js +0 -6
- langflow/frontend/assets/monitor-speaker-BriZ4h4z.js +0 -6
- langflow/frontend/assets/monitor-stop-aQ1wv8JJ.js +0 -6
- langflow/frontend/assets/monitor-up-Bik5dm2D.js +0 -6
- langflow/frontend/assets/monitor-x-d0CTIfoi.js +0 -6
- langflow/frontend/assets/moon-BTdZ9SZi.js +0 -6
- langflow/frontend/assets/moon-star-DKEILDPT.js +0 -6
- langflow/frontend/assets/mountain-D-zptWpJ.js +0 -6
- langflow/frontend/assets/mountain-snow-CS6Yii23.js +0 -6
- langflow/frontend/assets/mouse-C6y6ND15.js +0 -6
- langflow/frontend/assets/mouse-off-CBQ3Y0AZ.js +0 -6
- langflow/frontend/assets/mouse-pointer-2-zYNKeIqS.js +0 -6
- langflow/frontend/assets/mouse-pointer-DmF-NKAH.js +0 -6
- langflow/frontend/assets/mouse-pointer-ban-CGJW4yk1.js +0 -6
- langflow/frontend/assets/mouse-pointer-click-eTBE1OZA.js +0 -6
- langflow/frontend/assets/move-3d-DSLz3_RX.js +0 -6
- langflow/frontend/assets/move-Rg0vYi24.js +0 -6
- langflow/frontend/assets/move-diagonal-2-Bg9HVA5o.js +0 -6
- langflow/frontend/assets/move-diagonal-pPtOm5Y4.js +0 -6
- langflow/frontend/assets/move-down-CL1YwtzJ.js +0 -6
- langflow/frontend/assets/move-down-left-B7GK16-g.js +0 -6
- langflow/frontend/assets/move-down-right-CLwF7bVT.js +0 -6
- langflow/frontend/assets/move-horizontal-COmamvAm.js +0 -6
- langflow/frontend/assets/move-left-CwGYOTXO.js +0 -6
- langflow/frontend/assets/move-right-Dtdl4jws.js +0 -6
- langflow/frontend/assets/move-up-BR4jO8xX.js +0 -6
- langflow/frontend/assets/move-up-left-1uhaMWkM.js +0 -6
- langflow/frontend/assets/move-up-right-D_SKyqai.js +0 -6
- langflow/frontend/assets/move-vertical-BcbFp1S-.js +0 -6
- langflow/frontend/assets/music-2-DTQj2IZB.js +0 -6
- langflow/frontend/assets/music-3-BE01EOT5.js +0 -6
- langflow/frontend/assets/music-4-CkBM5f2w.js +0 -6
- langflow/frontend/assets/music-C_0ue1qD.js +0 -6
- langflow/frontend/assets/navigation-2-DvLBjjJ7.js +0 -6
- langflow/frontend/assets/navigation-2-off-B_KA4WVQ.js +0 -6
- langflow/frontend/assets/navigation-RUZ5HeWl.js +0 -6
- langflow/frontend/assets/navigation-off-OiG24V_Q.js +0 -6
- langflow/frontend/assets/network-gUm1yryq.js +0 -6
- langflow/frontend/assets/newspaper-BHydx-cu.js +0 -6
- langflow/frontend/assets/nfc-CtlZlwys.js +0 -6
- langflow/frontend/assets/non-binary-VkU_qEDI.js +0 -6
- langflow/frontend/assets/notebook-BgHozJ9z.js +0 -6
- langflow/frontend/assets/notebook-pen-CWKM-iHM.js +0 -6
- langflow/frontend/assets/notebook-tabs-BVVvGfUR.js +0 -6
- langflow/frontend/assets/notebook-text-GNrWI8PD.js +0 -6
- langflow/frontend/assets/notepad-text-DQB1aqNR.js +0 -6
- langflow/frontend/assets/notepad-text-dashed-DheVEEeF.js +0 -6
- langflow/frontend/assets/nut-DWKNo0TX.js +0 -6
- langflow/frontend/assets/nut-off-BKEzBXfl.js +0 -6
- langflow/frontend/assets/octagon-3J2rFwoI.js +0 -6
- langflow/frontend/assets/octagon-alert-CZUqdc_L.js +0 -6
- langflow/frontend/assets/octagon-minus-DkP2PmVm.js +0 -6
- langflow/frontend/assets/octagon-pause-DVgdY6NL.js +0 -6
- langflow/frontend/assets/octagon-x-D4YB51UQ.js +0 -6
- langflow/frontend/assets/omega-CUM8kEFE.js +0 -6
- langflow/frontend/assets/option-P-S7SEs9.js +0 -6
- langflow/frontend/assets/orbit-xIDLuf30.js +0 -6
- langflow/frontend/assets/origami-CILvD5yV.js +0 -6
- langflow/frontend/assets/package-2-BiFWmrFP.js +0 -6
- langflow/frontend/assets/package-BqrwS-Kk.js +0 -6
- langflow/frontend/assets/package-check-CUHdmRdy.js +0 -6
- langflow/frontend/assets/package-minus-7_6F2Az6.js +0 -6
- langflow/frontend/assets/package-open-DPEF1KTy.js +0 -6
- langflow/frontend/assets/package-plus-CCa_pcvo.js +0 -6
- langflow/frontend/assets/package-search-7ApygWXh.js +0 -6
- langflow/frontend/assets/package-x-DhzZVQm8.js +0 -6
- langflow/frontend/assets/paint-bucket-BoMatBRt.js +0 -6
- langflow/frontend/assets/paint-roller-nP57rLHo.js +0 -6
- langflow/frontend/assets/paintbrush-Dist-Jn6.js +0 -6
- langflow/frontend/assets/paintbrush-vertical-DKdsA7oo.js +0 -6
- langflow/frontend/assets/palette-k7RYAlqx.js +0 -6
- langflow/frontend/assets/panel-bottom-BsrTVY3V.js +0 -6
- langflow/frontend/assets/panel-bottom-close-OfZBysqw.js +0 -6
- langflow/frontend/assets/panel-bottom-dashed-C1D3Nv72.js +0 -6
- langflow/frontend/assets/panel-bottom-open-CZxVYPWU.js +0 -6
- langflow/frontend/assets/panel-left-close-DMF0mFK9.js +0 -6
- langflow/frontend/assets/panel-left-dashed-DOgtGNQ9.js +0 -6
- langflow/frontend/assets/panel-left-open-nSbp-jfD.js +0 -6
- langflow/frontend/assets/panel-right-Df9Zf2S5.js +0 -6
- langflow/frontend/assets/panel-right-close-DvH4zrnd.js +0 -6
- langflow/frontend/assets/panel-right-dashed-C1dJyum8.js +0 -6
- langflow/frontend/assets/panel-right-open-CydGjccC.js +0 -6
- langflow/frontend/assets/panel-top-Di7tAS3q.js +0 -6
- langflow/frontend/assets/panel-top-close-Cq1arnnm.js +0 -6
- langflow/frontend/assets/panel-top-dashed-XJweLVJt.js +0 -6
- langflow/frontend/assets/panel-top-open-IuVJWBYX.js +0 -6
- langflow/frontend/assets/panels-left-bottom-llWMpaTQ.js +0 -6
- langflow/frontend/assets/panels-right-bottom-Bsoth6ze.js +0 -6
- langflow/frontend/assets/panels-top-left-Bak6FS05.js +0 -6
- langflow/frontend/assets/paperclip-vY3v-TK-.js +0 -6
- langflow/frontend/assets/parentheses-BMz8cn2O.js +0 -6
- langflow/frontend/assets/parking-meter-DYuiNqqY.js +0 -6
- langflow/frontend/assets/party-popper-B3q_34D1.js +0 -6
- langflow/frontend/assets/pause-gZSx9bvy.js +0 -6
- langflow/frontend/assets/paw-print-NS6c8_CL.js +0 -6
- langflow/frontend/assets/pc-case-BrWvRiTb.js +0 -6
- langflow/frontend/assets/pen-FRvHQYAN.js +0 -6
- langflow/frontend/assets/pen-line-DxpgOdj3.js +0 -6
- langflow/frontend/assets/pen-off-Bg6X3HkN.js +0 -6
- langflow/frontend/assets/pen-tool-CIZYAkOP.js +0 -6
- langflow/frontend/assets/pencil-CWigPgah.js +0 -6
- langflow/frontend/assets/pencil-line-CmpHS907.js +0 -6
- langflow/frontend/assets/pencil-off-r6oAp4jJ.js +0 -6
- langflow/frontend/assets/pencil-ruler-o-6coLSd.js +0 -6
- langflow/frontend/assets/pentagon-5Ak8DS0E.js +0 -6
- langflow/frontend/assets/percent-tEy_MI7m.js +0 -6
- langflow/frontend/assets/person-standing-ChU74f8r.js +0 -6
- langflow/frontend/assets/philippine-peso-CbnoWbGM.js +0 -6
- langflow/frontend/assets/phone-B0GQ_Bcb.js +0 -6
- langflow/frontend/assets/phone-call-BWDprBY2.js +0 -6
- langflow/frontend/assets/phone-forwarded-21PQcivS.js +0 -6
- langflow/frontend/assets/phone-incoming-DIDPwStq.js +0 -6
- langflow/frontend/assets/phone-missed-CJO_4Uyn.js +0 -6
- langflow/frontend/assets/phone-off-Nt7Xlx3c.js +0 -6
- langflow/frontend/assets/phone-outgoing-ClpuVj8e.js +0 -6
- langflow/frontend/assets/pi-CqkSapIU.js +0 -6
- langflow/frontend/assets/piano-akqCaGTq.js +0 -6
- langflow/frontend/assets/pickaxe-CjCuKyOK.js +0 -6
- langflow/frontend/assets/picture-in-picture-2-BBhqkNsI.js +0 -6
- langflow/frontend/assets/picture-in-picture-CtpDmIOW.js +0 -6
- langflow/frontend/assets/piggy-bank-RnwOHufF.js +0 -6
- langflow/frontend/assets/pilcrow-BzNPJ9oD.js +0 -6
- langflow/frontend/assets/pilcrow-left-jEiCGChe.js +0 -6
- langflow/frontend/assets/pilcrow-right-DOgf2byD.js +0 -6
- langflow/frontend/assets/pill-DxL2O8dI.js +0 -6
- langflow/frontend/assets/pill-bottle-DKSghOIa.js +0 -6
- langflow/frontend/assets/pin-CcDiDAeJ.js +0 -6
- langflow/frontend/assets/pin-off-DhCbW2Kd.js +0 -6
- langflow/frontend/assets/pipette-P6WYbIP3.js +0 -6
- langflow/frontend/assets/pizza-Cxud9B0D.js +0 -6
- langflow/frontend/assets/plane-CgMK5hg6.js +0 -6
- langflow/frontend/assets/plane-landing-CI2_uueZ.js +0 -6
- langflow/frontend/assets/plane-takeoff-DqeOwlc2.js +0 -6
- langflow/frontend/assets/play-DnHTYhnk.js +0 -6
- langflow/frontend/assets/plug-2-BJRgB2Ss.js +0 -6
- langflow/frontend/assets/plug-DzYm1DYx.js +0 -6
- langflow/frontend/assets/plug-zap-CwvzvkqI.js +0 -6
- langflow/frontend/assets/pocket-knife-Dil1URfq.js +0 -6
- langflow/frontend/assets/pocket-qMB7X0DE.js +0 -6
- langflow/frontend/assets/podcast-CrLwmGMd.js +0 -6
- langflow/frontend/assets/pointer-CZrZI_X2.js +0 -6
- langflow/frontend/assets/pointer-off-BCR4aZYc.js +0 -6
- langflow/frontend/assets/popcorn-Cs8GFMoS.js +0 -6
- langflow/frontend/assets/popsicle-CprrQeHz.js +0 -6
- langflow/frontend/assets/pound-sterling-D11nOJD1.js +0 -6
- langflow/frontend/assets/power-CqMzml6E.js +0 -6
- langflow/frontend/assets/power-off-0wJLKsXX.js +0 -6
- langflow/frontend/assets/presentation-Bgsp2XDl.js +0 -6
- langflow/frontend/assets/printer-Cci82MCw.js +0 -6
- langflow/frontend/assets/printer-check-DbNGbscx.js +0 -6
- langflow/frontend/assets/projector-D2TYd8PO.js +0 -6
- langflow/frontend/assets/proportions-C-PtaM1R.js +0 -6
- langflow/frontend/assets/puzzle-BqkRGDVt.js +0 -6
- langflow/frontend/assets/pyramid-CFG6N_0z.js +0 -6
- langflow/frontend/assets/qr-code-CjelYghL.js +0 -6
- langflow/frontend/assets/quote-BiMd0lD4.js +0 -6
- langflow/frontend/assets/rabbit-cM3t0TSA.js +0 -6
- langflow/frontend/assets/radar-CmGvI108.js +0 -6
- langflow/frontend/assets/radiation-BQNRVXKL.js +0 -6
- langflow/frontend/assets/radical-B3I4sVcu.js +0 -6
- langflow/frontend/assets/radio-BqvBUmsT.js +0 -6
- langflow/frontend/assets/radio-receiver-C7eLlwq1.js +0 -6
- langflow/frontend/assets/radio-tower-CDCzGUgQ.js +0 -6
- langflow/frontend/assets/radius-JLhP7Eu2.js +0 -6
- langflow/frontend/assets/rail-symbol-DZ8x-RX1.js +0 -6
- langflow/frontend/assets/rainbow-BmPDXOvw.js +0 -6
- langflow/frontend/assets/rat-BERWXw9g.js +0 -6
- langflow/frontend/assets/ratio-1_pyn0z4.js +0 -6
- langflow/frontend/assets/receipt-DUHpHEVe.js +0 -6
- langflow/frontend/assets/receipt-cent--yiJQ1M1.js +0 -6
- langflow/frontend/assets/receipt-euro-BlxEfrBy.js +0 -6
- langflow/frontend/assets/receipt-indian-rupee-BVLKA36x.js +0 -6
- langflow/frontend/assets/receipt-japanese-yen-DmWhPjT5.js +0 -6
- langflow/frontend/assets/receipt-pound-sterling-DIvrhtFL.js +0 -6
- langflow/frontend/assets/receipt-russian-ruble-CgBrcegb.js +0 -6
- langflow/frontend/assets/receipt-swiss-franc-Dk4mIm8n.js +0 -6
- langflow/frontend/assets/receipt-text-Dj20LEuw.js +0 -6
- langflow/frontend/assets/rectangle-ellipsis-Dc8mDdWz.js +0 -6
- langflow/frontend/assets/rectangle-goggles-BweC_jIu.js +0 -6
- langflow/frontend/assets/rectangle-horizontal-CIAiKSEb.js +0 -6
- langflow/frontend/assets/rectangle-vertical-DgcCRuYj.js +0 -6
- langflow/frontend/assets/recycle-D_97bK7K.js +0 -6
- langflow/frontend/assets/redo-2-CDbidrcj.js +0 -6
- langflow/frontend/assets/redo-CSo19hqn.js +0 -6
- langflow/frontend/assets/redo-dot-C3WXDjtF.js +0 -6
- langflow/frontend/assets/refresh-ccw-DVn6fkhy.js +0 -6
- langflow/frontend/assets/refresh-ccw-dot-mAWK3ip3.js +0 -6
- langflow/frontend/assets/refresh-cw-off-DsLjQD-M.js +0 -6
- langflow/frontend/assets/refresh-cw-qDyYoQLI.js +0 -6
- langflow/frontend/assets/refrigerator-Drdcx1uI.js +0 -6
- langflow/frontend/assets/regex-DOS05A-1.js +0 -6
- langflow/frontend/assets/remove-formatting-BCQaWDBm.js +0 -6
- langflow/frontend/assets/repeat-1-BhiTlGrb.js +0 -6
- langflow/frontend/assets/repeat-2-D3qLVB7t.js +0 -6
- langflow/frontend/assets/repeat-BK_lc94_.js +0 -6
- langflow/frontend/assets/replace-DTw7tVzp.js +0 -6
- langflow/frontend/assets/replace-all-BHr2jl1W.js +0 -6
- langflow/frontend/assets/reply-CRePHeVG.js +0 -6
- langflow/frontend/assets/reply-all-BIxs4rgW.js +0 -6
- langflow/frontend/assets/rewind-DaQ0jglm.js +0 -6
- langflow/frontend/assets/ribbon-BTQP5NBD.js +0 -6
- langflow/frontend/assets/rocket-_4E4kxgt.js +0 -6
- langflow/frontend/assets/rocking-chair-Qt21wZg7.js +0 -6
- langflow/frontend/assets/roller-coaster-DPdG3J9V.js +0 -6
- langflow/frontend/assets/rotate-3d-DtxAt9KB.js +0 -6
- langflow/frontend/assets/rotate-ccw-DpIC-8FY.js +0 -6
- langflow/frontend/assets/rotate-ccw-key-_sMm36Fy.js +0 -6
- langflow/frontend/assets/rotate-ccw-square-CIztJ4be.js +0 -6
- langflow/frontend/assets/rotate-cw-BMORR0EJ.js +0 -6
- langflow/frontend/assets/rotate-cw-square-Pq5ozPZ3.js +0 -6
- langflow/frontend/assets/route-DgP8N_LK.js +0 -6
- langflow/frontend/assets/route-off-BHk-MId8.js +0 -6
- langflow/frontend/assets/router-CHaIxQVa.js +0 -6
- langflow/frontend/assets/rows-2-CCsMeUaI.js +0 -6
- langflow/frontend/assets/rows-3-ChTk_Btp.js +0 -6
- langflow/frontend/assets/rows-4-CbSc9ruc.js +0 -6
- langflow/frontend/assets/rss-C9MYVtF_.js +0 -6
- langflow/frontend/assets/ruler-BvUPMGp3.js +0 -6
- langflow/frontend/assets/ruler-dimension-line-CWE-c0sy.js +0 -6
- langflow/frontend/assets/russian-ruble-xX1Hx_It.js +0 -6
- langflow/frontend/assets/sailboat-C_uY7LNH.js +0 -6
- langflow/frontend/assets/salad-C-3dZuLo.js +0 -6
- langflow/frontend/assets/sandwich-CNuLavSa.js +0 -6
- langflow/frontend/assets/satellite-DXBmHsTf.js +0 -6
- langflow/frontend/assets/satellite-dish-CWAcVK5n.js +0 -6
- langflow/frontend/assets/saudi-riyal-CuTtH2F9.js +0 -6
- langflow/frontend/assets/save-Cgr07i6c.js +0 -6
- langflow/frontend/assets/save-all-DE5Ojc4A.js +0 -6
- langflow/frontend/assets/save-off-B3GZ_TSx.js +0 -6
- langflow/frontend/assets/scale-3d-CekHrSjB.js +0 -6
- langflow/frontend/assets/scale-DEqPGaFL.js +0 -6
- langflow/frontend/assets/scaling-DKHfnkk0.js +0 -6
- langflow/frontend/assets/scan-CzY1gi92.js +0 -6
- langflow/frontend/assets/scan-barcode-D_CXjeVH.js +0 -6
- langflow/frontend/assets/scan-eye-BPXfd-TC.js +0 -6
- langflow/frontend/assets/scan-face-kd7bu2Kf.js +0 -6
- langflow/frontend/assets/scan-heart--dwPn3dV.js +0 -6
- langflow/frontend/assets/scan-line-D_BJRGz_.js +0 -6
- langflow/frontend/assets/scan-qr-code-gWrcVEmi.js +0 -6
- langflow/frontend/assets/scan-search-BA6pHPpT.js +0 -6
- langflow/frontend/assets/scan-text-B60rHf4T.js +0 -6
- langflow/frontend/assets/school-DwKJzH9f.js +0 -6
- langflow/frontend/assets/scissors-DKGIvaps.js +0 -6
- langflow/frontend/assets/scissors-line-dashed-CaAvw_WA.js +0 -6
- langflow/frontend/assets/screen-share-Co0ZtI7Q.js +0 -6
- langflow/frontend/assets/screen-share-off-DdwORG2B.js +0 -6
- langflow/frontend/assets/scroll-Bzv7Ye3f.js +0 -6
- langflow/frontend/assets/scroll-text-rNsUQOXi.js +0 -6
- langflow/frontend/assets/search-check-BXLgn-NO.js +0 -6
- langflow/frontend/assets/search-code-gEzRfpLP.js +0 -6
- langflow/frontend/assets/search-slash-BUIeLrVa.js +0 -6
- langflow/frontend/assets/search-x-BuhUyUTQ.js +0 -6
- langflow/frontend/assets/section-C1x0C9XB.js +0 -6
- langflow/frontend/assets/send-BM3sLu-Y.js +0 -6
- langflow/frontend/assets/send-horizontal-CT1V62Pr.js +0 -6
- langflow/frontend/assets/send-to-back-eiiBTyBD.js +0 -6
- langflow/frontend/assets/separator-horizontal-GFqehrvL.js +0 -6
- langflow/frontend/assets/separator-vertical-CvqE9Fed.js +0 -6
- langflow/frontend/assets/server-Q-iRQ96W.js +0 -6
- langflow/frontend/assets/server-cog-2X5d_18K.js +0 -6
- langflow/frontend/assets/server-crash-DmcwWied.js +0 -6
- langflow/frontend/assets/server-off-COlwrpT5.js +0 -6
- langflow/frontend/assets/settings-2-ygwuMAQ7.js +0 -6
- langflow/frontend/assets/settings-CS_DqaA-.js +0 -6
- langflow/frontend/assets/shapes-C-gMxmF8.js +0 -6
- langflow/frontend/assets/share-2-C3WLRMtJ.js +0 -6
- langflow/frontend/assets/share-CXqXqxr5.js +0 -6
- langflow/frontend/assets/sheet-SRxYAofu.js +0 -6
- langflow/frontend/assets/shell-aaTYBtYE.js +0 -6
- langflow/frontend/assets/shield-DJRh4Wdm.js +0 -6
- langflow/frontend/assets/shield-alert-HBZ7vpwY.js +0 -6
- langflow/frontend/assets/shield-ban-BJWFj9m1.js +0 -6
- langflow/frontend/assets/shield-check-CLv1uN9r.js +0 -6
- langflow/frontend/assets/shield-ellipsis-B8Lu5Phe.js +0 -6
- langflow/frontend/assets/shield-half-D3PbKozF.js +0 -6
- langflow/frontend/assets/shield-minus-LB51x3W1.js +0 -6
- langflow/frontend/assets/shield-off-ZDUUSlZa.js +0 -6
- langflow/frontend/assets/shield-plus-CWvHjIsV.js +0 -6
- langflow/frontend/assets/shield-question-DK_FF9il.js +0 -6
- langflow/frontend/assets/shield-user-DX__3WwF.js +0 -6
- langflow/frontend/assets/shield-x-D8HbIS4G.js +0 -6
- langflow/frontend/assets/ship-DHcsvhZY.js +0 -6
- langflow/frontend/assets/ship-wheel-BGvpCvWk.js +0 -6
- langflow/frontend/assets/shirt-_mC1gDwQ.js +0 -6
- langflow/frontend/assets/shopping-bag-CYVC3jwq.js +0 -6
- langflow/frontend/assets/shopping-basket-LGrmDi_z.js +0 -6
- langflow/frontend/assets/shopping-cart-CqfMvlkM.js +0 -6
- langflow/frontend/assets/shovel-BsfZpVJN.js +0 -6
- langflow/frontend/assets/shower-head-BlRibLJ7.js +0 -6
- langflow/frontend/assets/shredder-BJj_QmHx.js +0 -6
- langflow/frontend/assets/shrimp-VdrkJpWP.js +0 -6
- langflow/frontend/assets/shrink-Cu6z46PX.js +0 -6
- langflow/frontend/assets/shrub-B9kzCuq0.js +0 -6
- langflow/frontend/assets/shuffle-CKi7Be-u.js +0 -6
- langflow/frontend/assets/sigma-CtnoMw1k.js +0 -6
- langflow/frontend/assets/signal-DVbzCyrM.js +0 -6
- langflow/frontend/assets/signal-high-CaSlpqkx.js +0 -6
- langflow/frontend/assets/signal-low-B_YjYYgO.js +0 -6
- langflow/frontend/assets/signal-medium-C-5UoNZx.js +0 -6
- langflow/frontend/assets/signal-zero-BCYSACqb.js +0 -6
- langflow/frontend/assets/signature-CdJT_ILJ.js +0 -6
- langflow/frontend/assets/signpost-DJgwl6sw.js +0 -6
- langflow/frontend/assets/signpost-big-D97_lnxx.js +0 -6
- langflow/frontend/assets/siren-B3ea2usV.js +0 -6
- langflow/frontend/assets/skip-back-DzyULyvB.js +0 -6
- langflow/frontend/assets/skip-forward-CRUlStSQ.js +0 -6
- langflow/frontend/assets/skull-uxOUJF_T.js +0 -6
- langflow/frontend/assets/slack-BR4DDPkA.js +0 -6
- langflow/frontend/assets/slash-CadUoJI-.js +0 -6
- langflow/frontend/assets/slice-COCVA6vv.js +0 -6
- langflow/frontend/assets/sliders-horizontal-Bi5V0LEf.js +0 -6
- langflow/frontend/assets/sliders-vertical-DBTI29V1.js +0 -6
- langflow/frontend/assets/smartphone-DaiyICla.js +0 -6
- langflow/frontend/assets/smartphone-charging-C03y6_Zj.js +0 -6
- langflow/frontend/assets/smartphone-nfc-DPn27MML.js +0 -6
- langflow/frontend/assets/smile-Clki74un.js +0 -6
- langflow/frontend/assets/smile-plus-CvGrZqO-.js +0 -6
- langflow/frontend/assets/snail-CUBrDivh.js +0 -6
- langflow/frontend/assets/snowflake-Djm-5mG-.js +0 -6
- langflow/frontend/assets/sofa-DdIW6mpy.js +0 -6
- langflow/frontend/assets/soup-DkIcsI-_.js +0 -6
- langflow/frontend/assets/space-CWFH1vuq.js +0 -6
- langflow/frontend/assets/spade-BwYSxq5P.js +0 -6
- langflow/frontend/assets/sparkle-BfhgFTea.js +0 -6
- langflow/frontend/assets/sparkles-uXe95TZK.js +0 -6
- langflow/frontend/assets/speaker-D35KmQBl.js +0 -6
- langflow/frontend/assets/speech-Bq21Lcs9.js +0 -6
- langflow/frontend/assets/spell-check-2-_DITlUdC.js +0 -6
- langflow/frontend/assets/spell-check-BZ-Gvp_C.js +0 -6
- langflow/frontend/assets/spline-BL7mQCBT.js +0 -6
- langflow/frontend/assets/spline-pointer-hafNzi4p.js +0 -6
- langflow/frontend/assets/split-BlJmfg9N.js +0 -6
- langflow/frontend/assets/spray-can-zjMUWHiD.js +0 -6
- langflow/frontend/assets/sprout-yKA-dIxG.js +0 -6
- langflow/frontend/assets/square-B7F-f93s.js +0 -6
- langflow/frontend/assets/square-activity-okRmupK-.js +0 -6
- langflow/frontend/assets/square-arrow-down-aqHixtoY.js +0 -6
- langflow/frontend/assets/square-arrow-down-left-Bixw9uTT.js +0 -6
- langflow/frontend/assets/square-arrow-down-right-kchymqB_.js +0 -6
- langflow/frontend/assets/square-arrow-left-B53HGo1k.js +0 -6
- langflow/frontend/assets/square-arrow-out-down-left-D9Tlhaxx.js +0 -6
- langflow/frontend/assets/square-arrow-out-down-right-C9xhGKs0.js +0 -6
- langflow/frontend/assets/square-arrow-out-up-left-R0N08PPL.js +0 -6
- langflow/frontend/assets/square-arrow-out-up-right-D6E7LfLG.js +0 -6
- langflow/frontend/assets/square-arrow-right-CmPaHRZQ.js +0 -6
- langflow/frontend/assets/square-arrow-up-BFLeiD_4.js +0 -6
- langflow/frontend/assets/square-arrow-up-left-B95KRnDQ.js +0 -6
- langflow/frontend/assets/square-arrow-up-right-CIWV_rNl.js +0 -6
- langflow/frontend/assets/square-asterisk-CYjrc_Df.js +0 -6
- langflow/frontend/assets/square-bottom-dashed-scissors-BZcDvoyB.js +0 -6
- langflow/frontend/assets/square-chart-gantt-Df185dki.js +0 -6
- langflow/frontend/assets/square-check-BwhUJDD6.js +0 -6
- langflow/frontend/assets/square-check-big-CBTGJB_A.js +0 -6
- langflow/frontend/assets/square-chevron-down-C-KZ3sEC.js +0 -6
- langflow/frontend/assets/square-chevron-left-C7dn8Q74.js +0 -6
- langflow/frontend/assets/square-chevron-right-B_AiZm5n.js +0 -6
- langflow/frontend/assets/square-chevron-up-BjR62Z_1.js +0 -6
- langflow/frontend/assets/square-code-DA02ymim.js +0 -6
- langflow/frontend/assets/square-dashed-BHikPTm0.js +0 -6
- langflow/frontend/assets/square-dashed-bottom-PsDx1Egq.js +0 -6
- langflow/frontend/assets/square-dashed-bottom-code-CEg689eM.js +0 -6
- langflow/frontend/assets/square-dashed-kanban-BaYAooiw.js +0 -6
- langflow/frontend/assets/square-dashed-mouse-pointer-CZ4djMEe.js +0 -6
- langflow/frontend/assets/square-divide-1y832Otc.js +0 -6
- langflow/frontend/assets/square-dot-Bvfsd--o.js +0 -6
- langflow/frontend/assets/square-equal-Bn_8YQjt.js +0 -6
- langflow/frontend/assets/square-function-CmOj9z1p.js +0 -6
- langflow/frontend/assets/square-kanban-DTtgDynM.js +0 -6
- langflow/frontend/assets/square-library-Br1y4qGx.js +0 -6
- langflow/frontend/assets/square-m-BxkfP4CS.js +0 -6
- langflow/frontend/assets/square-menu-DzivkhIJ.js +0 -6
- langflow/frontend/assets/square-minus-CX851KOA.js +0 -6
- langflow/frontend/assets/square-mouse-pointer-CNBri_P7.js +0 -6
- langflow/frontend/assets/square-parking-CDJSHQ3N.js +0 -6
- langflow/frontend/assets/square-parking-off-D_D3jcq5.js +0 -6
- langflow/frontend/assets/square-pen-Cw5jFD6H.js +0 -6
- langflow/frontend/assets/square-percent-j2L--WU_.js +0 -6
- langflow/frontend/assets/square-pi-BpOpl_gm.js +0 -6
- langflow/frontend/assets/square-pilcrow-Ves6-7yR.js +0 -6
- langflow/frontend/assets/square-play-CBRYh6uT.js +0 -6
- langflow/frontend/assets/square-plus-Dx2huyti.js +0 -6
- langflow/frontend/assets/square-power-7j-lO73b.js +0 -6
- langflow/frontend/assets/square-radical-CIWgfsnp.js +0 -6
- langflow/frontend/assets/square-round-corner-Cj_pbJxa.js +0 -6
- langflow/frontend/assets/square-scissors-BijnolJB.js +0 -6
- langflow/frontend/assets/square-sigma-CkN89YJg.js +0 -6
- langflow/frontend/assets/square-slash-DtWzd55Q.js +0 -6
- langflow/frontend/assets/square-split-horizontal-D6GTYXON.js +0 -6
- langflow/frontend/assets/square-split-vertical-DFWI_pH1.js +0 -6
- langflow/frontend/assets/square-square-CwJXil_H.js +0 -6
- langflow/frontend/assets/square-stack-DcNXK3aF.js +0 -6
- langflow/frontend/assets/square-terminal-BUk5Pbn6.js +0 -6
- langflow/frontend/assets/square-user-CkK8A8if.js +0 -6
- langflow/frontend/assets/square-user-round-97S3e_wN.js +0 -6
- langflow/frontend/assets/square-x-DKq2k11X.js +0 -6
- langflow/frontend/assets/squares-exclude-PwjksY77.js +0 -6
- langflow/frontend/assets/squares-intersect-CI7tSK90.js +0 -6
- langflow/frontend/assets/squares-subtract-uAMRGzn9.js +0 -6
- langflow/frontend/assets/squares-unite-B0AGNMC6.js +0 -6
- langflow/frontend/assets/squircle-CD8NO5Fn.js +0 -6
- langflow/frontend/assets/squirrel-8WFE1Oyv.js +0 -6
- langflow/frontend/assets/stamp-BptNuGY4.js +0 -6
- langflow/frontend/assets/star-CAWpMz_r.js +0 -6
- langflow/frontend/assets/star-half-Dnu7-CNu.js +0 -6
- langflow/frontend/assets/star-off-CawcH2LX.js +0 -6
- langflow/frontend/assets/step-back-Cr2iY749.js +0 -6
- langflow/frontend/assets/step-forward-dwyH-V8y.js +0 -6
- langflow/frontend/assets/stethoscope-BhCnJYKx.js +0 -6
- langflow/frontend/assets/sticker-D-o9E13P.js +0 -6
- langflow/frontend/assets/sticky-note-DYKTzU4O.js +0 -6
- langflow/frontend/assets/store-DeXELDF3.js +0 -6
- langflow/frontend/assets/stretch-horizontal-D2kBFHlK.js +0 -6
- langflow/frontend/assets/stretch-vertical-0Ppy6lEl.js +0 -6
- langflow/frontend/assets/strikethrough-CVioe6vV.js +0 -6
- langflow/frontend/assets/subscript-88V9R2tB.js +0 -6
- langflow/frontend/assets/sun-BsaXfK-M.js +0 -6
- langflow/frontend/assets/sun-dim-DCPL7NN2.js +0 -6
- langflow/frontend/assets/sun-medium-E5HBOw1I.js +0 -6
- langflow/frontend/assets/sun-moon-D0UitYNT.js +0 -6
- langflow/frontend/assets/sun-snow-BAJqAIIG.js +0 -6
- langflow/frontend/assets/sunrise-Bc9dIT2g.js +0 -6
- langflow/frontend/assets/sunset-BuNWt_eT.js +0 -6
- langflow/frontend/assets/superscript-CX2eewPu.js +0 -6
- langflow/frontend/assets/swatch-book-BM-y5EXl.js +0 -6
- langflow/frontend/assets/swiss-franc-BzRDOsEV.js +0 -6
- langflow/frontend/assets/switch-camera-CH1i8yyA.js +0 -6
- langflow/frontend/assets/sword-D13ds2Ya.js +0 -6
- langflow/frontend/assets/swords-BhStHdQ8.js +0 -6
- langflow/frontend/assets/syringe-CAP2Z0-k.js +0 -6
- langflow/frontend/assets/table-2-C2PGdREi.js +0 -6
- langflow/frontend/assets/table-Ck36G8SG.js +0 -6
- langflow/frontend/assets/table-cells-merge-BVJ7b1oz.js +0 -6
- langflow/frontend/assets/table-cells-split-DK8of9DY.js +0 -6
- langflow/frontend/assets/table-columns-split-CDp4uKkw.js +0 -6
- langflow/frontend/assets/table-of-contents-BHaX_0BR.js +0 -6
- langflow/frontend/assets/table-properties-CLSIJXcY.js +0 -6
- langflow/frontend/assets/table-rows-split-DWEIVcJs.js +0 -6
- langflow/frontend/assets/tablet-C14R-ku4.js +0 -6
- langflow/frontend/assets/tablet-smartphone-F_4j5xhl.js +0 -6
- langflow/frontend/assets/tablets-CC6Pt7Ci.js +0 -6
- langflow/frontend/assets/tag-CylApHSs.js +0 -6
- langflow/frontend/assets/tags-pkWPF_bd.js +0 -6
- langflow/frontend/assets/tally-1-C4WJ2Fop.js +0 -6
- langflow/frontend/assets/tally-2-C50Zpo2H.js +0 -6
- langflow/frontend/assets/tally-3-C4x7GeXN.js +0 -6
- langflow/frontend/assets/tally-4-D_UmSCpF.js +0 -6
- langflow/frontend/assets/tally-5-BXKZNb-A.js +0 -6
- langflow/frontend/assets/tangent-DNtPxifR.js +0 -6
- langflow/frontend/assets/target-B9RAavna.js +0 -6
- langflow/frontend/assets/telescope-CxRCk3KC.js +0 -6
- langflow/frontend/assets/tent-BCsV4lpO.js +0 -6
- langflow/frontend/assets/tent-tree-BV46a73I.js +0 -6
- langflow/frontend/assets/terminal-Bkig6lHm.js +0 -6
- langflow/frontend/assets/test-tube-B2i_ECJz.js +0 -6
- langflow/frontend/assets/test-tube-diagonal-CkYAelIJ.js +0 -6
- langflow/frontend/assets/test-tubes-CJiSvsap.js +0 -6
- langflow/frontend/assets/text-DK2ORHMF.js +0 -6
- langflow/frontend/assets/text-cursor-Bx4r0tyV.js +0 -6
- langflow/frontend/assets/text-cursor-input-CgXGig4T.js +0 -6
- langflow/frontend/assets/text-quote-D-MtHT8Y.js +0 -6
- langflow/frontend/assets/text-search-Ct-295eM.js +0 -6
- langflow/frontend/assets/text-select-rWcxucwr.js +0 -6
- langflow/frontend/assets/theater-DjhaLuyw.js +0 -6
- langflow/frontend/assets/thermometer-C0w2vAXI.js +0 -6
- langflow/frontend/assets/thermometer-snowflake-B2tRxv48.js +0 -6
- langflow/frontend/assets/thermometer-sun-Bnu86yuh.js +0 -6
- langflow/frontend/assets/thumbs-down-JP8YEdww.js +0 -6
- langflow/frontend/assets/thumbs-up-BDS2uv2r.js +0 -6
- langflow/frontend/assets/ticket-CB8b0C1d.js +0 -6
- langflow/frontend/assets/ticket-check-YhCU3jg4.js +0 -6
- langflow/frontend/assets/ticket-minus-BWgCeYDD.js +0 -6
- langflow/frontend/assets/ticket-percent-D0PAgQCO.js +0 -6
- langflow/frontend/assets/ticket-plus-CypCNPtz.js +0 -6
- langflow/frontend/assets/ticket-slash-BX7YTcAs.js +0 -6
- langflow/frontend/assets/ticket-x-D4uOyaxq.js +0 -6
- langflow/frontend/assets/tickets-DY1gT3gK.js +0 -6
- langflow/frontend/assets/tickets-plane-vuBNGOoQ.js +0 -6
- langflow/frontend/assets/timer-BtVkt-cV.js +0 -6
- langflow/frontend/assets/timer-off-E9bgKP9C.js +0 -6
- langflow/frontend/assets/timer-reset-D5G3Yx_O.js +0 -6
- langflow/frontend/assets/toggle-left-Dtvt4rND.js +0 -6
- langflow/frontend/assets/toggle-right-D5u83MiB.js +0 -6
- langflow/frontend/assets/toilet-DWAbhqH7.js +0 -6
- langflow/frontend/assets/tornado-3gYt_Hou.js +0 -6
- langflow/frontend/assets/torus-BWGj8fdw.js +0 -6
- langflow/frontend/assets/touchpad-ByOtVcZT.js +0 -6
- langflow/frontend/assets/touchpad-off-BwN7WGge.js +0 -6
- langflow/frontend/assets/tower-control-CbvneE1Z.js +0 -6
- langflow/frontend/assets/toy-brick-c7surM-8.js +0 -6
- langflow/frontend/assets/tractor-Dde8gq5U.js +0 -6
- langflow/frontend/assets/traffic-cone-Ad4nz8EC.js +0 -6
- langflow/frontend/assets/train-front-DScwPjJf.js +0 -6
- langflow/frontend/assets/train-front-tunnel-3So7dB_e.js +0 -6
- langflow/frontend/assets/train-track-CGDdFDjR.js +0 -6
- langflow/frontend/assets/tram-front-N6b_rX6o.js +0 -6
- langflow/frontend/assets/transgender-CnPwUnpH.js +0 -6
- langflow/frontend/assets/trash-CHnYqgt6.js +0 -6
- langflow/frontend/assets/tree-deciduous-DVFFKQe0.js +0 -6
- langflow/frontend/assets/tree-palm-CQRa4Rbm.js +0 -6
- langflow/frontend/assets/tree-pine-X30leB6Q.js +0 -6
- langflow/frontend/assets/trees-CBVzI7a1.js +0 -6
- langflow/frontend/assets/trello-B8Qz5FJm.js +0 -6
- langflow/frontend/assets/trending-down-D-rDjRzA.js +0 -6
- langflow/frontend/assets/trending-up-BzCDJ3Ro.js +0 -6
- langflow/frontend/assets/trending-up-down-C5joYTMO.js +0 -6
- langflow/frontend/assets/triangle-BXoOidek.js +0 -6
- langflow/frontend/assets/triangle-alert-H4o1tY-U.js +0 -6
- langflow/frontend/assets/triangle-dashed-CfbCC2uo.js +0 -6
- langflow/frontend/assets/triangle-right-CqsWB4oc.js +0 -6
- langflow/frontend/assets/trophy-Bpryt3p8.js +0 -6
- langflow/frontend/assets/truck-CCTVFLSf.js +0 -6
- langflow/frontend/assets/truck-electric-BrmvYVLe.js +0 -6
- langflow/frontend/assets/turtle-DxBuORev.js +0 -6
- langflow/frontend/assets/tv-BGlF7sYY.js +0 -6
- langflow/frontend/assets/tv-minimal-BYkQyCHf.js +0 -6
- langflow/frontend/assets/tv-minimal-play-BViZ0p8D.js +0 -6
- langflow/frontend/assets/twitch--NTcmDbV.js +0 -6
- langflow/frontend/assets/twitter-B6IcBO1j.js +0 -6
- langflow/frontend/assets/type-CzijtgeS.js +0 -6
- langflow/frontend/assets/type-outline-D4aeMn0r.js +0 -6
- langflow/frontend/assets/umbrella-CNB7BQAK.js +0 -6
- langflow/frontend/assets/umbrella-off-ACZ74QiP.js +0 -6
- langflow/frontend/assets/underline-DZgJ_J88.js +0 -6
- langflow/frontend/assets/undo-2-Cakptpvi.js +0 -6
- langflow/frontend/assets/undo-ZzHBMkJP.js +0 -6
- langflow/frontend/assets/undo-dot--l0DcB8v.js +0 -6
- langflow/frontend/assets/unfold-horizontal-DxaMrfta.js +0 -6
- langflow/frontend/assets/unfold-vertical-DziRn0bg.js +0 -6
- langflow/frontend/assets/ungroup-DKUxl6kq.js +0 -6
- langflow/frontend/assets/university-DQLdbE_N.js +0 -6
- langflow/frontend/assets/unlink-2-GmbHKPC4.js +0 -6
- langflow/frontend/assets/unlink-Bs4iYVWi.js +0 -6
- langflow/frontend/assets/unplug-FKPj7mga.js +0 -6
- langflow/frontend/assets/upload-CKyYXyJE.js +0 -6
- langflow/frontend/assets/usb-C-ggzTaG.js +0 -6
- langflow/frontend/assets/use-post-add-user-B4k-RquK.js +0 -1
- langflow/frontend/assets/user-BhHc4COE.js +0 -6
- langflow/frontend/assets/user-check-DHPxhJVI.js +0 -6
- langflow/frontend/assets/user-cog-CIOhOmEm.js +0 -6
- langflow/frontend/assets/user-lock-B-G82tIJ.js +0 -6
- langflow/frontend/assets/user-minus-CnTdboH4.js +0 -6
- langflow/frontend/assets/user-pen-CGnfCAtZ.js +0 -6
- langflow/frontend/assets/user-plus-DQAFTFqg.js +0 -6
- langflow/frontend/assets/user-round-BpoLJt8b.js +0 -6
- langflow/frontend/assets/user-round-check-NBziS0fx.js +0 -6
- langflow/frontend/assets/user-round-cog-Dc7AXQz2.js +0 -6
- langflow/frontend/assets/user-round-minus-DUQ7BjaI.js +0 -6
- langflow/frontend/assets/user-round-pen-Bj8ZHG0i.js +0 -6
- langflow/frontend/assets/user-round-plus-CIQ0QYKn.js +0 -6
- langflow/frontend/assets/user-round-search-n-fM-cDf.js +0 -6
- langflow/frontend/assets/user-round-x-DLjTx6B2.js +0 -6
- langflow/frontend/assets/user-search-ZGUV28jD.js +0 -6
- langflow/frontend/assets/user-x-BYp4tJC7.js +0 -6
- langflow/frontend/assets/users-BxdHalGM.js +0 -6
- langflow/frontend/assets/users-round-CtPaJzon.js +0 -6
- langflow/frontend/assets/utensils-crossed-DMm1-EjL.js +0 -6
- langflow/frontend/assets/utensils-j2G0lo4x.js +0 -6
- langflow/frontend/assets/utility-pole-D5q12cAc.js +0 -6
- langflow/frontend/assets/variable-BEW7rZTQ.js +0 -6
- langflow/frontend/assets/vault-pnpzQjnM.js +0 -6
- langflow/frontend/assets/vegan-BhFJSZph.js +0 -6
- langflow/frontend/assets/venetian-mask-Dt_z1wKd.js +0 -6
- langflow/frontend/assets/venus-CwVqGJze.js +0 -6
- langflow/frontend/assets/venus-and-mars-m93jur-3.js +0 -6
- langflow/frontend/assets/vibrate-4tgYxWlX.js +0 -6
- langflow/frontend/assets/vibrate-off-BgfzFNJW.js +0 -6
- langflow/frontend/assets/video-BsvThieo.js +0 -6
- langflow/frontend/assets/video-off-C2HilXCT.js +0 -6
- langflow/frontend/assets/videotape-BeRqYhcI.js +0 -6
- langflow/frontend/assets/view-C-7Tn-LZ.js +0 -6
- langflow/frontend/assets/voicemail--E_KprKt.js +0 -6
- langflow/frontend/assets/volleyball-YWKFHynl.js +0 -6
- langflow/frontend/assets/volume-1-CUNkZ6z-.js +0 -6
- langflow/frontend/assets/volume-2-CYOtQxAf.js +0 -6
- langflow/frontend/assets/volume-jQKPAZkk.js +0 -6
- langflow/frontend/assets/volume-off-nJT41mSV.js +0 -6
- langflow/frontend/assets/volume-x-CuL3zU4n.js +0 -6
- langflow/frontend/assets/vote-DIvYNSys.js +0 -6
- langflow/frontend/assets/wallet-BufAA7cv.js +0 -6
- langflow/frontend/assets/wallet-cards-QWDOJkqF.js +0 -6
- langflow/frontend/assets/wallet-minimal-CVE5kkqM.js +0 -6
- langflow/frontend/assets/wallpaper-B8_aEG8I.js +0 -6
- langflow/frontend/assets/wand-CC4L79TV.js +0 -6
- langflow/frontend/assets/wand-sparkles-BbBA-9Cx.js +0 -6
- langflow/frontend/assets/warehouse-ol11WOYx.js +0 -6
- langflow/frontend/assets/washing-machine-BskHuaSi.js +0 -6
- langflow/frontend/assets/watch-DBOfcTbQ.js +0 -6
- langflow/frontend/assets/waves-7Z5-_YJV.js +0 -6
- langflow/frontend/assets/waves-ladder-DOJkEMyg.js +0 -6
- langflow/frontend/assets/waypoints-9oQpaX0C.js +0 -6
- langflow/frontend/assets/webcam-WuukD6Or.js +0 -6
- langflow/frontend/assets/webhook-BRVa66xU.js +0 -6
- langflow/frontend/assets/webhook-off-C58ZLEnS.js +0 -6
- langflow/frontend/assets/weight-DYCK4q-n.js +0 -6
- langflow/frontend/assets/wheat-BDbsUHdi.js +0 -6
- langflow/frontend/assets/wheat-off-zjnoTs-a.js +0 -6
- langflow/frontend/assets/whole-word-B5p49jGJ.js +0 -6
- langflow/frontend/assets/wifi-CyEI7ibn.js +0 -6
- langflow/frontend/assets/wifi-high-B-nbrJVz.js +0 -6
- langflow/frontend/assets/wifi-low-D0_XNENb.js +0 -6
- langflow/frontend/assets/wifi-off-MfVJNHGU.js +0 -6
- langflow/frontend/assets/wifi-pen-D4Mwpr1E.js +0 -6
- langflow/frontend/assets/wifi-zero-BbY1MyC1.js +0 -6
- langflow/frontend/assets/wind-DnprYNop.js +0 -6
- langflow/frontend/assets/wind-arrow-down-34_tESJ4.js +0 -6
- langflow/frontend/assets/wine-Bfyt_U6l.js +0 -6
- langflow/frontend/assets/wine-off-2naUrbXo.js +0 -6
- langflow/frontend/assets/workflow-B7iBTen4.js +0 -6
- langflow/frontend/assets/worm-TP08gZS7.js +0 -6
- langflow/frontend/assets/wrap-text-CETBa0yJ.js +0 -6
- langflow/frontend/assets/wrench-CiHIet8A.js +0 -6
- langflow/frontend/assets/youtube-DYGksDyQ.js +0 -6
- langflow/frontend/assets/zap-BsSvf3Y0.js +0 -6
- langflow/frontend/assets/zap-off-B1ZKgf8y.js +0 -6
- langflow/frontend/assets/zoom-in-BC5IbtHW.js +0 -6
- langflow/frontend/assets/zoom-out-QQ1Dt7Pw.js +0 -6
- langflow_base_nightly-1.7.0.dev51.dist-info/METADATA +0 -99
- langflow_base_nightly-1.7.0.dev51.dist-info/RECORD +0 -2283
- {langflow_base_nightly-1.7.0.dev51.dist-info → langflow_base_nightly-1.7.0.dev55.dist-info}/WHEEL +0 -0
- {langflow_base_nightly-1.7.0.dev51.dist-info → langflow_base_nightly-1.7.0.dev55.dist-info}/entry_points.txt +0 -0
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import{a8 as a}from"./index-D7c71Ncp.js";/**
|
|
2
|
+
* @license lucide-react v0.503.0 - ISC
|
|
3
|
+
*
|
|
4
|
+
* This source code is licensed under the ISC license.
|
|
5
|
+
* See the LICENSE file in the root directory of this source tree.
|
|
6
|
+
*/const o=[["path",{d:"M4 14a1 1 0 0 1-.78-1.63l9.9-10.2a.5.5 0 0 1 .86.46l-1.92 6.02A1 1 0 0 0 13 10h7a1 1 0 0 1 .78 1.63l-9.9 10.2a.5.5 0 0 1-.86-.46l1.92-6.02A1 1 0 0 0 11 14z",key:"1xq2db"}]],t=a("zap",o);export{o as __iconNode,t as default};
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import{a8 as a}from"./index-D7c71Ncp.js";/**
|
|
2
|
+
* @license lucide-react v0.503.0 - ISC
|
|
3
|
+
*
|
|
4
|
+
* This source code is licensed under the ISC license.
|
|
5
|
+
* See the LICENSE file in the root directory of this source tree.
|
|
6
|
+
*/const e=[["path",{d:"M10.513 4.856 13.12 2.17a.5.5 0 0 1 .86.46l-1.377 4.317",key:"193nxd"}],["path",{d:"M15.656 10H20a1 1 0 0 1 .78 1.63l-1.72 1.773",key:"27a7lr"}],["path",{d:"M16.273 16.273 10.88 21.83a.5.5 0 0 1-.86-.46l1.92-6.02A1 1 0 0 0 11 14H4a1 1 0 0 1-.78-1.63l4.507-4.643",key:"1e0qe9"}],["path",{d:"m2 2 20 20",key:"1ooewy"}]],t=a("zap-off",e);export{e as __iconNode,t as default};
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import{a8 as e}from"./index-D7c71Ncp.js";/**
|
|
2
|
+
* @license lucide-react v0.503.0 - ISC
|
|
3
|
+
*
|
|
4
|
+
* This source code is licensed under the ISC license.
|
|
5
|
+
* See the LICENSE file in the root directory of this source tree.
|
|
6
|
+
*/const o=[["circle",{cx:"11",cy:"11",r:"8",key:"4ej97u"}],["line",{x1:"21",x2:"16.65",y1:"21",y2:"16.65",key:"13gj7c"}],["line",{x1:"11",x2:"11",y1:"8",y2:"14",key:"1vmskp"}],["line",{x1:"8",x2:"14",y1:"11",y2:"11",key:"durymu"}]],c=e("zoom-in",o);export{o as __iconNode,c as default};
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import{a8 as e}from"./index-D7c71Ncp.js";/**
|
|
2
|
+
* @license lucide-react v0.503.0 - ISC
|
|
3
|
+
*
|
|
4
|
+
* This source code is licensed under the ISC license.
|
|
5
|
+
* See the LICENSE file in the root directory of this source tree.
|
|
6
|
+
*/const o=[["circle",{cx:"11",cy:"11",r:"8",key:"4ej97u"}],["line",{x1:"21",x2:"16.65",y1:"21",y2:"16.65",key:"13gj7c"}],["line",{x1:"8",x2:"14",y1:"11",y2:"11",key:"durymu"}]],y=e("zoom-out",o);export{o as __iconNode,y as default};
|
langflow/frontend/index.html
CHANGED
|
@@ -14,7 +14,7 @@
|
|
|
14
14
|
rel="stylesheet"
|
|
15
15
|
/>
|
|
16
16
|
<title>Langflow</title>
|
|
17
|
-
<script type="module" crossorigin src="./assets/index-
|
|
17
|
+
<script type="module" crossorigin src="./assets/index-D7c71Ncp.js"></script>
|
|
18
18
|
<link rel="stylesheet" crossorigin href="./assets/index-Bd02jzx4.css">
|
|
19
19
|
</head>
|
|
20
20
|
<body id="body" class="dark" style="width: 100%; height: 100%">
|
langflow/initial_setup/setup.py
CHANGED
|
@@ -1274,6 +1274,7 @@ async def get_or_create_default_folder(session: AsyncSession, user_id: UUID) ->
|
|
|
1274
1274
|
async def sync_flows_from_fs():
|
|
1275
1275
|
flow_mtimes = {}
|
|
1276
1276
|
fs_flows_polling_interval = get_settings_service().settings.fs_flows_polling_interval / 1000
|
|
1277
|
+
storage_service = get_storage_service()
|
|
1277
1278
|
try:
|
|
1278
1279
|
while True:
|
|
1279
1280
|
try:
|
|
@@ -1282,7 +1283,14 @@ async def sync_flows_from_fs():
|
|
|
1282
1283
|
flows = (await session.exec(stmt)).all()
|
|
1283
1284
|
for flow in flows:
|
|
1284
1285
|
mtime = flow_mtimes.setdefault(flow.id, 0)
|
|
1285
|
-
path
|
|
1286
|
+
# Resolve path: if relative, construct full path using user's flows directory
|
|
1287
|
+
fs_path_str = flow.fs_path
|
|
1288
|
+
if not Path(fs_path_str).is_absolute():
|
|
1289
|
+
# Relative path - construct full path
|
|
1290
|
+
path = storage_service.data_dir / "flows" / str(flow.user_id) / fs_path_str
|
|
1291
|
+
else:
|
|
1292
|
+
# Absolute path - use as-is
|
|
1293
|
+
path = anyio.Path(fs_path_str)
|
|
1286
1294
|
try:
|
|
1287
1295
|
if await path.exists():
|
|
1288
1296
|
new_mtime = (await path.stat()).st_mtime
|
|
@@ -1201,7 +1201,7 @@
|
|
|
1201
1201
|
"legacy": false,
|
|
1202
1202
|
"lf_version": "1.4.3",
|
|
1203
1203
|
"metadata": {
|
|
1204
|
-
"code_hash": "
|
|
1204
|
+
"code_hash": "9cad30eb26b9",
|
|
1205
1205
|
"dependencies": {
|
|
1206
1206
|
"dependencies": [
|
|
1207
1207
|
{
|
|
@@ -1277,7 +1277,7 @@
|
|
|
1277
1277
|
"show": true,
|
|
1278
1278
|
"title_case": false,
|
|
1279
1279
|
"type": "code",
|
|
1280
|
-
"value": "\"\"\"Enhanced file component with Docling support and process isolation.\n\nNotes:\n-----\n- ALL Docling parsing/export runs in a separate OS process to prevent memory\n growth and native library state from impacting the main Langflow process.\n- Standard text/structured parsing continues to use existing BaseFileComponent\n utilities (and optional threading via `parallel_load_data`).\n\"\"\"\n\nfrom __future__ import annotations\n\nimport contextlib\nimport json\nimport subprocess\nimport sys\nimport textwrap\nfrom copy import deepcopy\nfrom pathlib import Path\nfrom tempfile import NamedTemporaryFile\nfrom typing import Any\n\nfrom lfx.base.data.base_file import BaseFileComponent\nfrom lfx.base.data.storage_utils import parse_storage_path, validate_image_content_type\nfrom lfx.base.data.utils import TEXT_FILE_TYPES, parallel_load_data, parse_text_file_to_data\nfrom lfx.inputs.inputs import DropdownInput, MessageTextInput, StrInput\nfrom lfx.io import BoolInput, FileInput, IntInput, Output\nfrom lfx.schema.data import Data\nfrom lfx.schema.dataframe import DataFrame # noqa: TC001\nfrom lfx.schema.message import Message\nfrom lfx.services.deps import get_settings_service, get_storage_service\nfrom lfx.utils.async_helpers import run_until_complete\n\n\nclass FileComponent(BaseFileComponent):\n \"\"\"File component with optional Docling processing (isolated in a subprocess).\"\"\"\n\n display_name = \"Read File\"\n # description is now a dynamic property - see get_tool_description()\n _base_description = \"Loads content from one or more files.\"\n documentation: str = \"https://docs.langflow.org/read-file\"\n icon = \"file-text\"\n name = \"File\"\n add_tool_output = True # Enable tool mode toggle without requiring tool_mode inputs\n\n # Extensions that can be processed without Docling (using standard text parsing)\n TEXT_EXTENSIONS = TEXT_FILE_TYPES\n\n # Extensions that require Docling for processing (images, advanced office formats, etc.)\n DOCLING_ONLY_EXTENSIONS = [\n \"adoc\",\n \"asciidoc\",\n \"asc\",\n \"bmp\",\n \"dotx\",\n \"dotm\",\n \"docm\",\n \"jpg\",\n \"jpeg\",\n \"png\",\n \"potx\",\n \"ppsx\",\n \"pptm\",\n \"potm\",\n \"ppsm\",\n \"pptx\",\n \"tiff\",\n \"xls\",\n \"xlsx\",\n \"xhtml\",\n \"webp\",\n ]\n\n # Docling-supported/compatible extensions; TEXT_FILE_TYPES are supported by the base loader.\n VALID_EXTENSIONS = [\n *TEXT_EXTENSIONS,\n *DOCLING_ONLY_EXTENSIONS,\n ]\n\n # Fixed export settings used when markdown export is requested.\n EXPORT_FORMAT = \"Markdown\"\n IMAGE_MODE = \"placeholder\"\n\n _base_inputs = deepcopy(BaseFileComponent.get_base_inputs())\n\n for input_item in _base_inputs:\n if isinstance(input_item, FileInput) and input_item.name == \"path\":\n input_item.real_time_refresh = True\n input_item.tool_mode = False # Disable tool mode for file upload input\n input_item.required = False # Make it optional so it doesn't error in tool mode\n break\n\n inputs = [\n *_base_inputs,\n StrInput(\n name=\"file_path_str\",\n display_name=\"File Path\",\n info=(\n \"Path to the file to read. Used when component is called as a tool. \"\n \"If not provided, will use the uploaded file from 'path' input.\"\n ),\n show=False,\n advanced=True,\n tool_mode=True, # Required for Toolset toggle, but _get_tools() ignores this parameter\n required=False,\n ),\n BoolInput(\n name=\"advanced_mode\",\n display_name=\"Advanced Parser\",\n value=False,\n real_time_refresh=True,\n info=(\n \"Enable advanced document processing and export with Docling for PDFs, images, and office documents. \"\n \"Note that advanced document processing can consume significant resources.\"\n ),\n show=True,\n ),\n DropdownInput(\n name=\"pipeline\",\n display_name=\"Pipeline\",\n info=\"Docling pipeline to use\",\n options=[\"standard\", \"vlm\"],\n value=\"standard\",\n advanced=True,\n real_time_refresh=True,\n ),\n DropdownInput(\n name=\"ocr_engine\",\n display_name=\"OCR Engine\",\n info=\"OCR engine to use. Only available when pipeline is set to 'standard'.\",\n options=[\"None\", \"easyocr\"],\n value=\"easyocr\",\n show=False,\n advanced=True,\n ),\n StrInput(\n name=\"md_image_placeholder\",\n display_name=\"Image placeholder\",\n info=\"Specify the image placeholder for markdown exports.\",\n value=\"<!-- image -->\",\n advanced=True,\n show=False,\n ),\n StrInput(\n name=\"md_page_break_placeholder\",\n display_name=\"Page break placeholder\",\n info=\"Add this placeholder between pages in the markdown output.\",\n value=\"\",\n advanced=True,\n show=False,\n ),\n MessageTextInput(\n name=\"doc_key\",\n display_name=\"Doc Key\",\n info=\"The key to use for the DoclingDocument column.\",\n value=\"doc\",\n advanced=True,\n show=False,\n ),\n # Deprecated input retained for backward-compatibility.\n BoolInput(\n name=\"use_multithreading\",\n display_name=\"[Deprecated] Use Multithreading\",\n advanced=True,\n value=True,\n info=\"Set 'Processing Concurrency' greater than 1 to enable multithreading.\",\n ),\n IntInput(\n name=\"concurrency_multithreading\",\n display_name=\"Processing Concurrency\",\n advanced=True,\n info=\"When multiple files are being processed, the number of files to process concurrently.\",\n value=1,\n ),\n BoolInput(\n name=\"markdown\",\n display_name=\"Markdown Export\",\n info=\"Export processed documents to Markdown format. Only available when advanced mode is enabled.\",\n value=False,\n show=False,\n ),\n ]\n\n outputs = [\n Output(display_name=\"Raw Content\", name=\"message\", method=\"load_files_message\", tool_mode=True),\n ]\n\n # ------------------------------ Tool description with file names --------------\n\n def get_tool_description(self) -> str:\n \"\"\"Return a dynamic description that includes the names of uploaded files.\n\n This helps the Agent understand which files are available to read.\n \"\"\"\n base_description = \"Loads and returns the content from uploaded files.\"\n\n # Get the list of uploaded file paths\n file_paths = getattr(self, \"path\", None)\n if not file_paths:\n return base_description\n\n # Ensure it's a list\n if not isinstance(file_paths, list):\n file_paths = [file_paths]\n\n # Extract just the file names from the paths\n file_names = []\n for fp in file_paths:\n if fp:\n name = Path(fp).name\n file_names.append(name)\n\n if file_names:\n files_str = \", \".join(file_names)\n return f\"{base_description} Available files: {files_str}. Call this tool to read these files.\"\n\n return base_description\n\n @property\n def description(self) -> str:\n \"\"\"Dynamic description property that includes uploaded file names.\"\"\"\n return self.get_tool_description()\n\n async def _get_tools(self) -> list:\n \"\"\"Override to create a tool without parameters.\n\n The Read File component should use the files already uploaded via UI,\n not accept file paths from the Agent (which wouldn't know the internal paths).\n \"\"\"\n from langchain_core.tools import StructuredTool\n from pydantic import BaseModel\n\n # Empty schema - no parameters needed\n class EmptySchema(BaseModel):\n \"\"\"No parameters required - uses pre-uploaded files.\"\"\"\n\n async def read_files_tool() -> str:\n \"\"\"Read the content of uploaded files.\"\"\"\n try:\n result = self.load_files_message()\n if hasattr(result, \"get_text\"):\n return result.get_text()\n if hasattr(result, \"text\"):\n return result.text\n return str(result)\n except (FileNotFoundError, ValueError, OSError, RuntimeError) as e:\n return f\"Error reading files: {e}\"\n\n description = self.get_tool_description()\n\n tool = StructuredTool(\n name=\"load_files_message\",\n description=description,\n coroutine=read_files_tool,\n args_schema=EmptySchema,\n handle_tool_error=True,\n tags=[\"load_files_message\"],\n metadata={\n \"display_name\": \"Read File\",\n \"display_description\": description,\n },\n )\n\n return [tool]\n\n # ------------------------------ UI helpers --------------------------------------\n\n def _path_value(self, template: dict) -> list[str]:\n \"\"\"Return the list of currently selected file paths from the template.\"\"\"\n return template.get(\"path\", {}).get(\"file_path\", [])\n\n def update_build_config(\n self,\n build_config: dict[str, Any],\n field_value: Any,\n field_name: str | None = None,\n ) -> dict[str, Any]:\n \"\"\"Show/hide Advanced Parser and related fields based on selection context.\"\"\"\n if field_name == \"path\":\n paths = self._path_value(build_config)\n\n # If all files can be processed by docling, do so\n allow_advanced = all(not file_path.endswith((\".csv\", \".xlsx\", \".parquet\")) for file_path in paths)\n build_config[\"advanced_mode\"][\"show\"] = allow_advanced\n if not allow_advanced:\n build_config[\"advanced_mode\"][\"value\"] = False\n for f in (\"pipeline\", \"ocr_engine\", \"doc_key\", \"md_image_placeholder\", \"md_page_break_placeholder\"):\n if f in build_config:\n build_config[f][\"show\"] = False\n\n # Docling Processing\n elif field_name == \"advanced_mode\":\n for f in (\"pipeline\", \"ocr_engine\", \"doc_key\", \"md_image_placeholder\", \"md_page_break_placeholder\"):\n if f in build_config:\n build_config[f][\"show\"] = bool(field_value)\n if f == \"pipeline\":\n build_config[f][\"advanced\"] = not bool(field_value)\n\n elif field_name == \"pipeline\":\n if field_value == \"standard\":\n build_config[\"ocr_engine\"][\"show\"] = True\n build_config[\"ocr_engine\"][\"value\"] = \"easyocr\"\n else:\n build_config[\"ocr_engine\"][\"show\"] = False\n build_config[\"ocr_engine\"][\"value\"] = \"None\"\n\n return build_config\n\n def update_outputs(self, frontend_node: dict[str, Any], field_name: str, field_value: Any) -> dict[str, Any]: # noqa: ARG002\n \"\"\"Dynamically show outputs based on file count/type and advanced mode.\"\"\"\n if field_name not in [\"path\", \"advanced_mode\", \"pipeline\"]:\n return frontend_node\n\n template = frontend_node.get(\"template\", {})\n paths = self._path_value(template)\n if not paths:\n return frontend_node\n\n frontend_node[\"outputs\"] = []\n if len(paths) == 1:\n file_path = paths[0] if field_name == \"path\" else frontend_node[\"template\"][\"path\"][\"file_path\"][0]\n if file_path.endswith((\".csv\", \".xlsx\", \".parquet\")):\n frontend_node[\"outputs\"].append(\n Output(\n display_name=\"Structured Content\",\n name=\"dataframe\",\n method=\"load_files_structured\",\n tool_mode=True,\n ),\n )\n elif file_path.endswith(\".json\"):\n frontend_node[\"outputs\"].append(\n Output(display_name=\"Structured Content\", name=\"json\", method=\"load_files_json\", tool_mode=True),\n )\n\n advanced_mode = frontend_node.get(\"template\", {}).get(\"advanced_mode\", {}).get(\"value\", False)\n if advanced_mode:\n frontend_node[\"outputs\"].append(\n Output(\n display_name=\"Structured Output\",\n name=\"advanced_dataframe\",\n method=\"load_files_dataframe\",\n tool_mode=True,\n ),\n )\n frontend_node[\"outputs\"].append(\n Output(\n display_name=\"Markdown\", name=\"advanced_markdown\", method=\"load_files_markdown\", tool_mode=True\n ),\n )\n frontend_node[\"outputs\"].append(\n Output(display_name=\"File Path\", name=\"path\", method=\"load_files_path\", tool_mode=True),\n )\n else:\n frontend_node[\"outputs\"].append(\n Output(display_name=\"Raw Content\", name=\"message\", method=\"load_files_message\", tool_mode=True),\n )\n frontend_node[\"outputs\"].append(\n Output(display_name=\"File Path\", name=\"path\", method=\"load_files_path\", tool_mode=True),\n )\n else:\n # Multiple files => DataFrame output; advanced parser disabled\n frontend_node[\"outputs\"].append(\n Output(display_name=\"Files\", name=\"dataframe\", method=\"load_files\", tool_mode=True)\n )\n\n return frontend_node\n\n # ------------------------------ Core processing ----------------------------------\n\n def _validate_and_resolve_paths(self) -> list[BaseFileComponent.BaseFile]:\n \"\"\"Override to handle file_path_str input from tool mode.\n\n When called as a tool, the file_path_str parameter can be set.\n If not provided, it will fall back to using the path FileInput (uploaded file).\n Priority:\n 1. file_path_str (if provided by the tool call)\n 2. path (uploaded file from UI)\n \"\"\"\n # Check if file_path_str is provided (from tool mode)\n file_path_str = getattr(self, \"file_path_str\", None)\n if file_path_str:\n # Use the string path from tool mode\n from pathlib import Path\n\n from lfx.schema.data import Data\n\n resolved_path = Path(self.resolve_path(file_path_str))\n if not resolved_path.exists():\n msg = f\"File or directory not found: {file_path_str}\"\n self.log(msg)\n if not self.silent_errors:\n raise ValueError(msg)\n return []\n\n data_obj = Data(data={self.SERVER_FILE_PATH_FIELDNAME: str(resolved_path)})\n return [BaseFileComponent.BaseFile(data_obj, resolved_path, delete_after_processing=False)]\n\n # Otherwise use the default implementation (uses path FileInput)\n return super()._validate_and_resolve_paths()\n\n def _is_docling_compatible(self, file_path: str) -> bool:\n \"\"\"Lightweight extension gate for Docling-compatible types.\"\"\"\n docling_exts = (\n \".adoc\",\n \".asciidoc\",\n \".asc\",\n \".bmp\",\n \".csv\",\n \".dotx\",\n \".dotm\",\n \".docm\",\n \".docx\",\n \".htm\",\n \".html\",\n \".jpg\",\n \".jpeg\",\n \".json\",\n \".md\",\n \".pdf\",\n \".png\",\n \".potx\",\n \".ppsx\",\n \".pptm\",\n \".potm\",\n \".ppsm\",\n \".pptx\",\n \".tiff\",\n \".txt\",\n \".xls\",\n \".xlsx\",\n \".xhtml\",\n \".xml\",\n \".webp\",\n )\n return file_path.lower().endswith(docling_exts)\n\n async def _get_local_file_for_docling(self, file_path: str) -> tuple[str, bool]:\n \"\"\"Get a local file path for Docling processing, downloading from S3 if needed.\n\n Args:\n file_path: Either a local path or S3 key (format \"flow_id/filename\")\n\n Returns:\n tuple[str, bool]: (local_path, should_delete) where should_delete indicates\n if this is a temporary file that should be cleaned up\n \"\"\"\n settings = get_settings_service().settings\n if settings.storage_type == \"local\":\n return file_path, False\n\n # S3 storage - download to temp file\n parsed = parse_storage_path(file_path)\n if not parsed:\n msg = f\"Invalid S3 path format: {file_path}. Expected 'flow_id/filename'\"\n raise ValueError(msg)\n\n storage_service = get_storage_service()\n flow_id, filename = parsed\n\n # Get file content from S3\n content = await storage_service.get_file(flow_id, filename)\n\n suffix = Path(filename).suffix\n with NamedTemporaryFile(mode=\"wb\", suffix=suffix, delete=False) as tmp_file:\n tmp_file.write(content)\n temp_path = tmp_file.name\n\n return temp_path, True\n\n def _process_docling_in_subprocess(self, file_path: str) -> Data | None:\n \"\"\"Run Docling in a separate OS process and map the result to a Data object.\n\n We avoid multiprocessing pickling by launching `python -c \"<script>\"` and\n passing JSON config via stdin. The child prints a JSON result to stdout.\n\n For S3 storage, the file is downloaded to a temp file first.\n \"\"\"\n if not file_path:\n return None\n\n settings = get_settings_service().settings\n if settings.storage_type == \"s3\":\n local_path, should_delete = run_until_complete(self._get_local_file_for_docling(file_path))\n else:\n local_path = file_path\n should_delete = False\n\n try:\n return self._process_docling_subprocess_impl(local_path, file_path)\n finally:\n # Clean up temp file if we created one\n if should_delete:\n with contextlib.suppress(Exception):\n Path(local_path).unlink() # Ignore cleanup errors\n\n def _process_docling_subprocess_impl(self, local_file_path: str, original_file_path: str) -> Data | None:\n \"\"\"Implementation of Docling subprocess processing.\n\n Args:\n local_file_path: Path to local file to process\n original_file_path: Original file path to include in metadata\n Returns:\n Data object with processed content\n \"\"\"\n args: dict[str, Any] = {\n \"file_path\": local_file_path,\n \"markdown\": bool(self.markdown),\n \"image_mode\": str(self.IMAGE_MODE),\n \"md_image_placeholder\": str(self.md_image_placeholder),\n \"md_page_break_placeholder\": str(self.md_page_break_placeholder),\n \"pipeline\": str(self.pipeline),\n \"ocr_engine\": (\n self.ocr_engine if self.ocr_engine and self.ocr_engine != \"None\" and self.pipeline != \"vlm\" else None\n ),\n }\n\n self.log(f\"Starting Docling subprocess for file: {local_file_path}\")\n self.log(args)\n\n # Child script for isolating the docling processing\n child_script = textwrap.dedent(\n r\"\"\"\n import json, sys\n\n def try_imports():\n try:\n from docling.datamodel.base_models import ConversionStatus, InputFormat # type: ignore\n from docling.document_converter import DocumentConverter # type: ignore\n from docling_core.types.doc import ImageRefMode # type: ignore\n return ConversionStatus, InputFormat, DocumentConverter, ImageRefMode, \"latest\"\n except Exception as e:\n raise e\n\n def create_converter(strategy, input_format, DocumentConverter, pipeline, ocr_engine):\n # --- Standard PDF/IMAGE pipeline (your existing behavior), with optional OCR ---\n if pipeline == \"standard\":\n try:\n from docling.datamodel.pipeline_options import PdfPipelineOptions # type: ignore\n from docling.document_converter import PdfFormatOption # type: ignore\n\n pipe = PdfPipelineOptions()\n pipe.do_ocr = False\n\n if ocr_engine:\n try:\n from docling.models.factories import get_ocr_factory # type: ignore\n pipe.do_ocr = True\n fac = get_ocr_factory(allow_external_plugins=False)\n pipe.ocr_options = fac.create_options(kind=ocr_engine)\n except Exception:\n # If OCR setup fails, disable it\n pipe.do_ocr = False\n\n fmt = {}\n if hasattr(input_format, \"PDF\"):\n fmt[getattr(input_format, \"PDF\")] = PdfFormatOption(pipeline_options=pipe)\n if hasattr(input_format, \"IMAGE\"):\n fmt[getattr(input_format, \"IMAGE\")] = PdfFormatOption(pipeline_options=pipe)\n\n return DocumentConverter(format_options=fmt)\n except Exception:\n return DocumentConverter()\n\n # --- Vision-Language Model (VLM) pipeline ---\n if pipeline == \"vlm\":\n try:\n from docling.datamodel.pipeline_options import VlmPipelineOptions\n from docling.datamodel.vlm_model_specs import GRANITEDOCLING_MLX, GRANITEDOCLING_TRANSFORMERS\n from docling.document_converter import PdfFormatOption\n from docling.pipeline.vlm_pipeline import VlmPipeline\n\n vl_pipe = VlmPipelineOptions(\n vlm_options=GRANITEDOCLING_TRANSFORMERS,\n )\n\n if sys.platform == \"darwin\":\n try:\n import mlx_vlm\n vl_pipe.vlm_options = GRANITEDOCLING_MLX\n except ImportError as e:\n raise e\n\n # VLM paths generally don't need OCR; keep OCR off by default here.\n fmt = {}\n if hasattr(input_format, \"PDF\"):\n fmt[getattr(input_format, \"PDF\")] = PdfFormatOption(\n pipeline_cls=VlmPipeline,\n pipeline_options=vl_pipe\n )\n if hasattr(input_format, \"IMAGE\"):\n fmt[getattr(input_format, \"IMAGE\")] = PdfFormatOption(\n pipeline_cls=VlmPipeline,\n pipeline_options=vl_pipe\n )\n\n return DocumentConverter(format_options=fmt)\n except Exception as e:\n raise e\n\n # --- Fallback: default converter with no special options ---\n return DocumentConverter()\n\n def export_markdown(document, ImageRefMode, image_mode, img_ph, pg_ph):\n try:\n mode = getattr(ImageRefMode, image_mode.upper(), image_mode)\n return document.export_to_markdown(\n image_mode=mode,\n image_placeholder=img_ph,\n page_break_placeholder=pg_ph,\n )\n except Exception:\n try:\n return document.export_to_text()\n except Exception:\n return str(document)\n\n def to_rows(doc_dict):\n rows = []\n for t in doc_dict.get(\"texts\", []):\n prov = t.get(\"prov\") or []\n page_no = None\n if prov and isinstance(prov, list) and isinstance(prov[0], dict):\n page_no = prov[0].get(\"page_no\")\n rows.append({\n \"page_no\": page_no,\n \"label\": t.get(\"label\"),\n \"text\": t.get(\"text\"),\n \"level\": t.get(\"level\"),\n })\n return rows\n\n def main():\n cfg = json.loads(sys.stdin.read())\n file_path = cfg[\"file_path\"]\n markdown = cfg[\"markdown\"]\n image_mode = cfg[\"image_mode\"]\n img_ph = cfg[\"md_image_placeholder\"]\n pg_ph = cfg[\"md_page_break_placeholder\"]\n pipeline = cfg[\"pipeline\"]\n ocr_engine = cfg.get(\"ocr_engine\")\n meta = {\"file_path\": file_path}\n\n try:\n ConversionStatus, InputFormat, DocumentConverter, ImageRefMode, strategy = try_imports()\n converter = create_converter(strategy, InputFormat, DocumentConverter, pipeline, ocr_engine)\n try:\n res = converter.convert(file_path)\n except Exception as e:\n print(json.dumps({\"ok\": False, \"error\": f\"Docling conversion error: {e}\", \"meta\": meta}))\n return\n\n ok = False\n if hasattr(res, \"status\"):\n try:\n ok = (res.status == ConversionStatus.SUCCESS) or (str(res.status).lower() == \"success\")\n except Exception:\n ok = (str(res.status).lower() == \"success\")\n if not ok and hasattr(res, \"document\"):\n ok = getattr(res, \"document\", None) is not None\n if not ok:\n print(json.dumps({\"ok\": False, \"error\": \"Docling conversion failed\", \"meta\": meta}))\n return\n\n doc = getattr(res, \"document\", None)\n if doc is None:\n print(json.dumps({\"ok\": False, \"error\": \"Docling produced no document\", \"meta\": meta}))\n return\n\n if markdown:\n text = export_markdown(doc, ImageRefMode, image_mode, img_ph, pg_ph)\n print(json.dumps({\"ok\": True, \"mode\": \"markdown\", \"text\": text, \"meta\": meta}))\n return\n\n # structured\n try:\n doc_dict = doc.export_to_dict()\n except Exception as e:\n print(json.dumps({\"ok\": False, \"error\": f\"Docling export_to_dict failed: {e}\", \"meta\": meta}))\n return\n\n rows = to_rows(doc_dict)\n print(json.dumps({\"ok\": True, \"mode\": \"structured\", \"doc\": rows, \"meta\": meta}))\n except Exception as e:\n print(\n json.dumps({\n \"ok\": False,\n \"error\": f\"Docling processing error: {e}\",\n \"meta\": {\"file_path\": file_path},\n })\n )\n\n if __name__ == \"__main__\":\n main()\n \"\"\"\n )\n\n # Validate file_path to avoid command injection or unsafe input\n if not isinstance(args[\"file_path\"], str) or any(c in args[\"file_path\"] for c in [\";\", \"|\", \"&\", \"$\", \"`\"]):\n return Data(data={\"error\": \"Unsafe file path detected.\", \"file_path\": args[\"file_path\"]})\n\n proc = subprocess.run( # noqa: S603\n [sys.executable, \"-u\", \"-c\", child_script],\n input=json.dumps(args).encode(\"utf-8\"),\n capture_output=True,\n check=False,\n )\n\n if not proc.stdout:\n err_msg = proc.stderr.decode(\"utf-8\", errors=\"replace\") or \"no output from child process\"\n return Data(data={\"error\": f\"Docling subprocess error: {err_msg}\", \"file_path\": original_file_path})\n\n try:\n result = json.loads(proc.stdout.decode(\"utf-8\"))\n except Exception as e: # noqa: BLE001\n err_msg = proc.stderr.decode(\"utf-8\", errors=\"replace\")\n return Data(\n data={\n \"error\": f\"Invalid JSON from Docling subprocess: {e}. stderr={err_msg}\",\n \"file_path\": original_file_path,\n },\n )\n\n if not result.get(\"ok\"):\n return Data(data={\"error\": result.get(\"error\", \"Unknown Docling error\"), **result.get(\"meta\", {})})\n\n meta = result.get(\"meta\", {})\n if result.get(\"mode\") == \"markdown\":\n exported_content = str(result.get(\"text\", \"\"))\n return Data(\n text=exported_content,\n data={\"exported_content\": exported_content, \"export_format\": self.EXPORT_FORMAT, **meta},\n )\n\n rows = list(result.get(\"doc\", []))\n return Data(data={\"doc\": rows, \"export_format\": self.EXPORT_FORMAT, **meta})\n\n def process_files(\n self,\n file_list: list[BaseFileComponent.BaseFile],\n ) -> list[BaseFileComponent.BaseFile]:\n \"\"\"Process input files.\n\n - advanced_mode => Docling in a separate process.\n - Otherwise => standard parsing in current process (optionally threaded).\n \"\"\"\n if not file_list:\n msg = \"No files to process.\"\n raise ValueError(msg)\n\n # Validate image files to detect content/extension mismatches\n # This prevents API errors like \"Image does not match the provided media type\"\n image_extensions = {\"jpeg\", \"jpg\", \"png\", \"gif\", \"webp\", \"bmp\", \"tiff\"}\n for file in file_list:\n extension = file.path.suffix[1:].lower()\n if extension in image_extensions:\n # file.path is already resolved, read bytes directly\n try:\n content = file.path.read_bytes()\n is_valid, error_msg = validate_image_content_type(\n str(file.path),\n content=content,\n )\n if not is_valid:\n self.log(error_msg)\n if not self.silent_errors:\n raise ValueError(error_msg)\n except OSError as e:\n self.log(f\"Could not read file for validation: {e}\")\n # Continue - let it fail later with better error\n\n # Validate that files requiring Docling are only processed when advanced mode is enabled\n if not self.advanced_mode:\n for file in file_list:\n extension = file.path.suffix[1:].lower()\n if extension in self.DOCLING_ONLY_EXTENSIONS:\n msg = (\n f\"File '{file.path.name}' has extension '.{extension}' which requires \"\n f\"Advanced Parser mode. Please enable 'Advanced Parser' to process this file.\"\n )\n self.log(msg)\n raise ValueError(msg)\n\n def process_file_standard(file_path: str, *, silent_errors: bool = False) -> Data | None:\n try:\n return parse_text_file_to_data(file_path, silent_errors=silent_errors)\n except FileNotFoundError as e:\n self.log(f\"File not found: {file_path}. Error: {e}\")\n if not silent_errors:\n raise\n return None\n except Exception as e:\n self.log(f\"Unexpected error processing {file_path}: {e}\")\n if not silent_errors:\n raise\n return None\n\n docling_compatible = all(self._is_docling_compatible(str(f.path)) for f in file_list)\n\n # Advanced path: Check if ALL files are compatible with Docling\n if self.advanced_mode and docling_compatible:\n final_return: list[BaseFileComponent.BaseFile] = []\n for file in file_list:\n file_path = str(file.path)\n advanced_data: Data | None = self._process_docling_in_subprocess(file_path)\n\n # --- UNNEST: expand each element in `doc` to its own Data row\n payload = getattr(advanced_data, \"data\", {}) or {}\n doc_rows = payload.get(\"doc\")\n if isinstance(doc_rows, list) and doc_rows:\n # Non-empty list of structured rows\n rows: list[Data | None] = [\n Data(\n data={\n \"file_path\": file_path,\n **(item if isinstance(item, dict) else {\"value\": item}),\n },\n )\n for item in doc_rows\n ]\n final_return.extend(self.rollup_data(file_list, rows))\n elif isinstance(doc_rows, list) and not doc_rows:\n # Empty list - file was processed but no text content found\n # Create a Data object indicating no content was extracted\n self.log(f\"No text extracted from '{file_path}', creating placeholder data\")\n empty_data = Data(\n data={\n \"file_path\": file_path,\n \"text\": \"(No text content extracted from image)\",\n \"info\": \"Image processed successfully but contained no extractable text\",\n **{k: v for k, v in payload.items() if k != \"doc\"},\n },\n )\n final_return.extend(self.rollup_data([file], [empty_data]))\n else:\n # If not structured, keep as-is (e.g., markdown export or error dict)\n final_return.extend(self.rollup_data(file_list, [advanced_data]))\n return final_return\n\n # Standard multi-file (or single non-advanced) path\n concurrency = 1 if not self.use_multithreading else max(1, self.concurrency_multithreading)\n\n file_paths = [str(f.path) for f in file_list]\n self.log(f\"Starting parallel processing of {len(file_paths)} files with concurrency: {concurrency}.\")\n my_data = parallel_load_data(\n file_paths,\n silent_errors=self.silent_errors,\n load_function=process_file_standard,\n max_concurrency=concurrency,\n )\n return self.rollup_data(file_list, my_data)\n\n # ------------------------------ Output helpers -----------------------------------\n\n def load_files_helper(self) -> DataFrame:\n result = self.load_files()\n\n # Result is a DataFrame - check if it has any rows\n if result.empty:\n msg = \"Could not extract content from the provided file(s).\"\n raise ValueError(msg)\n\n # Check for error column with error messages\n if \"error\" in result.columns:\n errors = result[\"error\"].dropna().tolist()\n if errors and not any(col in result.columns for col in [\"text\", \"doc\", \"exported_content\"]):\n raise ValueError(errors[0])\n\n return result\n\n def load_files_dataframe(self) -> DataFrame:\n \"\"\"Load files using advanced Docling processing and export to DataFrame format.\"\"\"\n self.markdown = False\n return self.load_files_helper()\n\n def load_files_markdown(self) -> Message:\n \"\"\"Load files using advanced Docling processing and export to Markdown format.\"\"\"\n self.markdown = True\n result = self.load_files_helper()\n\n # Result is a DataFrame - check for text or exported_content columns\n if \"text\" in result.columns and not result[\"text\"].isna().all():\n text_values = result[\"text\"].dropna().tolist()\n if text_values:\n return Message(text=str(text_values[0]))\n\n if \"exported_content\" in result.columns and not result[\"exported_content\"].isna().all():\n content_values = result[\"exported_content\"].dropna().tolist()\n if content_values:\n return Message(text=str(content_values[0]))\n\n # Return empty message with info that no text was found\n return Message(text=\"(No text content extracted from file)\")\n"
|
|
1280
|
+
"value": "\"\"\"Enhanced file component with Docling support and process isolation.\n\nNotes:\n-----\n- ALL Docling parsing/export runs in a separate OS process to prevent memory\n growth and native library state from impacting the main Langflow process.\n- Standard text/structured parsing continues to use existing BaseFileComponent\n utilities (and optional threading via `parallel_load_data`).\n\"\"\"\n\nfrom __future__ import annotations\n\nimport contextlib\nimport json\nimport subprocess\nimport sys\nimport textwrap\nfrom copy import deepcopy\nfrom pathlib import Path\nfrom tempfile import NamedTemporaryFile\nfrom typing import Any\n\nfrom lfx.base.data.base_file import BaseFileComponent\nfrom lfx.base.data.storage_utils import parse_storage_path, read_file_bytes, validate_image_content_type\nfrom lfx.base.data.utils import TEXT_FILE_TYPES, parallel_load_data, parse_text_file_to_data\nfrom lfx.inputs.inputs import DropdownInput, MessageTextInput, StrInput\nfrom lfx.io import BoolInput, FileInput, IntInput, Output\nfrom lfx.schema.data import Data\nfrom lfx.schema.dataframe import DataFrame # noqa: TC001\nfrom lfx.schema.message import Message\nfrom lfx.services.deps import get_settings_service, get_storage_service\nfrom lfx.utils.async_helpers import run_until_complete\n\n\nclass FileComponent(BaseFileComponent):\n \"\"\"File component with optional Docling processing (isolated in a subprocess).\"\"\"\n\n display_name = \"Read File\"\n # description is now a dynamic property - see get_tool_description()\n _base_description = \"Loads content from one or more files.\"\n documentation: str = \"https://docs.langflow.org/read-file\"\n icon = \"file-text\"\n name = \"File\"\n add_tool_output = True # Enable tool mode toggle without requiring tool_mode inputs\n\n # Extensions that can be processed without Docling (using standard text parsing)\n TEXT_EXTENSIONS = TEXT_FILE_TYPES\n\n # Extensions that require Docling for processing (images, advanced office formats, etc.)\n DOCLING_ONLY_EXTENSIONS = [\n \"adoc\",\n \"asciidoc\",\n \"asc\",\n \"bmp\",\n \"dotx\",\n \"dotm\",\n \"docm\",\n \"jpg\",\n \"jpeg\",\n \"png\",\n \"potx\",\n \"ppsx\",\n \"pptm\",\n \"potm\",\n \"ppsm\",\n \"pptx\",\n \"tiff\",\n \"xls\",\n \"xlsx\",\n \"xhtml\",\n \"webp\",\n ]\n\n # Docling-supported/compatible extensions; TEXT_FILE_TYPES are supported by the base loader.\n VALID_EXTENSIONS = [\n *TEXT_EXTENSIONS,\n *DOCLING_ONLY_EXTENSIONS,\n ]\n\n # Fixed export settings used when markdown export is requested.\n EXPORT_FORMAT = \"Markdown\"\n IMAGE_MODE = \"placeholder\"\n\n _base_inputs = deepcopy(BaseFileComponent.get_base_inputs())\n\n for input_item in _base_inputs:\n if isinstance(input_item, FileInput) and input_item.name == \"path\":\n input_item.real_time_refresh = True\n input_item.tool_mode = False # Disable tool mode for file upload input\n input_item.required = False # Make it optional so it doesn't error in tool mode\n break\n\n inputs = [\n *_base_inputs,\n StrInput(\n name=\"file_path_str\",\n display_name=\"File Path\",\n info=(\n \"Path to the file to read. Used when component is called as a tool. \"\n \"If not provided, will use the uploaded file from 'path' input.\"\n ),\n show=False,\n advanced=True,\n tool_mode=True, # Required for Toolset toggle, but _get_tools() ignores this parameter\n required=False,\n ),\n BoolInput(\n name=\"advanced_mode\",\n display_name=\"Advanced Parser\",\n value=False,\n real_time_refresh=True,\n info=(\n \"Enable advanced document processing and export with Docling for PDFs, images, and office documents. \"\n \"Note that advanced document processing can consume significant resources.\"\n ),\n show=True,\n ),\n DropdownInput(\n name=\"pipeline\",\n display_name=\"Pipeline\",\n info=\"Docling pipeline to use\",\n options=[\"standard\", \"vlm\"],\n value=\"standard\",\n advanced=True,\n real_time_refresh=True,\n ),\n DropdownInput(\n name=\"ocr_engine\",\n display_name=\"OCR Engine\",\n info=\"OCR engine to use. Only available when pipeline is set to 'standard'.\",\n options=[\"None\", \"easyocr\"],\n value=\"easyocr\",\n show=False,\n advanced=True,\n ),\n StrInput(\n name=\"md_image_placeholder\",\n display_name=\"Image placeholder\",\n info=\"Specify the image placeholder for markdown exports.\",\n value=\"<!-- image -->\",\n advanced=True,\n show=False,\n ),\n StrInput(\n name=\"md_page_break_placeholder\",\n display_name=\"Page break placeholder\",\n info=\"Add this placeholder between pages in the markdown output.\",\n value=\"\",\n advanced=True,\n show=False,\n ),\n MessageTextInput(\n name=\"doc_key\",\n display_name=\"Doc Key\",\n info=\"The key to use for the DoclingDocument column.\",\n value=\"doc\",\n advanced=True,\n show=False,\n ),\n # Deprecated input retained for backward-compatibility.\n BoolInput(\n name=\"use_multithreading\",\n display_name=\"[Deprecated] Use Multithreading\",\n advanced=True,\n value=True,\n info=\"Set 'Processing Concurrency' greater than 1 to enable multithreading.\",\n ),\n IntInput(\n name=\"concurrency_multithreading\",\n display_name=\"Processing Concurrency\",\n advanced=True,\n info=\"When multiple files are being processed, the number of files to process concurrently.\",\n value=1,\n ),\n BoolInput(\n name=\"markdown\",\n display_name=\"Markdown Export\",\n info=\"Export processed documents to Markdown format. Only available when advanced mode is enabled.\",\n value=False,\n show=False,\n ),\n ]\n\n outputs = [\n Output(display_name=\"Raw Content\", name=\"message\", method=\"load_files_message\", tool_mode=True),\n ]\n\n # ------------------------------ Tool description with file names --------------\n\n def get_tool_description(self) -> str:\n \"\"\"Return a dynamic description that includes the names of uploaded files.\n\n This helps the Agent understand which files are available to read.\n \"\"\"\n base_description = \"Loads and returns the content from uploaded files.\"\n\n # Get the list of uploaded file paths\n file_paths = getattr(self, \"path\", None)\n if not file_paths:\n return base_description\n\n # Ensure it's a list\n if not isinstance(file_paths, list):\n file_paths = [file_paths]\n\n # Extract just the file names from the paths\n file_names = []\n for fp in file_paths:\n if fp:\n name = Path(fp).name\n file_names.append(name)\n\n if file_names:\n files_str = \", \".join(file_names)\n return f\"{base_description} Available files: {files_str}. Call this tool to read these files.\"\n\n return base_description\n\n @property\n def description(self) -> str:\n \"\"\"Dynamic description property that includes uploaded file names.\"\"\"\n return self.get_tool_description()\n\n async def _get_tools(self) -> list:\n \"\"\"Override to create a tool without parameters.\n\n The Read File component should use the files already uploaded via UI,\n not accept file paths from the Agent (which wouldn't know the internal paths).\n \"\"\"\n from langchain_core.tools import StructuredTool\n from pydantic import BaseModel\n\n # Empty schema - no parameters needed\n class EmptySchema(BaseModel):\n \"\"\"No parameters required - uses pre-uploaded files.\"\"\"\n\n async def read_files_tool() -> str:\n \"\"\"Read the content of uploaded files.\"\"\"\n try:\n result = self.load_files_message()\n if hasattr(result, \"get_text\"):\n return result.get_text()\n if hasattr(result, \"text\"):\n return result.text\n return str(result)\n except (FileNotFoundError, ValueError, OSError, RuntimeError) as e:\n return f\"Error reading files: {e}\"\n\n description = self.get_tool_description()\n\n tool = StructuredTool(\n name=\"load_files_message\",\n description=description,\n coroutine=read_files_tool,\n args_schema=EmptySchema,\n handle_tool_error=True,\n tags=[\"load_files_message\"],\n metadata={\n \"display_name\": \"Read File\",\n \"display_description\": description,\n },\n )\n\n return [tool]\n\n # ------------------------------ UI helpers --------------------------------------\n\n def _path_value(self, template: dict) -> list[str]:\n \"\"\"Return the list of currently selected file paths from the template.\"\"\"\n return template.get(\"path\", {}).get(\"file_path\", [])\n\n def update_build_config(\n self,\n build_config: dict[str, Any],\n field_value: Any,\n field_name: str | None = None,\n ) -> dict[str, Any]:\n \"\"\"Show/hide Advanced Parser and related fields based on selection context.\"\"\"\n if field_name == \"path\":\n paths = self._path_value(build_config)\n\n # If all files can be processed by docling, do so\n allow_advanced = all(not file_path.endswith((\".csv\", \".xlsx\", \".parquet\")) for file_path in paths)\n build_config[\"advanced_mode\"][\"show\"] = allow_advanced\n if not allow_advanced:\n build_config[\"advanced_mode\"][\"value\"] = False\n for f in (\"pipeline\", \"ocr_engine\", \"doc_key\", \"md_image_placeholder\", \"md_page_break_placeholder\"):\n if f in build_config:\n build_config[f][\"show\"] = False\n\n # Docling Processing\n elif field_name == \"advanced_mode\":\n for f in (\"pipeline\", \"ocr_engine\", \"doc_key\", \"md_image_placeholder\", \"md_page_break_placeholder\"):\n if f in build_config:\n build_config[f][\"show\"] = bool(field_value)\n if f == \"pipeline\":\n build_config[f][\"advanced\"] = not bool(field_value)\n\n elif field_name == \"pipeline\":\n if field_value == \"standard\":\n build_config[\"ocr_engine\"][\"show\"] = True\n build_config[\"ocr_engine\"][\"value\"] = \"easyocr\"\n else:\n build_config[\"ocr_engine\"][\"show\"] = False\n build_config[\"ocr_engine\"][\"value\"] = \"None\"\n\n return build_config\n\n def update_outputs(self, frontend_node: dict[str, Any], field_name: str, field_value: Any) -> dict[str, Any]: # noqa: ARG002\n \"\"\"Dynamically show outputs based on file count/type and advanced mode.\"\"\"\n if field_name not in [\"path\", \"advanced_mode\", \"pipeline\"]:\n return frontend_node\n\n template = frontend_node.get(\"template\", {})\n paths = self._path_value(template)\n if not paths:\n return frontend_node\n\n frontend_node[\"outputs\"] = []\n if len(paths) == 1:\n file_path = paths[0] if field_name == \"path\" else frontend_node[\"template\"][\"path\"][\"file_path\"][0]\n if file_path.endswith((\".csv\", \".xlsx\", \".parquet\")):\n frontend_node[\"outputs\"].append(\n Output(\n display_name=\"Structured Content\",\n name=\"dataframe\",\n method=\"load_files_structured\",\n tool_mode=True,\n ),\n )\n elif file_path.endswith(\".json\"):\n frontend_node[\"outputs\"].append(\n Output(display_name=\"Structured Content\", name=\"json\", method=\"load_files_json\", tool_mode=True),\n )\n\n advanced_mode = frontend_node.get(\"template\", {}).get(\"advanced_mode\", {}).get(\"value\", False)\n if advanced_mode:\n frontend_node[\"outputs\"].append(\n Output(\n display_name=\"Structured Output\",\n name=\"advanced_dataframe\",\n method=\"load_files_dataframe\",\n tool_mode=True,\n ),\n )\n frontend_node[\"outputs\"].append(\n Output(\n display_name=\"Markdown\", name=\"advanced_markdown\", method=\"load_files_markdown\", tool_mode=True\n ),\n )\n frontend_node[\"outputs\"].append(\n Output(display_name=\"File Path\", name=\"path\", method=\"load_files_path\", tool_mode=True),\n )\n else:\n frontend_node[\"outputs\"].append(\n Output(display_name=\"Raw Content\", name=\"message\", method=\"load_files_message\", tool_mode=True),\n )\n frontend_node[\"outputs\"].append(\n Output(display_name=\"File Path\", name=\"path\", method=\"load_files_path\", tool_mode=True),\n )\n else:\n # Multiple files => DataFrame output; advanced parser disabled\n frontend_node[\"outputs\"].append(\n Output(display_name=\"Files\", name=\"dataframe\", method=\"load_files\", tool_mode=True)\n )\n\n return frontend_node\n\n # ------------------------------ Core processing ----------------------------------\n\n def _validate_and_resolve_paths(self) -> list[BaseFileComponent.BaseFile]:\n \"\"\"Override to handle file_path_str input from tool mode.\n\n When called as a tool, the file_path_str parameter can be set.\n If not provided, it will fall back to using the path FileInput (uploaded file).\n Priority:\n 1. file_path_str (if provided by the tool call)\n 2. path (uploaded file from UI)\n \"\"\"\n # Check if file_path_str is provided (from tool mode)\n file_path_str = getattr(self, \"file_path_str\", None)\n if file_path_str:\n # Use the string path from tool mode\n from pathlib import Path\n\n from lfx.schema.data import Data\n\n resolved_path = Path(self.resolve_path(file_path_str))\n if not resolved_path.exists():\n msg = f\"File or directory not found: {file_path_str}\"\n self.log(msg)\n if not self.silent_errors:\n raise ValueError(msg)\n return []\n\n data_obj = Data(data={self.SERVER_FILE_PATH_FIELDNAME: str(resolved_path)})\n return [BaseFileComponent.BaseFile(data_obj, resolved_path, delete_after_processing=False)]\n\n # Otherwise use the default implementation (uses path FileInput)\n return super()._validate_and_resolve_paths()\n\n def _is_docling_compatible(self, file_path: str) -> bool:\n \"\"\"Lightweight extension gate for Docling-compatible types.\"\"\"\n docling_exts = (\n \".adoc\",\n \".asciidoc\",\n \".asc\",\n \".bmp\",\n \".csv\",\n \".dotx\",\n \".dotm\",\n \".docm\",\n \".docx\",\n \".htm\",\n \".html\",\n \".jpg\",\n \".jpeg\",\n \".json\",\n \".md\",\n \".pdf\",\n \".png\",\n \".potx\",\n \".ppsx\",\n \".pptm\",\n \".potm\",\n \".ppsm\",\n \".pptx\",\n \".tiff\",\n \".txt\",\n \".xls\",\n \".xlsx\",\n \".xhtml\",\n \".xml\",\n \".webp\",\n )\n return file_path.lower().endswith(docling_exts)\n\n async def _get_local_file_for_docling(self, file_path: str) -> tuple[str, bool]:\n \"\"\"Get a local file path for Docling processing, downloading from S3 if needed.\n\n Args:\n file_path: Either a local path or S3 key (format \"flow_id/filename\")\n\n Returns:\n tuple[str, bool]: (local_path, should_delete) where should_delete indicates\n if this is a temporary file that should be cleaned up\n \"\"\"\n settings = get_settings_service().settings\n if settings.storage_type == \"local\":\n return file_path, False\n\n # S3 storage - download to temp file\n parsed = parse_storage_path(file_path)\n if not parsed:\n msg = f\"Invalid S3 path format: {file_path}. Expected 'flow_id/filename'\"\n raise ValueError(msg)\n\n storage_service = get_storage_service()\n flow_id, filename = parsed\n\n # Get file content from S3\n content = await storage_service.get_file(flow_id, filename)\n\n suffix = Path(filename).suffix\n with NamedTemporaryFile(mode=\"wb\", suffix=suffix, delete=False) as tmp_file:\n tmp_file.write(content)\n temp_path = tmp_file.name\n\n return temp_path, True\n\n def _process_docling_in_subprocess(self, file_path: str) -> Data | None:\n \"\"\"Run Docling in a separate OS process and map the result to a Data object.\n\n We avoid multiprocessing pickling by launching `python -c \"<script>\"` and\n passing JSON config via stdin. The child prints a JSON result to stdout.\n\n For S3 storage, the file is downloaded to a temp file first.\n \"\"\"\n if not file_path:\n return None\n\n settings = get_settings_service().settings\n if settings.storage_type == \"s3\":\n local_path, should_delete = run_until_complete(self._get_local_file_for_docling(file_path))\n else:\n local_path = file_path\n should_delete = False\n\n try:\n return self._process_docling_subprocess_impl(local_path, file_path)\n finally:\n # Clean up temp file if we created one\n if should_delete:\n with contextlib.suppress(Exception):\n Path(local_path).unlink() # Ignore cleanup errors\n\n def _process_docling_subprocess_impl(self, local_file_path: str, original_file_path: str) -> Data | None:\n \"\"\"Implementation of Docling subprocess processing.\n\n Args:\n local_file_path: Path to local file to process\n original_file_path: Original file path to include in metadata\n Returns:\n Data object with processed content\n \"\"\"\n args: dict[str, Any] = {\n \"file_path\": local_file_path,\n \"markdown\": bool(self.markdown),\n \"image_mode\": str(self.IMAGE_MODE),\n \"md_image_placeholder\": str(self.md_image_placeholder),\n \"md_page_break_placeholder\": str(self.md_page_break_placeholder),\n \"pipeline\": str(self.pipeline),\n \"ocr_engine\": (\n self.ocr_engine if self.ocr_engine and self.ocr_engine != \"None\" and self.pipeline != \"vlm\" else None\n ),\n }\n\n # Child script for isolating the docling processing\n child_script = textwrap.dedent(\n r\"\"\"\n import json, sys\n\n def try_imports():\n try:\n from docling.datamodel.base_models import ConversionStatus, InputFormat # type: ignore\n from docling.document_converter import DocumentConverter # type: ignore\n from docling_core.types.doc import ImageRefMode # type: ignore\n return ConversionStatus, InputFormat, DocumentConverter, ImageRefMode, \"latest\"\n except Exception as e:\n raise e\n\n def create_converter(strategy, input_format, DocumentConverter, pipeline, ocr_engine):\n # --- Standard PDF/IMAGE pipeline (your existing behavior), with optional OCR ---\n if pipeline == \"standard\":\n try:\n from docling.datamodel.pipeline_options import PdfPipelineOptions # type: ignore\n from docling.document_converter import PdfFormatOption # type: ignore\n\n pipe = PdfPipelineOptions()\n pipe.do_ocr = False\n\n if ocr_engine:\n try:\n from docling.models.factories import get_ocr_factory # type: ignore\n pipe.do_ocr = True\n fac = get_ocr_factory(allow_external_plugins=False)\n pipe.ocr_options = fac.create_options(kind=ocr_engine)\n except Exception:\n # If OCR setup fails, disable it\n pipe.do_ocr = False\n\n fmt = {}\n if hasattr(input_format, \"PDF\"):\n fmt[getattr(input_format, \"PDF\")] = PdfFormatOption(pipeline_options=pipe)\n if hasattr(input_format, \"IMAGE\"):\n fmt[getattr(input_format, \"IMAGE\")] = PdfFormatOption(pipeline_options=pipe)\n\n return DocumentConverter(format_options=fmt)\n except Exception:\n return DocumentConverter()\n\n # --- Vision-Language Model (VLM) pipeline ---\n if pipeline == \"vlm\":\n try:\n from docling.datamodel.pipeline_options import VlmPipelineOptions\n from docling.datamodel.vlm_model_specs import GRANITEDOCLING_MLX, GRANITEDOCLING_TRANSFORMERS\n from docling.document_converter import PdfFormatOption\n from docling.pipeline.vlm_pipeline import VlmPipeline\n\n vl_pipe = VlmPipelineOptions(\n vlm_options=GRANITEDOCLING_TRANSFORMERS,\n )\n\n if sys.platform == \"darwin\":\n try:\n import mlx_vlm\n vl_pipe.vlm_options = GRANITEDOCLING_MLX\n except ImportError as e:\n raise e\n\n # VLM paths generally don't need OCR; keep OCR off by default here.\n fmt = {}\n if hasattr(input_format, \"PDF\"):\n fmt[getattr(input_format, \"PDF\")] = PdfFormatOption(\n pipeline_cls=VlmPipeline,\n pipeline_options=vl_pipe\n )\n if hasattr(input_format, \"IMAGE\"):\n fmt[getattr(input_format, \"IMAGE\")] = PdfFormatOption(\n pipeline_cls=VlmPipeline,\n pipeline_options=vl_pipe\n )\n\n return DocumentConverter(format_options=fmt)\n except Exception as e:\n raise e\n\n # --- Fallback: default converter with no special options ---\n return DocumentConverter()\n\n def export_markdown(document, ImageRefMode, image_mode, img_ph, pg_ph):\n try:\n mode = getattr(ImageRefMode, image_mode.upper(), image_mode)\n return document.export_to_markdown(\n image_mode=mode,\n image_placeholder=img_ph,\n page_break_placeholder=pg_ph,\n )\n except Exception:\n try:\n return document.export_to_text()\n except Exception:\n return str(document)\n\n def to_rows(doc_dict):\n rows = []\n for t in doc_dict.get(\"texts\", []):\n prov = t.get(\"prov\") or []\n page_no = None\n if prov and isinstance(prov, list) and isinstance(prov[0], dict):\n page_no = prov[0].get(\"page_no\")\n rows.append({\n \"page_no\": page_no,\n \"label\": t.get(\"label\"),\n \"text\": t.get(\"text\"),\n \"level\": t.get(\"level\"),\n })\n return rows\n\n def main():\n cfg = json.loads(sys.stdin.read())\n file_path = cfg[\"file_path\"]\n markdown = cfg[\"markdown\"]\n image_mode = cfg[\"image_mode\"]\n img_ph = cfg[\"md_image_placeholder\"]\n pg_ph = cfg[\"md_page_break_placeholder\"]\n pipeline = cfg[\"pipeline\"]\n ocr_engine = cfg.get(\"ocr_engine\")\n meta = {\"file_path\": file_path}\n\n try:\n ConversionStatus, InputFormat, DocumentConverter, ImageRefMode, strategy = try_imports()\n converter = create_converter(strategy, InputFormat, DocumentConverter, pipeline, ocr_engine)\n try:\n res = converter.convert(file_path)\n except Exception as e:\n print(json.dumps({\"ok\": False, \"error\": f\"Docling conversion error: {e}\", \"meta\": meta}))\n return\n\n ok = False\n if hasattr(res, \"status\"):\n try:\n ok = (res.status == ConversionStatus.SUCCESS) or (str(res.status).lower() == \"success\")\n except Exception:\n ok = (str(res.status).lower() == \"success\")\n if not ok and hasattr(res, \"document\"):\n ok = getattr(res, \"document\", None) is not None\n if not ok:\n print(json.dumps({\"ok\": False, \"error\": \"Docling conversion failed\", \"meta\": meta}))\n return\n\n doc = getattr(res, \"document\", None)\n if doc is None:\n print(json.dumps({\"ok\": False, \"error\": \"Docling produced no document\", \"meta\": meta}))\n return\n\n if markdown:\n text = export_markdown(doc, ImageRefMode, image_mode, img_ph, pg_ph)\n print(json.dumps({\"ok\": True, \"mode\": \"markdown\", \"text\": text, \"meta\": meta}))\n return\n\n # structured\n try:\n doc_dict = doc.export_to_dict()\n except Exception as e:\n print(json.dumps({\"ok\": False, \"error\": f\"Docling export_to_dict failed: {e}\", \"meta\": meta}))\n return\n\n rows = to_rows(doc_dict)\n print(json.dumps({\"ok\": True, \"mode\": \"structured\", \"doc\": rows, \"meta\": meta}))\n except Exception as e:\n print(\n json.dumps({\n \"ok\": False,\n \"error\": f\"Docling processing error: {e}\",\n \"meta\": {\"file_path\": file_path},\n })\n )\n\n if __name__ == \"__main__\":\n main()\n \"\"\"\n )\n\n # Validate file_path to avoid command injection or unsafe input\n if not isinstance(args[\"file_path\"], str) or any(c in args[\"file_path\"] for c in [\";\", \"|\", \"&\", \"$\", \"`\"]):\n return Data(data={\"error\": \"Unsafe file path detected.\", \"file_path\": args[\"file_path\"]})\n\n proc = subprocess.run( # noqa: S603\n [sys.executable, \"-u\", \"-c\", child_script],\n input=json.dumps(args).encode(\"utf-8\"),\n capture_output=True,\n check=False,\n )\n\n if not proc.stdout:\n err_msg = proc.stderr.decode(\"utf-8\", errors=\"replace\") if proc.stderr else \"no output from child process\"\n return Data(data={\"error\": f\"Docling subprocess error: {err_msg}\", \"file_path\": original_file_path})\n\n try:\n result = json.loads(proc.stdout.decode(\"utf-8\"))\n except Exception as e: # noqa: BLE001\n err_msg = proc.stderr.decode(\"utf-8\", errors=\"replace\")\n return Data(\n data={\n \"error\": f\"Invalid JSON from Docling subprocess: {e}. stderr={err_msg}\",\n \"file_path\": original_file_path,\n },\n )\n\n if not result.get(\"ok\"):\n error_msg = result.get(\"error\", \"Unknown Docling error\")\n # Override meta file_path with original_file_path to ensure correct path matching\n meta = result.get(\"meta\", {})\n meta[\"file_path\"] = original_file_path\n return Data(data={\"error\": error_msg, **meta})\n\n meta = result.get(\"meta\", {})\n # Override meta file_path with original_file_path to ensure correct path matching\n # The subprocess returns the temp file path, but we need the original S3/local path for rollup_data\n meta[\"file_path\"] = original_file_path\n if result.get(\"mode\") == \"markdown\":\n exported_content = str(result.get(\"text\", \"\"))\n return Data(\n text=exported_content,\n data={\"exported_content\": exported_content, \"export_format\": self.EXPORT_FORMAT, **meta},\n )\n\n rows = list(result.get(\"doc\", []))\n return Data(data={\"doc\": rows, \"export_format\": self.EXPORT_FORMAT, **meta})\n\n def process_files(\n self,\n file_list: list[BaseFileComponent.BaseFile],\n ) -> list[BaseFileComponent.BaseFile]:\n \"\"\"Process input files.\n\n - advanced_mode => Docling in a separate process.\n - Otherwise => standard parsing in current process (optionally threaded).\n \"\"\"\n if not file_list:\n msg = \"No files to process.\"\n raise ValueError(msg)\n\n # Validate image files to detect content/extension mismatches\n # This prevents API errors like \"Image does not match the provided media type\"\n image_extensions = {\"jpeg\", \"jpg\", \"png\", \"gif\", \"webp\", \"bmp\", \"tiff\"}\n settings = get_settings_service().settings\n for file in file_list:\n extension = file.path.suffix[1:].lower()\n if extension in image_extensions:\n # Read bytes based on storage type\n try:\n if settings.storage_type == \"s3\":\n # For S3 storage, use storage service to read file bytes\n file_path_str = str(file.path)\n content = run_until_complete(read_file_bytes(file_path_str))\n else:\n # For local storage, read bytes directly from filesystem\n content = file.path.read_bytes()\n\n is_valid, error_msg = validate_image_content_type(\n str(file.path),\n content=content,\n )\n if not is_valid:\n self.log(error_msg)\n if not self.silent_errors:\n raise ValueError(error_msg)\n except (OSError, FileNotFoundError) as e:\n self.log(f\"Could not read file for validation: {e}\")\n # Continue - let it fail later with better error\n\n # Validate that files requiring Docling are only processed when advanced mode is enabled\n if not self.advanced_mode:\n for file in file_list:\n extension = file.path.suffix[1:].lower()\n if extension in self.DOCLING_ONLY_EXTENSIONS:\n msg = (\n f\"File '{file.path.name}' has extension '.{extension}' which requires \"\n f\"Advanced Parser mode. Please enable 'Advanced Parser' to process this file.\"\n )\n self.log(msg)\n raise ValueError(msg)\n\n def process_file_standard(file_path: str, *, silent_errors: bool = False) -> Data | None:\n try:\n return parse_text_file_to_data(file_path, silent_errors=silent_errors)\n except FileNotFoundError as e:\n self.log(f\"File not found: {file_path}. Error: {e}\")\n if not silent_errors:\n raise\n return None\n except Exception as e:\n self.log(f\"Unexpected error processing {file_path}: {e}\")\n if not silent_errors:\n raise\n return None\n\n docling_compatible = all(self._is_docling_compatible(str(f.path)) for f in file_list)\n\n # Advanced path: Check if ALL files are compatible with Docling\n if self.advanced_mode and docling_compatible:\n final_return: list[BaseFileComponent.BaseFile] = []\n for file in file_list:\n file_path = str(file.path)\n advanced_data: Data | None = self._process_docling_in_subprocess(file_path)\n\n # Handle None case - Docling processing failed or returned None\n if advanced_data is None:\n error_data = Data(\n data={\n \"file_path\": file_path,\n \"error\": \"Docling processing returned no result. Check logs for details.\",\n },\n )\n final_return.extend(self.rollup_data([file], [error_data]))\n continue\n\n # --- UNNEST: expand each element in `doc` to its own Data row\n payload = getattr(advanced_data, \"data\", {}) or {}\n\n # Check for errors first\n if \"error\" in payload:\n error_msg = payload.get(\"error\", \"Unknown error\")\n error_data = Data(\n data={\n \"file_path\": file_path,\n \"error\": error_msg,\n **{k: v for k, v in payload.items() if k not in (\"error\", \"file_path\")},\n },\n )\n final_return.extend(self.rollup_data([file], [error_data]))\n continue\n\n doc_rows = payload.get(\"doc\")\n if isinstance(doc_rows, list) and doc_rows:\n # Non-empty list of structured rows\n rows: list[Data | None] = [\n Data(\n data={\n \"file_path\": file_path,\n **(item if isinstance(item, dict) else {\"value\": item}),\n },\n )\n for item in doc_rows\n ]\n final_return.extend(self.rollup_data([file], rows))\n elif isinstance(doc_rows, list) and not doc_rows:\n # Empty list - file was processed but no text content found\n # Create a Data object indicating no content was extracted\n self.log(f\"No text extracted from '{file_path}', creating placeholder data\")\n empty_data = Data(\n data={\n \"file_path\": file_path,\n \"text\": \"(No text content extracted from image)\",\n \"info\": \"Image processed successfully but contained no extractable text\",\n **{k: v for k, v in payload.items() if k != \"doc\"},\n },\n )\n final_return.extend(self.rollup_data([file], [empty_data]))\n else:\n # If not structured, keep as-is (e.g., markdown export or error dict)\n # Ensure file_path is set for proper rollup matching\n if not payload.get(\"file_path\"):\n payload[\"file_path\"] = file_path\n # Create new Data with file_path\n advanced_data = Data(\n data=payload,\n text=getattr(advanced_data, \"text\", None),\n )\n final_return.extend(self.rollup_data([file], [advanced_data]))\n return final_return\n\n # Standard multi-file (or single non-advanced) path\n concurrency = 1 if not self.use_multithreading else max(1, self.concurrency_multithreading)\n\n file_paths = [str(f.path) for f in file_list]\n self.log(f\"Starting parallel processing of {len(file_paths)} files with concurrency: {concurrency}.\")\n my_data = parallel_load_data(\n file_paths,\n silent_errors=self.silent_errors,\n load_function=process_file_standard,\n max_concurrency=concurrency,\n )\n return self.rollup_data(file_list, my_data)\n\n # ------------------------------ Output helpers -----------------------------------\n\n def load_files_helper(self) -> DataFrame:\n result = self.load_files()\n\n # Result is a DataFrame - check if it has any rows\n if result.empty:\n msg = \"Could not extract content from the provided file(s).\"\n raise ValueError(msg)\n\n # Check for error column with error messages\n if \"error\" in result.columns:\n errors = result[\"error\"].dropna().tolist()\n if errors and not any(col in result.columns for col in [\"text\", \"doc\", \"exported_content\"]):\n raise ValueError(errors[0])\n\n return result\n\n def load_files_dataframe(self) -> DataFrame:\n \"\"\"Load files using advanced Docling processing and export to DataFrame format.\"\"\"\n self.markdown = False\n return self.load_files_helper()\n\n def load_files_markdown(self) -> Message:\n \"\"\"Load files using advanced Docling processing and export to Markdown format.\"\"\"\n self.markdown = True\n result = self.load_files_helper()\n\n # Result is a DataFrame - check for text or exported_content columns\n if \"text\" in result.columns and not result[\"text\"].isna().all():\n text_values = result[\"text\"].dropna().tolist()\n if text_values:\n return Message(text=str(text_values[0]))\n\n if \"exported_content\" in result.columns and not result[\"exported_content\"].isna().all():\n content_values = result[\"exported_content\"].dropna().tolist()\n if content_values:\n return Message(text=str(content_values[0]))\n\n # Return empty message with info that no text was found\n return Message(text=\"(No text content extracted from file)\")\n"
|
|
1281
1281
|
},
|
|
1282
1282
|
"concurrency_multithreading": {
|
|
1283
1283
|
"_input_type": "IntInput",
|
|
@@ -737,7 +737,7 @@
|
|
|
737
737
|
"last_updated": "2025-09-29T18:32:20.563Z",
|
|
738
738
|
"legacy": false,
|
|
739
739
|
"metadata": {
|
|
740
|
-
"code_hash": "
|
|
740
|
+
"code_hash": "52a451e4f053",
|
|
741
741
|
"dependencies": {
|
|
742
742
|
"dependencies": [
|
|
743
743
|
{
|
|
@@ -867,7 +867,7 @@
|
|
|
867
867
|
"show": true,
|
|
868
868
|
"title_case": false,
|
|
869
869
|
"type": "code",
|
|
870
|
-
"value": "from __future__ import annotations\n\nimport asyncio\nimport contextlib\nimport hashlib\nimport json\nimport re\nimport uuid\nfrom dataclasses import asdict, dataclass, field\nfrom datetime import datetime, timezone\nfrom pathlib import Path\nfrom typing import TYPE_CHECKING, Any\n\nimport pandas as pd\nfrom cryptography.fernet import InvalidToken\nfrom langchain_chroma import Chroma\nfrom langflow.services.auth.utils import decrypt_api_key, encrypt_api_key\nfrom langflow.services.database.models.user.crud import get_user_by_id\n\nfrom lfx.base.knowledge_bases.knowledge_base_utils import get_knowledge_bases\nfrom lfx.base.models.openai_constants import OPENAI_EMBEDDING_MODEL_NAMES\nfrom lfx.components.processing.converter import convert_to_dataframe\nfrom lfx.custom import Component\nfrom lfx.io import (\n BoolInput,\n DropdownInput,\n HandleInput,\n IntInput,\n Output,\n SecretStrInput,\n StrInput,\n TableInput,\n)\nfrom lfx.schema.data import Data\nfrom lfx.schema.table import EditMode\nfrom lfx.services.deps import (\n get_settings_service,\n get_variable_service,\n session_scope,\n)\n\nif TYPE_CHECKING:\n from lfx.schema.dataframe import DataFrame\n\nHUGGINGFACE_MODEL_NAMES = [\n \"sentence-transformers/all-MiniLM-L6-v2\",\n \"sentence-transformers/all-mpnet-base-v2\",\n]\nCOHERE_MODEL_NAMES = [\"embed-english-v3.0\", \"embed-multilingual-v3.0\"]\n\n_KNOWLEDGE_BASES_ROOT_PATH: Path | None = None\n\n\ndef _get_knowledge_bases_root_path() -> Path:\n \"\"\"Lazy load the knowledge bases root path from settings.\"\"\"\n global _KNOWLEDGE_BASES_ROOT_PATH # noqa: PLW0603\n if _KNOWLEDGE_BASES_ROOT_PATH is None:\n settings = get_settings_service().settings\n knowledge_directory = settings.knowledge_bases_dir\n if not knowledge_directory:\n msg = \"Knowledge bases directory is not set in the settings.\"\n raise ValueError(msg)\n _KNOWLEDGE_BASES_ROOT_PATH = Path(knowledge_directory).expanduser()\n return _KNOWLEDGE_BASES_ROOT_PATH\n\n\nclass KnowledgeIngestionComponent(Component):\n \"\"\"Create or append to Langflow Knowledge from a DataFrame.\"\"\"\n\n # ------ UI metadata ---------------------------------------------------\n display_name = \"Knowledge Ingestion\"\n description = \"Create or update knowledge in Langflow.\"\n icon = \"upload\"\n name = \"KnowledgeIngestion\"\n\n def __init__(self, *args, **kwargs) -> None:\n super().__init__(*args, **kwargs)\n self._cached_kb_path: Path | None = None\n\n @dataclass\n class NewKnowledgeBaseInput:\n functionality: str = \"create\"\n fields: dict[str, dict] = field(\n default_factory=lambda: {\n \"data\": {\n \"node\": {\n \"name\": \"create_knowledge_base\",\n \"description\": \"Create new knowledge in Langflow.\",\n \"display_name\": \"Create new knowledge\",\n \"field_order\": [\n \"01_new_kb_name\",\n \"02_embedding_model\",\n \"03_api_key\",\n ],\n \"template\": {\n \"01_new_kb_name\": StrInput(\n name=\"new_kb_name\",\n display_name=\"Knowledge Name\",\n info=\"Name of the new knowledge to create.\",\n required=True,\n ),\n \"02_embedding_model\": DropdownInput(\n name=\"embedding_model\",\n display_name=\"Choose Embedding\",\n info=\"Select the embedding model to use for this knowledge base.\",\n required=True,\n options=OPENAI_EMBEDDING_MODEL_NAMES + HUGGINGFACE_MODEL_NAMES + COHERE_MODEL_NAMES,\n options_metadata=[{\"icon\": \"OpenAI\"} for _ in OPENAI_EMBEDDING_MODEL_NAMES]\n + [{\"icon\": \"HuggingFace\"} for _ in HUGGINGFACE_MODEL_NAMES]\n + [{\"icon\": \"Cohere\"} for _ in COHERE_MODEL_NAMES],\n ),\n \"03_api_key\": SecretStrInput(\n name=\"api_key\",\n display_name=\"API Key\",\n info=\"Provider API key for embedding model\",\n required=True,\n load_from_db=False,\n ),\n },\n },\n }\n }\n )\n\n # ------ Inputs --------------------------------------------------------\n inputs = [\n DropdownInput(\n name=\"knowledge_base\",\n display_name=\"Knowledge\",\n info=\"Select the knowledge to load data from.\",\n required=True,\n options=[],\n refresh_button=True,\n real_time_refresh=True,\n dialog_inputs=asdict(NewKnowledgeBaseInput()),\n ),\n HandleInput(\n name=\"input_df\",\n display_name=\"Input\",\n info=(\n \"Table with all original columns (already chunked / processed). \"\n \"Accepts Data or DataFrame. If Data is provided, it is converted to a DataFrame automatically.\"\n ),\n input_types=[\"Data\", \"DataFrame\"],\n required=True,\n ),\n TableInput(\n name=\"column_config\",\n display_name=\"Column Configuration\",\n info=\"Configure column behavior for the knowledge base.\",\n required=True,\n table_schema=[\n {\n \"name\": \"column_name\",\n \"display_name\": \"Column Name\",\n \"type\": \"str\",\n \"description\": \"Name of the column in the source DataFrame\",\n \"edit_mode\": EditMode.INLINE,\n },\n {\n \"name\": \"vectorize\",\n \"display_name\": \"Vectorize\",\n \"type\": \"boolean\",\n \"description\": \"Create embeddings for this column\",\n \"default\": False,\n \"edit_mode\": EditMode.INLINE,\n },\n {\n \"name\": \"identifier\",\n \"display_name\": \"Identifier\",\n \"type\": \"boolean\",\n \"description\": \"Use this column as unique identifier\",\n \"default\": False,\n \"edit_mode\": EditMode.INLINE,\n },\n ],\n value=[\n {\n \"column_name\": \"text\",\n \"vectorize\": True,\n \"identifier\": True,\n },\n ],\n ),\n IntInput(\n name=\"chunk_size\",\n display_name=\"Chunk Size\",\n info=\"Batch size for processing embeddings\",\n advanced=True,\n value=1000,\n ),\n SecretStrInput(\n name=\"api_key\",\n display_name=\"Embedding Provider API Key\",\n info=\"API key for the embedding provider to generate embeddings.\",\n advanced=True,\n required=False,\n ),\n BoolInput(\n name=\"allow_duplicates\",\n display_name=\"Allow Duplicates\",\n info=\"Allow duplicate rows in the knowledge base\",\n advanced=True,\n value=False,\n ),\n ]\n\n # ------ Outputs -------------------------------------------------------\n outputs = [Output(display_name=\"Results\", name=\"dataframe_output\", method=\"build_kb_info\")]\n\n # ------ Internal helpers ---------------------------------------------\n def _get_kb_root(self) -> Path:\n \"\"\"Return the root directory for knowledge bases.\"\"\"\n return _get_knowledge_bases_root_path()\n\n def _validate_column_config(self, df_source: pd.DataFrame) -> list[dict[str, Any]]:\n \"\"\"Validate column configuration using Structured Output patterns.\"\"\"\n if not self.column_config:\n msg = \"Column configuration cannot be empty\"\n raise ValueError(msg)\n\n # Convert table input to list of dicts (similar to Structured Output)\n config_list = self.column_config if isinstance(self.column_config, list) else []\n\n # Validate column names exist in DataFrame\n df_columns = set(df_source.columns)\n for config in config_list:\n col_name = config.get(\"column_name\")\n if col_name not in df_columns:\n msg = f\"Column '{col_name}' not found in DataFrame. Available columns: {sorted(df_columns)}\"\n raise ValueError(msg)\n\n return config_list\n\n def _get_embedding_provider(self, embedding_model: str) -> str:\n \"\"\"Get embedding provider by matching model name to lists.\"\"\"\n if embedding_model in OPENAI_EMBEDDING_MODEL_NAMES:\n return \"OpenAI\"\n if embedding_model in HUGGINGFACE_MODEL_NAMES:\n return \"HuggingFace\"\n if embedding_model in COHERE_MODEL_NAMES:\n return \"Cohere\"\n return \"Custom\"\n\n def _build_embeddings(self, embedding_model: str, api_key: str):\n \"\"\"Build embedding model using provider patterns.\"\"\"\n # Get provider by matching model name to lists\n provider = self._get_embedding_provider(embedding_model)\n\n # Validate provider and model\n if provider == \"OpenAI\":\n from langchain_openai import OpenAIEmbeddings\n\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=embedding_model,\n api_key=api_key,\n chunk_size=self.chunk_size,\n )\n if provider == \"HuggingFace\":\n from langchain_huggingface import HuggingFaceEmbeddings\n\n return HuggingFaceEmbeddings(\n model=embedding_model,\n )\n if provider == \"Cohere\":\n from langchain_cohere import CohereEmbeddings\n\n if not api_key:\n msg = \"Cohere API key is required when using Cohere provider\"\n raise ValueError(msg)\n return CohereEmbeddings(\n model=embedding_model,\n cohere_api_key=api_key,\n )\n if provider == \"Custom\":\n # For custom embedding models, we would need additional configuration\n msg = \"Custom embedding models not yet supported\"\n raise NotImplementedError(msg)\n msg = f\"Unknown provider: {provider}\"\n raise ValueError(msg)\n\n def _build_embedding_metadata(self, embedding_model, api_key) -> dict[str, Any]:\n \"\"\"Build embedding model metadata.\"\"\"\n # Get provider by matching model name to lists\n embedding_provider = self._get_embedding_provider(embedding_model)\n\n api_key_to_save = None\n if api_key and hasattr(api_key, \"get_secret_value\"):\n api_key_to_save = api_key.get_secret_value()\n elif isinstance(api_key, str):\n api_key_to_save = api_key\n\n encrypted_api_key = None\n if api_key_to_save:\n settings_service = get_settings_service()\n try:\n encrypted_api_key = encrypt_api_key(api_key_to_save, settings_service=settings_service)\n except (TypeError, ValueError) as e:\n self.log(f\"Could not encrypt API key: {e}\")\n\n return {\n \"embedding_provider\": embedding_provider,\n \"embedding_model\": embedding_model,\n \"api_key\": encrypted_api_key,\n \"api_key_used\": bool(api_key),\n \"chunk_size\": self.chunk_size,\n \"created_at\": datetime.now(timezone.utc).isoformat(),\n }\n\n def _save_embedding_metadata(self, kb_path: Path, embedding_model: str, api_key: str) -> None:\n \"\"\"Save embedding model metadata.\"\"\"\n embedding_metadata = self._build_embedding_metadata(embedding_model, api_key)\n metadata_path = kb_path / \"embedding_metadata.json\"\n metadata_path.write_text(json.dumps(embedding_metadata, indent=2))\n\n def _save_kb_files(\n self,\n kb_path: Path,\n config_list: list[dict[str, Any]],\n ) -> None:\n \"\"\"Save KB files using File Component storage patterns.\"\"\"\n try:\n # Create directory (following File Component patterns)\n kb_path.mkdir(parents=True, exist_ok=True)\n\n # Save column configuration\n # Only do this if the file doesn't exist already\n cfg_path = kb_path / \"schema.json\"\n if not cfg_path.exists():\n cfg_path.write_text(json.dumps(config_list, indent=2))\n\n except (OSError, TypeError, ValueError) as e:\n self.log(f\"Error saving KB files: {e}\")\n\n def _build_column_metadata(self, config_list: list[dict[str, Any]], df_source: pd.DataFrame) -> dict[str, Any]:\n \"\"\"Build detailed column metadata.\"\"\"\n metadata: dict[str, Any] = {\n \"total_columns\": len(df_source.columns),\n \"mapped_columns\": len(config_list),\n \"unmapped_columns\": len(df_source.columns) - len(config_list),\n \"columns\": [],\n \"summary\": {\"vectorized_columns\": [], \"identifier_columns\": []},\n }\n\n for config in config_list:\n col_name = config.get(\"column_name\")\n vectorize = config.get(\"vectorize\") == \"True\" or config.get(\"vectorize\") is True\n identifier = config.get(\"identifier\") == \"True\" or config.get(\"identifier\") is True\n\n # Add to columns list\n metadata[\"columns\"].append(\n {\n \"name\": col_name,\n \"vectorize\": vectorize,\n \"identifier\": identifier,\n }\n )\n\n # Update summary\n if vectorize:\n metadata[\"summary\"][\"vectorized_columns\"].append(col_name)\n if identifier:\n metadata[\"summary\"][\"identifier_columns\"].append(col_name)\n\n return metadata\n\n async def _create_vector_store(\n self,\n df_source: pd.DataFrame,\n config_list: list[dict[str, Any]],\n embedding_model: str,\n api_key: str,\n ) -> None:\n \"\"\"Create vector store following Local DB component pattern.\"\"\"\n try:\n # Set up vector store directory\n vector_store_dir = await self._kb_path()\n if not vector_store_dir:\n msg = \"Knowledge base path is not set. Please create a new knowledge base first.\"\n raise ValueError(msg)\n vector_store_dir.mkdir(parents=True, exist_ok=True)\n\n # Create embeddings model\n embedding_function = self._build_embeddings(embedding_model, api_key)\n\n # Convert DataFrame to Data objects (following Local DB pattern)\n data_objects = await self._convert_df_to_data_objects(df_source, config_list)\n\n # Create vector store\n chroma = Chroma(\n persist_directory=str(vector_store_dir),\n embedding_function=embedding_function,\n collection_name=self.knowledge_base,\n )\n\n # Convert Data objects to LangChain Documents\n documents = []\n for data_obj in data_objects:\n doc = data_obj.to_lc_document()\n documents.append(doc)\n\n # Add documents to vector store\n if documents:\n chroma.add_documents(documents)\n self.log(f\"Added {len(documents)} documents to vector store '{self.knowledge_base}'\")\n\n except (OSError, ValueError, RuntimeError) as e:\n self.log(f\"Error creating vector store: {e}\")\n\n async def _convert_df_to_data_objects(\n self, df_source: pd.DataFrame, config_list: list[dict[str, Any]]\n ) -> list[Data]:\n \"\"\"Convert DataFrame to Data objects for vector store.\"\"\"\n data_objects: list[Data] = []\n\n # Set up vector store directory\n kb_path = await self._kb_path()\n\n # If we don't allow duplicates, we need to get the existing hashes\n chroma = Chroma(\n persist_directory=str(kb_path),\n collection_name=self.knowledge_base,\n )\n\n # Get all documents and their metadata\n all_docs = chroma.get()\n\n # Extract all _id values from metadata\n id_list = [metadata.get(\"_id\") for metadata in all_docs[\"metadatas\"] if metadata.get(\"_id\")]\n\n # Get column roles\n content_cols = []\n identifier_cols = []\n\n for config in config_list:\n col_name = config.get(\"column_name\")\n vectorize = config.get(\"vectorize\") == \"True\" or config.get(\"vectorize\") is True\n identifier = config.get(\"identifier\") == \"True\" or config.get(\"identifier\") is True\n\n if vectorize:\n content_cols.append(col_name)\n elif identifier:\n identifier_cols.append(col_name)\n\n # Convert each row to a Data object\n for _, row in df_source.iterrows():\n # Build content text from identifier columns using list comprehension\n identifier_parts = [str(row[col]) for col in content_cols if col in row and pd.notna(row[col])]\n\n # Join all parts into a single string\n page_content = \" \".join(identifier_parts)\n\n # Build metadata from NON-vectorized columns only (simple key-value pairs)\n data_dict = {\n \"text\": page_content, # Main content for vectorization\n }\n\n # Add identifier columns if they exist\n if identifier_cols:\n identifier_parts = [str(row[col]) for col in identifier_cols if col in row and pd.notna(row[col])]\n page_content = \" \".join(identifier_parts)\n\n # Add metadata columns as simple key-value pairs\n for col in df_source.columns:\n if col not in content_cols and col in row and pd.notna(row[col]):\n # Convert to simple types for Chroma metadata\n value = row[col]\n data_dict[col] = str(value) # Convert complex types to string\n\n # Hash the page_content for unique ID\n page_content_hash = hashlib.sha256(page_content.encode()).hexdigest()\n data_dict[\"_id\"] = page_content_hash\n\n # If duplicates are disallowed, and hash exists, prevent adding this row\n if not self.allow_duplicates and page_content_hash in id_list:\n self.log(f\"Skipping duplicate row with hash {page_content_hash}\")\n continue\n\n # Create Data object - everything except \"text\" becomes metadata\n data_obj = Data(data=data_dict)\n data_objects.append(data_obj)\n\n return data_objects\n\n def is_valid_collection_name(self, name, min_length: int = 3, max_length: int = 63) -> bool:\n \"\"\"Validates collection name against conditions 1-3.\n\n 1. Contains 3-63 characters\n 2. Starts and ends with alphanumeric character\n 3. Contains only alphanumeric characters, underscores, or hyphens.\n\n Args:\n name (str): Collection name to validate\n min_length (int): Minimum length of the name\n max_length (int): Maximum length of the name\n\n Returns:\n bool: True if valid, False otherwise\n \"\"\"\n # Check length (condition 1)\n if not (min_length <= len(name) <= max_length):\n return False\n\n # Check start/end with alphanumeric (condition 2)\n if not (name[0].isalnum() and name[-1].isalnum()):\n return False\n\n # Check allowed characters (condition 3)\n return re.match(r\"^[a-zA-Z0-9_-]+$\", name) is not None\n\n async def _kb_path(self) -> Path | None:\n # Check if we already have the path cached\n cached_path = getattr(self, \"_cached_kb_path\", None)\n if cached_path is not None:\n return cached_path\n\n # If not cached, compute it\n async with session_scope() as db:\n if not self.user_id:\n msg = \"User ID is required for fetching knowledge base path.\"\n raise ValueError(msg)\n current_user = await get_user_by_id(db, self.user_id)\n if not current_user:\n msg = f\"User with ID {self.user_id} not found.\"\n raise ValueError(msg)\n kb_user = current_user.username\n\n kb_root = self._get_kb_root()\n\n # Cache the result\n self._cached_kb_path = kb_root / kb_user / self.knowledge_base\n\n return self._cached_kb_path\n\n # ---------------------------------------------------------------------\n # OUTPUT METHODS\n # ---------------------------------------------------------------------\n async def build_kb_info(self) -> Data:\n \"\"\"Main ingestion routine → returns a dict with KB metadata.\"\"\"\n try:\n input_value = self.input_df[0] if isinstance(self.input_df, list) else self.input_df\n df_source: DataFrame = convert_to_dataframe(input_value, auto_parse=False)\n\n # Validate column configuration (using Structured Output patterns)\n config_list = self._validate_column_config(df_source)\n column_metadata = self._build_column_metadata(config_list, df_source)\n\n # Read the embedding info from the knowledge base folder\n kb_path = await self._kb_path()\n if not kb_path:\n msg = \"Knowledge base path is not set. Please create a new knowledge base first.\"\n raise ValueError(msg)\n metadata_path = kb_path / \"embedding_metadata.json\"\n\n # If the API key is not provided, try to read it from the metadata file\n if metadata_path.exists():\n settings_service = get_settings_service()\n metadata = json.loads(metadata_path.read_text())\n embedding_model = metadata.get(\"embedding_model\")\n try:\n api_key = decrypt_api_key(metadata[\"api_key\"], settings_service)\n except (InvalidToken, TypeError, ValueError) as e:\n self.log(f\"Could not decrypt API key. Please provide it manually. Error: {e}\")\n\n # Check if a custom API key was provided, update metadata if so\n if self.api_key:\n api_key = self.api_key\n self._save_embedding_metadata(\n kb_path=kb_path,\n embedding_model=embedding_model,\n api_key=api_key,\n )\n\n # Create vector store following Local DB component pattern\n await self._create_vector_store(df_source, config_list, embedding_model=embedding_model, api_key=api_key)\n\n # Save KB files (using File Component storage patterns)\n self._save_kb_files(kb_path, config_list)\n\n # Build metadata response\n meta: dict[str, Any] = {\n \"kb_id\": str(uuid.uuid4()),\n \"kb_name\": self.knowledge_base,\n \"rows\": len(df_source),\n \"column_metadata\": column_metadata,\n \"path\": str(kb_path),\n \"config_columns\": len(config_list),\n \"timestamp\": datetime.now(tz=timezone.utc).isoformat(),\n }\n\n # Set status message\n self.status = f\"✅ KB **{self.knowledge_base}** saved · {len(df_source)} chunks.\"\n\n return Data(data=meta)\n\n except (OSError, ValueError, RuntimeError, KeyError) as e:\n msg = f\"Error during KB ingestion: {e}\"\n raise RuntimeError(msg) from e\n\n async def _get_api_key_variable(self, field_value: dict[str, Any]):\n async with session_scope() as db:\n if not self.user_id:\n msg = \"User ID is required for fetching global variables.\"\n raise ValueError(msg)\n current_user = await get_user_by_id(db, self.user_id)\n if not current_user:\n msg = f\"User with ID {self.user_id} not found.\"\n raise ValueError(msg)\n variable_service = get_variable_service()\n\n # Process the api_key field variable\n return await variable_service.get_variable(\n user_id=current_user.id,\n name=field_value[\"03_api_key\"],\n field=\"\",\n session=db,\n )\n\n async def update_build_config(\n self,\n build_config,\n field_value: Any,\n field_name: str | None = None,\n ):\n \"\"\"Update build configuration based on provider selection.\"\"\"\n # Create a new knowledge base\n if field_name == \"knowledge_base\":\n async with session_scope() as db:\n if not self.user_id:\n msg = \"User ID is required for fetching knowledge base list.\"\n raise ValueError(msg)\n current_user = await get_user_by_id(db, self.user_id)\n if not current_user:\n msg = f\"User with ID {self.user_id} not found.\"\n raise ValueError(msg)\n kb_user = current_user.username\n if isinstance(field_value, dict) and \"01_new_kb_name\" in field_value:\n # Validate the knowledge base name - Make sure it follows these rules:\n if not self.is_valid_collection_name(field_value[\"01_new_kb_name\"]):\n msg = f\"Invalid knowledge base name: {field_value['01_new_kb_name']}\"\n raise ValueError(msg)\n\n api_key = field_value.get(\"03_api_key\", None)\n with contextlib.suppress(Exception):\n # If the API key is a variable, resolve it\n api_key = await self._get_api_key_variable(field_value)\n\n # Make sure api_key is a string\n if not isinstance(api_key, str):\n msg = \"API key must be a string.\"\n raise ValueError(msg)\n\n # We need to test the API Key one time against the embedding model\n embed_model = self._build_embeddings(embedding_model=field_value[\"02_embedding_model\"], api_key=api_key)\n\n # Try to generate a dummy embedding to validate the API key without blocking the event loop\n try:\n await asyncio.wait_for(\n asyncio.to_thread(embed_model.embed_query, \"test\"),\n timeout=10,\n )\n except TimeoutError as e:\n msg = \"Embedding validation timed out. Please verify network connectivity and key.\"\n raise ValueError(msg) from e\n except Exception as e:\n msg = f\"Embedding validation failed: {e!s}\"\n raise ValueError(msg) from e\n\n # Create the new knowledge base directory\n kb_path = _get_knowledge_bases_root_path() / kb_user / field_value[\"01_new_kb_name\"]\n kb_path.mkdir(parents=True, exist_ok=True)\n\n # Save the embedding metadata\n build_config[\"knowledge_base\"][\"value\"] = field_value[\"01_new_kb_name\"]\n self._save_embedding_metadata(\n kb_path=kb_path,\n embedding_model=field_value[\"02_embedding_model\"],\n api_key=api_key,\n )\n\n # Update the knowledge base options dynamically\n build_config[\"knowledge_base\"][\"options\"] = await get_knowledge_bases(\n _get_knowledge_bases_root_path(),\n user_id=self.user_id,\n )\n\n # If the selected knowledge base is not available, reset it\n if build_config[\"knowledge_base\"][\"value\"] not in build_config[\"knowledge_base\"][\"options\"]:\n build_config[\"knowledge_base\"][\"value\"] = None\n\n return build_config\n"
|
|
870
|
+
"value": "from __future__ import annotations\n\nimport asyncio\nimport contextlib\nimport hashlib\nimport json\nimport re\nimport uuid\nfrom dataclasses import asdict, dataclass, field\nfrom datetime import datetime, timezone\nfrom pathlib import Path\nfrom typing import TYPE_CHECKING, Any\n\nimport pandas as pd\nfrom cryptography.fernet import InvalidToken\nfrom langchain_chroma import Chroma\nfrom langflow.services.auth.utils import decrypt_api_key, encrypt_api_key\nfrom langflow.services.database.models.user.crud import get_user_by_id\n\nfrom lfx.base.knowledge_bases.knowledge_base_utils import get_knowledge_bases\nfrom lfx.base.models.openai_constants import OPENAI_EMBEDDING_MODEL_NAMES\nfrom lfx.components.processing.converter import convert_to_dataframe\nfrom lfx.custom import Component\nfrom lfx.io import (\n BoolInput,\n DropdownInput,\n HandleInput,\n IntInput,\n Output,\n SecretStrInput,\n StrInput,\n TableInput,\n)\nfrom lfx.schema.data import Data\nfrom lfx.schema.table import EditMode\nfrom lfx.services.deps import (\n get_settings_service,\n get_variable_service,\n session_scope,\n)\nfrom lfx.utils.validate_cloud import raise_error_if_astra_cloud_disable_component\n\nif TYPE_CHECKING:\n from lfx.schema.dataframe import DataFrame\n\nHUGGINGFACE_MODEL_NAMES = [\n \"sentence-transformers/all-MiniLM-L6-v2\",\n \"sentence-transformers/all-mpnet-base-v2\",\n]\nCOHERE_MODEL_NAMES = [\"embed-english-v3.0\", \"embed-multilingual-v3.0\"]\n\n_KNOWLEDGE_BASES_ROOT_PATH: Path | None = None\n\n# Error message to raise if we're in Astra cloud environment and the component is not supported.\nastra_error_msg = \"Knowledge ingestion is not supported in Astra cloud environment.\"\n\n\ndef _get_knowledge_bases_root_path() -> Path:\n \"\"\"Lazy load the knowledge bases root path from settings.\"\"\"\n global _KNOWLEDGE_BASES_ROOT_PATH # noqa: PLW0603\n if _KNOWLEDGE_BASES_ROOT_PATH is None:\n settings = get_settings_service().settings\n knowledge_directory = settings.knowledge_bases_dir\n if not knowledge_directory:\n msg = \"Knowledge bases directory is not set in the settings.\"\n raise ValueError(msg)\n _KNOWLEDGE_BASES_ROOT_PATH = Path(knowledge_directory).expanduser()\n return _KNOWLEDGE_BASES_ROOT_PATH\n\n\nclass KnowledgeIngestionComponent(Component):\n \"\"\"Create or append to Langflow Knowledge from a DataFrame.\"\"\"\n\n # ------ UI metadata ---------------------------------------------------\n display_name = \"Knowledge Ingestion\"\n description = \"Create or update knowledge in Langflow.\"\n icon = \"upload\"\n name = \"KnowledgeIngestion\"\n\n def __init__(self, *args, **kwargs) -> None:\n super().__init__(*args, **kwargs)\n self._cached_kb_path: Path | None = None\n\n @dataclass\n class NewKnowledgeBaseInput:\n functionality: str = \"create\"\n fields: dict[str, dict] = field(\n default_factory=lambda: {\n \"data\": {\n \"node\": {\n \"name\": \"create_knowledge_base\",\n \"description\": \"Create new knowledge in Langflow.\",\n \"display_name\": \"Create new knowledge\",\n \"field_order\": [\n \"01_new_kb_name\",\n \"02_embedding_model\",\n \"03_api_key\",\n ],\n \"template\": {\n \"01_new_kb_name\": StrInput(\n name=\"new_kb_name\",\n display_name=\"Knowledge Name\",\n info=\"Name of the new knowledge to create.\",\n required=True,\n ),\n \"02_embedding_model\": DropdownInput(\n name=\"embedding_model\",\n display_name=\"Choose Embedding\",\n info=\"Select the embedding model to use for this knowledge base.\",\n required=True,\n options=OPENAI_EMBEDDING_MODEL_NAMES + HUGGINGFACE_MODEL_NAMES + COHERE_MODEL_NAMES,\n options_metadata=[{\"icon\": \"OpenAI\"} for _ in OPENAI_EMBEDDING_MODEL_NAMES]\n + [{\"icon\": \"HuggingFace\"} for _ in HUGGINGFACE_MODEL_NAMES]\n + [{\"icon\": \"Cohere\"} for _ in COHERE_MODEL_NAMES],\n ),\n \"03_api_key\": SecretStrInput(\n name=\"api_key\",\n display_name=\"API Key\",\n info=\"Provider API key for embedding model\",\n required=True,\n load_from_db=False,\n ),\n },\n },\n }\n }\n )\n\n # ------ Inputs --------------------------------------------------------\n inputs = [\n DropdownInput(\n name=\"knowledge_base\",\n display_name=\"Knowledge\",\n info=\"Select the knowledge to load data from.\",\n required=True,\n options=[],\n refresh_button=True,\n real_time_refresh=True,\n dialog_inputs=asdict(NewKnowledgeBaseInput()),\n ),\n HandleInput(\n name=\"input_df\",\n display_name=\"Input\",\n info=(\n \"Table with all original columns (already chunked / processed). \"\n \"Accepts Data or DataFrame. If Data is provided, it is converted to a DataFrame automatically.\"\n ),\n input_types=[\"Data\", \"DataFrame\"],\n required=True,\n ),\n TableInput(\n name=\"column_config\",\n display_name=\"Column Configuration\",\n info=\"Configure column behavior for the knowledge base.\",\n required=True,\n table_schema=[\n {\n \"name\": \"column_name\",\n \"display_name\": \"Column Name\",\n \"type\": \"str\",\n \"description\": \"Name of the column in the source DataFrame\",\n \"edit_mode\": EditMode.INLINE,\n },\n {\n \"name\": \"vectorize\",\n \"display_name\": \"Vectorize\",\n \"type\": \"boolean\",\n \"description\": \"Create embeddings for this column\",\n \"default\": False,\n \"edit_mode\": EditMode.INLINE,\n },\n {\n \"name\": \"identifier\",\n \"display_name\": \"Identifier\",\n \"type\": \"boolean\",\n \"description\": \"Use this column as unique identifier\",\n \"default\": False,\n \"edit_mode\": EditMode.INLINE,\n },\n ],\n value=[\n {\n \"column_name\": \"text\",\n \"vectorize\": True,\n \"identifier\": True,\n },\n ],\n ),\n IntInput(\n name=\"chunk_size\",\n display_name=\"Chunk Size\",\n info=\"Batch size for processing embeddings\",\n advanced=True,\n value=1000,\n ),\n SecretStrInput(\n name=\"api_key\",\n display_name=\"Embedding Provider API Key\",\n info=\"API key for the embedding provider to generate embeddings.\",\n advanced=True,\n required=False,\n ),\n BoolInput(\n name=\"allow_duplicates\",\n display_name=\"Allow Duplicates\",\n info=\"Allow duplicate rows in the knowledge base\",\n advanced=True,\n value=False,\n ),\n ]\n\n # ------ Outputs -------------------------------------------------------\n outputs = [Output(display_name=\"Results\", name=\"dataframe_output\", method=\"build_kb_info\")]\n\n # ------ Internal helpers ---------------------------------------------\n def _get_kb_root(self) -> Path:\n \"\"\"Return the root directory for knowledge bases.\"\"\"\n return _get_knowledge_bases_root_path()\n\n def _validate_column_config(self, df_source: pd.DataFrame) -> list[dict[str, Any]]:\n \"\"\"Validate column configuration using Structured Output patterns.\"\"\"\n if not self.column_config:\n msg = \"Column configuration cannot be empty\"\n raise ValueError(msg)\n\n # Convert table input to list of dicts (similar to Structured Output)\n config_list = self.column_config if isinstance(self.column_config, list) else []\n\n # Validate column names exist in DataFrame\n df_columns = set(df_source.columns)\n for config in config_list:\n col_name = config.get(\"column_name\")\n if col_name not in df_columns:\n msg = f\"Column '{col_name}' not found in DataFrame. Available columns: {sorted(df_columns)}\"\n raise ValueError(msg)\n\n return config_list\n\n def _get_embedding_provider(self, embedding_model: str) -> str:\n \"\"\"Get embedding provider by matching model name to lists.\"\"\"\n if embedding_model in OPENAI_EMBEDDING_MODEL_NAMES:\n return \"OpenAI\"\n if embedding_model in HUGGINGFACE_MODEL_NAMES:\n return \"HuggingFace\"\n if embedding_model in COHERE_MODEL_NAMES:\n return \"Cohere\"\n return \"Custom\"\n\n def _build_embeddings(self, embedding_model: str, api_key: str):\n \"\"\"Build embedding model using provider patterns.\"\"\"\n # Get provider by matching model name to lists\n provider = self._get_embedding_provider(embedding_model)\n\n # Validate provider and model\n if provider == \"OpenAI\":\n from langchain_openai import OpenAIEmbeddings\n\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=embedding_model,\n api_key=api_key,\n chunk_size=self.chunk_size,\n )\n if provider == \"HuggingFace\":\n from langchain_huggingface import HuggingFaceEmbeddings\n\n return HuggingFaceEmbeddings(\n model=embedding_model,\n )\n if provider == \"Cohere\":\n from langchain_cohere import CohereEmbeddings\n\n if not api_key:\n msg = \"Cohere API key is required when using Cohere provider\"\n raise ValueError(msg)\n return CohereEmbeddings(\n model=embedding_model,\n cohere_api_key=api_key,\n )\n if provider == \"Custom\":\n # For custom embedding models, we would need additional configuration\n msg = \"Custom embedding models not yet supported\"\n raise NotImplementedError(msg)\n msg = f\"Unknown provider: {provider}\"\n raise ValueError(msg)\n\n def _build_embedding_metadata(self, embedding_model, api_key) -> dict[str, Any]:\n \"\"\"Build embedding model metadata.\"\"\"\n # Get provider by matching model name to lists\n embedding_provider = self._get_embedding_provider(embedding_model)\n\n api_key_to_save = None\n if api_key and hasattr(api_key, \"get_secret_value\"):\n api_key_to_save = api_key.get_secret_value()\n elif isinstance(api_key, str):\n api_key_to_save = api_key\n\n encrypted_api_key = None\n if api_key_to_save:\n settings_service = get_settings_service()\n try:\n encrypted_api_key = encrypt_api_key(api_key_to_save, settings_service=settings_service)\n except (TypeError, ValueError) as e:\n self.log(f\"Could not encrypt API key: {e}\")\n\n return {\n \"embedding_provider\": embedding_provider,\n \"embedding_model\": embedding_model,\n \"api_key\": encrypted_api_key,\n \"api_key_used\": bool(api_key),\n \"chunk_size\": self.chunk_size,\n \"created_at\": datetime.now(timezone.utc).isoformat(),\n }\n\n def _save_embedding_metadata(self, kb_path: Path, embedding_model: str, api_key: str) -> None:\n \"\"\"Save embedding model metadata.\"\"\"\n embedding_metadata = self._build_embedding_metadata(embedding_model, api_key)\n metadata_path = kb_path / \"embedding_metadata.json\"\n metadata_path.write_text(json.dumps(embedding_metadata, indent=2))\n\n def _save_kb_files(\n self,\n kb_path: Path,\n config_list: list[dict[str, Any]],\n ) -> None:\n \"\"\"Save KB files using File Component storage patterns.\"\"\"\n try:\n # Create directory (following File Component patterns)\n kb_path.mkdir(parents=True, exist_ok=True)\n\n # Save column configuration\n # Only do this if the file doesn't exist already\n cfg_path = kb_path / \"schema.json\"\n if not cfg_path.exists():\n cfg_path.write_text(json.dumps(config_list, indent=2))\n\n except (OSError, TypeError, ValueError) as e:\n self.log(f\"Error saving KB files: {e}\")\n\n def _build_column_metadata(self, config_list: list[dict[str, Any]], df_source: pd.DataFrame) -> dict[str, Any]:\n \"\"\"Build detailed column metadata.\"\"\"\n metadata: dict[str, Any] = {\n \"total_columns\": len(df_source.columns),\n \"mapped_columns\": len(config_list),\n \"unmapped_columns\": len(df_source.columns) - len(config_list),\n \"columns\": [],\n \"summary\": {\"vectorized_columns\": [], \"identifier_columns\": []},\n }\n\n for config in config_list:\n col_name = config.get(\"column_name\")\n vectorize = config.get(\"vectorize\") == \"True\" or config.get(\"vectorize\") is True\n identifier = config.get(\"identifier\") == \"True\" or config.get(\"identifier\") is True\n\n # Add to columns list\n metadata[\"columns\"].append(\n {\n \"name\": col_name,\n \"vectorize\": vectorize,\n \"identifier\": identifier,\n }\n )\n\n # Update summary\n if vectorize:\n metadata[\"summary\"][\"vectorized_columns\"].append(col_name)\n if identifier:\n metadata[\"summary\"][\"identifier_columns\"].append(col_name)\n\n return metadata\n\n async def _create_vector_store(\n self,\n df_source: pd.DataFrame,\n config_list: list[dict[str, Any]],\n embedding_model: str,\n api_key: str,\n ) -> None:\n \"\"\"Create vector store following Local DB component pattern.\"\"\"\n try:\n # Set up vector store directory\n vector_store_dir = await self._kb_path()\n if not vector_store_dir:\n msg = \"Knowledge base path is not set. Please create a new knowledge base first.\"\n raise ValueError(msg)\n vector_store_dir.mkdir(parents=True, exist_ok=True)\n\n # Create embeddings model\n embedding_function = self._build_embeddings(embedding_model, api_key)\n\n # Convert DataFrame to Data objects (following Local DB pattern)\n data_objects = await self._convert_df_to_data_objects(df_source, config_list)\n\n # Create vector store\n chroma = Chroma(\n persist_directory=str(vector_store_dir),\n embedding_function=embedding_function,\n collection_name=self.knowledge_base,\n )\n\n # Convert Data objects to LangChain Documents\n documents = []\n for data_obj in data_objects:\n doc = data_obj.to_lc_document()\n documents.append(doc)\n\n # Add documents to vector store\n if documents:\n chroma.add_documents(documents)\n self.log(f\"Added {len(documents)} documents to vector store '{self.knowledge_base}'\")\n\n except (OSError, ValueError, RuntimeError) as e:\n self.log(f\"Error creating vector store: {e}\")\n\n async def _convert_df_to_data_objects(\n self, df_source: pd.DataFrame, config_list: list[dict[str, Any]]\n ) -> list[Data]:\n \"\"\"Convert DataFrame to Data objects for vector store.\"\"\"\n data_objects: list[Data] = []\n\n # Set up vector store directory\n kb_path = await self._kb_path()\n\n # If we don't allow duplicates, we need to get the existing hashes\n chroma = Chroma(\n persist_directory=str(kb_path),\n collection_name=self.knowledge_base,\n )\n\n # Get all documents and their metadata\n all_docs = chroma.get()\n\n # Extract all _id values from metadata\n id_list = [metadata.get(\"_id\") for metadata in all_docs[\"metadatas\"] if metadata.get(\"_id\")]\n\n # Get column roles\n content_cols = []\n identifier_cols = []\n\n for config in config_list:\n col_name = config.get(\"column_name\")\n vectorize = config.get(\"vectorize\") == \"True\" or config.get(\"vectorize\") is True\n identifier = config.get(\"identifier\") == \"True\" or config.get(\"identifier\") is True\n\n if vectorize:\n content_cols.append(col_name)\n elif identifier:\n identifier_cols.append(col_name)\n\n # Convert each row to a Data object\n for _, row in df_source.iterrows():\n # Build content text from identifier columns using list comprehension\n identifier_parts = [str(row[col]) for col in content_cols if col in row and pd.notna(row[col])]\n\n # Join all parts into a single string\n page_content = \" \".join(identifier_parts)\n\n # Build metadata from NON-vectorized columns only (simple key-value pairs)\n data_dict = {\n \"text\": page_content, # Main content for vectorization\n }\n\n # Add identifier columns if they exist\n if identifier_cols:\n identifier_parts = [str(row[col]) for col in identifier_cols if col in row and pd.notna(row[col])]\n page_content = \" \".join(identifier_parts)\n\n # Add metadata columns as simple key-value pairs\n for col in df_source.columns:\n if col not in content_cols and col in row and pd.notna(row[col]):\n # Convert to simple types for Chroma metadata\n value = row[col]\n data_dict[col] = str(value) # Convert complex types to string\n\n # Hash the page_content for unique ID\n page_content_hash = hashlib.sha256(page_content.encode()).hexdigest()\n data_dict[\"_id\"] = page_content_hash\n\n # If duplicates are disallowed, and hash exists, prevent adding this row\n if not self.allow_duplicates and page_content_hash in id_list:\n self.log(f\"Skipping duplicate row with hash {page_content_hash}\")\n continue\n\n # Create Data object - everything except \"text\" becomes metadata\n data_obj = Data(data=data_dict)\n data_objects.append(data_obj)\n\n return data_objects\n\n def is_valid_collection_name(self, name, min_length: int = 3, max_length: int = 63) -> bool:\n \"\"\"Validates collection name against conditions 1-3.\n\n 1. Contains 3-63 characters\n 2. Starts and ends with alphanumeric character\n 3. Contains only alphanumeric characters, underscores, or hyphens.\n\n Args:\n name (str): Collection name to validate\n min_length (int): Minimum length of the name\n max_length (int): Maximum length of the name\n\n Returns:\n bool: True if valid, False otherwise\n \"\"\"\n # Check length (condition 1)\n if not (min_length <= len(name) <= max_length):\n return False\n\n # Check start/end with alphanumeric (condition 2)\n if not (name[0].isalnum() and name[-1].isalnum()):\n return False\n\n # Check allowed characters (condition 3)\n return re.match(r\"^[a-zA-Z0-9_-]+$\", name) is not None\n\n async def _kb_path(self) -> Path | None:\n # Check if we already have the path cached\n cached_path = getattr(self, \"_cached_kb_path\", None)\n if cached_path is not None:\n return cached_path\n\n # If not cached, compute it\n async with session_scope() as db:\n if not self.user_id:\n msg = \"User ID is required for fetching knowledge base path.\"\n raise ValueError(msg)\n current_user = await get_user_by_id(db, self.user_id)\n if not current_user:\n msg = f\"User with ID {self.user_id} not found.\"\n raise ValueError(msg)\n kb_user = current_user.username\n\n kb_root = self._get_kb_root()\n\n # Cache the result\n self._cached_kb_path = kb_root / kb_user / self.knowledge_base\n\n return self._cached_kb_path\n\n # ---------------------------------------------------------------------\n # OUTPUT METHODS\n # ---------------------------------------------------------------------\n async def build_kb_info(self) -> Data:\n \"\"\"Main ingestion routine → returns a dict with KB metadata.\"\"\"\n # Check if we're in Astra cloud environment and raise an error if we are.\n raise_error_if_astra_cloud_disable_component(astra_error_msg)\n try:\n input_value = self.input_df[0] if isinstance(self.input_df, list) else self.input_df\n df_source: DataFrame = convert_to_dataframe(input_value, auto_parse=False)\n\n # Validate column configuration (using Structured Output patterns)\n config_list = self._validate_column_config(df_source)\n column_metadata = self._build_column_metadata(config_list, df_source)\n\n # Read the embedding info from the knowledge base folder\n kb_path = await self._kb_path()\n if not kb_path:\n msg = \"Knowledge base path is not set. Please create a new knowledge base first.\"\n raise ValueError(msg)\n metadata_path = kb_path / \"embedding_metadata.json\"\n\n # If the API key is not provided, try to read it from the metadata file\n if metadata_path.exists():\n settings_service = get_settings_service()\n metadata = json.loads(metadata_path.read_text())\n embedding_model = metadata.get(\"embedding_model\")\n try:\n api_key = decrypt_api_key(metadata[\"api_key\"], settings_service)\n except (InvalidToken, TypeError, ValueError) as e:\n self.log(f\"Could not decrypt API key. Please provide it manually. Error: {e}\")\n\n # Check if a custom API key was provided, update metadata if so\n if self.api_key:\n api_key = self.api_key\n self._save_embedding_metadata(\n kb_path=kb_path,\n embedding_model=embedding_model,\n api_key=api_key,\n )\n\n # Create vector store following Local DB component pattern\n await self._create_vector_store(df_source, config_list, embedding_model=embedding_model, api_key=api_key)\n\n # Save KB files (using File Component storage patterns)\n self._save_kb_files(kb_path, config_list)\n\n # Build metadata response\n meta: dict[str, Any] = {\n \"kb_id\": str(uuid.uuid4()),\n \"kb_name\": self.knowledge_base,\n \"rows\": len(df_source),\n \"column_metadata\": column_metadata,\n \"path\": str(kb_path),\n \"config_columns\": len(config_list),\n \"timestamp\": datetime.now(tz=timezone.utc).isoformat(),\n }\n\n # Set status message\n self.status = f\"✅ KB **{self.knowledge_base}** saved · {len(df_source)} chunks.\"\n\n return Data(data=meta)\n\n except (OSError, ValueError, RuntimeError, KeyError) as e:\n msg = f\"Error during KB ingestion: {e}\"\n raise RuntimeError(msg) from e\n\n async def _get_api_key_variable(self, field_value: dict[str, Any]):\n async with session_scope() as db:\n if not self.user_id:\n msg = \"User ID is required for fetching global variables.\"\n raise ValueError(msg)\n current_user = await get_user_by_id(db, self.user_id)\n if not current_user:\n msg = f\"User with ID {self.user_id} not found.\"\n raise ValueError(msg)\n variable_service = get_variable_service()\n\n # Process the api_key field variable\n return await variable_service.get_variable(\n user_id=current_user.id,\n name=field_value[\"03_api_key\"],\n field=\"\",\n session=db,\n )\n\n async def update_build_config(\n self,\n build_config,\n field_value: Any,\n field_name: str | None = None,\n ):\n \"\"\"Update build configuration based on provider selection.\"\"\"\n # Check if we're in Astra cloud environment and raise an error if we are.\n raise_error_if_astra_cloud_disable_component(astra_error_msg)\n # Create a new knowledge base\n if field_name == \"knowledge_base\":\n async with session_scope() as db:\n if not self.user_id:\n msg = \"User ID is required for fetching knowledge base list.\"\n raise ValueError(msg)\n current_user = await get_user_by_id(db, self.user_id)\n if not current_user:\n msg = f\"User with ID {self.user_id} not found.\"\n raise ValueError(msg)\n kb_user = current_user.username\n if isinstance(field_value, dict) and \"01_new_kb_name\" in field_value:\n # Validate the knowledge base name - Make sure it follows these rules:\n if not self.is_valid_collection_name(field_value[\"01_new_kb_name\"]):\n msg = f\"Invalid knowledge base name: {field_value['01_new_kb_name']}\"\n raise ValueError(msg)\n\n api_key = field_value.get(\"03_api_key\", None)\n with contextlib.suppress(Exception):\n # If the API key is a variable, resolve it\n api_key = await self._get_api_key_variable(field_value)\n\n # Make sure api_key is a string\n if not isinstance(api_key, str):\n msg = \"API key must be a string.\"\n raise ValueError(msg)\n\n # We need to test the API Key one time against the embedding model\n embed_model = self._build_embeddings(embedding_model=field_value[\"02_embedding_model\"], api_key=api_key)\n\n # Try to generate a dummy embedding to validate the API key without blocking the event loop\n try:\n await asyncio.wait_for(\n asyncio.to_thread(embed_model.embed_query, \"test\"),\n timeout=10,\n )\n except TimeoutError as e:\n msg = \"Embedding validation timed out. Please verify network connectivity and key.\"\n raise ValueError(msg) from e\n except Exception as e:\n msg = f\"Embedding validation failed: {e!s}\"\n raise ValueError(msg) from e\n\n # Create the new knowledge base directory\n kb_path = _get_knowledge_bases_root_path() / kb_user / field_value[\"01_new_kb_name\"]\n kb_path.mkdir(parents=True, exist_ok=True)\n\n # Save the embedding metadata\n build_config[\"knowledge_base\"][\"value\"] = field_value[\"01_new_kb_name\"]\n self._save_embedding_metadata(\n kb_path=kb_path,\n embedding_model=field_value[\"02_embedding_model\"],\n api_key=api_key,\n )\n\n # Update the knowledge base options dynamically\n build_config[\"knowledge_base\"][\"options\"] = await get_knowledge_bases(\n _get_knowledge_bases_root_path(),\n user_id=self.user_id,\n )\n\n # If the selected knowledge base is not available, reset it\n if build_config[\"knowledge_base\"][\"value\"] not in build_config[\"knowledge_base\"][\"options\"]:\n build_config[\"knowledge_base\"][\"value\"] = None\n\n return build_config\n"
|
|
871
871
|
},
|
|
872
872
|
"column_config": {
|
|
873
873
|
"_input_type": "TableInput",
|
|
@@ -511,7 +511,7 @@
|
|
|
511
511
|
"last_updated": "2025-08-26T16:19:16.681Z",
|
|
512
512
|
"legacy": false,
|
|
513
513
|
"metadata": {
|
|
514
|
-
"code_hash": "
|
|
514
|
+
"code_hash": "af0a162c3f80",
|
|
515
515
|
"dependencies": {
|
|
516
516
|
"dependencies": [
|
|
517
517
|
{
|
|
@@ -605,7 +605,7 @@
|
|
|
605
605
|
"show": true,
|
|
606
606
|
"title_case": false,
|
|
607
607
|
"type": "code",
|
|
608
|
-
"value": "import json\nfrom pathlib import Path\nfrom typing import Any\n\nfrom cryptography.fernet import InvalidToken\nfrom langchain_chroma import Chroma\nfrom langflow.services.auth.utils import decrypt_api_key\nfrom langflow.services.database.models.user.crud import get_user_by_id\nfrom pydantic import SecretStr\n\nfrom lfx.base.knowledge_bases.knowledge_base_utils import get_knowledge_bases\nfrom lfx.custom import Component\nfrom lfx.io import BoolInput, DropdownInput, IntInput, MessageTextInput, Output, SecretStrInput\nfrom lfx.log.logger import logger\nfrom lfx.schema.data import Data\nfrom lfx.schema.dataframe import DataFrame\nfrom lfx.services.deps import get_settings_service, session_scope\n\n_KNOWLEDGE_BASES_ROOT_PATH: Path | None = None\n\n\ndef _get_knowledge_bases_root_path() -> Path:\n \"\"\"Lazy load the knowledge bases root path from settings.\"\"\"\n global _KNOWLEDGE_BASES_ROOT_PATH # noqa: PLW0603\n if _KNOWLEDGE_BASES_ROOT_PATH is None:\n settings = get_settings_service().settings\n knowledge_directory = settings.knowledge_bases_dir\n if not knowledge_directory:\n msg = \"Knowledge bases directory is not set in the settings.\"\n raise ValueError(msg)\n _KNOWLEDGE_BASES_ROOT_PATH = Path(knowledge_directory).expanduser()\n return _KNOWLEDGE_BASES_ROOT_PATH\n\n\nclass KnowledgeRetrievalComponent(Component):\n display_name = \"Knowledge Retrieval\"\n description = \"Search and retrieve data from knowledge.\"\n icon = \"download\"\n name = \"KnowledgeRetrieval\"\n\n inputs = [\n DropdownInput(\n name=\"knowledge_base\",\n display_name=\"Knowledge\",\n info=\"Select the knowledge to load data from.\",\n required=True,\n options=[],\n refresh_button=True,\n real_time_refresh=True,\n ),\n SecretStrInput(\n name=\"api_key\",\n display_name=\"Embedding Provider API Key\",\n info=\"API key for the embedding provider to generate embeddings.\",\n advanced=True,\n required=False,\n ),\n MessageTextInput(\n name=\"search_query\",\n display_name=\"Search Query\",\n info=\"Optional search query to filter knowledge base data.\",\n tool_mode=True,\n ),\n IntInput(\n name=\"top_k\",\n display_name=\"Top K Results\",\n info=\"Number of top results to return from the knowledge base.\",\n value=5,\n advanced=True,\n required=False,\n ),\n BoolInput(\n name=\"include_metadata\",\n display_name=\"Include Metadata\",\n info=\"Whether to include all metadata in the output. If false, only content is returned.\",\n value=True,\n advanced=False,\n ),\n BoolInput(\n name=\"include_embeddings\",\n display_name=\"Include Embeddings\",\n info=\"Whether to include embeddings in the output. Only applicable if 'Include Metadata' is enabled.\",\n value=False,\n advanced=True,\n ),\n ]\n\n outputs = [\n Output(\n name=\"retrieve_data\",\n display_name=\"Results\",\n method=\"retrieve_data\",\n info=\"Returns the data from the selected knowledge base.\",\n ),\n ]\n\n async def update_build_config(self, build_config, field_value, field_name=None): # noqa: ARG002\n if field_name == \"knowledge_base\":\n # Update the knowledge base options dynamically\n build_config[\"knowledge_base\"][\"options\"] = await get_knowledge_bases(\n _get_knowledge_bases_root_path(),\n user_id=self.user_id, # Use the user_id from the component context\n )\n\n # If the selected knowledge base is not available, reset it\n if build_config[\"knowledge_base\"][\"value\"] not in build_config[\"knowledge_base\"][\"options\"]:\n build_config[\"knowledge_base\"][\"value\"] = None\n\n return build_config\n\n def _get_kb_metadata(self, kb_path: Path) -> dict:\n \"\"\"Load and process knowledge base metadata.\"\"\"\n metadata: dict[str, Any] = {}\n metadata_file = kb_path / \"embedding_metadata.json\"\n if not metadata_file.exists():\n logger.warning(f\"Embedding metadata file not found at {metadata_file}\")\n return metadata\n\n try:\n with metadata_file.open(\"r\", encoding=\"utf-8\") as f:\n metadata = json.load(f)\n except json.JSONDecodeError:\n logger.error(f\"Error decoding JSON from {metadata_file}\")\n return {}\n\n # Decrypt API key if it exists\n if \"api_key\" in metadata and metadata.get(\"api_key\"):\n settings_service = get_settings_service()\n try:\n decrypted_key = decrypt_api_key(metadata[\"api_key\"], settings_service)\n metadata[\"api_key\"] = decrypted_key\n except (InvalidToken, TypeError, ValueError) as e:\n logger.error(f\"Could not decrypt API key. Please provide it manually. Error: {e}\")\n metadata[\"api_key\"] = None\n return metadata\n\n def _build_embeddings(self, metadata: dict):\n \"\"\"Build embedding model from metadata.\"\"\"\n runtime_api_key = self.api_key.get_secret_value() if isinstance(self.api_key, SecretStr) else self.api_key\n provider = metadata.get(\"embedding_provider\")\n model = metadata.get(\"embedding_model\")\n api_key = runtime_api_key or metadata.get(\"api_key\")\n chunk_size = metadata.get(\"chunk_size\")\n\n # Handle various providers\n if provider == \"OpenAI\":\n from langchain_openai import OpenAIEmbeddings\n\n if not api_key:\n msg = \"OpenAI API key is required. Provide it in the component's advanced settings.\"\n raise ValueError(msg)\n return OpenAIEmbeddings(\n model=model,\n api_key=api_key,\n chunk_size=chunk_size,\n )\n if provider == \"HuggingFace\":\n from langchain_huggingface import HuggingFaceEmbeddings\n\n return HuggingFaceEmbeddings(\n model=model,\n )\n if provider == \"Cohere\":\n from langchain_cohere import CohereEmbeddings\n\n if not api_key:\n msg = \"Cohere API key is required when using Cohere provider\"\n raise ValueError(msg)\n return CohereEmbeddings(\n model=model,\n cohere_api_key=api_key,\n )\n if provider == \"Custom\":\n # For custom embedding models, we would need additional configuration\n msg = \"Custom embedding models not yet supported\"\n raise NotImplementedError(msg)\n # Add other providers here if they become supported in ingest\n msg = f\"Embedding provider '{provider}' is not supported for retrieval.\"\n raise NotImplementedError(msg)\n\n async def retrieve_data(self) -> DataFrame:\n \"\"\"Retrieve data from the selected knowledge base by reading the Chroma collection.\n\n Returns:\n A DataFrame containing the data rows from the knowledge base.\n \"\"\"\n # Get the current user\n async with session_scope() as db:\n if not self.user_id:\n msg = \"User ID is required for fetching Knowledge Base data.\"\n raise ValueError(msg)\n current_user = await get_user_by_id(db, self.user_id)\n if not current_user:\n msg = f\"User with ID {self.user_id} not found.\"\n raise ValueError(msg)\n kb_user = current_user.username\n kb_path = _get_knowledge_bases_root_path() / kb_user / self.knowledge_base\n\n metadata = self._get_kb_metadata(kb_path)\n if not metadata:\n msg = f\"Metadata not found for knowledge base: {self.knowledge_base}. Ensure it has been indexed.\"\n raise ValueError(msg)\n\n # Build the embedder for the knowledge base\n embedding_function = self._build_embeddings(metadata)\n\n # Load vector store\n chroma = Chroma(\n persist_directory=str(kb_path),\n embedding_function=embedding_function,\n collection_name=self.knowledge_base,\n )\n\n # If a search query is provided, perform a similarity search\n if self.search_query:\n # Use the search query to perform a similarity search\n logger.info(f\"Performing similarity search with query: {self.search_query}\")\n results = chroma.similarity_search_with_score(\n query=self.search_query or \"\",\n k=self.top_k,\n )\n else:\n results = chroma.similarity_search(\n query=self.search_query or \"\",\n k=self.top_k,\n )\n\n # For each result, make it a tuple to match the expected output format\n results = [(doc, 0) for doc in results] # Assign a dummy score of 0\n\n # If include_embeddings is enabled, get embeddings for the results\n id_to_embedding = {}\n if self.include_embeddings and results:\n doc_ids = [doc[0].metadata.get(\"_id\") for doc in results if doc[0].metadata.get(\"_id\")]\n\n # Only proceed if we have valid document IDs\n if doc_ids:\n # Access underlying collection to get embeddings\n collection = chroma._collection # noqa: SLF001\n embeddings_result = collection.get(where={\"_id\": {\"$in\": doc_ids}}, include=[\"metadatas\", \"embeddings\"])\n\n # Create a mapping from document ID to embedding\n for i, metadata in enumerate(embeddings_result.get(\"metadatas\", [])):\n if metadata and \"_id\" in metadata:\n id_to_embedding[metadata[\"_id\"]] = embeddings_result[\"embeddings\"][i]\n\n # Build output data based on include_metadata setting\n data_list = []\n for doc in results:\n kwargs = {\n \"content\": doc[0].page_content,\n }\n if self.search_query:\n kwargs[\"_score\"] = -1 * doc[1]\n if self.include_metadata:\n # Include all metadata, embeddings, and content\n kwargs.update(doc[0].metadata)\n if self.include_embeddings:\n kwargs[\"_embeddings\"] = id_to_embedding.get(doc[0].metadata.get(\"_id\"))\n\n data_list.append(Data(**kwargs))\n\n # Return the DataFrame containing the data\n return DataFrame(data=data_list)\n"
|
|
608
|
+
"value": "import json\nfrom pathlib import Path\nfrom typing import Any\n\nfrom cryptography.fernet import InvalidToken\nfrom langchain_chroma import Chroma\nfrom langflow.services.auth.utils import decrypt_api_key\nfrom langflow.services.database.models.user.crud import get_user_by_id\nfrom pydantic import SecretStr\n\nfrom lfx.base.knowledge_bases.knowledge_base_utils import get_knowledge_bases\nfrom lfx.custom import Component\nfrom lfx.io import BoolInput, DropdownInput, IntInput, MessageTextInput, Output, SecretStrInput\nfrom lfx.log.logger import logger\nfrom lfx.schema.data import Data\nfrom lfx.schema.dataframe import DataFrame\nfrom lfx.services.deps import get_settings_service, session_scope\nfrom lfx.utils.validate_cloud import raise_error_if_astra_cloud_disable_component\n\n_KNOWLEDGE_BASES_ROOT_PATH: Path | None = None\n\n# Error message to raise if we're in Astra cloud environment and the component is not supported.\nastra_error_msg = \"Knowledge retrieval is not supported in Astra cloud environment.\"\n\n\ndef _get_knowledge_bases_root_path() -> Path:\n \"\"\"Lazy load the knowledge bases root path from settings.\"\"\"\n global _KNOWLEDGE_BASES_ROOT_PATH # noqa: PLW0603\n if _KNOWLEDGE_BASES_ROOT_PATH is None:\n settings = get_settings_service().settings\n knowledge_directory = settings.knowledge_bases_dir\n if not knowledge_directory:\n msg = \"Knowledge bases directory is not set in the settings.\"\n raise ValueError(msg)\n _KNOWLEDGE_BASES_ROOT_PATH = Path(knowledge_directory).expanduser()\n return _KNOWLEDGE_BASES_ROOT_PATH\n\n\nclass KnowledgeRetrievalComponent(Component):\n display_name = \"Knowledge Retrieval\"\n description = \"Search and retrieve data from knowledge.\"\n icon = \"download\"\n name = \"KnowledgeRetrieval\"\n\n inputs = [\n DropdownInput(\n name=\"knowledge_base\",\n display_name=\"Knowledge\",\n info=\"Select the knowledge to load data from.\",\n required=True,\n options=[],\n refresh_button=True,\n real_time_refresh=True,\n ),\n SecretStrInput(\n name=\"api_key\",\n display_name=\"Embedding Provider API Key\",\n info=\"API key for the embedding provider to generate embeddings.\",\n advanced=True,\n required=False,\n ),\n MessageTextInput(\n name=\"search_query\",\n display_name=\"Search Query\",\n info=\"Optional search query to filter knowledge base data.\",\n tool_mode=True,\n ),\n IntInput(\n name=\"top_k\",\n display_name=\"Top K Results\",\n info=\"Number of top results to return from the knowledge base.\",\n value=5,\n advanced=True,\n required=False,\n ),\n BoolInput(\n name=\"include_metadata\",\n display_name=\"Include Metadata\",\n info=\"Whether to include all metadata in the output. If false, only content is returned.\",\n value=True,\n advanced=False,\n ),\n BoolInput(\n name=\"include_embeddings\",\n display_name=\"Include Embeddings\",\n info=\"Whether to include embeddings in the output. Only applicable if 'Include Metadata' is enabled.\",\n value=False,\n advanced=True,\n ),\n ]\n\n outputs = [\n Output(\n name=\"retrieve_data\",\n display_name=\"Results\",\n method=\"retrieve_data\",\n info=\"Returns the data from the selected knowledge base.\",\n ),\n ]\n\n async def update_build_config(self, build_config, field_value, field_name=None): # noqa: ARG002\n # Check if we're in Astra cloud environment and raise an error if we are.\n raise_error_if_astra_cloud_disable_component(astra_error_msg)\n if field_name == \"knowledge_base\":\n # Update the knowledge base options dynamically\n build_config[\"knowledge_base\"][\"options\"] = await get_knowledge_bases(\n _get_knowledge_bases_root_path(),\n user_id=self.user_id, # Use the user_id from the component context\n )\n\n # If the selected knowledge base is not available, reset it\n if build_config[\"knowledge_base\"][\"value\"] not in build_config[\"knowledge_base\"][\"options\"]:\n build_config[\"knowledge_base\"][\"value\"] = None\n\n return build_config\n\n def _get_kb_metadata(self, kb_path: Path) -> dict:\n \"\"\"Load and process knowledge base metadata.\"\"\"\n # Check if we're in Astra cloud environment and raise an error if we are.\n raise_error_if_astra_cloud_disable_component(astra_error_msg)\n metadata: dict[str, Any] = {}\n metadata_file = kb_path / \"embedding_metadata.json\"\n if not metadata_file.exists():\n logger.warning(f\"Embedding metadata file not found at {metadata_file}\")\n return metadata\n\n try:\n with metadata_file.open(\"r\", encoding=\"utf-8\") as f:\n metadata = json.load(f)\n except json.JSONDecodeError:\n logger.error(f\"Error decoding JSON from {metadata_file}\")\n return {}\n\n # Decrypt API key if it exists\n if \"api_key\" in metadata and metadata.get(\"api_key\"):\n settings_service = get_settings_service()\n try:\n decrypted_key = decrypt_api_key(metadata[\"api_key\"], settings_service)\n metadata[\"api_key\"] = decrypted_key\n except (InvalidToken, TypeError, ValueError) as e:\n logger.error(f\"Could not decrypt API key. Please provide it manually. Error: {e}\")\n metadata[\"api_key\"] = None\n return metadata\n\n def _build_embeddings(self, metadata: dict):\n \"\"\"Build embedding model from metadata.\"\"\"\n runtime_api_key = self.api_key.get_secret_value() if isinstance(self.api_key, SecretStr) else self.api_key\n provider = metadata.get(\"embedding_provider\")\n model = metadata.get(\"embedding_model\")\n api_key = runtime_api_key or metadata.get(\"api_key\")\n chunk_size = metadata.get(\"chunk_size\")\n\n # Handle various providers\n if provider == \"OpenAI\":\n from langchain_openai import OpenAIEmbeddings\n\n if not api_key:\n msg = \"OpenAI API key is required. Provide it in the component's advanced settings.\"\n raise ValueError(msg)\n return OpenAIEmbeddings(\n model=model,\n api_key=api_key,\n chunk_size=chunk_size,\n )\n if provider == \"HuggingFace\":\n from langchain_huggingface import HuggingFaceEmbeddings\n\n return HuggingFaceEmbeddings(\n model=model,\n )\n if provider == \"Cohere\":\n from langchain_cohere import CohereEmbeddings\n\n if not api_key:\n msg = \"Cohere API key is required when using Cohere provider\"\n raise ValueError(msg)\n return CohereEmbeddings(\n model=model,\n cohere_api_key=api_key,\n )\n if provider == \"Custom\":\n # For custom embedding models, we would need additional configuration\n msg = \"Custom embedding models not yet supported\"\n raise NotImplementedError(msg)\n # Add other providers here if they become supported in ingest\n msg = f\"Embedding provider '{provider}' is not supported for retrieval.\"\n raise NotImplementedError(msg)\n\n async def retrieve_data(self) -> DataFrame:\n \"\"\"Retrieve data from the selected knowledge base by reading the Chroma collection.\n\n Returns:\n A DataFrame containing the data rows from the knowledge base.\n \"\"\"\n # Check if we're in Astra cloud environment and raise an error if we are.\n raise_error_if_astra_cloud_disable_component(astra_error_msg)\n # Get the current user\n async with session_scope() as db:\n if not self.user_id:\n msg = \"User ID is required for fetching Knowledge Base data.\"\n raise ValueError(msg)\n current_user = await get_user_by_id(db, self.user_id)\n if not current_user:\n msg = f\"User with ID {self.user_id} not found.\"\n raise ValueError(msg)\n kb_user = current_user.username\n kb_path = _get_knowledge_bases_root_path() / kb_user / self.knowledge_base\n\n metadata = self._get_kb_metadata(kb_path)\n if not metadata:\n msg = f\"Metadata not found for knowledge base: {self.knowledge_base}. Ensure it has been indexed.\"\n raise ValueError(msg)\n\n # Build the embedder for the knowledge base\n embedding_function = self._build_embeddings(metadata)\n\n # Load vector store\n chroma = Chroma(\n persist_directory=str(kb_path),\n embedding_function=embedding_function,\n collection_name=self.knowledge_base,\n )\n\n # If a search query is provided, perform a similarity search\n if self.search_query:\n # Use the search query to perform a similarity search\n logger.info(f\"Performing similarity search with query: {self.search_query}\")\n results = chroma.similarity_search_with_score(\n query=self.search_query or \"\",\n k=self.top_k,\n )\n else:\n results = chroma.similarity_search(\n query=self.search_query or \"\",\n k=self.top_k,\n )\n\n # For each result, make it a tuple to match the expected output format\n results = [(doc, 0) for doc in results] # Assign a dummy score of 0\n\n # If include_embeddings is enabled, get embeddings for the results\n id_to_embedding = {}\n if self.include_embeddings and results:\n doc_ids = [doc[0].metadata.get(\"_id\") for doc in results if doc[0].metadata.get(\"_id\")]\n\n # Only proceed if we have valid document IDs\n if doc_ids:\n # Access underlying collection to get embeddings\n collection = chroma._collection # noqa: SLF001\n embeddings_result = collection.get(where={\"_id\": {\"$in\": doc_ids}}, include=[\"metadatas\", \"embeddings\"])\n\n # Create a mapping from document ID to embedding\n for i, metadata in enumerate(embeddings_result.get(\"metadatas\", [])):\n if metadata and \"_id\" in metadata:\n id_to_embedding[metadata[\"_id\"]] = embeddings_result[\"embeddings\"][i]\n\n # Build output data based on include_metadata setting\n data_list = []\n for doc in results:\n kwargs = {\n \"content\": doc[0].page_content,\n }\n if self.search_query:\n kwargs[\"_score\"] = -1 * doc[1]\n if self.include_metadata:\n # Include all metadata, embeddings, and content\n kwargs.update(doc[0].metadata)\n if self.include_embeddings:\n kwargs[\"_embeddings\"] = id_to_embedding.get(doc[0].metadata.get(\"_id\"))\n\n data_list.append(Data(**kwargs))\n\n # Return the DataFrame containing the data\n return DataFrame(data=data_list)\n"
|
|
609
609
|
},
|
|
610
610
|
"include_embeddings": {
|
|
611
611
|
"_input_type": "BoolInput",
|