vibesurf 0.1.26__py3-none-any.whl → 0.2.6__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.

Potentially problematic release.


This version of vibesurf might be problematic. Click here for more details.

Files changed (2858) hide show
  1. vibe_surf/_version.py +2 -2
  2. vibe_surf/agents/browser_use_agent.py +15 -353
  3. vibe_surf/agents/prompts/vibe_surf_prompt.py +35 -1
  4. vibe_surf/agents/report_writer_agent.py +71 -21
  5. vibe_surf/agents/vibe_surf_agent.py +232 -120
  6. vibe_surf/agents/views.py +6 -15
  7. vibe_surf/backend/api/composio.py +1047 -0
  8. vibe_surf/backend/api/schedule.py +331 -0
  9. vibe_surf/backend/api/vibesurf.py +449 -0
  10. vibe_surf/backend/database/migrations/v005_add_composio_integration.sql +33 -0
  11. vibe_surf/backend/database/migrations/v006_add_credentials_table.sql +26 -0
  12. vibe_surf/backend/database/migrations/v007_add_schedule_table.sql +29 -0
  13. vibe_surf/backend/database/models.py +86 -1
  14. vibe_surf/backend/database/queries.py +565 -2
  15. vibe_surf/backend/frontend/assets/MCPLangflow-Bzb6g6Zx.png +0 -0
  16. vibe_surf/backend/frontend/assets/SlackIcon-DH9MFXnM.js +1 -0
  17. vibe_surf/backend/frontend/assets/Wikipedia-MKjlsFhR.js +1 -0
  18. vibe_surf/backend/frontend/assets/Wolfram-DZjh94KW.js +1 -0
  19. vibe_surf/backend/frontend/assets/__vite-browser-external-BIHI7g3E.js +1 -0
  20. vibe_surf/backend/frontend/assets/a-arrow-down-M5pMOHfz.js +6 -0
  21. vibe_surf/backend/frontend/assets/a-arrow-up-Bhux1P9g.js +6 -0
  22. vibe_surf/backend/frontend/assets/a-large-small-CxpoIZ2k.js +6 -0
  23. vibe_surf/backend/frontend/assets/accessibility-DIOswxup.js +6 -0
  24. vibe_surf/backend/frontend/assets/activity-Cgoj6BfB.js +6 -0
  25. vibe_surf/backend/frontend/assets/air-vent-BRuCRSP-.js +6 -0
  26. vibe_surf/backend/frontend/assets/airplay-D6ddOHpT.js +6 -0
  27. vibe_surf/backend/frontend/assets/alarm-clock-BswE0svo.js +6 -0
  28. vibe_surf/backend/frontend/assets/alarm-clock-check-CMKnL746.js +6 -0
  29. vibe_surf/backend/frontend/assets/alarm-clock-minus-Cmry03T1.js +6 -0
  30. vibe_surf/backend/frontend/assets/alarm-clock-off-ByCGR7KD.js +6 -0
  31. vibe_surf/backend/frontend/assets/alarm-clock-plus-D80NSz4S.js +6 -0
  32. vibe_surf/backend/frontend/assets/alarm-smoke-DyUVOJUh.js +6 -0
  33. vibe_surf/backend/frontend/assets/album-CGIJADgR.js +6 -0
  34. vibe_surf/backend/frontend/assets/align-center-Cb9nxg1u.js +6 -0
  35. vibe_surf/backend/frontend/assets/align-center-horizontal-DunWyH8w.js +6 -0
  36. vibe_surf/backend/frontend/assets/align-center-vertical-COWbwf4r.js +6 -0
  37. vibe_surf/backend/frontend/assets/align-end-horizontal-BXGWZnJg.js +6 -0
  38. vibe_surf/backend/frontend/assets/align-end-vertical-DsDprlL7.js +6 -0
  39. vibe_surf/backend/frontend/assets/align-horizontal-distribute-center-fSZ29QkE.js +6 -0
  40. vibe_surf/backend/frontend/assets/align-horizontal-distribute-end-C3BFRnLg.js +6 -0
  41. vibe_surf/backend/frontend/assets/align-horizontal-distribute-start-DqYzU1-w.js +6 -0
  42. vibe_surf/backend/frontend/assets/align-horizontal-justify-center-2iNXkDKh.js +6 -0
  43. vibe_surf/backend/frontend/assets/align-horizontal-justify-end-COPIkT0U.js +6 -0
  44. vibe_surf/backend/frontend/assets/align-horizontal-justify-start-DoS3Jrzb.js +6 -0
  45. vibe_surf/backend/frontend/assets/align-horizontal-space-around-k9yEGjMh.js +6 -0
  46. vibe_surf/backend/frontend/assets/align-horizontal-space-between-C6RzmtkD.js +6 -0
  47. vibe_surf/backend/frontend/assets/align-justify-BvD3xtAK.js +6 -0
  48. vibe_surf/backend/frontend/assets/align-left-BP84nxXJ.js +6 -0
  49. vibe_surf/backend/frontend/assets/align-right-6z3k9YVj.js +6 -0
  50. vibe_surf/backend/frontend/assets/align-start-horizontal-DRihqJTg.js +6 -0
  51. vibe_surf/backend/frontend/assets/align-start-vertical-Bs-ISVmy.js +6 -0
  52. vibe_surf/backend/frontend/assets/align-vertical-distribute-center-CU82VWLq.js +6 -0
  53. vibe_surf/backend/frontend/assets/align-vertical-distribute-end-IrubG5LP.js +6 -0
  54. vibe_surf/backend/frontend/assets/align-vertical-distribute-start-BgBu3t8X.js +6 -0
  55. vibe_surf/backend/frontend/assets/align-vertical-justify-center-e7psKZ4D.js +6 -0
  56. vibe_surf/backend/frontend/assets/align-vertical-justify-end-CncIBU5b.js +6 -0
  57. vibe_surf/backend/frontend/assets/align-vertical-justify-start-21_MQReA.js +6 -0
  58. vibe_surf/backend/frontend/assets/align-vertical-space-around-NJNn7zPP.js +6 -0
  59. vibe_surf/backend/frontend/assets/align-vertical-space-between-LYs4c5i9.js +6 -0
  60. vibe_surf/backend/frontend/assets/ambulance-jMfwSVYH.js +6 -0
  61. vibe_surf/backend/frontend/assets/ampersand-B1-1HYj1.js +6 -0
  62. vibe_surf/backend/frontend/assets/ampersands-DVVxe50v.js +6 -0
  63. vibe_surf/backend/frontend/assets/amphora-B12bYdql.js +6 -0
  64. vibe_surf/backend/frontend/assets/anchor-C_JuZyO5.js +6 -0
  65. vibe_surf/backend/frontend/assets/angry-KqzvbAxB.js +6 -0
  66. vibe_surf/backend/frontend/assets/annoyed-CZXUdq0q.js +6 -0
  67. vibe_surf/backend/frontend/assets/antenna-CFlKnuEE.js +6 -0
  68. vibe_surf/backend/frontend/assets/anvil-ObmOBzcW.js +6 -0
  69. vibe_surf/backend/frontend/assets/aperture-CU6mXxj8.js +6 -0
  70. vibe_surf/backend/frontend/assets/apify_white-uCJdZkTU.png +0 -0
  71. vibe_surf/backend/frontend/assets/app-window-D5iSiHiS.js +6 -0
  72. vibe_surf/backend/frontend/assets/app-window-mac-QOaPWoGX.js +6 -0
  73. vibe_surf/backend/frontend/assets/apple-D7ZsI-et.js +6 -0
  74. vibe_surf/backend/frontend/assets/archive-FLn_d8Ny.js +6 -0
  75. vibe_surf/backend/frontend/assets/archive-restore-C668KwvC.js +6 -0
  76. vibe_surf/backend/frontend/assets/archive-x-DJJed9T2.js +6 -0
  77. vibe_surf/backend/frontend/assets/armchair-DfXLs0Nj.js +6 -0
  78. vibe_surf/backend/frontend/assets/arrow-big-down-DU2dtkeu.js +6 -0
  79. vibe_surf/backend/frontend/assets/arrow-big-down-dash-CzsIOlhF.js +6 -0
  80. vibe_surf/backend/frontend/assets/arrow-big-left-CCeUj8q9.js +6 -0
  81. vibe_surf/backend/frontend/assets/arrow-big-left-dash-CFpRtORj.js +6 -0
  82. vibe_surf/backend/frontend/assets/arrow-big-right-C1QE56k7.js +6 -0
  83. vibe_surf/backend/frontend/assets/arrow-big-right-dash-D6H2wruv.js +6 -0
  84. vibe_surf/backend/frontend/assets/arrow-big-up-0f0CsejQ.js +6 -0
  85. vibe_surf/backend/frontend/assets/arrow-big-up-dash-Dz-Sbw66.js +6 -0
  86. vibe_surf/backend/frontend/assets/arrow-down-0-1-B1PGN6BJ.js +6 -0
  87. vibe_surf/backend/frontend/assets/arrow-down-1-0-Bcl1KrrL.js +6 -0
  88. vibe_surf/backend/frontend/assets/arrow-down-DZKzcieL.js +6 -0
  89. vibe_surf/backend/frontend/assets/arrow-down-a-z-DurN_xiR.js +6 -0
  90. vibe_surf/backend/frontend/assets/arrow-down-from-line-D2i9DDA0.js +6 -0
  91. vibe_surf/backend/frontend/assets/arrow-down-left-Pid0zUYj.js +6 -0
  92. vibe_surf/backend/frontend/assets/arrow-down-narrow-wide-DtnDCgZY.js +6 -0
  93. vibe_surf/backend/frontend/assets/arrow-down-right-BgepY9bM.js +6 -0
  94. vibe_surf/backend/frontend/assets/arrow-down-to-dot-C5rQ12yn.js +6 -0
  95. vibe_surf/backend/frontend/assets/arrow-down-to-line-DovZ64L0.js +6 -0
  96. vibe_surf/backend/frontend/assets/arrow-down-up-D5-v7CDC.js +6 -0
  97. vibe_surf/backend/frontend/assets/arrow-down-wide-narrow-CGAsRLvP.js +6 -0
  98. vibe_surf/backend/frontend/assets/arrow-down-z-a-DOGHwUgR.js +6 -0
  99. vibe_surf/backend/frontend/assets/arrow-left-from-line-DwY8iDxY.js +6 -0
  100. vibe_surf/backend/frontend/assets/arrow-left-hKr3yGVm.js +6 -0
  101. vibe_surf/backend/frontend/assets/arrow-left-right-Be5fvvG0.js +6 -0
  102. vibe_surf/backend/frontend/assets/arrow-left-to-line-DKHIypu3.js +6 -0
  103. vibe_surf/backend/frontend/assets/arrow-right-BaRZuB8W.js +6 -0
  104. vibe_surf/backend/frontend/assets/arrow-right-from-line-D3jqt4-q.js +6 -0
  105. vibe_surf/backend/frontend/assets/arrow-right-left-BKRuMAR-.js +6 -0
  106. vibe_surf/backend/frontend/assets/arrow-right-to-line-rtWVy_CC.js +6 -0
  107. vibe_surf/backend/frontend/assets/arrow-up-0-1-yF8Nt_KM.js +6 -0
  108. vibe_surf/backend/frontend/assets/arrow-up-1-0-WRlLFmSw.js +6 -0
  109. vibe_surf/backend/frontend/assets/arrow-up-BKnAmgTC.js +6 -0
  110. vibe_surf/backend/frontend/assets/arrow-up-a-z-COXfk41y.js +6 -0
  111. vibe_surf/backend/frontend/assets/arrow-up-down-Dtw4v35K.js +6 -0
  112. vibe_surf/backend/frontend/assets/arrow-up-from-dot-B1XSjc2P.js +6 -0
  113. vibe_surf/backend/frontend/assets/arrow-up-from-line-C-lHvDpd.js +6 -0
  114. vibe_surf/backend/frontend/assets/arrow-up-left-CYojov8T.js +6 -0
  115. vibe_surf/backend/frontend/assets/arrow-up-narrow-wide-B54CYEHs.js +6 -0
  116. vibe_surf/backend/frontend/assets/arrow-up-right-Bdo9Z-7A.js +6 -0
  117. vibe_surf/backend/frontend/assets/arrow-up-to-line-DS_I-9Vp.js +6 -0
  118. vibe_surf/backend/frontend/assets/arrow-up-wide-narrow-B3GeXj9O.js +6 -0
  119. vibe_surf/backend/frontend/assets/arrow-up-z-a-CdyZuD75.js +6 -0
  120. vibe_surf/backend/frontend/assets/arrows-up-from-line-0sYhsLRw.js +6 -0
  121. vibe_surf/backend/frontend/assets/asterisk-CQWlVYDB.js +6 -0
  122. vibe_surf/backend/frontend/assets/at-sign-Dug8NlWL.js +6 -0
  123. vibe_surf/backend/frontend/assets/atom-Cx1vCOFb.js +6 -0
  124. vibe_surf/backend/frontend/assets/audio-lines-Cimsj6_f.js +6 -0
  125. vibe_surf/backend/frontend/assets/audio-waveform-BxCl1LyQ.js +6 -0
  126. vibe_surf/backend/frontend/assets/award-dRU3xhJ7.js +6 -0
  127. vibe_surf/backend/frontend/assets/axe-B8CCMGTD.js +6 -0
  128. vibe_surf/backend/frontend/assets/axis-3d-D2ZIjjx3.js +6 -0
  129. vibe_surf/backend/frontend/assets/baby-DWh5CwfC.js +6 -0
  130. vibe_surf/backend/frontend/assets/backpack-D9rjYWvf.js +6 -0
  131. vibe_surf/backend/frontend/assets/badge-C0r2CPAV.js +6 -0
  132. vibe_surf/backend/frontend/assets/badge-alert-Do89zN-s.js +6 -0
  133. vibe_surf/backend/frontend/assets/badge-cent-Dmv_cqc-.js +6 -0
  134. vibe_surf/backend/frontend/assets/badge-check--_Rese0X.js +6 -0
  135. vibe_surf/backend/frontend/assets/badge-dollar-sign-BHnNL8ma.js +6 -0
  136. vibe_surf/backend/frontend/assets/badge-euro-CKNQv-oO.js +6 -0
  137. vibe_surf/backend/frontend/assets/badge-help-BlZAHEa-.js +6 -0
  138. vibe_surf/backend/frontend/assets/badge-indian-rupee-BNIUcLaI.js +6 -0
  139. vibe_surf/backend/frontend/assets/badge-info-CrX5KTPR.js +6 -0
  140. vibe_surf/backend/frontend/assets/badge-japanese-yen-0mdbiK5f.js +6 -0
  141. vibe_surf/backend/frontend/assets/badge-minus-BX_scLIK.js +6 -0
  142. vibe_surf/backend/frontend/assets/badge-percent-BSJP3Okj.js +6 -0
  143. vibe_surf/backend/frontend/assets/badge-plus-DhlqCq3Z.js +6 -0
  144. vibe_surf/backend/frontend/assets/badge-pound-sterling-QpnkBN56.js +6 -0
  145. vibe_surf/backend/frontend/assets/badge-russian-ruble-L30Ncxnh.js +6 -0
  146. vibe_surf/backend/frontend/assets/badge-swiss-franc-BQrLli-C.js +6 -0
  147. vibe_surf/backend/frontend/assets/badge-x-DDXVSWE5.js +6 -0
  148. vibe_surf/backend/frontend/assets/baggage-claim-Nd9Qw4rX.js +6 -0
  149. vibe_surf/backend/frontend/assets/ban-fSKv80ss.js +6 -0
  150. vibe_surf/backend/frontend/assets/banana-DTClkW0x.js +6 -0
  151. vibe_surf/backend/frontend/assets/bandage-DLyvBCvf.js +6 -0
  152. vibe_surf/backend/frontend/assets/banknote-ArlwGdT1.js +6 -0
  153. vibe_surf/backend/frontend/assets/banknote-arrow-down-Dx9vP7KP.js +6 -0
  154. vibe_surf/backend/frontend/assets/banknote-arrow-up-CZNOWrKW.js +6 -0
  155. vibe_surf/backend/frontend/assets/banknote-x-y8ot0KXI.js +6 -0
  156. vibe_surf/backend/frontend/assets/barcode-U3mgwXvC.js +6 -0
  157. vibe_surf/backend/frontend/assets/baseline-Bb17nsNt.js +6 -0
  158. vibe_surf/backend/frontend/assets/bath-Fu-10Xqv.js +6 -0
  159. vibe_surf/backend/frontend/assets/battery-D2ng6PHz.js +6 -0
  160. vibe_surf/backend/frontend/assets/battery-charging-BBA_U97U.js +6 -0
  161. vibe_surf/backend/frontend/assets/battery-full-D74R09iv.js +6 -0
  162. vibe_surf/backend/frontend/assets/battery-low-BMeJBmJp.js +6 -0
  163. vibe_surf/backend/frontend/assets/battery-medium-clKHZw71.js +6 -0
  164. vibe_surf/backend/frontend/assets/battery-plus-DxtzU1bB.js +6 -0
  165. vibe_surf/backend/frontend/assets/battery-warning-1NEZ4eCa.js +6 -0
  166. vibe_surf/backend/frontend/assets/beaker-Br0pnmtw.js +6 -0
  167. vibe_surf/backend/frontend/assets/bean-B04lfjZo.js +6 -0
  168. vibe_surf/backend/frontend/assets/bean-off-C6H6plJJ.js +6 -0
  169. vibe_surf/backend/frontend/assets/bed-B7xWDlGQ.js +6 -0
  170. vibe_surf/backend/frontend/assets/bed-double-We8EVOE6.js +6 -0
  171. vibe_surf/backend/frontend/assets/bed-single-C-tVm75i.js +6 -0
  172. vibe_surf/backend/frontend/assets/beef-BzzCqLUx.js +6 -0
  173. vibe_surf/backend/frontend/assets/beer-B1aIU5Wp.js +6 -0
  174. vibe_surf/backend/frontend/assets/beer-off-T9p0sUQ_.js +6 -0
  175. vibe_surf/backend/frontend/assets/bell-BiEY08q7.js +6 -0
  176. vibe_surf/backend/frontend/assets/bell-dot-D6ZHJmF9.js +6 -0
  177. vibe_surf/backend/frontend/assets/bell-electric-BjP0O4kE.js +6 -0
  178. vibe_surf/backend/frontend/assets/bell-minus-Cw2KMMsV.js +6 -0
  179. vibe_surf/backend/frontend/assets/bell-off-JUGEvepv.js +6 -0
  180. vibe_surf/backend/frontend/assets/bell-plus-BtwPCtO5.js +6 -0
  181. vibe_surf/backend/frontend/assets/bell-ring-B_RAFBbK.js +6 -0
  182. vibe_surf/backend/frontend/assets/between-horizontal-end-DG9RojRP.js +6 -0
  183. vibe_surf/backend/frontend/assets/between-horizontal-start-BNuWKIUb.js +6 -0
  184. vibe_surf/backend/frontend/assets/between-vertical-end-CUvl7S4G.js +6 -0
  185. vibe_surf/backend/frontend/assets/between-vertical-start-tYvnZE7k.js +6 -0
  186. vibe_surf/backend/frontend/assets/biceps-flexed-D2zMmbhv.js +6 -0
  187. vibe_surf/backend/frontend/assets/bike-DPdpsZIt.js +6 -0
  188. vibe_surf/backend/frontend/assets/binary-DnnraEVk.js +6 -0
  189. vibe_surf/backend/frontend/assets/binoculars-BXc-CFA4.js +6 -0
  190. vibe_surf/backend/frontend/assets/biohazard-D-6PF7OA.js +6 -0
  191. vibe_surf/backend/frontend/assets/bird-CYNkrqM5.js +6 -0
  192. vibe_surf/backend/frontend/assets/bitcoin-DG6PDKEk.js +6 -0
  193. vibe_surf/backend/frontend/assets/blend-COR-wQIS.js +6 -0
  194. vibe_surf/backend/frontend/assets/blinds-_pD0AjwU.js +6 -0
  195. vibe_surf/backend/frontend/assets/blocks-C0goFnXe.js +6 -0
  196. vibe_surf/backend/frontend/assets/bluetooth-BFH9HCot.js +6 -0
  197. vibe_surf/backend/frontend/assets/bluetooth-connected-C9JKQLmC.js +6 -0
  198. vibe_surf/backend/frontend/assets/bluetooth-off-ka-F7ZnG.js +6 -0
  199. vibe_surf/backend/frontend/assets/bluetooth-searching-BdyfX9rD.js +6 -0
  200. vibe_surf/backend/frontend/assets/bold-CZSxbQF9.js +6 -0
  201. vibe_surf/backend/frontend/assets/bolt-BjrrPChn.js +6 -0
  202. vibe_surf/backend/frontend/assets/bomb-CMlcm4r9.js +6 -0
  203. vibe_surf/backend/frontend/assets/bone-qWIxHNfL.js +6 -0
  204. vibe_surf/backend/frontend/assets/book-BfRvOdc3.js +6 -0
  205. vibe_surf/backend/frontend/assets/book-a-CpoCb7Zv.js +6 -0
  206. vibe_surf/backend/frontend/assets/book-audio-cBKWAq-p.js +6 -0
  207. vibe_surf/backend/frontend/assets/book-check-CqwOgoOp.js +6 -0
  208. vibe_surf/backend/frontend/assets/book-copy-ORHl4yqI.js +6 -0
  209. vibe_surf/backend/frontend/assets/book-dashed-BrJdSa-D.js +6 -0
  210. vibe_surf/backend/frontend/assets/book-down-Bj4JV-P-.js +6 -0
  211. vibe_surf/backend/frontend/assets/book-headphones-BYuIU1gj.js +6 -0
  212. vibe_surf/backend/frontend/assets/book-heart-DCUxVJaU.js +6 -0
  213. vibe_surf/backend/frontend/assets/book-image-BPpCKv6n.js +6 -0
  214. vibe_surf/backend/frontend/assets/book-key-Ca_EtM6h.js +6 -0
  215. vibe_surf/backend/frontend/assets/book-lock-Bldzz1aF.js +6 -0
  216. vibe_surf/backend/frontend/assets/book-marked-BCleXwJ3.js +6 -0
  217. vibe_surf/backend/frontend/assets/book-minus-XoJOGZOx.js +6 -0
  218. vibe_surf/backend/frontend/assets/book-open-DUlI5XCY.js +6 -0
  219. vibe_surf/backend/frontend/assets/book-open-check-BEksHFoQ.js +6 -0
  220. vibe_surf/backend/frontend/assets/book-open-text-CiKyiRt-.js +6 -0
  221. vibe_surf/backend/frontend/assets/book-plus-DuUfSKu2.js +6 -0
  222. vibe_surf/backend/frontend/assets/book-text-TTfLk4-M.js +6 -0
  223. vibe_surf/backend/frontend/assets/book-type-CMV326FZ.js +6 -0
  224. vibe_surf/backend/frontend/assets/book-up-2-CGiuKI0n.js +6 -0
  225. vibe_surf/backend/frontend/assets/book-up-d2hb8aDq.js +6 -0
  226. vibe_surf/backend/frontend/assets/book-user-BsZySUGG.js +6 -0
  227. vibe_surf/backend/frontend/assets/book-x-CoSA25As.js +6 -0
  228. vibe_surf/backend/frontend/assets/bookmark-CVx8aFGk.js +6 -0
  229. vibe_surf/backend/frontend/assets/bookmark-check-Zh_1fqo_.js +6 -0
  230. vibe_surf/backend/frontend/assets/bookmark-minus---KmRSON.js +6 -0
  231. vibe_surf/backend/frontend/assets/bookmark-plus-ZY-aQ6r5.js +6 -0
  232. vibe_surf/backend/frontend/assets/bookmark-x-DnEKBdZC.js +6 -0
  233. vibe_surf/backend/frontend/assets/boom-box-D5cJf4pI.js +6 -0
  234. vibe_surf/backend/frontend/assets/bot-BbS7VJ5s.js +6 -0
  235. vibe_surf/backend/frontend/assets/bot-message-square-Bm4hBAbI.js +6 -0
  236. vibe_surf/backend/frontend/assets/bot-off-CFjG1wx4.js +6 -0
  237. vibe_surf/backend/frontend/assets/bow-arrow-Bupk8VJM.js +6 -0
  238. vibe_surf/backend/frontend/assets/box-CyVAC5Vv.js +6 -0
  239. vibe_surf/backend/frontend/assets/boxes-B3xCa_UA.js +6 -0
  240. vibe_surf/backend/frontend/assets/braces-QLXt2h0B.js +6 -0
  241. vibe_surf/backend/frontend/assets/brackets-CEy7gs9d.js +6 -0
  242. vibe_surf/backend/frontend/assets/brain-circuit-WmeDjyy5.js +6 -0
  243. vibe_surf/backend/frontend/assets/brain-cog-DKDdpxNn.js +6 -0
  244. vibe_surf/backend/frontend/assets/brain-ziGJYeS1.js +6 -0
  245. vibe_surf/backend/frontend/assets/brick-wall-DXer5s5J.js +6 -0
  246. vibe_surf/backend/frontend/assets/brick-wall-fire-CfXr8Krv.js +6 -0
  247. vibe_surf/backend/frontend/assets/briefcase-C2YbssAg.js +6 -0
  248. vibe_surf/backend/frontend/assets/briefcase-business-CJCpJSkU.js +6 -0
  249. vibe_surf/backend/frontend/assets/briefcase-conveyor-belt-B0jqiIT4.js +6 -0
  250. vibe_surf/backend/frontend/assets/briefcase-medical-BBH0C6ZQ.js +6 -0
  251. vibe_surf/backend/frontend/assets/bring-to-front-ywT72zy-.js +6 -0
  252. vibe_surf/backend/frontend/assets/brush-_uc9w_j1.js +6 -0
  253. vibe_surf/backend/frontend/assets/bubbles-ggRrvDQI.js +6 -0
  254. vibe_surf/backend/frontend/assets/bug-6l9frAXO.js +6 -0
  255. vibe_surf/backend/frontend/assets/bug-off-BmK1mJ7T.js +6 -0
  256. vibe_surf/backend/frontend/assets/bug-play-DbXJeqOa.js +6 -0
  257. vibe_surf/backend/frontend/assets/building-2-Cf9gYIvy.js +6 -0
  258. vibe_surf/backend/frontend/assets/building-D9eMVeBu.js +6 -0
  259. vibe_surf/backend/frontend/assets/bus-COrhWbdv.js +6 -0
  260. vibe_surf/backend/frontend/assets/bus-front-Csav5OG_.js +6 -0
  261. vibe_surf/backend/frontend/assets/cable-BPG7O6tf.js +6 -0
  262. vibe_surf/backend/frontend/assets/cable-car-ChPtZlze.js +6 -0
  263. vibe_surf/backend/frontend/assets/cake-DnmMZhI2.js +6 -0
  264. vibe_surf/backend/frontend/assets/cake-slice-Clc5mDPW.js +6 -0
  265. vibe_surf/backend/frontend/assets/calculator-C77I3XPN.js +6 -0
  266. vibe_surf/backend/frontend/assets/calendar-1-BMs-t7Zd.js +6 -0
  267. vibe_surf/backend/frontend/assets/calendar-DuLRS-6L.js +6 -0
  268. vibe_surf/backend/frontend/assets/calendar-arrow-down-DoVsOnV0.js +6 -0
  269. vibe_surf/backend/frontend/assets/calendar-arrow-up-Ca_1_rkT.js +6 -0
  270. vibe_surf/backend/frontend/assets/calendar-check-2-0JmvXRsb.js +6 -0
  271. vibe_surf/backend/frontend/assets/calendar-check-DtTDIbPE.js +6 -0
  272. vibe_surf/backend/frontend/assets/calendar-clock-39XA2NxZ.js +6 -0
  273. vibe_surf/backend/frontend/assets/calendar-cog-B3elAX8P.js +6 -0
  274. vibe_surf/backend/frontend/assets/calendar-days-B_4sd_nS.js +6 -0
  275. vibe_surf/backend/frontend/assets/calendar-fold-1GZdJiY5.js +6 -0
  276. vibe_surf/backend/frontend/assets/calendar-heart-C20Gu6Pq.js +6 -0
  277. vibe_surf/backend/frontend/assets/calendar-minus-2-C2uYA9Xy.js +6 -0
  278. vibe_surf/backend/frontend/assets/calendar-minus-Bf9ZhUgX.js +6 -0
  279. vibe_surf/backend/frontend/assets/calendar-off-oqUiDnlM.js +6 -0
  280. vibe_surf/backend/frontend/assets/calendar-plus-2-D5AF7K6Z.js +6 -0
  281. vibe_surf/backend/frontend/assets/calendar-plus-DFRLvp48.js +6 -0
  282. vibe_surf/backend/frontend/assets/calendar-range-BtbX_u86.js +6 -0
  283. vibe_surf/backend/frontend/assets/calendar-search-DKFr3oFg.js +6 -0
  284. vibe_surf/backend/frontend/assets/calendar-sync-J6s1mjVg.js +6 -0
  285. vibe_surf/backend/frontend/assets/calendar-x-16dHXmS-.js +6 -0
  286. vibe_surf/backend/frontend/assets/calendar-x-2-DASXeIpI.js +6 -0
  287. vibe_surf/backend/frontend/assets/camera-C73rx5T7.js +6 -0
  288. vibe_surf/backend/frontend/assets/camera-off-lYXrg8Ab.js +6 -0
  289. vibe_surf/backend/frontend/assets/candy-DHin-JSi.js +6 -0
  290. vibe_surf/backend/frontend/assets/candy-cane-BrFztxP3.js +6 -0
  291. vibe_surf/backend/frontend/assets/candy-off-C6p9RmsL.js +6 -0
  292. vibe_surf/backend/frontend/assets/cannabis-BIomtlTh.js +6 -0
  293. vibe_surf/backend/frontend/assets/captions-CU9AD1HN.js +6 -0
  294. vibe_surf/backend/frontend/assets/captions-off-BQabz_7T.js +6 -0
  295. vibe_surf/backend/frontend/assets/car-CIepr4l8.js +6 -0
  296. vibe_surf/backend/frontend/assets/car-front-BvC3NXIU.js +6 -0
  297. vibe_surf/backend/frontend/assets/car-taxi-front-D6kk_vUY.js +6 -0
  298. vibe_surf/backend/frontend/assets/caravan-B4YvOfvY.js +6 -0
  299. vibe_surf/backend/frontend/assets/carrot-DScNmGFZ.js +6 -0
  300. vibe_surf/backend/frontend/assets/case-lower-iW8MijQ2.js +6 -0
  301. vibe_surf/backend/frontend/assets/case-sensitive-DggKI0Fh.js +6 -0
  302. vibe_surf/backend/frontend/assets/case-upper-BC22BC0q.js +6 -0
  303. vibe_surf/backend/frontend/assets/cassette-tape-PMwALept.js +6 -0
  304. vibe_surf/backend/frontend/assets/cast-Kq2v55CB.js +6 -0
  305. vibe_surf/backend/frontend/assets/castle-DJzhSlL6.js +6 -0
  306. vibe_surf/backend/frontend/assets/cat-Cszwi-0j.js +6 -0
  307. vibe_surf/backend/frontend/assets/cctv-4zeLHFGP.js +6 -0
  308. vibe_surf/backend/frontend/assets/chart-area-JyFaZNpl.js +6 -0
  309. vibe_surf/backend/frontend/assets/chart-bar-Bcnue-Eu.js +6 -0
  310. vibe_surf/backend/frontend/assets/chart-bar-big-dJ6tM8UP.js +6 -0
  311. vibe_surf/backend/frontend/assets/chart-bar-decreasing-jviD9Nka.js +6 -0
  312. vibe_surf/backend/frontend/assets/chart-bar-increasing-BcpuBWlQ.js +6 -0
  313. vibe_surf/backend/frontend/assets/chart-bar-stacked-DLxMM-a6.js +6 -0
  314. vibe_surf/backend/frontend/assets/chart-candlestick-BK5WOKib.js +6 -0
  315. vibe_surf/backend/frontend/assets/chart-column-BjT_DIge.js +6 -0
  316. vibe_surf/backend/frontend/assets/chart-column-big-BoOEhNxT.js +6 -0
  317. vibe_surf/backend/frontend/assets/chart-column-decreasing-B3PEhFWj.js +6 -0
  318. vibe_surf/backend/frontend/assets/chart-column-increasing-KTAFoIBT.js +6 -0
  319. vibe_surf/backend/frontend/assets/chart-column-stacked-Drci0FWY.js +6 -0
  320. vibe_surf/backend/frontend/assets/chart-gantt-CxLhKfws.js +6 -0
  321. vibe_surf/backend/frontend/assets/chart-line-Deh3i4SN.js +6 -0
  322. vibe_surf/backend/frontend/assets/chart-network-1nLETKIo.js +6 -0
  323. vibe_surf/backend/frontend/assets/chart-no-axes-column-BBUb9OL4.js +6 -0
  324. vibe_surf/backend/frontend/assets/chart-no-axes-column-decreasing-BNGTEmAA.js +6 -0
  325. vibe_surf/backend/frontend/assets/chart-no-axes-column-increasing-DYl5MpQr.js +6 -0
  326. vibe_surf/backend/frontend/assets/chart-no-axes-combined-Bwo9fVPi.js +6 -0
  327. vibe_surf/backend/frontend/assets/chart-no-axes-gantt-CIpwp7-G.js +6 -0
  328. vibe_surf/backend/frontend/assets/chart-pie-Brn9eScK.js +6 -0
  329. vibe_surf/backend/frontend/assets/chart-scatter-BFmfnF4I.js +6 -0
  330. vibe_surf/backend/frontend/assets/chart-spline-iPy-W03i.js +6 -0
  331. vibe_surf/backend/frontend/assets/check-check-CQEfDsmx.js +6 -0
  332. vibe_surf/backend/frontend/assets/chef-hat-DdOkr4i8.js +6 -0
  333. vibe_surf/backend/frontend/assets/cherry-XkD_QiBI.js +6 -0
  334. vibe_surf/backend/frontend/assets/chevron-first-muFwJevA.js +6 -0
  335. vibe_surf/backend/frontend/assets/chevron-last-Bn079TLv.js +6 -0
  336. vibe_surf/backend/frontend/assets/chevron-left-BhWYBFsk.js +6 -0
  337. vibe_surf/backend/frontend/assets/chevron-right-zm672Mdr.js +6 -0
  338. vibe_surf/backend/frontend/assets/chevrons-down-T3mOFRB2.js +6 -0
  339. vibe_surf/backend/frontend/assets/chevrons-down-up-BfWmsaYK.js +6 -0
  340. vibe_surf/backend/frontend/assets/chevrons-left-BLFCiP6g.js +6 -0
  341. vibe_surf/backend/frontend/assets/chevrons-left-right-Cgp4lAQF.js +6 -0
  342. vibe_surf/backend/frontend/assets/chevrons-left-right-ellipsis-BZSVxQ-x.js +6 -0
  343. vibe_surf/backend/frontend/assets/chevrons-right-DMKOjes0.js +6 -0
  344. vibe_surf/backend/frontend/assets/chevrons-right-left-Clwbiy09.js +6 -0
  345. vibe_surf/backend/frontend/assets/chevrons-up-CdrwLxmN.js +6 -0
  346. vibe_surf/backend/frontend/assets/chrome-46ygw5lK.js +6 -0
  347. vibe_surf/backend/frontend/assets/church-DQW3bkcl.js +6 -0
  348. vibe_surf/backend/frontend/assets/cigarette-CTvLdOLV.js +6 -0
  349. vibe_surf/backend/frontend/assets/cigarette-off-D0kR9lro.js +6 -0
  350. vibe_surf/backend/frontend/assets/circle-alert-QG2k6eWP.js +6 -0
  351. vibe_surf/backend/frontend/assets/circle-arrow-down-BHFs0Q9-.js +6 -0
  352. vibe_surf/backend/frontend/assets/circle-arrow-left-DQWeTJLw.js +6 -0
  353. vibe_surf/backend/frontend/assets/circle-arrow-out-down-left-B_oYI2Rn.js +6 -0
  354. vibe_surf/backend/frontend/assets/circle-arrow-out-down-right-BL4vxEs9.js +6 -0
  355. vibe_surf/backend/frontend/assets/circle-arrow-out-up-left-CFi1FNF-.js +6 -0
  356. vibe_surf/backend/frontend/assets/circle-arrow-out-up-right-CmMWk14E.js +6 -0
  357. vibe_surf/backend/frontend/assets/circle-arrow-right-dhHL8jIm.js +6 -0
  358. vibe_surf/backend/frontend/assets/circle-arrow-up-B8XWR9s_.js +6 -0
  359. vibe_surf/backend/frontend/assets/circle-check-CRm9QkNA.js +6 -0
  360. vibe_surf/backend/frontend/assets/circle-check-big-CPPNLArI.js +6 -0
  361. vibe_surf/backend/frontend/assets/circle-chevron-down-Cs4S5V03.js +6 -0
  362. vibe_surf/backend/frontend/assets/circle-chevron-left-V81BDvwB.js +6 -0
  363. vibe_surf/backend/frontend/assets/circle-chevron-right-CRa7Bkcz.js +6 -0
  364. vibe_surf/backend/frontend/assets/circle-chevron-up-FDxLxvSd.js +6 -0
  365. vibe_surf/backend/frontend/assets/circle-dashed-DD55_roy.js +6 -0
  366. vibe_surf/backend/frontend/assets/circle-divide-DKpocsWo.js +6 -0
  367. vibe_surf/backend/frontend/assets/circle-dollar-sign-p7_bVi5m.js +6 -0
  368. vibe_surf/backend/frontend/assets/circle-dot-Be13EypY.js +6 -0
  369. vibe_surf/backend/frontend/assets/circle-dot-dashed-KuVNkxEv.js +6 -0
  370. vibe_surf/backend/frontend/assets/circle-ellipsis-BSLpVL-C.js +6 -0
  371. vibe_surf/backend/frontend/assets/circle-equal-_Mfed9km.js +6 -0
  372. vibe_surf/backend/frontend/assets/circle-fading-arrow-up-D_E3BIXf.js +6 -0
  373. vibe_surf/backend/frontend/assets/circle-fading-plus-5ZA5Je_2.js +6 -0
  374. vibe_surf/backend/frontend/assets/circle-gauge-b41i9Azv.js +6 -0
  375. vibe_surf/backend/frontend/assets/circle-help-BOLgIUsf.js +6 -0
  376. vibe_surf/backend/frontend/assets/circle-minus-C41JxC_E.js +6 -0
  377. vibe_surf/backend/frontend/assets/circle-off-yuGaN1EU.js +6 -0
  378. vibe_surf/backend/frontend/assets/circle-parking-B-DnXhcd.js +6 -0
  379. vibe_surf/backend/frontend/assets/circle-parking-off-DsCM2b8j.js +6 -0
  380. vibe_surf/backend/frontend/assets/circle-pause-Dqufdu9m.js +6 -0
  381. vibe_surf/backend/frontend/assets/circle-percent-Dp8UwPQq.js +6 -0
  382. vibe_surf/backend/frontend/assets/circle-play-N8vi1Pcd.js +6 -0
  383. vibe_surf/backend/frontend/assets/circle-plus-wD1VqIgT.js +6 -0
  384. vibe_surf/backend/frontend/assets/circle-power-DBZAmaYW.js +6 -0
  385. vibe_surf/backend/frontend/assets/circle-slash-2-hdq8_Fp6.js +6 -0
  386. vibe_surf/backend/frontend/assets/circle-slash-CSrHLLP2.js +6 -0
  387. vibe_surf/backend/frontend/assets/circle-small-BQ6lrOIo.js +6 -0
  388. vibe_surf/backend/frontend/assets/circle-stop-xgLQ9Loi.js +6 -0
  389. vibe_surf/backend/frontend/assets/circle-user-CzvrnVH9.js +6 -0
  390. vibe_surf/backend/frontend/assets/circle-user-round-0JhYfAcs.js +6 -0
  391. vibe_surf/backend/frontend/assets/circuit-board-DpN-UUwV.js +6 -0
  392. vibe_surf/backend/frontend/assets/citrus-BGWHfGg3.js +6 -0
  393. vibe_surf/backend/frontend/assets/clapperboard-9m-99Aof.js +6 -0
  394. vibe_surf/backend/frontend/assets/clipboard-C-MVPhAy.js +6 -0
  395. vibe_surf/backend/frontend/assets/clipboard-check-Bonb2WoP.js +6 -0
  396. vibe_surf/backend/frontend/assets/clipboard-copy-CmRHdw5h.js +6 -0
  397. vibe_surf/backend/frontend/assets/clipboard-list-DEof2iPM.js +6 -0
  398. vibe_surf/backend/frontend/assets/clipboard-minus-DN2QuVOG.js +6 -0
  399. vibe_surf/backend/frontend/assets/clipboard-paste-B20nudiB.js +6 -0
  400. vibe_surf/backend/frontend/assets/clipboard-pen-BZJamOnq.js +6 -0
  401. vibe_surf/backend/frontend/assets/clipboard-pen-line-DScYxgpw.js +6 -0
  402. vibe_surf/backend/frontend/assets/clipboard-plus-DJb4TcvR.js +6 -0
  403. vibe_surf/backend/frontend/assets/clipboard-type-DaibEn_w.js +6 -0
  404. vibe_surf/backend/frontend/assets/clipboard-x-CebR2xkR.js +6 -0
  405. vibe_surf/backend/frontend/assets/clock-1-Cz0OEQH3.js +6 -0
  406. vibe_surf/backend/frontend/assets/clock-10-BMLTtzHQ.js +6 -0
  407. vibe_surf/backend/frontend/assets/clock-11-CZ6m52x1.js +6 -0
  408. vibe_surf/backend/frontend/assets/clock-12-BXZWDgbr.js +6 -0
  409. vibe_surf/backend/frontend/assets/clock-2-ElC7DzP5.js +6 -0
  410. vibe_surf/backend/frontend/assets/clock-3-DN86BONK.js +6 -0
  411. vibe_surf/backend/frontend/assets/clock-4-CV9eUVD9.js +6 -0
  412. vibe_surf/backend/frontend/assets/clock-5-DgMTU8BD.js +6 -0
  413. vibe_surf/backend/frontend/assets/clock-6-_RjAiNVz.js +6 -0
  414. vibe_surf/backend/frontend/assets/clock-7-DsWDnhwN.js +6 -0
  415. vibe_surf/backend/frontend/assets/clock-8-CY-eCfWq.js +6 -0
  416. vibe_surf/backend/frontend/assets/clock-9-D4aWNYpk.js +6 -0
  417. vibe_surf/backend/frontend/assets/clock-UtAbEQE0.js +6 -0
  418. vibe_surf/backend/frontend/assets/clock-alert-gi6h-zRT.js +6 -0
  419. vibe_surf/backend/frontend/assets/clock-arrow-down-CC9Qp0ac.js +6 -0
  420. vibe_surf/backend/frontend/assets/clock-arrow-up-Cjt2qN9V.js +6 -0
  421. vibe_surf/backend/frontend/assets/clock-fading-BJp0FFxY.js +6 -0
  422. vibe_surf/backend/frontend/assets/cloud-TYaHXSiL.js +6 -0
  423. vibe_surf/backend/frontend/assets/cloud-alert-Dp4WVua8.js +6 -0
  424. vibe_surf/backend/frontend/assets/cloud-cog-Dlyn4rqA.js +6 -0
  425. vibe_surf/backend/frontend/assets/cloud-download-DH8UN3eX.js +6 -0
  426. vibe_surf/backend/frontend/assets/cloud-drizzle-s8348ic3.js +6 -0
  427. vibe_surf/backend/frontend/assets/cloud-fog-DHRDnzsg.js +6 -0
  428. vibe_surf/backend/frontend/assets/cloud-hail-D7nJGZgB.js +6 -0
  429. vibe_surf/backend/frontend/assets/cloud-lightning-CscbfdPI.js +6 -0
  430. vibe_surf/backend/frontend/assets/cloud-moon-C6897Z5z.js +6 -0
  431. vibe_surf/backend/frontend/assets/cloud-moon-rain-B6pK_auO.js +6 -0
  432. vibe_surf/backend/frontend/assets/cloud-off-1kN_AD0k.js +6 -0
  433. vibe_surf/backend/frontend/assets/cloud-rain-Dj6B4fBD.js +6 -0
  434. vibe_surf/backend/frontend/assets/cloud-rain-wind-BJrdBUd4.js +6 -0
  435. vibe_surf/backend/frontend/assets/cloud-snow-LK6lpCkZ.js +6 -0
  436. vibe_surf/backend/frontend/assets/cloud-sun-CRH8EQEJ.js +6 -0
  437. vibe_surf/backend/frontend/assets/cloud-sun-rain-7IssqnpA.js +6 -0
  438. vibe_surf/backend/frontend/assets/cloud-upload-tI3Dz1zd.js +6 -0
  439. vibe_surf/backend/frontend/assets/cloudy-okUc5uOM.js +6 -0
  440. vibe_surf/backend/frontend/assets/clover-O6CtUOhV.js +6 -0
  441. vibe_surf/backend/frontend/assets/club-SnWEwVMR.js +6 -0
  442. vibe_surf/backend/frontend/assets/code-xml-CYTnIdXN.js +6 -0
  443. vibe_surf/backend/frontend/assets/codepen-UxBTFH8q.js +6 -0
  444. vibe_surf/backend/frontend/assets/codesandbox-CSRpmotF.js +6 -0
  445. vibe_surf/backend/frontend/assets/coffee-BTr4K8Gn.js +6 -0
  446. vibe_surf/backend/frontend/assets/cog-C7RMqAcW.js +6 -0
  447. vibe_surf/backend/frontend/assets/coins-D7gWOtE7.js +6 -0
  448. vibe_surf/backend/frontend/assets/columns-2-WBM3YpNL.js +6 -0
  449. vibe_surf/backend/frontend/assets/columns-3-DyAMu-k8.js +6 -0
  450. vibe_surf/backend/frontend/assets/columns-3-cog-zfUPAOg0.js +6 -0
  451. vibe_surf/backend/frontend/assets/columns-4-Qz-B3Dvq.js +6 -0
  452. vibe_surf/backend/frontend/assets/combine-CLZvnf8j.js +6 -0
  453. vibe_surf/backend/frontend/assets/command-D8ymLYGG.js +6 -0
  454. vibe_surf/backend/frontend/assets/compass-DGYgNSVa.js +6 -0
  455. vibe_surf/backend/frontend/assets/component-CwL9ER1Q.js +6 -0
  456. vibe_surf/backend/frontend/assets/computer-QNTojt_5.js +6 -0
  457. vibe_surf/backend/frontend/assets/concierge-bell-C7jm8QJd.js +6 -0
  458. vibe_surf/backend/frontend/assets/cone-C9TQbkDB.js +6 -0
  459. vibe_surf/backend/frontend/assets/construction-CSyYpaz5.js +6 -0
  460. vibe_surf/backend/frontend/assets/contact-CFldvJVP.js +6 -0
  461. vibe_surf/backend/frontend/assets/contact-round-DA1kjclM.js +6 -0
  462. vibe_surf/backend/frontend/assets/container-BfGJKo0o.js +6 -0
  463. vibe_surf/backend/frontend/assets/contrast-DmYhTvN3.js +6 -0
  464. vibe_surf/backend/frontend/assets/cookie-Cw70purP.js +6 -0
  465. vibe_surf/backend/frontend/assets/cooking-pot-WzjjWZaR.js +6 -0
  466. vibe_surf/backend/frontend/assets/copy-BPjnY3ea.js +6 -0
  467. vibe_surf/backend/frontend/assets/copy-check-B6hqPf9B.js +6 -0
  468. vibe_surf/backend/frontend/assets/copy-minus-DMGhawAT.js +6 -0
  469. vibe_surf/backend/frontend/assets/copy-plus-DcW4_i4R.js +6 -0
  470. vibe_surf/backend/frontend/assets/copy-slash-Cn_xel6o.js +6 -0
  471. vibe_surf/backend/frontend/assets/copy-x-Dmf3jckJ.js +6 -0
  472. vibe_surf/backend/frontend/assets/copyleft-CJDbqV_Y.js +6 -0
  473. vibe_surf/backend/frontend/assets/copyright-Buw-D4Xa.js +6 -0
  474. vibe_surf/backend/frontend/assets/corner-down-left-BhPTW3SL.js +6 -0
  475. vibe_surf/backend/frontend/assets/corner-down-right-B_Md48mW.js +6 -0
  476. vibe_surf/backend/frontend/assets/corner-left-down-DDc0LvYT.js +6 -0
  477. vibe_surf/backend/frontend/assets/corner-left-up-C_EIQYvd.js +6 -0
  478. vibe_surf/backend/frontend/assets/corner-right-down-Bipz7-p6.js +6 -0
  479. vibe_surf/backend/frontend/assets/corner-right-up-euSAC3Mi.js +6 -0
  480. vibe_surf/backend/frontend/assets/corner-up-left-CRvdJT3E.js +6 -0
  481. vibe_surf/backend/frontend/assets/corner-up-right-CCK7dhVV.js +6 -0
  482. vibe_surf/backend/frontend/assets/cpu-DB-52VKi.js +6 -0
  483. vibe_surf/backend/frontend/assets/creative-commons-CXWueat0.js +6 -0
  484. vibe_surf/backend/frontend/assets/credit-card-CR5swmPL.js +6 -0
  485. vibe_surf/backend/frontend/assets/croissant-ClZbIF3L.js +6 -0
  486. vibe_surf/backend/frontend/assets/crop-DSXkvq6D.js +6 -0
  487. vibe_surf/backend/frontend/assets/cross-CkHV6YOi.js +6 -0
  488. vibe_surf/backend/frontend/assets/crosshair-C3tcoYxo.js +6 -0
  489. vibe_surf/backend/frontend/assets/crown-0LB9DCRa.js +6 -0
  490. vibe_surf/backend/frontend/assets/cuboid-CidkVtLJ.js +6 -0
  491. vibe_surf/backend/frontend/assets/cup-soda-DG_5s6Ma.js +6 -0
  492. vibe_surf/backend/frontend/assets/currency-AEQeyk_J.js +6 -0
  493. vibe_surf/backend/frontend/assets/cylinder-Da7lV5Pc.js +6 -0
  494. vibe_surf/backend/frontend/assets/dam-BIFS7P89.js +6 -0
  495. vibe_surf/backend/frontend/assets/database-Dx9euHTJ.js +6 -0
  496. vibe_surf/backend/frontend/assets/database-backup-Bbbt7mXt.js +6 -0
  497. vibe_surf/backend/frontend/assets/database-zap-CJC7IfdF.js +6 -0
  498. vibe_surf/backend/frontend/assets/decimals-arrow-left-BrRd8_vb.js +6 -0
  499. vibe_surf/backend/frontend/assets/decimals-arrow-right-Cglo48c9.js +6 -0
  500. vibe_surf/backend/frontend/assets/delete-C9qTL0sD.js +6 -0
  501. vibe_surf/backend/frontend/assets/dessert-7PTt5JJ0.js +6 -0
  502. vibe_surf/backend/frontend/assets/diameter-oheO2UGD.js +6 -0
  503. vibe_surf/backend/frontend/assets/diamond-DhBpDMNy.js +6 -0
  504. vibe_surf/backend/frontend/assets/diamond-minus-BqTULDvb.js +6 -0
  505. vibe_surf/backend/frontend/assets/diamond-percent-D1Ck8xGc.js +6 -0
  506. vibe_surf/backend/frontend/assets/diamond-plus-DfSf7Xoq.js +6 -0
  507. vibe_surf/backend/frontend/assets/dice-1-CIRG2xPK.js +6 -0
  508. vibe_surf/backend/frontend/assets/dice-2-r7s36USZ.js +6 -0
  509. vibe_surf/backend/frontend/assets/dice-3-Cl7FLe3x.js +6 -0
  510. vibe_surf/backend/frontend/assets/dice-4-D-yJWiku.js +6 -0
  511. vibe_surf/backend/frontend/assets/dice-5-Ci09NYyS.js +6 -0
  512. vibe_surf/backend/frontend/assets/dice-6-CC2FLvLo.js +6 -0
  513. vibe_surf/backend/frontend/assets/dices-CmB6hNUU.js +6 -0
  514. vibe_surf/backend/frontend/assets/diff-oCWjvY-c.js +6 -0
  515. vibe_surf/backend/frontend/assets/disc-2-DpUl7fl6.js +6 -0
  516. vibe_surf/backend/frontend/assets/disc-3-BugUAszu.js +6 -0
  517. vibe_surf/backend/frontend/assets/disc-DUbtGdHe.js +6 -0
  518. vibe_surf/backend/frontend/assets/disc-album-CXJRMctz.js +6 -0
  519. vibe_surf/backend/frontend/assets/divide-CY1K-HT7.js +6 -0
  520. vibe_surf/backend/frontend/assets/dna-CeE8ObeE.js +6 -0
  521. vibe_surf/backend/frontend/assets/dna-off-BviJKT3C.js +6 -0
  522. vibe_surf/backend/frontend/assets/dock-eIe8zGWk.js +6 -0
  523. vibe_surf/backend/frontend/assets/dog-CSlDDqxp.js +6 -0
  524. vibe_surf/backend/frontend/assets/dollar-sign-5U68U397.js +6 -0
  525. vibe_surf/backend/frontend/assets/donut-BeawTrlI.js +6 -0
  526. vibe_surf/backend/frontend/assets/door-closed-CwY8Mg15.js +6 -0
  527. vibe_surf/backend/frontend/assets/door-open-DFgi7N5B.js +6 -0
  528. vibe_surf/backend/frontend/assets/dot-fPF_etdO.js +6 -0
  529. vibe_surf/backend/frontend/assets/download-gSwRRqnX.js +6 -0
  530. vibe_surf/backend/frontend/assets/drafting-compass-Dj_7EFRc.js +6 -0
  531. vibe_surf/backend/frontend/assets/drama-BlDJuZEs.js +6 -0
  532. vibe_surf/backend/frontend/assets/dribbble-C0k3dpAi.js +6 -0
  533. vibe_surf/backend/frontend/assets/drill-COJcLBB4.js +6 -0
  534. vibe_surf/backend/frontend/assets/droplet-5wuLGLgZ.js +6 -0
  535. vibe_surf/backend/frontend/assets/droplet-off-Bra_6Oh9.js +6 -0
  536. vibe_surf/backend/frontend/assets/droplets-BE8PR1pM.js +6 -0
  537. vibe_surf/backend/frontend/assets/drum-DnJ1RUvq.js +6 -0
  538. vibe_surf/backend/frontend/assets/drumstick-JGiBDDwZ.js +6 -0
  539. vibe_surf/backend/frontend/assets/dumbbell-BEtc4tyd.js +6 -0
  540. vibe_surf/backend/frontend/assets/ear-DAqeJjkr.js +6 -0
  541. vibe_surf/backend/frontend/assets/ear-off-BA7gp4ie.js +6 -0
  542. vibe_surf/backend/frontend/assets/earth-CUlUl7Bp.js +6 -0
  543. vibe_surf/backend/frontend/assets/earth-lock-sl59Ywm7.js +6 -0
  544. vibe_surf/backend/frontend/assets/eclipse-DY7fC5N3.js +6 -0
  545. vibe_surf/backend/frontend/assets/egg-DxfY2UB8.js +6 -0
  546. vibe_surf/backend/frontend/assets/egg-fried-D2Eo3APu.js +6 -0
  547. vibe_surf/backend/frontend/assets/egg-off-DqYobjwG.js +6 -0
  548. vibe_surf/backend/frontend/assets/ellipsis-DgOuKLdR.js +6 -0
  549. vibe_surf/backend/frontend/assets/ellipsis-vertical--sr8F_UD.js +6 -0
  550. vibe_surf/backend/frontend/assets/equal-DS1qMZhi.js +6 -0
  551. vibe_surf/backend/frontend/assets/equal-approximately-mgMMBVF_.js +6 -0
  552. vibe_surf/backend/frontend/assets/equal-not-1Alw8lqE.js +6 -0
  553. vibe_surf/backend/frontend/assets/eraser-IStMo8nh.js +6 -0
  554. vibe_surf/backend/frontend/assets/ethernet-port-B6SRY0d8.js +6 -0
  555. vibe_surf/backend/frontend/assets/euro-S1kGUYTE.js +6 -0
  556. vibe_surf/backend/frontend/assets/expand-Cj8IQccm.js +6 -0
  557. vibe_surf/backend/frontend/assets/eye-DrnoCeKD.js +6 -0
  558. vibe_surf/backend/frontend/assets/eye-closed-B0cNIHJN.js +6 -0
  559. vibe_surf/backend/frontend/assets/eye-off-DIIh42Ws.js +6 -0
  560. vibe_surf/backend/frontend/assets/facebook-Df9Fpfnn.js +6 -0
  561. vibe_surf/backend/frontend/assets/factory-BLKvR2Z1.js +6 -0
  562. vibe_surf/backend/frontend/assets/fan-C-xRuGdo.js +6 -0
  563. vibe_surf/backend/frontend/assets/fast-forward-Bae5V83y.js +6 -0
  564. vibe_surf/backend/frontend/assets/feather-DTPfgED2.js +6 -0
  565. vibe_surf/backend/frontend/assets/fence-Mr7VQ0O9.js +6 -0
  566. vibe_surf/backend/frontend/assets/ferris-wheel-D82pDMqi.js +6 -0
  567. vibe_surf/backend/frontend/assets/figma-DBFJo9L2.js +6 -0
  568. vibe_surf/backend/frontend/assets/file-DvuZsaUg.js +6 -0
  569. vibe_surf/backend/frontend/assets/file-archive-DRtB2ivb.js +6 -0
  570. vibe_surf/backend/frontend/assets/file-audio-2-JE5iEkL9.js +6 -0
  571. vibe_surf/backend/frontend/assets/file-audio-C4RwC1BT.js +6 -0
  572. vibe_surf/backend/frontend/assets/file-axis-3d-DQSHzEo4.js +6 -0
  573. vibe_surf/backend/frontend/assets/file-badge-2-P__XKUXn.js +6 -0
  574. vibe_surf/backend/frontend/assets/file-badge-CejYglxU.js +6 -0
  575. vibe_surf/backend/frontend/assets/file-box-CgFMY7Rp.js +6 -0
  576. vibe_surf/backend/frontend/assets/file-chart-column-Bq5PyMwY.js +6 -0
  577. vibe_surf/backend/frontend/assets/file-chart-column-increasing-t_d1wCSV.js +6 -0
  578. vibe_surf/backend/frontend/assets/file-chart-line-Df6iedBR.js +6 -0
  579. vibe_surf/backend/frontend/assets/file-chart-pie-YH23adPM.js +6 -0
  580. vibe_surf/backend/frontend/assets/file-check-2-CKcRkU0L.js +6 -0
  581. vibe_surf/backend/frontend/assets/file-check-BYZznME9.js +6 -0
  582. vibe_surf/backend/frontend/assets/file-clock-8rD4-Bqt.js +6 -0
  583. vibe_surf/backend/frontend/assets/file-code-2-BjV8KhR4.js +6 -0
  584. vibe_surf/backend/frontend/assets/file-code-CXS3YUpM.js +6 -0
  585. vibe_surf/backend/frontend/assets/file-cog-GKLng0Qf.js +6 -0
  586. vibe_surf/backend/frontend/assets/file-diff-B_7HXPkJ.js +6 -0
  587. vibe_surf/backend/frontend/assets/file-digit-AtVulYi7.js +6 -0
  588. vibe_surf/backend/frontend/assets/file-down-CJIG5dHj.js +6 -0
  589. vibe_surf/backend/frontend/assets/file-heart-B8jWzdG5.js +6 -0
  590. vibe_surf/backend/frontend/assets/file-image-CXtDt3N3.js +6 -0
  591. vibe_surf/backend/frontend/assets/file-input-B-0mgcKT.js +6 -0
  592. vibe_surf/backend/frontend/assets/file-json-2-DQHJM93o.js +6 -0
  593. vibe_surf/backend/frontend/assets/file-json-BmrGDLh2.js +6 -0
  594. vibe_surf/backend/frontend/assets/file-key-2-DnpQ1dTj.js +6 -0
  595. vibe_surf/backend/frontend/assets/file-key-D3lJXveQ.js +6 -0
  596. vibe_surf/backend/frontend/assets/file-lock-2-DWdLzoF7.js +6 -0
  597. vibe_surf/backend/frontend/assets/file-lock-ZMZB3U4I.js +6 -0
  598. vibe_surf/backend/frontend/assets/file-minus-2-CsTsio0s.js +6 -0
  599. vibe_surf/backend/frontend/assets/file-minus-CtfRmVme.js +6 -0
  600. vibe_surf/backend/frontend/assets/file-music-DHhVu2aK.js +6 -0
  601. vibe_surf/backend/frontend/assets/file-output-CjQ-FMg0.js +6 -0
  602. vibe_surf/backend/frontend/assets/file-pen-C9S_u4U9.js +6 -0
  603. vibe_surf/backend/frontend/assets/file-pen-line-niZF4quE.js +6 -0
  604. vibe_surf/backend/frontend/assets/file-plus-2-DzIiS2EM.js +6 -0
  605. vibe_surf/backend/frontend/assets/file-plus-Bloe0E45.js +6 -0
  606. vibe_surf/backend/frontend/assets/file-question-BBTjP9h0.js +6 -0
  607. vibe_surf/backend/frontend/assets/file-scan-B3Bn2EZN.js +6 -0
  608. vibe_surf/backend/frontend/assets/file-search-2-DnC8d9OD.js +6 -0
  609. vibe_surf/backend/frontend/assets/file-search-DzPGZllw.js +6 -0
  610. vibe_surf/backend/frontend/assets/file-sliders-BHYXa9jQ.js +6 -0
  611. vibe_surf/backend/frontend/assets/file-spreadsheet-DvjPpK9G.js +6 -0
  612. vibe_surf/backend/frontend/assets/file-stack-yJR4id_3.js +6 -0
  613. vibe_surf/backend/frontend/assets/file-symlink-BWQBdrEp.js +6 -0
  614. vibe_surf/backend/frontend/assets/file-terminal-CvhcKgiv.js +6 -0
  615. vibe_surf/backend/frontend/assets/file-text-tuxzZhRs.js +6 -0
  616. vibe_surf/backend/frontend/assets/file-type-2-Dgantaer.js +6 -0
  617. vibe_surf/backend/frontend/assets/file-type-DfZBPqmH.js +6 -0
  618. vibe_surf/backend/frontend/assets/file-up-GXfnonbH.js +6 -0
  619. vibe_surf/backend/frontend/assets/file-user-N7Fan7ao.js +6 -0
  620. vibe_surf/backend/frontend/assets/file-video-2-B4JBmAcG.js +6 -0
  621. vibe_surf/backend/frontend/assets/file-video-Fsp8g5kU.js +6 -0
  622. vibe_surf/backend/frontend/assets/file-volume-2-Cg1A9z8S.js +6 -0
  623. vibe_surf/backend/frontend/assets/file-volume-xzVZMKW0.js +6 -0
  624. vibe_surf/backend/frontend/assets/file-warning-CS2F3Xr2.js +6 -0
  625. vibe_surf/backend/frontend/assets/file-x-2-BNUgAQH8.js +6 -0
  626. vibe_surf/backend/frontend/assets/file-x-DTK5Zfd-.js +6 -0
  627. vibe_surf/backend/frontend/assets/files-CNx4yvup.js +6 -0
  628. vibe_surf/backend/frontend/assets/film-Dec7cGCL.js +6 -0
  629. vibe_surf/backend/frontend/assets/fingerprint-B_IGMLcp.js +6 -0
  630. vibe_surf/backend/frontend/assets/fire-extinguisher-CjZilrfE.js +6 -0
  631. vibe_surf/backend/frontend/assets/fish-CXs3XpVQ.js +6 -0
  632. vibe_surf/backend/frontend/assets/fish-off-BfYutBG_.js +6 -0
  633. vibe_surf/backend/frontend/assets/fish-symbol-DFoA8GWJ.js +6 -0
  634. vibe_surf/backend/frontend/assets/flag-cx37QYSs.js +6 -0
  635. vibe_surf/backend/frontend/assets/flag-off-DyXYguA1.js +6 -0
  636. vibe_surf/backend/frontend/assets/flag-triangle-left-Dvsg9XUg.js +6 -0
  637. vibe_surf/backend/frontend/assets/flag-triangle-right-CluL18qS.js +6 -0
  638. vibe_surf/backend/frontend/assets/flame-DwjoBypP.js +6 -0
  639. vibe_surf/backend/frontend/assets/flame-kindling-DFbZUxx1.js +6 -0
  640. vibe_surf/backend/frontend/assets/flashlight-eSCrcAU_.js +6 -0
  641. vibe_surf/backend/frontend/assets/flashlight-off-C6ZnSGnv.js +6 -0
  642. vibe_surf/backend/frontend/assets/flask-conical-CqZXJFUg.js +6 -0
  643. vibe_surf/backend/frontend/assets/flask-conical-off-DLnkLxdX.js +6 -0
  644. vibe_surf/backend/frontend/assets/flask-round-Dukzlk12.js +6 -0
  645. vibe_surf/backend/frontend/assets/flip-horizontal-2-DPCHT9Se.js +6 -0
  646. vibe_surf/backend/frontend/assets/flip-horizontal-B27Zih29.js +6 -0
  647. vibe_surf/backend/frontend/assets/flip-vertical-2-BLZ7P_e7.js +6 -0
  648. vibe_surf/backend/frontend/assets/flip-vertical-BKIxHZUr.js +6 -0
  649. vibe_surf/backend/frontend/assets/flower-2-C3USolHO.js +6 -0
  650. vibe_surf/backend/frontend/assets/flower-MuZltbIo.js +6 -0
  651. vibe_surf/backend/frontend/assets/focus-42uZfpdQ.js +6 -0
  652. vibe_surf/backend/frontend/assets/fold-horizontal-Di0iHFys.js +6 -0
  653. vibe_surf/backend/frontend/assets/fold-vertical-DTaNfFgW.js +6 -0
  654. vibe_surf/backend/frontend/assets/folder-CZZJq_yO.js +6 -0
  655. vibe_surf/backend/frontend/assets/folder-archive-B9gmPXfh.js +6 -0
  656. vibe_surf/backend/frontend/assets/folder-check-D8RNiC0h.js +6 -0
  657. vibe_surf/backend/frontend/assets/folder-clock-xJeq54e5.js +6 -0
  658. vibe_surf/backend/frontend/assets/folder-closed-J_oj7irx.js +6 -0
  659. vibe_surf/backend/frontend/assets/folder-code-sdeNF88C.js +6 -0
  660. vibe_surf/backend/frontend/assets/folder-cog-DaxTyB8x.js +6 -0
  661. vibe_surf/backend/frontend/assets/folder-dot-CcddM8ht.js +6 -0
  662. vibe_surf/backend/frontend/assets/folder-down-B6ibnVRy.js +6 -0
  663. vibe_surf/backend/frontend/assets/folder-git-2-C1s592lv.js +6 -0
  664. vibe_surf/backend/frontend/assets/folder-git-DT6ZCpGc.js +6 -0
  665. vibe_surf/backend/frontend/assets/folder-heart-_fpvnFcA.js +6 -0
  666. vibe_surf/backend/frontend/assets/folder-input-OCjNnVk-.js +6 -0
  667. vibe_surf/backend/frontend/assets/folder-kanban-DgbGiYl_.js +6 -0
  668. vibe_surf/backend/frontend/assets/folder-key-6dl4vOVJ.js +6 -0
  669. vibe_surf/backend/frontend/assets/folder-lock-C0FPUNUM.js +6 -0
  670. vibe_surf/backend/frontend/assets/folder-minus-CnnUrRgx.js +6 -0
  671. vibe_surf/backend/frontend/assets/folder-open-B6qoyzo4.js +6 -0
  672. vibe_surf/backend/frontend/assets/folder-open-dot-vcn79EAq.js +6 -0
  673. vibe_surf/backend/frontend/assets/folder-output-aqyTbjq1.js +6 -0
  674. vibe_surf/backend/frontend/assets/folder-pen-DONbvY-M.js +6 -0
  675. vibe_surf/backend/frontend/assets/folder-plus-B1CMWyUH.js +6 -0
  676. vibe_surf/backend/frontend/assets/folder-root-CO03ueMD.js +6 -0
  677. vibe_surf/backend/frontend/assets/folder-search-2-vXSwPDsr.js +6 -0
  678. vibe_surf/backend/frontend/assets/folder-search-CqRRhEYi.js +6 -0
  679. vibe_surf/backend/frontend/assets/folder-symlink-CyG26ZIM.js +6 -0
  680. vibe_surf/backend/frontend/assets/folder-sync-D7kc3Qv9.js +6 -0
  681. vibe_surf/backend/frontend/assets/folder-tree-B_kJAFgg.js +6 -0
  682. vibe_surf/backend/frontend/assets/folder-up-CPWWXuBL.js +6 -0
  683. vibe_surf/backend/frontend/assets/folder-x-BgWBu65a.js +6 -0
  684. vibe_surf/backend/frontend/assets/folders-BqIxqB0_.js +6 -0
  685. vibe_surf/backend/frontend/assets/footprints-U_DOce2V.js +6 -0
  686. vibe_surf/backend/frontend/assets/forklift-HwzIz7aw.js +6 -0
  687. vibe_surf/backend/frontend/assets/forward-DjYLGiCR.js +6 -0
  688. vibe_surf/backend/frontend/assets/frame-poMkf2ta.js +6 -0
  689. vibe_surf/backend/frontend/assets/framer-DNQvf86-.js +6 -0
  690. vibe_surf/backend/frontend/assets/frown-BnHOvtLa.js +6 -0
  691. vibe_surf/backend/frontend/assets/fuel-Cm_lHCJg.js +6 -0
  692. vibe_surf/backend/frontend/assets/fullscreen-COEG0zVc.js +6 -0
  693. vibe_surf/backend/frontend/assets/funnel-BKREn55d.js +6 -0
  694. vibe_surf/backend/frontend/assets/funnel-plus-B1RbFoZ4.js +6 -0
  695. vibe_surf/backend/frontend/assets/funnel-x-z3lufNFJ.js +6 -0
  696. vibe_surf/backend/frontend/assets/gallery-horizontal-CZQKmb1v.js +6 -0
  697. vibe_surf/backend/frontend/assets/gallery-horizontal-end-rt0pNZmd.js +6 -0
  698. vibe_surf/backend/frontend/assets/gallery-thumbnails-BawPOO5E.js +6 -0
  699. vibe_surf/backend/frontend/assets/gallery-vertical-DHlqWz-O.js +6 -0
  700. vibe_surf/backend/frontend/assets/gallery-vertical-end-1UBU5tP0.js +6 -0
  701. vibe_surf/backend/frontend/assets/gamepad-2-CGlBaPJy.js +6 -0
  702. vibe_surf/backend/frontend/assets/gamepad-B7EN8TXy.js +6 -0
  703. vibe_surf/backend/frontend/assets/gauge-CkJyJpYu.js +6 -0
  704. vibe_surf/backend/frontend/assets/gavel-BXOFsfyc.js +6 -0
  705. vibe_surf/backend/frontend/assets/gem-DJaoJhpp.js +6 -0
  706. vibe_surf/backend/frontend/assets/ghost-5jDlD5mv.js +6 -0
  707. vibe_surf/backend/frontend/assets/gift-DTuN9n1d.js +6 -0
  708. vibe_surf/backend/frontend/assets/git-branch-CAxiUjEF.js +6 -0
  709. vibe_surf/backend/frontend/assets/git-branch-plus-BcouIUD3.js +6 -0
  710. vibe_surf/backend/frontend/assets/git-commit-horizontal-DqOnbX0A.js +6 -0
  711. vibe_surf/backend/frontend/assets/git-commit-vertical-DEAmtVm7.js +6 -0
  712. vibe_surf/backend/frontend/assets/git-compare-8F4A8hf8.js +6 -0
  713. vibe_surf/backend/frontend/assets/git-compare-arrows-BCgbMQBd.js +6 -0
  714. vibe_surf/backend/frontend/assets/git-fork-UmnYpjac.js +6 -0
  715. vibe_surf/backend/frontend/assets/git-graph-MIRVcG3s.js +6 -0
  716. vibe_surf/backend/frontend/assets/git-merge-1ccPZB0a.js +6 -0
  717. vibe_surf/backend/frontend/assets/git-pull-request-BAmJjoSf.js +6 -0
  718. vibe_surf/backend/frontend/assets/git-pull-request-arrow-hDbG9s0T.js +6 -0
  719. vibe_surf/backend/frontend/assets/git-pull-request-closed-DZVF4_75.js +6 -0
  720. vibe_surf/backend/frontend/assets/git-pull-request-create-B_ikGAua.js +6 -0
  721. vibe_surf/backend/frontend/assets/git-pull-request-create-arrow-OlDcvuiA.js +6 -0
  722. vibe_surf/backend/frontend/assets/git-pull-request-draft-CfvzgQz4.js +6 -0
  723. vibe_surf/backend/frontend/assets/github-DlTWmBTt.js +6 -0
  724. vibe_surf/backend/frontend/assets/gitlab-DquWeR50.js +6 -0
  725. vibe_surf/backend/frontend/assets/glass-water-yuqxiPgK.js +6 -0
  726. vibe_surf/backend/frontend/assets/glasses-DPTQtusr.js +6 -0
  727. vibe_surf/backend/frontend/assets/globe-D1X1kv-g.js +6 -0
  728. vibe_surf/backend/frontend/assets/globe-lock-miWknHfI.js +6 -0
  729. vibe_surf/backend/frontend/assets/goal-BY1nb-LN.js +6 -0
  730. vibe_surf/backend/frontend/assets/grab-CnmpLOMH.js +6 -0
  731. vibe_surf/backend/frontend/assets/graduation-cap-CcH89wnV.js +6 -0
  732. vibe_surf/backend/frontend/assets/grape-CIiMFgS_.js +6 -0
  733. vibe_surf/backend/frontend/assets/grid-2x2-DyXR6Owe.js +6 -0
  734. vibe_surf/backend/frontend/assets/grid-2x2-check-D2GIuWpl.js +6 -0
  735. vibe_surf/backend/frontend/assets/grid-2x2-plus-D89B7CNh.js +6 -0
  736. vibe_surf/backend/frontend/assets/grid-2x2-x-CMeekq27.js +6 -0
  737. vibe_surf/backend/frontend/assets/grid-3x3-qKjElxaz.js +6 -0
  738. vibe_surf/backend/frontend/assets/grip--SsS48b-.js +6 -0
  739. vibe_surf/backend/frontend/assets/grip-horizontal-DapWkFjo.js +6 -0
  740. vibe_surf/backend/frontend/assets/grip-vertical-vn3rXQIt.js +6 -0
  741. vibe_surf/backend/frontend/assets/group-XhzCMXdw.js +6 -0
  742. vibe_surf/backend/frontend/assets/guitar-But8OLt2.js +6 -0
  743. vibe_surf/backend/frontend/assets/ham-_9G65W_I.js +6 -0
  744. vibe_surf/backend/frontend/assets/hammer-C2AZqVnX.js +6 -0
  745. vibe_surf/backend/frontend/assets/hand-DXuxSiOo.js +6 -0
  746. vibe_surf/backend/frontend/assets/hand-coins-mma7__lh.js +6 -0
  747. vibe_surf/backend/frontend/assets/hand-heart-DNtq1bnS.js +6 -0
  748. vibe_surf/backend/frontend/assets/hand-helping-Cdw7lKNu.js +6 -0
  749. vibe_surf/backend/frontend/assets/hand-metal-CcoWdRUV.js +6 -0
  750. vibe_surf/backend/frontend/assets/hand-platter-DoQTVTFx.js +6 -0
  751. vibe_surf/backend/frontend/assets/handshake-CJyspjIU.js +6 -0
  752. vibe_surf/backend/frontend/assets/hard-drive-ZduQuJtY.js +6 -0
  753. vibe_surf/backend/frontend/assets/hard-drive-download-D_hUh11c.js +6 -0
  754. vibe_surf/backend/frontend/assets/hard-drive-upload-BBPLIyZo.js +6 -0
  755. vibe_surf/backend/frontend/assets/hard-hat-OlmGevRI.js +6 -0
  756. vibe_surf/backend/frontend/assets/hash-COjLjaYu.js +6 -0
  757. vibe_surf/backend/frontend/assets/haze-Vf7OsAWn.js +6 -0
  758. vibe_surf/backend/frontend/assets/hdmi-port-B3C9bYX1.js +6 -0
  759. vibe_surf/backend/frontend/assets/heading-1-Dyyb72R2.js +6 -0
  760. vibe_surf/backend/frontend/assets/heading-2-ClF7vOi5.js +6 -0
  761. vibe_surf/backend/frontend/assets/heading-3-DPRazJfc.js +6 -0
  762. vibe_surf/backend/frontend/assets/heading-4-3e6Zii5g.js +6 -0
  763. vibe_surf/backend/frontend/assets/heading-5-GEVsfo30.js +6 -0
  764. vibe_surf/backend/frontend/assets/heading-6-CtX8dWYy.js +6 -0
  765. vibe_surf/backend/frontend/assets/heading-C_c5dBtC.js +6 -0
  766. vibe_surf/backend/frontend/assets/headphone-off-VkuNIw42.js +6 -0
  767. vibe_surf/backend/frontend/assets/headphones-BdMKOmhg.js +6 -0
  768. vibe_surf/backend/frontend/assets/headset-CGOllUmf.js +6 -0
  769. vibe_surf/backend/frontend/assets/heart-J_dfRIZ7.js +6 -0
  770. vibe_surf/backend/frontend/assets/heart-crack-BDNXXAjd.js +6 -0
  771. vibe_surf/backend/frontend/assets/heart-handshake-BhQLIVaj.js +6 -0
  772. vibe_surf/backend/frontend/assets/heart-minus-Dgexi3zQ.js +6 -0
  773. vibe_surf/backend/frontend/assets/heart-off-DF68jDRm.js +6 -0
  774. vibe_surf/backend/frontend/assets/heart-plus-D3LX6R_l.js +6 -0
  775. vibe_surf/backend/frontend/assets/heart-pulse-DnwkpqSJ.js +6 -0
  776. vibe_surf/backend/frontend/assets/heater-Bilq_TPS.js +6 -0
  777. vibe_surf/backend/frontend/assets/hexagon-BEvfIIaV.js +6 -0
  778. vibe_surf/backend/frontend/assets/highlighter-CNa8UVQD.js +6 -0
  779. vibe_surf/backend/frontend/assets/history-BggOc8wP.js +6 -0
  780. vibe_surf/backend/frontend/assets/hop-BCUHAdeR.js +6 -0
  781. vibe_surf/backend/frontend/assets/hop-off-B5f9Fr80.js +6 -0
  782. vibe_surf/backend/frontend/assets/hospital-Dk0tqXu9.js +6 -0
  783. vibe_surf/backend/frontend/assets/hotel-CXl-yW7B.js +6 -0
  784. vibe_surf/backend/frontend/assets/hourglass-DSRXQwTc.js +6 -0
  785. vibe_surf/backend/frontend/assets/house-Bhp2WF4v.js +6 -0
  786. vibe_surf/backend/frontend/assets/house-plug-DXm5j2Xq.js +6 -0
  787. vibe_surf/backend/frontend/assets/house-plus-KMp_x4hA.js +6 -0
  788. vibe_surf/backend/frontend/assets/house-wifi-Ccrar5-8.js +6 -0
  789. vibe_surf/backend/frontend/assets/ice-cream-bowl-j3qet3-o.js +6 -0
  790. vibe_surf/backend/frontend/assets/ice-cream-cone-XtpMBOSu.js +6 -0
  791. vibe_surf/backend/frontend/assets/id-card-BqzQOrR_.js +6 -0
  792. vibe_surf/backend/frontend/assets/image-B3lEwdvu.js +6 -0
  793. vibe_surf/backend/frontend/assets/image-down-sVdzbwfm.js +6 -0
  794. vibe_surf/backend/frontend/assets/image-minus-BdddBiyu.js +6 -0
  795. vibe_surf/backend/frontend/assets/image-off-CCZ9kVWH.js +6 -0
  796. vibe_surf/backend/frontend/assets/image-play-LNuKchCO.js +6 -0
  797. vibe_surf/backend/frontend/assets/image-plus-B4GTKJ6Z.js +6 -0
  798. vibe_surf/backend/frontend/assets/image-up-BfxmsdpY.js +6 -0
  799. vibe_surf/backend/frontend/assets/image-upscale-CexWZ50d.js +6 -0
  800. vibe_surf/backend/frontend/assets/images-C8Wp1eOg.js +6 -0
  801. vibe_surf/backend/frontend/assets/import-ec27SWYy.js +6 -0
  802. vibe_surf/backend/frontend/assets/inbox-YvwvpFKi.js +6 -0
  803. vibe_surf/backend/frontend/assets/indent-decrease-Dp0BVsoQ.js +6 -0
  804. vibe_surf/backend/frontend/assets/indent-increase-D3BuYj2n.js +6 -0
  805. vibe_surf/backend/frontend/assets/index-2CcQW4OZ.js +13 -0
  806. vibe_surf/backend/frontend/assets/index-4vq5awkV.js +1 -0
  807. vibe_surf/backend/frontend/assets/index-5ZZlgfo-.js +1 -0
  808. vibe_surf/backend/frontend/assets/index-6dxAUV6Y.js +1 -0
  809. vibe_surf/backend/frontend/assets/index-AzcZQWVx.js +2723 -0
  810. vibe_surf/backend/frontend/assets/index-B-IDFsd0.js +1 -0
  811. vibe_surf/backend/frontend/assets/index-B-ohDVDe.js +1 -0
  812. vibe_surf/backend/frontend/assets/index-B1Q4y1qa.js +1 -0
  813. vibe_surf/backend/frontend/assets/index-B1SY6fah.js +1 -0
  814. vibe_surf/backend/frontend/assets/index-B2ljcLYu.js +1 -0
  815. vibe_surf/backend/frontend/assets/index-B4-H1yfm.js +108 -0
  816. vibe_surf/backend/frontend/assets/index-B6MKztQU.js +1 -0
  817. vibe_surf/backend/frontend/assets/index-B7i2Q-3O.js +1 -0
  818. vibe_surf/backend/frontend/assets/index-B9Wx-Ii0.js +1 -0
  819. vibe_surf/backend/frontend/assets/index-BFzpTaXY.js +1 -0
  820. vibe_surf/backend/frontend/assets/index-BIBNbmyC.js +1 -0
  821. vibe_surf/backend/frontend/assets/index-BL_hoToU.js +1 -0
  822. vibe_surf/backend/frontend/assets/index-BOeI-zQ9.js +1 -0
  823. vibe_surf/backend/frontend/assets/index-BPEpFAuc.js +1 -0
  824. vibe_surf/backend/frontend/assets/index-BQ1eB4fC.js +1 -0
  825. vibe_surf/backend/frontend/assets/index-BQ2H2d3f.js +1 -0
  826. vibe_surf/backend/frontend/assets/index-BR-8IPV4.js +205 -0
  827. vibe_surf/backend/frontend/assets/index-BV8ArFsA.js +1 -0
  828. vibe_surf/backend/frontend/assets/index-BWwASCq5.js +1 -0
  829. vibe_surf/backend/frontend/assets/index-BWwglY3I.js +1 -0
  830. vibe_surf/backend/frontend/assets/index-B_Qz_foX.js +1 -0
  831. vibe_surf/backend/frontend/assets/index-BaoW7GZH.js +1 -0
  832. vibe_surf/backend/frontend/assets/index-BcrHz-y8.js +1 -0
  833. vibe_surf/backend/frontend/assets/index-BdSzkc1f.js +20 -0
  834. vibe_surf/backend/frontend/assets/index-BeLkvqxv.js +1 -0
  835. vibe_surf/backend/frontend/assets/index-Beq_etUM.js +1 -0
  836. vibe_surf/backend/frontend/assets/index-BgzQso9y.js +1 -0
  837. vibe_surf/backend/frontend/assets/index-BiNrEY13.js +1 -0
  838. vibe_surf/backend/frontend/assets/index-Bja3ZEZo.js +1 -0
  839. vibe_surf/backend/frontend/assets/index-BmcD7XCM.js +1 -0
  840. vibe_surf/backend/frontend/assets/index-BmnwJzsA.js +1 -0
  841. vibe_surf/backend/frontend/assets/index-BssAenIo.js +1 -0
  842. vibe_surf/backend/frontend/assets/index-BvEZ1ywS.js +1 -0
  843. vibe_surf/backend/frontend/assets/index-BwO1owi8.js +1 -0
  844. vibe_surf/backend/frontend/assets/index-BwXsJbuu.js +21 -0
  845. vibe_surf/backend/frontend/assets/index-BwlG2DdK.js +1 -0
  846. vibe_surf/backend/frontend/assets/index-BzjC6B6I.js +1 -0
  847. vibe_surf/backend/frontend/assets/index-C0BOag_5.js +1 -0
  848. vibe_surf/backend/frontend/assets/index-C0EsaEHC.js +1 -0
  849. vibe_surf/backend/frontend/assets/index-C0IGIaTE.js +1 -0
  850. vibe_surf/backend/frontend/assets/index-C0IdY_9F.js +1 -0
  851. vibe_surf/backend/frontend/assets/index-C1DABLwl.js +1 -0
  852. vibe_surf/backend/frontend/assets/index-C1JE4AZB.js +1 -0
  853. vibe_surf/backend/frontend/assets/index-C1Rkl2Ur.js +1 -0
  854. vibe_surf/backend/frontend/assets/index-C2YWu5t8.js +1 -0
  855. vibe_surf/backend/frontend/assets/index-C2_4AcrM.js +1 -0
  856. vibe_surf/backend/frontend/assets/index-C48IE5LT.js +1 -0
  857. vibe_surf/backend/frontend/assets/index-C4JqQnzd.js +1 -0
  858. vibe_surf/backend/frontend/assets/index-C5QqjjEO.js +1 -0
  859. vibe_surf/backend/frontend/assets/index-C6ZyrgxW.js +1 -0
  860. vibe_surf/backend/frontend/assets/index-C9n9R8Ob.js +1 -0
  861. vibe_surf/backend/frontend/assets/index-CATPt8gz.js +1 -0
  862. vibe_surf/backend/frontend/assets/index-CAc6KlCl.js +1 -0
  863. vibe_surf/backend/frontend/assets/index-CAeE91z_.js +1 -0
  864. vibe_surf/backend/frontend/assets/index-CBLrD5S8.js +1 -0
  865. vibe_surf/backend/frontend/assets/index-CEx7_efn.js +1 -0
  866. vibe_surf/backend/frontend/assets/index-CGNwvjd6.js +1 -0
  867. vibe_surf/backend/frontend/assets/index-CJIkyYuu.js +1 -0
  868. vibe_surf/backend/frontend/assets/index-CL8YNknR.js +1 -0
  869. vibe_surf/backend/frontend/assets/index-CQ4c4zmh.js +1 -0
  870. vibe_surf/backend/frontend/assets/index-CSKpbeRU.js +1 -0
  871. vibe_surf/backend/frontend/assets/index-CTJUto70.js +1 -0
  872. vibe_surf/backend/frontend/assets/index-CUm8t_3-.js +1 -0
  873. vibe_surf/backend/frontend/assets/index-CWaG8YQf.js +1 -0
  874. vibe_surf/backend/frontend/assets/index-CWqCL2_S.js +1 -0
  875. vibe_surf/backend/frontend/assets/index-CZKjLvxC.js +1 -0
  876. vibe_surf/backend/frontend/assets/index-C_a_gjJ3.js +7382 -0
  877. vibe_surf/backend/frontend/assets/index-C_gjztJA.js +1 -0
  878. vibe_surf/backend/frontend/assets/index-Cd394DZ3.js +1 -0
  879. vibe_surf/backend/frontend/assets/index-Ch_ENQTO.js +1 -0
  880. vibe_surf/backend/frontend/assets/index-CjDauRtw.js +1 -0
  881. vibe_surf/backend/frontend/assets/index-Cjsyudia.js +1 -0
  882. vibe_surf/backend/frontend/assets/index-Ck0Rk7OE.js +1 -0
  883. vibe_surf/backend/frontend/assets/index-Ct1jT_zG.js +1 -0
  884. vibe_surf/backend/frontend/assets/index-CtZOHuJR.js +1 -0
  885. vibe_surf/backend/frontend/assets/index-CwylYZIy.js +1 -0
  886. vibe_surf/backend/frontend/assets/index-CxGAIJCD.js +1 -0
  887. vibe_surf/backend/frontend/assets/index-D-6VXnmQ.js +1 -0
  888. vibe_surf/backend/frontend/assets/index-D-_pq5D8.js +1 -0
  889. vibe_surf/backend/frontend/assets/index-D-oTsuqV.js +1 -0
  890. vibe_surf/backend/frontend/assets/index-D8iHrvl3.js +1 -0
  891. vibe_surf/backend/frontend/assets/index-DDYB0tod.js +1 -0
  892. vibe_surf/backend/frontend/assets/index-DDtHdtyM.js +1 -0
  893. vibe_surf/backend/frontend/assets/index-DH3R0iod.js +1 -0
  894. vibe_surf/backend/frontend/assets/index-DJAmqieX.js +1 -0
  895. vibe_surf/backend/frontend/assets/index-DJYhOcBD.js +1 -0
  896. vibe_surf/backend/frontend/assets/index-DQKxDe4Q.js +1 -0
  897. vibe_surf/backend/frontend/assets/index-DS9glxiF.js +1 -0
  898. vibe_surf/backend/frontend/assets/index-DUjF6qus.js +2 -0
  899. vibe_surf/backend/frontend/assets/index-DXYmUzC_.css +1 -0
  900. vibe_surf/backend/frontend/assets/index-D_wRbh5r.js +1 -0
  901. vibe_surf/backend/frontend/assets/index-Db4BfmcT.js +1 -0
  902. vibe_surf/backend/frontend/assets/index-DfZGZYcK.js +1 -0
  903. vibe_surf/backend/frontend/assets/index-DlDGYPf2.js +1 -0
  904. vibe_surf/backend/frontend/assets/index-DlFy5Gok.js +1 -0
  905. vibe_surf/backend/frontend/assets/index-DmVpDlko.js +1 -0
  906. vibe_surf/backend/frontend/assets/index-Dpc9wHta.js +1 -0
  907. vibe_surf/backend/frontend/assets/index-DvcAIETO.js +1 -0
  908. vibe_surf/backend/frontend/assets/index-Dwi-X1Od.js +1 -0
  909. vibe_surf/backend/frontend/assets/index-FMPFv3Wf.js +1 -0
  910. vibe_surf/backend/frontend/assets/index-H3Uskc2o.js +1 -0
  911. vibe_surf/backend/frontend/assets/index-JWfrTs_0.js +1 -0
  912. vibe_surf/backend/frontend/assets/index-LX3KOMfj.js +1 -0
  913. vibe_surf/backend/frontend/assets/index-LXWgTVf4.js +1 -0
  914. vibe_surf/backend/frontend/assets/index-WJ6PviAq.js +1 -0
  915. vibe_surf/backend/frontend/assets/index-WrqFIXAC.js +1 -0
  916. vibe_surf/backend/frontend/assets/index-Yoj1a8xs.js +1 -0
  917. vibe_surf/backend/frontend/assets/index-YxTPhodS.js +1 -0
  918. vibe_surf/backend/frontend/assets/index-_8LB3oNa.js +1 -0
  919. vibe_surf/backend/frontend/assets/index-bNhROe-x.js +1 -0
  920. vibe_surf/backend/frontend/assets/index-cQAtXO5d.js +1 -0
  921. vibe_surf/backend/frontend/assets/index-hIdlDvEv.js +1 -0
  922. vibe_surf/backend/frontend/assets/index-hxJwU1-s.js +1 -0
  923. vibe_surf/backend/frontend/assets/index-iA_X3O5r.js +1 -0
  924. vibe_surf/backend/frontend/assets/index-iW93REva.js +1 -0
  925. vibe_surf/backend/frontend/assets/index-k2RdCBHb.js +1 -0
  926. vibe_surf/backend/frontend/assets/index-kJKg9EzG.js +1 -0
  927. vibe_surf/backend/frontend/assets/index-mX6ATl2n.js +1 -0
  928. vibe_surf/backend/frontend/assets/index-muCxPdjC.js +1 -0
  929. vibe_surf/backend/frontend/assets/index-nd1f74Wi.js +1 -0
  930. vibe_surf/backend/frontend/assets/index-qGbEX4n3.js +1 -0
  931. vibe_surf/backend/frontend/assets/index-qOd-CLaR.js +1 -0
  932. vibe_surf/backend/frontend/assets/index-sguRseYw.js +1 -0
  933. vibe_surf/backend/frontend/assets/index-vd7ILFrg.js +1 -0
  934. vibe_surf/backend/frontend/assets/index-we6mCAhv.js +1 -0
  935. vibe_surf/backend/frontend/assets/index-x0VA7yzX.js +1 -0
  936. vibe_surf/backend/frontend/assets/index-yCVeNkNd.js +1 -0
  937. vibe_surf/backend/frontend/assets/indian-rupee-ClaZI0Dh.js +6 -0
  938. vibe_surf/backend/frontend/assets/infinity-LKjcIaZa.js +6 -0
  939. vibe_surf/backend/frontend/assets/info-DFBdB7_c.js +6 -0
  940. vibe_surf/backend/frontend/assets/inspection-panel-DGzE6245.js +6 -0
  941. vibe_surf/backend/frontend/assets/instagram-CJj5AWOV.js +6 -0
  942. vibe_surf/backend/frontend/assets/italic-CKFB3the.js +6 -0
  943. vibe_surf/backend/frontend/assets/iteration-ccw-YnfylsKm.js +6 -0
  944. vibe_surf/backend/frontend/assets/iteration-cw-DTHRwCcy.js +6 -0
  945. vibe_surf/backend/frontend/assets/japanese-yen-BG_Inyh_.js +6 -0
  946. vibe_surf/backend/frontend/assets/joystick-bJVSvZlL.js +6 -0
  947. vibe_surf/backend/frontend/assets/kanban-KP-K8pC9.js +6 -0
  948. vibe_surf/backend/frontend/assets/key-CNaiqe5q.js +6 -0
  949. vibe_surf/backend/frontend/assets/key-round-RTYFDTCa.js +6 -0
  950. vibe_surf/backend/frontend/assets/key-square-C7EKR-zE.js +6 -0
  951. vibe_surf/backend/frontend/assets/keyboard-DaM0Dl19.js +6 -0
  952. vibe_surf/backend/frontend/assets/keyboard-music-CzJZiHzS.js +6 -0
  953. vibe_surf/backend/frontend/assets/keyboard-off-C9Jl7GZs.js +6 -0
  954. vibe_surf/backend/frontend/assets/lamp-DK_3DJnO.js +6 -0
  955. vibe_surf/backend/frontend/assets/lamp-ceiling-B8sGjZ8c.js +6 -0
  956. vibe_surf/backend/frontend/assets/lamp-desk-CxWpiNas.js +6 -0
  957. vibe_surf/backend/frontend/assets/lamp-floor-EUFzRKf7.js +6 -0
  958. vibe_surf/backend/frontend/assets/lamp-wall-down-BV84JTWM.js +6 -0
  959. vibe_surf/backend/frontend/assets/lamp-wall-up-BqpaYZN9.js +6 -0
  960. vibe_surf/backend/frontend/assets/land-plot-Dly_Debw.js +6 -0
  961. vibe_surf/backend/frontend/assets/landmark-W6MewilS.js +6 -0
  962. vibe_surf/backend/frontend/assets/languages-BQghN4Gu.js +6 -0
  963. vibe_surf/backend/frontend/assets/laptop-BysYcdO1.js +6 -0
  964. vibe_surf/backend/frontend/assets/laptop-minimal-CUViKl_u.js +6 -0
  965. vibe_surf/backend/frontend/assets/laptop-minimal-check-BZNY8l54.js +6 -0
  966. vibe_surf/backend/frontend/assets/lasso-CBTyEbGH.js +6 -0
  967. vibe_surf/backend/frontend/assets/lasso-select-D9j71vtb.js +6 -0
  968. vibe_surf/backend/frontend/assets/laugh-fkxJEAC6.js +6 -0
  969. vibe_surf/backend/frontend/assets/layers-2-B3mnroGJ.js +6 -0
  970. vibe_surf/backend/frontend/assets/layers-CLO8Qj7V.js +6 -0
  971. vibe_surf/backend/frontend/assets/layout-dashboard-BCgC4-j3.js +6 -0
  972. vibe_surf/backend/frontend/assets/layout-grid-DQlh6Dv5.js +6 -0
  973. vibe_surf/backend/frontend/assets/layout-list-BK2Y57B-.js +6 -0
  974. vibe_surf/backend/frontend/assets/layout-panel-left-BzdjKizu.js +6 -0
  975. vibe_surf/backend/frontend/assets/layout-panel-top-CmMnqmez.js +6 -0
  976. vibe_surf/backend/frontend/assets/layout-template-DkuzhO5B.js +6 -0
  977. vibe_surf/backend/frontend/assets/lazyIconImports-Cbxc-ykm.js +2 -0
  978. vibe_surf/backend/frontend/assets/leaf-D1Z4WxA8.js +6 -0
  979. vibe_surf/backend/frontend/assets/leafy-green-C7IHTNVi.js +6 -0
  980. vibe_surf/backend/frontend/assets/lectern-BpswhiFV.js +6 -0
  981. vibe_surf/backend/frontend/assets/letter-text-B_mZgzJ7.js +6 -0
  982. vibe_surf/backend/frontend/assets/library-BEQ0EBja.js +6 -0
  983. vibe_surf/backend/frontend/assets/library-big-C32jLDwT.js +6 -0
  984. vibe_surf/backend/frontend/assets/life-buoy-AWdXr4CQ.js +6 -0
  985. vibe_surf/backend/frontend/assets/ligature-DRsGqV7j.js +6 -0
  986. vibe_surf/backend/frontend/assets/lightbulb-D3KZbCQp.js +6 -0
  987. vibe_surf/backend/frontend/assets/lightbulb-off-iSDmy8d6.js +6 -0
  988. vibe_surf/backend/frontend/assets/link-2-CCZYGxDI.js +6 -0
  989. vibe_surf/backend/frontend/assets/link-2-off-BWpEKUCS.js +6 -0
  990. vibe_surf/backend/frontend/assets/link-Diw-YZ8t.js +6 -0
  991. vibe_surf/backend/frontend/assets/linkedin-CExn9EK5.js +6 -0
  992. vibe_surf/backend/frontend/assets/list-CB9zDbEv.js +6 -0
  993. vibe_surf/backend/frontend/assets/list-check-CCdijvLD.js +6 -0
  994. vibe_surf/backend/frontend/assets/list-checks-B1EQ8oeV.js +6 -0
  995. vibe_surf/backend/frontend/assets/list-collapse-B_Nyhn3U.js +6 -0
  996. vibe_surf/backend/frontend/assets/list-end-BRGFPR4T.js +6 -0
  997. vibe_surf/backend/frontend/assets/list-filter-DR4JqPVX.js +6 -0
  998. vibe_surf/backend/frontend/assets/list-filter-plus-Q7j2JYzP.js +6 -0
  999. vibe_surf/backend/frontend/assets/list-minus-DrLtfmEG.js +6 -0
  1000. vibe_surf/backend/frontend/assets/list-music-C6MOQHoL.js +6 -0
  1001. vibe_surf/backend/frontend/assets/list-ordered-Db8L0lqU.js +6 -0
  1002. vibe_surf/backend/frontend/assets/list-plus-C1dade1Z.js +6 -0
  1003. vibe_surf/backend/frontend/assets/list-restart-CyRkF6Xo.js +6 -0
  1004. vibe_surf/backend/frontend/assets/list-start-CAn16QHF.js +6 -0
  1005. vibe_surf/backend/frontend/assets/list-todo-giJ3EaBY.js +6 -0
  1006. vibe_surf/backend/frontend/assets/list-tree-ZTTp4tz8.js +6 -0
  1007. vibe_surf/backend/frontend/assets/list-video-SNqnTTmu.js +6 -0
  1008. vibe_surf/backend/frontend/assets/list-x-XeDairuR.js +6 -0
  1009. vibe_surf/backend/frontend/assets/loader-RYX0GikH.js +6 -0
  1010. vibe_surf/backend/frontend/assets/loader-circle-CjMVhyrE.js +6 -0
  1011. vibe_surf/backend/frontend/assets/loader-pinwheel-Dv08mzUX.js +6 -0
  1012. vibe_surf/backend/frontend/assets/locate-DcqAXVyu.js +6 -0
  1013. vibe_surf/backend/frontend/assets/locate-fixed-BgaqK3FM.js +6 -0
  1014. vibe_surf/backend/frontend/assets/locate-off-1UN8A6fK.js +6 -0
  1015. vibe_surf/backend/frontend/assets/location-edit-DFbMZW6i.js +6 -0
  1016. vibe_surf/backend/frontend/assets/lock-DWN4LH3Q.js +6 -0
  1017. vibe_surf/backend/frontend/assets/lock-keyhole-aeS26SmF.js +6 -0
  1018. vibe_surf/backend/frontend/assets/lock-keyhole-open-CoXzZLpr.js +6 -0
  1019. vibe_surf/backend/frontend/assets/lock-open-CBPubokC.js +6 -0
  1020. vibe_surf/backend/frontend/assets/log-in-BW8pmSIu.js +6 -0
  1021. vibe_surf/backend/frontend/assets/log-out-D-d0DczA.js +6 -0
  1022. vibe_surf/backend/frontend/assets/logo_dark-_nccwgMn.png +0 -0
  1023. vibe_surf/backend/frontend/assets/logo_light-DKZjS8CD.png +0 -0
  1024. vibe_surf/backend/frontend/assets/logs-AXuVwIE_.js +6 -0
  1025. vibe_surf/backend/frontend/assets/lollipop-CxugcHkj.js +6 -0
  1026. vibe_surf/backend/frontend/assets/luggage-CFtS088O.js +6 -0
  1027. vibe_surf/backend/frontend/assets/magnet-BpIqKX0D.js +6 -0
  1028. vibe_surf/backend/frontend/assets/mail-1Br8NAMK.js +6 -0
  1029. vibe_surf/backend/frontend/assets/mail-check-DFwD0fvI.js +6 -0
  1030. vibe_surf/backend/frontend/assets/mail-minus-B_KovqmT.js +6 -0
  1031. vibe_surf/backend/frontend/assets/mail-open-VEmMVybi.js +6 -0
  1032. vibe_surf/backend/frontend/assets/mail-plus-D-1Wacj7.js +6 -0
  1033. vibe_surf/backend/frontend/assets/mail-question-CJK96wre.js +6 -0
  1034. vibe_surf/backend/frontend/assets/mail-search-Du6F72Wj.js +6 -0
  1035. vibe_surf/backend/frontend/assets/mail-warning-BI87_kvG.js +6 -0
  1036. vibe_surf/backend/frontend/assets/mail-x-DU415vbZ.js +6 -0
  1037. vibe_surf/backend/frontend/assets/mailbox-CMHDAMVZ.js +6 -0
  1038. vibe_surf/backend/frontend/assets/mails-CUDj41Cn.js +6 -0
  1039. vibe_surf/backend/frontend/assets/map-D2I0g3OZ.js +6 -0
  1040. vibe_surf/backend/frontend/assets/map-pin-CiM6iB2r.js +6 -0
  1041. vibe_surf/backend/frontend/assets/map-pin-check-BQWCC6Uv.js +6 -0
  1042. vibe_surf/backend/frontend/assets/map-pin-check-inside-CVhhgPHY.js +6 -0
  1043. vibe_surf/backend/frontend/assets/map-pin-house-CXbXX8w-.js +6 -0
  1044. vibe_surf/backend/frontend/assets/map-pin-minus-D0dRHvgd.js +6 -0
  1045. vibe_surf/backend/frontend/assets/map-pin-minus-inside-DGpPZYAi.js +6 -0
  1046. vibe_surf/backend/frontend/assets/map-pin-off-EbFPnlZq.js +6 -0
  1047. vibe_surf/backend/frontend/assets/map-pin-plus-BLD0VcG5.js +6 -0
  1048. vibe_surf/backend/frontend/assets/map-pin-plus-inside-CapcP3Yk.js +6 -0
  1049. vibe_surf/backend/frontend/assets/map-pin-x-DrNWALEC.js +6 -0
  1050. vibe_surf/backend/frontend/assets/map-pin-x-inside-9DqM8z-J.js +6 -0
  1051. vibe_surf/backend/frontend/assets/map-pinned-DHMQpBhr.js +6 -0
  1052. vibe_surf/backend/frontend/assets/map-plus-CQm0KS9c.js +6 -0
  1053. vibe_surf/backend/frontend/assets/mars-CcweinsF.js +6 -0
  1054. vibe_surf/backend/frontend/assets/mars-stroke-OWTfhzV5.js +6 -0
  1055. vibe_surf/backend/frontend/assets/martini-DGORgxbx.js +6 -0
  1056. vibe_surf/backend/frontend/assets/maximize-2-CN4UuSQb.js +6 -0
  1057. vibe_surf/backend/frontend/assets/maximize-DOYuzVqB.js +6 -0
  1058. vibe_surf/backend/frontend/assets/medal-DZT2ADyJ.js +6 -0
  1059. vibe_surf/backend/frontend/assets/megaphone-DN4B6I5c.js +6 -0
  1060. vibe_surf/backend/frontend/assets/megaphone-off-DRAddUqF.js +6 -0
  1061. vibe_surf/backend/frontend/assets/meh-CTX3Y793.js +6 -0
  1062. vibe_surf/backend/frontend/assets/memory-stick-CSG08PuA.js +6 -0
  1063. vibe_surf/backend/frontend/assets/menu-BUvQ8bhy.js +6 -0
  1064. vibe_surf/backend/frontend/assets/merge-xkPPWyBJ.js +6 -0
  1065. vibe_surf/backend/frontend/assets/message-circle-BSqs77ZY.js +6 -0
  1066. vibe_surf/backend/frontend/assets/message-circle-code-EW46-KUX.js +6 -0
  1067. vibe_surf/backend/frontend/assets/message-circle-dashed-BOxWD8kE.js +6 -0
  1068. vibe_surf/backend/frontend/assets/message-circle-heart-CBhiUXeV.js +6 -0
  1069. vibe_surf/backend/frontend/assets/message-circle-more-DqfUhx6W.js +6 -0
  1070. vibe_surf/backend/frontend/assets/message-circle-off-DrsP7VV_.js +6 -0
  1071. vibe_surf/backend/frontend/assets/message-circle-plus-IixbN-s-.js +6 -0
  1072. vibe_surf/backend/frontend/assets/message-circle-question-DsMgtwwS.js +6 -0
  1073. vibe_surf/backend/frontend/assets/message-circle-reply-D_Eog9Yc.js +6 -0
  1074. vibe_surf/backend/frontend/assets/message-circle-warning-D656cL7l.js +6 -0
  1075. vibe_surf/backend/frontend/assets/message-circle-x-CXWR4BBb.js +6 -0
  1076. vibe_surf/backend/frontend/assets/message-square-DKWryKVG.js +6 -0
  1077. vibe_surf/backend/frontend/assets/message-square-code-0ANFU-JW.js +6 -0
  1078. vibe_surf/backend/frontend/assets/message-square-dashed-DaZwp2x1.js +6 -0
  1079. vibe_surf/backend/frontend/assets/message-square-diff-DpJLi_UX.js +6 -0
  1080. vibe_surf/backend/frontend/assets/message-square-dot-OcgwyxZC.js +6 -0
  1081. vibe_surf/backend/frontend/assets/message-square-heart-CKfZOSw8.js +6 -0
  1082. vibe_surf/backend/frontend/assets/message-square-lock-BnNy_yw5.js +6 -0
  1083. vibe_surf/backend/frontend/assets/message-square-more-D2WGFzms.js +6 -0
  1084. vibe_surf/backend/frontend/assets/message-square-off-DV5974j6.js +6 -0
  1085. vibe_surf/backend/frontend/assets/message-square-plus-7icA5g-P.js +6 -0
  1086. vibe_surf/backend/frontend/assets/message-square-quote-DdAvA-a_.js +6 -0
  1087. vibe_surf/backend/frontend/assets/message-square-reply-Cg9Dlls7.js +6 -0
  1088. vibe_surf/backend/frontend/assets/message-square-share-BptAhOEV.js +6 -0
  1089. vibe_surf/backend/frontend/assets/message-square-text-Cu-Ycwsi.js +6 -0
  1090. vibe_surf/backend/frontend/assets/message-square-warning-DxIzJ5bt.js +6 -0
  1091. vibe_surf/backend/frontend/assets/message-square-x-BF9akIp2.js +6 -0
  1092. vibe_surf/backend/frontend/assets/messages-square-AjrRNZXQ.js +6 -0
  1093. vibe_surf/backend/frontend/assets/mic-BXU1SRXR.js +6 -0
  1094. vibe_surf/backend/frontend/assets/mic-off-BUQ1-6-l.js +6 -0
  1095. vibe_surf/backend/frontend/assets/mic-vocal-CG4Yw8We.js +6 -0
  1096. vibe_surf/backend/frontend/assets/microchip-CodKB7m1.js +6 -0
  1097. vibe_surf/backend/frontend/assets/microscope-BY57GHi1.js +6 -0
  1098. vibe_surf/backend/frontend/assets/microwave-KuJ1X2CX.js +6 -0
  1099. vibe_surf/backend/frontend/assets/milestone-D_ToDu31.js +6 -0
  1100. vibe_surf/backend/frontend/assets/milk-C4Nq829F.js +6 -0
  1101. vibe_surf/backend/frontend/assets/milk-off-BPCtdIks.js +6 -0
  1102. vibe_surf/backend/frontend/assets/minimize-2-DeAs1S78.js +6 -0
  1103. vibe_surf/backend/frontend/assets/minimize-DKOGyuzf.js +6 -0
  1104. vibe_surf/backend/frontend/assets/monitor-Cjm4ELo4.js +6 -0
  1105. vibe_surf/backend/frontend/assets/monitor-check-CrckmDk_.js +6 -0
  1106. vibe_surf/backend/frontend/assets/monitor-cog-DIPYXk5z.js +6 -0
  1107. vibe_surf/backend/frontend/assets/monitor-dot-Cl_ZGBvp.js +6 -0
  1108. vibe_surf/backend/frontend/assets/monitor-down-DCSynbhm.js +6 -0
  1109. vibe_surf/backend/frontend/assets/monitor-off-Bxqkes47.js +6 -0
  1110. vibe_surf/backend/frontend/assets/monitor-pause-B2ogwlXq.js +6 -0
  1111. vibe_surf/backend/frontend/assets/monitor-play-w2CTvWQx.js +6 -0
  1112. vibe_surf/backend/frontend/assets/monitor-smartphone-DYQb-VQa.js +6 -0
  1113. vibe_surf/backend/frontend/assets/monitor-speaker-CruyWIOw.js +6 -0
  1114. vibe_surf/backend/frontend/assets/monitor-stop-D2cot7wP.js +6 -0
  1115. vibe_surf/backend/frontend/assets/monitor-up-Bo4VFUGK.js +6 -0
  1116. vibe_surf/backend/frontend/assets/monitor-x-yhFSw0Zo.js +6 -0
  1117. vibe_surf/backend/frontend/assets/moon-CZFTmFVS.js +6 -0
  1118. vibe_surf/backend/frontend/assets/moon-star-X8Pb6SAO.js +6 -0
  1119. vibe_surf/backend/frontend/assets/mountain-_tKRhauQ.js +6 -0
  1120. vibe_surf/backend/frontend/assets/mountain-snow-COLjUpoc.js +6 -0
  1121. vibe_surf/backend/frontend/assets/mouse-C62B_4i7.js +6 -0
  1122. vibe_surf/backend/frontend/assets/mouse-off-NO65wsqy.js +6 -0
  1123. vibe_surf/backend/frontend/assets/mouse-pointer-2-vvokJ-v-.js +6 -0
  1124. vibe_surf/backend/frontend/assets/mouse-pointer-IHoLB1Ii.js +6 -0
  1125. vibe_surf/backend/frontend/assets/mouse-pointer-ban-BGxlXS_f.js +6 -0
  1126. vibe_surf/backend/frontend/assets/mouse-pointer-click-C7N7cKxT.js +6 -0
  1127. vibe_surf/backend/frontend/assets/move-3d-CQO0qR5b.js +6 -0
  1128. vibe_surf/backend/frontend/assets/move-Bp3oIgRK.js +6 -0
  1129. vibe_surf/backend/frontend/assets/move-diagonal-2-CQ3Gqa4B.js +6 -0
  1130. vibe_surf/backend/frontend/assets/move-diagonal-BkUx0iYA.js +6 -0
  1131. vibe_surf/backend/frontend/assets/move-down-B4dxMy_p.js +6 -0
  1132. vibe_surf/backend/frontend/assets/move-down-left-NxvLep64.js +6 -0
  1133. vibe_surf/backend/frontend/assets/move-down-right-CxcsF1yI.js +6 -0
  1134. vibe_surf/backend/frontend/assets/move-horizontal-or6vuyOq.js +6 -0
  1135. vibe_surf/backend/frontend/assets/move-left-Tcae9tGG.js +6 -0
  1136. vibe_surf/backend/frontend/assets/move-right-jY3F431H.js +6 -0
  1137. vibe_surf/backend/frontend/assets/move-up-Dk8sPbRD.js +6 -0
  1138. vibe_surf/backend/frontend/assets/move-up-left-CD7NRvhF.js +6 -0
  1139. vibe_surf/backend/frontend/assets/move-up-right-BAOhHbBw.js +6 -0
  1140. vibe_surf/backend/frontend/assets/move-vertical-BxWj9bDO.js +6 -0
  1141. vibe_surf/backend/frontend/assets/music-2-DQL5lOH_.js +6 -0
  1142. vibe_surf/backend/frontend/assets/music-3-wkxjpooD.js +6 -0
  1143. vibe_surf/backend/frontend/assets/music-4-CgUN2PUO.js +6 -0
  1144. vibe_surf/backend/frontend/assets/music-YxXwq9fN.js +6 -0
  1145. vibe_surf/backend/frontend/assets/navigation-2-Ba4Z-jSq.js +6 -0
  1146. vibe_surf/backend/frontend/assets/navigation-2-off-C_LfeWvW.js +6 -0
  1147. vibe_surf/backend/frontend/assets/navigation-BEChOEsi.js +6 -0
  1148. vibe_surf/backend/frontend/assets/navigation-off-BehyOyE3.js +6 -0
  1149. vibe_surf/backend/frontend/assets/network-CwJLOq3T.js +6 -0
  1150. vibe_surf/backend/frontend/assets/newspaper-ELrHeGRI.js +6 -0
  1151. vibe_surf/backend/frontend/assets/nfc-B_3XFb34.js +6 -0
  1152. vibe_surf/backend/frontend/assets/non-binary-BsgU9v43.js +6 -0
  1153. vibe_surf/backend/frontend/assets/notebook-j-nq3SkT.js +6 -0
  1154. vibe_surf/backend/frontend/assets/notebook-pen-D9-IPVfi.js +6 -0
  1155. vibe_surf/backend/frontend/assets/notebook-tabs-B8RN5vFZ.js +6 -0
  1156. vibe_surf/backend/frontend/assets/notebook-text-9VvE4wV2.js +6 -0
  1157. vibe_surf/backend/frontend/assets/notepad-text-CtRuOWM5.js +6 -0
  1158. vibe_surf/backend/frontend/assets/notepad-text-dashed-BKDJS1oq.js +6 -0
  1159. vibe_surf/backend/frontend/assets/nut-MLKrgO4r.js +6 -0
  1160. vibe_surf/backend/frontend/assets/nut-off-CX5f1ggv.js +6 -0
  1161. vibe_surf/backend/frontend/assets/octagon-Dm5tdLTK.js +6 -0
  1162. vibe_surf/backend/frontend/assets/octagon-alert-THvRb-wV.js +6 -0
  1163. vibe_surf/backend/frontend/assets/octagon-minus-BIN-9swI.js +6 -0
  1164. vibe_surf/backend/frontend/assets/octagon-pause-BvRAlpaV.js +6 -0
  1165. vibe_surf/backend/frontend/assets/octagon-x-DeRG_Ls0.js +6 -0
  1166. vibe_surf/backend/frontend/assets/omega-CVAxeKBK.js +6 -0
  1167. vibe_surf/backend/frontend/assets/option-14pftykg.js +6 -0
  1168. vibe_surf/backend/frontend/assets/orbit-CfewrZaI.js +6 -0
  1169. vibe_surf/backend/frontend/assets/origami-BT1VriUJ.js +6 -0
  1170. vibe_surf/backend/frontend/assets/package-2-D11kpXq5.js +6 -0
  1171. vibe_surf/backend/frontend/assets/package-BegS59es.js +6 -0
  1172. vibe_surf/backend/frontend/assets/package-check-DOLq4x6S.js +6 -0
  1173. vibe_surf/backend/frontend/assets/package-minus-BFgP752B.js +6 -0
  1174. vibe_surf/backend/frontend/assets/package-open-D2nk_ytU.js +6 -0
  1175. vibe_surf/backend/frontend/assets/package-plus-Va8EoLSt.js +6 -0
  1176. vibe_surf/backend/frontend/assets/package-search-cGv3F3Yi.js +6 -0
  1177. vibe_surf/backend/frontend/assets/package-x-BFCKCrAT.js +6 -0
  1178. vibe_surf/backend/frontend/assets/paint-bucket-C1nh-Go_.js +6 -0
  1179. vibe_surf/backend/frontend/assets/paint-roller-C9vy4fuD.js +6 -0
  1180. vibe_surf/backend/frontend/assets/paintbrush-Bo4L8Hqc.js +6 -0
  1181. vibe_surf/backend/frontend/assets/paintbrush-vertical-DqUyy2UU.js +6 -0
  1182. vibe_surf/backend/frontend/assets/palette-DddGrkXJ.js +6 -0
  1183. vibe_surf/backend/frontend/assets/panel-bottom-DPSx8I79.js +6 -0
  1184. vibe_surf/backend/frontend/assets/panel-bottom-close-D0SBNVCx.js +6 -0
  1185. vibe_surf/backend/frontend/assets/panel-bottom-dashed-CR6jKyB5.js +6 -0
  1186. vibe_surf/backend/frontend/assets/panel-bottom-open-BA8uHJ1f.js +6 -0
  1187. vibe_surf/backend/frontend/assets/panel-left-close-HWzVGhEN.js +6 -0
  1188. vibe_surf/backend/frontend/assets/panel-left-dashed-C8CvEMus.js +6 -0
  1189. vibe_surf/backend/frontend/assets/panel-left-open-DZtgeJky.js +6 -0
  1190. vibe_surf/backend/frontend/assets/panel-right-BIGpcNCD.js +6 -0
  1191. vibe_surf/backend/frontend/assets/panel-right-close-D6I6nB-8.js +6 -0
  1192. vibe_surf/backend/frontend/assets/panel-right-dashed-Dt-tZyfJ.js +6 -0
  1193. vibe_surf/backend/frontend/assets/panel-right-open-Cso_cmr4.js +6 -0
  1194. vibe_surf/backend/frontend/assets/panel-top-DxQozLLO.js +6 -0
  1195. vibe_surf/backend/frontend/assets/panel-top-close-21p_Iy4Q.js +6 -0
  1196. vibe_surf/backend/frontend/assets/panel-top-dashed-BLLvCUcW.js +6 -0
  1197. vibe_surf/backend/frontend/assets/panel-top-open-DOpjqeXN.js +6 -0
  1198. vibe_surf/backend/frontend/assets/panels-left-bottom-Dgc_Zml-.js +6 -0
  1199. vibe_surf/backend/frontend/assets/panels-right-bottom-DBl33v5J.js +6 -0
  1200. vibe_surf/backend/frontend/assets/panels-top-left-Bh9Km2t_.js +6 -0
  1201. vibe_surf/backend/frontend/assets/paperclip-DwNdWjNs.js +6 -0
  1202. vibe_surf/backend/frontend/assets/parentheses-Bv3x0v0d.js +6 -0
  1203. vibe_surf/backend/frontend/assets/parking-meter-CaAUYem8.js +6 -0
  1204. vibe_surf/backend/frontend/assets/party-popper-o676ndwa.js +6 -0
  1205. vibe_surf/backend/frontend/assets/pause-DofdcFyf.js +6 -0
  1206. vibe_surf/backend/frontend/assets/paw-print-CsCZTGwP.js +6 -0
  1207. vibe_surf/backend/frontend/assets/pc-case-ChHKP8Bs.js +6 -0
  1208. vibe_surf/backend/frontend/assets/pen-BJrA5W2j.js +6 -0
  1209. vibe_surf/backend/frontend/assets/pen-line-Cn_-SNuM.js +6 -0
  1210. vibe_surf/backend/frontend/assets/pen-off-vpS9creP.js +6 -0
  1211. vibe_surf/backend/frontend/assets/pen-tool-BHi1klDG.js +6 -0
  1212. vibe_surf/backend/frontend/assets/pencil-Wem_VEVg.js +6 -0
  1213. vibe_surf/backend/frontend/assets/pencil-line-CpG7egII.js +6 -0
  1214. vibe_surf/backend/frontend/assets/pencil-off-DNbfjOTs.js +6 -0
  1215. vibe_surf/backend/frontend/assets/pencil-ruler-BQdaeQqI.js +6 -0
  1216. vibe_surf/backend/frontend/assets/pentagon-BNe4mDhm.js +6 -0
  1217. vibe_surf/backend/frontend/assets/percent-CDhexNCT.js +6 -0
  1218. vibe_surf/backend/frontend/assets/person-standing-DxYpZiGV.js +6 -0
  1219. vibe_surf/backend/frontend/assets/philippine-peso-B7FAFSBd.js +6 -0
  1220. vibe_surf/backend/frontend/assets/phone-CTiWkAUx.js +6 -0
  1221. vibe_surf/backend/frontend/assets/phone-call-CWavZZ8W.js +6 -0
  1222. vibe_surf/backend/frontend/assets/phone-forwarded-CLaEebEE.js +6 -0
  1223. vibe_surf/backend/frontend/assets/phone-incoming-Cv2OCBfT.js +6 -0
  1224. vibe_surf/backend/frontend/assets/phone-missed-DNNjfxVz.js +6 -0
  1225. vibe_surf/backend/frontend/assets/phone-off-ClVQWi0g.js +6 -0
  1226. vibe_surf/backend/frontend/assets/phone-outgoing-CY2TxKXl.js +6 -0
  1227. vibe_surf/backend/frontend/assets/pi-DNqBWxfj.js +6 -0
  1228. vibe_surf/backend/frontend/assets/piano-MiPm47Ma.js +6 -0
  1229. vibe_surf/backend/frontend/assets/pickaxe-YqkOBnCJ.js +6 -0
  1230. vibe_surf/backend/frontend/assets/picture-in-picture-2-BIKggEXM.js +6 -0
  1231. vibe_surf/backend/frontend/assets/picture-in-picture-QAMxgJMO.js +6 -0
  1232. vibe_surf/backend/frontend/assets/piggy-bank-DVE6nzj5.js +6 -0
  1233. vibe_surf/backend/frontend/assets/pilcrow-CIhZWZVN.js +6 -0
  1234. vibe_surf/backend/frontend/assets/pilcrow-left-Ca9XTMpA.js +6 -0
  1235. vibe_surf/backend/frontend/assets/pilcrow-right-CLd68jMN.js +6 -0
  1236. vibe_surf/backend/frontend/assets/pill-CBiMEkPj.js +6 -0
  1237. vibe_surf/backend/frontend/assets/pill-bottle-CJ3pejac.js +6 -0
  1238. vibe_surf/backend/frontend/assets/pin-Oo2Sku7X.js +6 -0
  1239. vibe_surf/backend/frontend/assets/pin-off-DG48ZMV_.js +6 -0
  1240. vibe_surf/backend/frontend/assets/pipette-BzvHUOUt.js +6 -0
  1241. vibe_surf/backend/frontend/assets/pizza-B5z39oy-.js +6 -0
  1242. vibe_surf/backend/frontend/assets/plane-eU326jPg.js +6 -0
  1243. vibe_surf/backend/frontend/assets/plane-landing-gxcqSKOA.js +6 -0
  1244. vibe_surf/backend/frontend/assets/plane-takeoff-CFmuOAfX.js +6 -0
  1245. vibe_surf/backend/frontend/assets/play-CaCbaWdR.js +6 -0
  1246. vibe_surf/backend/frontend/assets/plug-2-CaihODHc.js +6 -0
  1247. vibe_surf/backend/frontend/assets/plug-DrN0weqI.js +6 -0
  1248. vibe_surf/backend/frontend/assets/plug-zap-BT2sgwQy.js +6 -0
  1249. vibe_surf/backend/frontend/assets/pocket-DNEPJJmg.js +6 -0
  1250. vibe_surf/backend/frontend/assets/pocket-knife-1CI1aqMD.js +6 -0
  1251. vibe_surf/backend/frontend/assets/podcast-BsGsWn3h.js +6 -0
  1252. vibe_surf/backend/frontend/assets/pointer-B8T5gv-x.js +6 -0
  1253. vibe_surf/backend/frontend/assets/pointer-off-C2DXzg5S.js +6 -0
  1254. vibe_surf/backend/frontend/assets/popcorn-Bi10K8Em.js +6 -0
  1255. vibe_surf/backend/frontend/assets/popsicle-CxLa9bz8.js +6 -0
  1256. vibe_surf/backend/frontend/assets/pound-sterling-BFXPyyYU.js +6 -0
  1257. vibe_surf/backend/frontend/assets/power-BmqAlXVz.js +6 -0
  1258. vibe_surf/backend/frontend/assets/power-off-CT70n2O0.js +6 -0
  1259. vibe_surf/backend/frontend/assets/presentation-DVhaCvt0.js +6 -0
  1260. vibe_surf/backend/frontend/assets/printer-D7NgKQZm.js +6 -0
  1261. vibe_surf/backend/frontend/assets/printer-check-BYDiSYD3.js +6 -0
  1262. vibe_surf/backend/frontend/assets/projector-BFMEAUGw.js +6 -0
  1263. vibe_surf/backend/frontend/assets/proportions-CUypjhWs.js +6 -0
  1264. vibe_surf/backend/frontend/assets/puzzle-lPcRsrCP.js +6 -0
  1265. vibe_surf/backend/frontend/assets/pyramid-bX_YtvHu.js +6 -0
  1266. vibe_surf/backend/frontend/assets/qr-code-CMBq06CH.js +6 -0
  1267. vibe_surf/backend/frontend/assets/quote-BkFwr2wo.js +6 -0
  1268. vibe_surf/backend/frontend/assets/rabbit-CEyfAR1t.js +6 -0
  1269. vibe_surf/backend/frontend/assets/radar-bMcLs_bP.js +6 -0
  1270. vibe_surf/backend/frontend/assets/radiation-NMlxufHZ.js +6 -0
  1271. vibe_surf/backend/frontend/assets/radical-C3CE5pot.js +6 -0
  1272. vibe_surf/backend/frontend/assets/radio-DQMhSWLz.js +6 -0
  1273. vibe_surf/backend/frontend/assets/radio-receiver-Cwtiayz1.js +6 -0
  1274. vibe_surf/backend/frontend/assets/radio-tower-ngCBBDuR.js +6 -0
  1275. vibe_surf/backend/frontend/assets/radius-CB1vpl4-.js +6 -0
  1276. vibe_surf/backend/frontend/assets/rail-symbol-CWT8jn79.js +6 -0
  1277. vibe_surf/backend/frontend/assets/rainbow-eG2Z6xdv.js +6 -0
  1278. vibe_surf/backend/frontend/assets/rat-CjjmSgkE.js +6 -0
  1279. vibe_surf/backend/frontend/assets/ratio-Ck9TZd6C.js +6 -0
  1280. vibe_surf/backend/frontend/assets/receipt-QzIALZKN.js +6 -0
  1281. vibe_surf/backend/frontend/assets/receipt-cent-wAd12yx1.js +6 -0
  1282. vibe_surf/backend/frontend/assets/receipt-euro-BG_rS29_.js +6 -0
  1283. vibe_surf/backend/frontend/assets/receipt-indian-rupee-DlF7wlqh.js +6 -0
  1284. vibe_surf/backend/frontend/assets/receipt-japanese-yen-GDNnE_Bl.js +6 -0
  1285. vibe_surf/backend/frontend/assets/receipt-pound-sterling-CczRTrHu.js +6 -0
  1286. vibe_surf/backend/frontend/assets/receipt-russian-ruble-CP8qhoZV.js +6 -0
  1287. vibe_surf/backend/frontend/assets/receipt-swiss-franc-B1FjnBVT.js +6 -0
  1288. vibe_surf/backend/frontend/assets/receipt-text-Df0EAqK2.js +6 -0
  1289. vibe_surf/backend/frontend/assets/rectangle-ellipsis-BeZ5b8q2.js +6 -0
  1290. vibe_surf/backend/frontend/assets/rectangle-goggles-B0pWs5f6.js +6 -0
  1291. vibe_surf/backend/frontend/assets/rectangle-horizontal-5D8nW5zN.js +6 -0
  1292. vibe_surf/backend/frontend/assets/rectangle-vertical-D6iXTP5O.js +6 -0
  1293. vibe_surf/backend/frontend/assets/recycle-cePWNqck.js +6 -0
  1294. vibe_surf/backend/frontend/assets/redo-2-DflPUgVL.js +6 -0
  1295. vibe_surf/backend/frontend/assets/redo-C8hJqzAq.js +6 -0
  1296. vibe_surf/backend/frontend/assets/redo-dot-JyZC910i.js +6 -0
  1297. vibe_surf/backend/frontend/assets/refresh-ccw-QGOuU93p.js +6 -0
  1298. vibe_surf/backend/frontend/assets/refresh-ccw-dot-BVfOSZg8.js +6 -0
  1299. vibe_surf/backend/frontend/assets/refresh-cw-DttAl3PC.js +6 -0
  1300. vibe_surf/backend/frontend/assets/refresh-cw-off-1m7CD9nm.js +6 -0
  1301. vibe_surf/backend/frontend/assets/refrigerator-BGk6q_hL.js +6 -0
  1302. vibe_surf/backend/frontend/assets/regex-C-txrNUs.js +6 -0
  1303. vibe_surf/backend/frontend/assets/remove-formatting-CVxREpGZ.js +6 -0
  1304. vibe_surf/backend/frontend/assets/repeat-1-ChFj2WK-.js +6 -0
  1305. vibe_surf/backend/frontend/assets/repeat-2-ViBvoa4W.js +6 -0
  1306. vibe_surf/backend/frontend/assets/repeat-GoYG4svo.js +6 -0
  1307. vibe_surf/backend/frontend/assets/replace-GFcv_X_V.js +6 -0
  1308. vibe_surf/backend/frontend/assets/replace-all-zAC7UUp9.js +6 -0
  1309. vibe_surf/backend/frontend/assets/reply-C2IH8Yvz.js +6 -0
  1310. vibe_surf/backend/frontend/assets/reply-all-CXYDFlBb.js +6 -0
  1311. vibe_surf/backend/frontend/assets/rewind-Bmv_DtI_.js +6 -0
  1312. vibe_surf/backend/frontend/assets/ribbon-B4MeTNUc.js +6 -0
  1313. vibe_surf/backend/frontend/assets/robot-BsccFpqT.png +0 -0
  1314. vibe_surf/backend/frontend/assets/rocket-Ch2Sc43k.js +6 -0
  1315. vibe_surf/backend/frontend/assets/rocking-chair-Pcx0Ex8j.js +6 -0
  1316. vibe_surf/backend/frontend/assets/roller-coaster-DpdZyHU4.js +6 -0
  1317. vibe_surf/backend/frontend/assets/rotate-3d-CAlCCDrS.js +6 -0
  1318. vibe_surf/backend/frontend/assets/rotate-ccw-Dl5IeMD0.js +6 -0
  1319. vibe_surf/backend/frontend/assets/rotate-ccw-key-CbcFcY_X.js +6 -0
  1320. vibe_surf/backend/frontend/assets/rotate-ccw-square-B6dXtMGF.js +6 -0
  1321. vibe_surf/backend/frontend/assets/rotate-cw-D9QBD3w1.js +6 -0
  1322. vibe_surf/backend/frontend/assets/rotate-cw-square-BTb_LCYt.js +6 -0
  1323. vibe_surf/backend/frontend/assets/route-BY8OMdE6.js +6 -0
  1324. vibe_surf/backend/frontend/assets/route-off-DBPZSjij.js +6 -0
  1325. vibe_surf/backend/frontend/assets/router-Cj5pK344.js +6 -0
  1326. vibe_surf/backend/frontend/assets/rows-2-DQikFZXW.js +6 -0
  1327. vibe_surf/backend/frontend/assets/rows-3-CgpwLjBs.js +6 -0
  1328. vibe_surf/backend/frontend/assets/rows-4-DHLpJgeW.js +6 -0
  1329. vibe_surf/backend/frontend/assets/rss-B2J7l-Sb.js +6 -0
  1330. vibe_surf/backend/frontend/assets/ruler-D-fe4o6e.js +6 -0
  1331. vibe_surf/backend/frontend/assets/ruler-dimension-line-COrwkuXi.js +6 -0
  1332. vibe_surf/backend/frontend/assets/russian-ruble-Bk9zdT2J.js +6 -0
  1333. vibe_surf/backend/frontend/assets/sailboat-DMPxVbdm.js +6 -0
  1334. vibe_surf/backend/frontend/assets/salad-D20azVGZ.js +6 -0
  1335. vibe_surf/backend/frontend/assets/sandwich-Z_d-MQ5t.js +6 -0
  1336. vibe_surf/backend/frontend/assets/satellite-7zgZRaOF.js +6 -0
  1337. vibe_surf/backend/frontend/assets/satellite-dish-Cy6FmD_T.js +6 -0
  1338. vibe_surf/backend/frontend/assets/saudi-riyal-C9ZvxnL2.js +6 -0
  1339. vibe_surf/backend/frontend/assets/save-LkAkHS7W.js +6 -0
  1340. vibe_surf/backend/frontend/assets/save-all-D_-zYl71.js +6 -0
  1341. vibe_surf/backend/frontend/assets/save-off-B0KWQYIj.js +6 -0
  1342. vibe_surf/backend/frontend/assets/scale-3d-FnesJ3yp.js +6 -0
  1343. vibe_surf/backend/frontend/assets/scale-CfDNIDpX.js +6 -0
  1344. vibe_surf/backend/frontend/assets/scaling-D7_wGXPp.js +6 -0
  1345. vibe_surf/backend/frontend/assets/scan-CXtftKWt.js +6 -0
  1346. vibe_surf/backend/frontend/assets/scan-barcode-DMzKInA0.js +6 -0
  1347. vibe_surf/backend/frontend/assets/scan-eye-BNOyXXj8.js +6 -0
  1348. vibe_surf/backend/frontend/assets/scan-face-wv0t4zeq.js +6 -0
  1349. vibe_surf/backend/frontend/assets/scan-heart-BeBWR3xV.js +6 -0
  1350. vibe_surf/backend/frontend/assets/scan-line-CvQpOukb.js +6 -0
  1351. vibe_surf/backend/frontend/assets/scan-qr-code-BQ-Oqt9e.js +6 -0
  1352. vibe_surf/backend/frontend/assets/scan-search-DeDxyjP7.js +6 -0
  1353. vibe_surf/backend/frontend/assets/scan-text-Du5B26Lp.js +6 -0
  1354. vibe_surf/backend/frontend/assets/school-XPbcFxvs.js +6 -0
  1355. vibe_surf/backend/frontend/assets/scissors-C82MxyXF.js +6 -0
  1356. vibe_surf/backend/frontend/assets/scissors-line-dashed-BiIj8ZEF.js +6 -0
  1357. vibe_surf/backend/frontend/assets/screen-share-4rpy_bSP.js +6 -0
  1358. vibe_surf/backend/frontend/assets/screen-share-off-DisAsCVo.js +6 -0
  1359. vibe_surf/backend/frontend/assets/scroll-D3FgdMu9.js +6 -0
  1360. vibe_surf/backend/frontend/assets/scroll-text-BolUgv8k.js +6 -0
  1361. vibe_surf/backend/frontend/assets/search-check-BqDsbYzT.js +6 -0
  1362. vibe_surf/backend/frontend/assets/search-code-BAngOAWT.js +6 -0
  1363. vibe_surf/backend/frontend/assets/search-slash-DGpGjVDh.js +6 -0
  1364. vibe_surf/backend/frontend/assets/search-x-hbEhC-Ks.js +6 -0
  1365. vibe_surf/backend/frontend/assets/section-CZdebDRa.js +6 -0
  1366. vibe_surf/backend/frontend/assets/send-BY6RRvoS.js +6 -0
  1367. vibe_surf/backend/frontend/assets/send-horizontal-ByJf1GwO.js +6 -0
  1368. vibe_surf/backend/frontend/assets/send-to-back-CqeJ0x7-.js +6 -0
  1369. vibe_surf/backend/frontend/assets/separator-horizontal-CyHVE869.js +6 -0
  1370. vibe_surf/backend/frontend/assets/separator-vertical-CHEXvAuG.js +6 -0
  1371. vibe_surf/backend/frontend/assets/server-DPj6-qpq.js +6 -0
  1372. vibe_surf/backend/frontend/assets/server-cog-Dc-mlMR8.js +6 -0
  1373. vibe_surf/backend/frontend/assets/server-crash-CXsISMNW.js +6 -0
  1374. vibe_surf/backend/frontend/assets/server-off-Y_lfL7-w.js +6 -0
  1375. vibe_surf/backend/frontend/assets/settings-2-DZ9wvd5i.js +6 -0
  1376. vibe_surf/backend/frontend/assets/settings-DO_W46zj.js +6 -0
  1377. vibe_surf/backend/frontend/assets/shapes-CIsUods8.js +6 -0
  1378. vibe_surf/backend/frontend/assets/share-0y8A7A5E.js +6 -0
  1379. vibe_surf/backend/frontend/assets/share-2-TSy7pnEx.js +6 -0
  1380. vibe_surf/backend/frontend/assets/sheet-DagiH4ve.js +6 -0
  1381. vibe_surf/backend/frontend/assets/shell-4uq5QK2w.js +6 -0
  1382. vibe_surf/backend/frontend/assets/shield-DSmxKeAX.js +6 -0
  1383. vibe_surf/backend/frontend/assets/shield-alert-2BHG6ofb.js +6 -0
  1384. vibe_surf/backend/frontend/assets/shield-ban-BcQOFFCO.js +6 -0
  1385. vibe_surf/backend/frontend/assets/shield-check-IssT1y70.js +6 -0
  1386. vibe_surf/backend/frontend/assets/shield-ellipsis-B_k2GJZe.js +6 -0
  1387. vibe_surf/backend/frontend/assets/shield-half-Ce9mZY66.js +6 -0
  1388. vibe_surf/backend/frontend/assets/shield-minus-Cm9SRYz3.js +6 -0
  1389. vibe_surf/backend/frontend/assets/shield-off-Di-Txcsi.js +6 -0
  1390. vibe_surf/backend/frontend/assets/shield-plus-Cbd8tnos.js +6 -0
  1391. vibe_surf/backend/frontend/assets/shield-question-5hf3zAb8.js +6 -0
  1392. vibe_surf/backend/frontend/assets/shield-user-D2XuthCx.js +6 -0
  1393. vibe_surf/backend/frontend/assets/shield-x-BTJiGLGc.js +6 -0
  1394. vibe_surf/backend/frontend/assets/ship-DkhgC4pB.js +6 -0
  1395. vibe_surf/backend/frontend/assets/ship-wheel-C-7_Y35l.js +6 -0
  1396. vibe_surf/backend/frontend/assets/shirt-vuhl9SGI.js +6 -0
  1397. vibe_surf/backend/frontend/assets/shopping-bag-DvQ2pPfQ.js +6 -0
  1398. vibe_surf/backend/frontend/assets/shopping-basket-D9s56Xw7.js +6 -0
  1399. vibe_surf/backend/frontend/assets/shopping-cart-ZmbJuTVy.js +6 -0
  1400. vibe_surf/backend/frontend/assets/shovel-L2fbM_rD.js +6 -0
  1401. vibe_surf/backend/frontend/assets/shower-head-DE9aHmtW.js +6 -0
  1402. vibe_surf/backend/frontend/assets/shredder-DadDP-UJ.js +6 -0
  1403. vibe_surf/backend/frontend/assets/shrimp-DycqoQZ3.js +6 -0
  1404. vibe_surf/backend/frontend/assets/shrink-B8aylxOx.js +6 -0
  1405. vibe_surf/backend/frontend/assets/shrub-DF1hbXW3.js +6 -0
  1406. vibe_surf/backend/frontend/assets/shuffle-BuIBx3Jr.js +6 -0
  1407. vibe_surf/backend/frontend/assets/sigma-Do2EOGrK.js +6 -0
  1408. vibe_surf/backend/frontend/assets/signal-D4HUxctG.js +6 -0
  1409. vibe_surf/backend/frontend/assets/signal-high-D4XjnPRT.js +6 -0
  1410. vibe_surf/backend/frontend/assets/signal-low-CbpCiGEn.js +6 -0
  1411. vibe_surf/backend/frontend/assets/signal-medium-DenP3lw7.js +6 -0
  1412. vibe_surf/backend/frontend/assets/signal-zero-CHgcs844.js +6 -0
  1413. vibe_surf/backend/frontend/assets/signature-DK8I0wlU.js +6 -0
  1414. vibe_surf/backend/frontend/assets/signpost-1ES-i9fp.js +6 -0
  1415. vibe_surf/backend/frontend/assets/signpost-big-BSozSaes.js +6 -0
  1416. vibe_surf/backend/frontend/assets/siren-wlABVP_H.js +6 -0
  1417. vibe_surf/backend/frontend/assets/skip-back-Bu_s_NAd.js +6 -0
  1418. vibe_surf/backend/frontend/assets/skip-forward-B_5w_2GT.js +6 -0
  1419. vibe_surf/backend/frontend/assets/skull-BEu1YCxD.js +6 -0
  1420. vibe_surf/backend/frontend/assets/slack-D9649ln8.js +6 -0
  1421. vibe_surf/backend/frontend/assets/slash-DojcavQ9.js +6 -0
  1422. vibe_surf/backend/frontend/assets/slice-CRmKxhnX.js +6 -0
  1423. vibe_surf/backend/frontend/assets/sliders-horizontal-B5g_t8uv.js +6 -0
  1424. vibe_surf/backend/frontend/assets/sliders-vertical-CLBL1buf.js +6 -0
  1425. vibe_surf/backend/frontend/assets/smartphone-D-ep_7qQ.js +6 -0
  1426. vibe_surf/backend/frontend/assets/smartphone-charging-CRPRIfJL.js +6 -0
  1427. vibe_surf/backend/frontend/assets/smartphone-nfc-CmXWPjB7.js +6 -0
  1428. vibe_surf/backend/frontend/assets/smile-C8NQBJ3w.js +6 -0
  1429. vibe_surf/backend/frontend/assets/smile-plus-BXiCkryt.js +6 -0
  1430. vibe_surf/backend/frontend/assets/snail-C4InLnJK.js +6 -0
  1431. vibe_surf/backend/frontend/assets/snowflake-CkOWmqpH.js +6 -0
  1432. vibe_surf/backend/frontend/assets/sofa-C5SFUETc.js +6 -0
  1433. vibe_surf/backend/frontend/assets/soup-BPK9i9Mq.js +6 -0
  1434. vibe_surf/backend/frontend/assets/space-B_AibqtW.js +6 -0
  1435. vibe_surf/backend/frontend/assets/spade-DOYQwKmE.js +6 -0
  1436. vibe_surf/backend/frontend/assets/sparkle-Bgy0TYRq.js +6 -0
  1437. vibe_surf/backend/frontend/assets/sparkles-COXnCZbi.js +6 -0
  1438. vibe_surf/backend/frontend/assets/speaker-CaUol58E.js +6 -0
  1439. vibe_surf/backend/frontend/assets/speech-SU2fqOX1.js +6 -0
  1440. vibe_surf/backend/frontend/assets/spell-check-2-C0X3GG0W.js +6 -0
  1441. vibe_surf/backend/frontend/assets/spell-check-BwnI8rNb.js +6 -0
  1442. vibe_surf/backend/frontend/assets/spline-ByNmiFVd.js +6 -0
  1443. vibe_surf/backend/frontend/assets/spline-pointer-B6jrA3VA.js +6 -0
  1444. vibe_surf/backend/frontend/assets/split-uo1Igb0N.js +6 -0
  1445. vibe_surf/backend/frontend/assets/spray-can-D37CFDNB.js +6 -0
  1446. vibe_surf/backend/frontend/assets/sprout-B25Lx6nK.js +6 -0
  1447. vibe_surf/backend/frontend/assets/square-KfK1ngG3.js +6 -0
  1448. vibe_surf/backend/frontend/assets/square-activity-BGQluYc5.js +6 -0
  1449. vibe_surf/backend/frontend/assets/square-arrow-down-CqlT37VO.js +6 -0
  1450. vibe_surf/backend/frontend/assets/square-arrow-down-left-CR2Go22d.js +6 -0
  1451. vibe_surf/backend/frontend/assets/square-arrow-down-right-rGAHLIaS.js +6 -0
  1452. vibe_surf/backend/frontend/assets/square-arrow-left-CvWu8_9d.js +6 -0
  1453. vibe_surf/backend/frontend/assets/square-arrow-out-down-left-K0v7hlb0.js +6 -0
  1454. vibe_surf/backend/frontend/assets/square-arrow-out-down-right-f74Yq8Hb.js +6 -0
  1455. vibe_surf/backend/frontend/assets/square-arrow-out-up-left-CdBSNScA.js +6 -0
  1456. vibe_surf/backend/frontend/assets/square-arrow-out-up-right-8PNP-37C.js +6 -0
  1457. vibe_surf/backend/frontend/assets/square-arrow-right-DZ3-0COG.js +6 -0
  1458. vibe_surf/backend/frontend/assets/square-arrow-up-CefwAldY.js +6 -0
  1459. vibe_surf/backend/frontend/assets/square-arrow-up-left-Dt6pY6y2.js +6 -0
  1460. vibe_surf/backend/frontend/assets/square-arrow-up-right-C-bPYXZE.js +6 -0
  1461. vibe_surf/backend/frontend/assets/square-asterisk-BIEu0Wq-.js +6 -0
  1462. vibe_surf/backend/frontend/assets/square-bottom-dashed-scissors-DFln2i7A.js +6 -0
  1463. vibe_surf/backend/frontend/assets/square-chart-gantt-VCoGr7j5.js +6 -0
  1464. vibe_surf/backend/frontend/assets/square-check-big-DdTm65g2.js +6 -0
  1465. vibe_surf/backend/frontend/assets/square-check-tJdFPLB4.js +6 -0
  1466. vibe_surf/backend/frontend/assets/square-chevron-down-DV0aFQxC.js +6 -0
  1467. vibe_surf/backend/frontend/assets/square-chevron-left-CdGd5MQB.js +6 -0
  1468. vibe_surf/backend/frontend/assets/square-chevron-right-D_aqBwe_.js +6 -0
  1469. vibe_surf/backend/frontend/assets/square-chevron-up-DBzeLhdp.js +6 -0
  1470. vibe_surf/backend/frontend/assets/square-code-DtSsDKtH.js +6 -0
  1471. vibe_surf/backend/frontend/assets/square-dashed-DSG0Ash0.js +6 -0
  1472. vibe_surf/backend/frontend/assets/square-dashed-bottom-BrkR2d57.js +6 -0
  1473. vibe_surf/backend/frontend/assets/square-dashed-bottom-code-CMTH1TbL.js +6 -0
  1474. vibe_surf/backend/frontend/assets/square-dashed-kanban-961FMGlN.js +6 -0
  1475. vibe_surf/backend/frontend/assets/square-dashed-mouse-pointer-BWcK5KqH.js +6 -0
  1476. vibe_surf/backend/frontend/assets/square-divide-B8EfzsLW.js +6 -0
  1477. vibe_surf/backend/frontend/assets/square-dot-CFXkGNxl.js +6 -0
  1478. vibe_surf/backend/frontend/assets/square-equal-DNzUS5Xu.js +6 -0
  1479. vibe_surf/backend/frontend/assets/square-function-mVVWlGqH.js +6 -0
  1480. vibe_surf/backend/frontend/assets/square-kanban-gbxgvYAs.js +6 -0
  1481. vibe_surf/backend/frontend/assets/square-library-LB-mLfoV.js +6 -0
  1482. vibe_surf/backend/frontend/assets/square-m-DR4vWmvF.js +6 -0
  1483. vibe_surf/backend/frontend/assets/square-menu-wrD_3b1X.js +6 -0
  1484. vibe_surf/backend/frontend/assets/square-minus-C8LvWB0i.js +6 -0
  1485. vibe_surf/backend/frontend/assets/square-mouse-pointer-BWIOG0ej.js +6 -0
  1486. vibe_surf/backend/frontend/assets/square-parking-Cwf1smWS.js +6 -0
  1487. vibe_surf/backend/frontend/assets/square-parking-off-B7fLGIII.js +6 -0
  1488. vibe_surf/backend/frontend/assets/square-pen-D-KRx-pf.js +6 -0
  1489. vibe_surf/backend/frontend/assets/square-percent-DEPHZN1U.js +6 -0
  1490. vibe_surf/backend/frontend/assets/square-pi-D3ZoGA8y.js +6 -0
  1491. vibe_surf/backend/frontend/assets/square-pilcrow-CU7h7mYC.js +6 -0
  1492. vibe_surf/backend/frontend/assets/square-play-BJID6hok.js +6 -0
  1493. vibe_surf/backend/frontend/assets/square-plus-B_MofyMZ.js +6 -0
  1494. vibe_surf/backend/frontend/assets/square-power-CnNfm3SK.js +6 -0
  1495. vibe_surf/backend/frontend/assets/square-radical-Bb91fkyO.js +6 -0
  1496. vibe_surf/backend/frontend/assets/square-round-corner-DSNwBkrZ.js +6 -0
  1497. vibe_surf/backend/frontend/assets/square-scissors-Q-Hew_gd.js +6 -0
  1498. vibe_surf/backend/frontend/assets/square-sigma-Dvqecf-2.js +6 -0
  1499. vibe_surf/backend/frontend/assets/square-slash-TFALqbOX.js +6 -0
  1500. vibe_surf/backend/frontend/assets/square-split-horizontal-CbPy5mPi.js +6 -0
  1501. vibe_surf/backend/frontend/assets/square-split-vertical-CwEHVK6t.js +6 -0
  1502. vibe_surf/backend/frontend/assets/square-square-BgBRe8Sy.js +6 -0
  1503. vibe_surf/backend/frontend/assets/square-stack-CQOObCB-.js +6 -0
  1504. vibe_surf/backend/frontend/assets/square-terminal-DTCYsALs.js +6 -0
  1505. vibe_surf/backend/frontend/assets/square-user-BtoHpGAf.js +6 -0
  1506. vibe_surf/backend/frontend/assets/square-user-round-DYhk3lBR.js +6 -0
  1507. vibe_surf/backend/frontend/assets/square-x-BxVfvmxy.js +6 -0
  1508. vibe_surf/backend/frontend/assets/squares-exclude-xFnGRjrW.js +6 -0
  1509. vibe_surf/backend/frontend/assets/squares-intersect-CJ3onkar.js +6 -0
  1510. vibe_surf/backend/frontend/assets/squares-subtract-DHkmEhbq.js +6 -0
  1511. vibe_surf/backend/frontend/assets/squares-unite-VTPchsN_.js +6 -0
  1512. vibe_surf/backend/frontend/assets/squircle-BeRgB4CX.js +6 -0
  1513. vibe_surf/backend/frontend/assets/squirrel-CXpCofHU.js +6 -0
  1514. vibe_surf/backend/frontend/assets/stamp-CBKYJLk-.js +6 -0
  1515. vibe_surf/backend/frontend/assets/star-g394tQMa.js +6 -0
  1516. vibe_surf/backend/frontend/assets/star-half-DMNuOefd.js +6 -0
  1517. vibe_surf/backend/frontend/assets/star-off-D_I13W97.js +6 -0
  1518. vibe_surf/backend/frontend/assets/step-back-Ba3vvS1b.js +6 -0
  1519. vibe_surf/backend/frontend/assets/step-forward-tf6_dmSk.js +6 -0
  1520. vibe_surf/backend/frontend/assets/stethoscope-kEGj4Hk2.js +6 -0
  1521. vibe_surf/backend/frontend/assets/sticker-BMrXBzQi.js +6 -0
  1522. vibe_surf/backend/frontend/assets/sticky-note-B6_-_Vk7.js +6 -0
  1523. vibe_surf/backend/frontend/assets/store-ClCC8VsS.js +6 -0
  1524. vibe_surf/backend/frontend/assets/stretch-horizontal-Dfdn4d_v.js +6 -0
  1525. vibe_surf/backend/frontend/assets/stretch-vertical-G91F9Wl8.js +6 -0
  1526. vibe_surf/backend/frontend/assets/strikethrough-DQ1eMtzE.js +6 -0
  1527. vibe_surf/backend/frontend/assets/subscript-B1v5cruw.js +6 -0
  1528. vibe_surf/backend/frontend/assets/sun-Drd6gJu4.js +6 -0
  1529. vibe_surf/backend/frontend/assets/sun-dim-CSbGIP11.js +6 -0
  1530. vibe_surf/backend/frontend/assets/sun-medium-Cownz0gJ.js +6 -0
  1531. vibe_surf/backend/frontend/assets/sun-moon-BgCDmhlw.js +6 -0
  1532. vibe_surf/backend/frontend/assets/sun-snow-B0xowfvd.js +6 -0
  1533. vibe_surf/backend/frontend/assets/sunrise-DkTO7zEY.js +6 -0
  1534. vibe_surf/backend/frontend/assets/sunset-DkKYK75e.js +6 -0
  1535. vibe_surf/backend/frontend/assets/superscript-CBfgJuGP.js +6 -0
  1536. vibe_surf/backend/frontend/assets/swatch-book-DrsAphD2.js +6 -0
  1537. vibe_surf/backend/frontend/assets/swiss-franc-DAYyAzPc.js +6 -0
  1538. vibe_surf/backend/frontend/assets/switch-camera-C7hTq-mz.js +6 -0
  1539. vibe_surf/backend/frontend/assets/sword-BDecpboX.js +6 -0
  1540. vibe_surf/backend/frontend/assets/swords-BjWa4kCQ.js +6 -0
  1541. vibe_surf/backend/frontend/assets/syringe-ClPPE8yd.js +6 -0
  1542. vibe_surf/backend/frontend/assets/table-2-DIGnaXY7.js +6 -0
  1543. vibe_surf/backend/frontend/assets/table-CHxmnA-B.js +6 -0
  1544. vibe_surf/backend/frontend/assets/table-cells-merge-D1zNRVrG.js +6 -0
  1545. vibe_surf/backend/frontend/assets/table-cells-split-CdEYW1Su.js +6 -0
  1546. vibe_surf/backend/frontend/assets/table-columns-split-JoiaUKz3.js +6 -0
  1547. vibe_surf/backend/frontend/assets/table-of-contents-BSpkdcFt.js +6 -0
  1548. vibe_surf/backend/frontend/assets/table-properties-CmoYqW5E.js +6 -0
  1549. vibe_surf/backend/frontend/assets/table-rows-split-B-06ZKqE.js +6 -0
  1550. vibe_surf/backend/frontend/assets/tablet-YvP4PBQR.js +6 -0
  1551. vibe_surf/backend/frontend/assets/tablet-smartphone-BG7aS4OL.js +6 -0
  1552. vibe_surf/backend/frontend/assets/tablets-BVvSHnaS.js +6 -0
  1553. vibe_surf/backend/frontend/assets/tag-Bs9C2NWs.js +6 -0
  1554. vibe_surf/backend/frontend/assets/tags-DEvGZIIh.js +6 -0
  1555. vibe_surf/backend/frontend/assets/tally-1-BjNjbWUj.js +6 -0
  1556. vibe_surf/backend/frontend/assets/tally-2-Bd0nQcFC.js +6 -0
  1557. vibe_surf/backend/frontend/assets/tally-3-DHrPKvJg.js +6 -0
  1558. vibe_surf/backend/frontend/assets/tally-4-DAUwA2aR.js +6 -0
  1559. vibe_surf/backend/frontend/assets/tally-5-CgAN8Y91.js +6 -0
  1560. vibe_surf/backend/frontend/assets/tangent-CRznV78Q.js +6 -0
  1561. vibe_surf/backend/frontend/assets/target-Bj2MJlO6.js +6 -0
  1562. vibe_surf/backend/frontend/assets/telescope-CyRzgTg4.js +6 -0
  1563. vibe_surf/backend/frontend/assets/temp-pat-1-BDqu2wpz.png +0 -0
  1564. vibe_surf/backend/frontend/assets/temp-pat-2-C_RVvOE_.png +0 -0
  1565. vibe_surf/backend/frontend/assets/temp-pat-3-Ci-rp5-q.png +0 -0
  1566. vibe_surf/backend/frontend/assets/temp-pat-m-1-D-qJT-j4.png +0 -0
  1567. vibe_surf/backend/frontend/assets/temp-pat-m-2-BFhrICvh.png +0 -0
  1568. vibe_surf/backend/frontend/assets/temp-pat-m-3-BJIIbDxb.png +0 -0
  1569. vibe_surf/backend/frontend/assets/tent-D1boPMJ_.js +6 -0
  1570. vibe_surf/backend/frontend/assets/tent-tree-DlMlV5UT.js +6 -0
  1571. vibe_surf/backend/frontend/assets/terminal-ByKLrVXr.js +6 -0
  1572. vibe_surf/backend/frontend/assets/test-tube-DjNpqEvy.js +6 -0
  1573. vibe_surf/backend/frontend/assets/test-tube-diagonal-kvKWvVpD.js +6 -0
  1574. vibe_surf/backend/frontend/assets/test-tubes-BUVuvPYq.js +6 -0
  1575. vibe_surf/backend/frontend/assets/text-BaPUPrRB.js +6 -0
  1576. vibe_surf/backend/frontend/assets/text-cursor-DjiJAhIO.js +6 -0
  1577. vibe_surf/backend/frontend/assets/text-cursor-input-DmFbkVcG.js +6 -0
  1578. vibe_surf/backend/frontend/assets/text-quote-DbZhBhba.js +6 -0
  1579. vibe_surf/backend/frontend/assets/text-search-D81mgubi.js +6 -0
  1580. vibe_surf/backend/frontend/assets/text-select-BCYAwryE.js +6 -0
  1581. vibe_surf/backend/frontend/assets/theater-BF8yCQZ3.js +6 -0
  1582. vibe_surf/backend/frontend/assets/thermometer-Dz0qc69z.js +6 -0
  1583. vibe_surf/backend/frontend/assets/thermometer-snowflake-BZ8Fol5x.js +6 -0
  1584. vibe_surf/backend/frontend/assets/thermometer-sun-DgmdNSSx.js +6 -0
  1585. vibe_surf/backend/frontend/assets/thumbs-down-6gCm1bFP.js +6 -0
  1586. vibe_surf/backend/frontend/assets/thumbs-up-BpkAnOkj.js +6 -0
  1587. vibe_surf/backend/frontend/assets/ticket-CZ6VZCic.js +6 -0
  1588. vibe_surf/backend/frontend/assets/ticket-check-CwERJSTS.js +6 -0
  1589. vibe_surf/backend/frontend/assets/ticket-minus-CJ8o42r1.js +6 -0
  1590. vibe_surf/backend/frontend/assets/ticket-percent-D9mgrzai.js +6 -0
  1591. vibe_surf/backend/frontend/assets/ticket-plus-Bf_MplVa.js +6 -0
  1592. vibe_surf/backend/frontend/assets/ticket-slash-CNukz3dP.js +6 -0
  1593. vibe_surf/backend/frontend/assets/ticket-x-DAGtm4Nf.js +6 -0
  1594. vibe_surf/backend/frontend/assets/tickets-Dlm-Pd3N.js +6 -0
  1595. vibe_surf/backend/frontend/assets/tickets-plane-C4lmqLQq.js +6 -0
  1596. vibe_surf/backend/frontend/assets/timer-0lTpmgXp.js +6 -0
  1597. vibe_surf/backend/frontend/assets/timer-off-BGqRyv1S.js +6 -0
  1598. vibe_surf/backend/frontend/assets/timer-reset-DdhKPXcy.js +6 -0
  1599. vibe_surf/backend/frontend/assets/toggle-left-De2ASTKW.js +6 -0
  1600. vibe_surf/backend/frontend/assets/toggle-right-NfpJqTaq.js +6 -0
  1601. vibe_surf/backend/frontend/assets/toilet-DcJuMKzv.js +6 -0
  1602. vibe_surf/backend/frontend/assets/tornado-BannseS-.js +6 -0
  1603. vibe_surf/backend/frontend/assets/torus-CxsKBH8D.js +6 -0
  1604. vibe_surf/backend/frontend/assets/touchpad-ENZl5mwQ.js +6 -0
  1605. vibe_surf/backend/frontend/assets/touchpad-off-Bs9XazIZ.js +6 -0
  1606. vibe_surf/backend/frontend/assets/tower-control-DOH63Gyd.js +6 -0
  1607. vibe_surf/backend/frontend/assets/toy-brick-CK9szegV.js +6 -0
  1608. vibe_surf/backend/frontend/assets/tractor-C4edkneR.js +6 -0
  1609. vibe_surf/backend/frontend/assets/traffic-cone-B7xJNOdC.js +6 -0
  1610. vibe_surf/backend/frontend/assets/train-front-DPkfW4fH.js +6 -0
  1611. vibe_surf/backend/frontend/assets/train-front-tunnel-Dc6i8ZmW.js +6 -0
  1612. vibe_surf/backend/frontend/assets/train-track-DFRUcPF4.js +6 -0
  1613. vibe_surf/backend/frontend/assets/tram-front-DnSEWr26.js +6 -0
  1614. vibe_surf/backend/frontend/assets/transgender-CwbUC-T0.js +6 -0
  1615. vibe_surf/backend/frontend/assets/trash-DSMPsj08.js +6 -0
  1616. vibe_surf/backend/frontend/assets/tree-deciduous-CMyD2rgs.js +6 -0
  1617. vibe_surf/backend/frontend/assets/tree-palm-ClbWCueR.js +6 -0
  1618. vibe_surf/backend/frontend/assets/tree-pine-CxCMH7RZ.js +6 -0
  1619. vibe_surf/backend/frontend/assets/trees-DeERVvec.js +6 -0
  1620. vibe_surf/backend/frontend/assets/trello-DwQeyG2C.js +6 -0
  1621. vibe_surf/backend/frontend/assets/trending-down-CuQxq0A3.js +6 -0
  1622. vibe_surf/backend/frontend/assets/trending-up-BDSGIJWY.js +6 -0
  1623. vibe_surf/backend/frontend/assets/trending-up-down-CSb_7X-_.js +6 -0
  1624. vibe_surf/backend/frontend/assets/triangle-Cc8gzj2X.js +6 -0
  1625. vibe_surf/backend/frontend/assets/triangle-alert-CzfSlrIp.js +6 -0
  1626. vibe_surf/backend/frontend/assets/triangle-dashed-CSlIdQSl.js +6 -0
  1627. vibe_surf/backend/frontend/assets/triangle-right-BIlbKFDC.js +6 -0
  1628. vibe_surf/backend/frontend/assets/trophy-CIFZUGnX.js +6 -0
  1629. vibe_surf/backend/frontend/assets/truck-Id_mHUOq.js +6 -0
  1630. vibe_surf/backend/frontend/assets/truck-electric-WgMKZnOH.js +6 -0
  1631. vibe_surf/backend/frontend/assets/turtle-0ek05Orw.js +6 -0
  1632. vibe_surf/backend/frontend/assets/tv-DLVWDmzW.js +6 -0
  1633. vibe_surf/backend/frontend/assets/tv-minimal-E0w-pb-R.js +6 -0
  1634. vibe_surf/backend/frontend/assets/tv-minimal-play-C8eivgTI.js +6 -0
  1635. vibe_surf/backend/frontend/assets/twitch-D6updjnG.js +6 -0
  1636. vibe_surf/backend/frontend/assets/twitter-Der_Ih7y.js +6 -0
  1637. vibe_surf/backend/frontend/assets/type-BZeEwGKH.js +6 -0
  1638. vibe_surf/backend/frontend/assets/type-outline-WvuVShMD.js +6 -0
  1639. vibe_surf/backend/frontend/assets/umbrella-BFiE5bFk.js +6 -0
  1640. vibe_surf/backend/frontend/assets/umbrella-off-CQKtt_HS.js +6 -0
  1641. vibe_surf/backend/frontend/assets/underline-eH-gfEgl.js +6 -0
  1642. vibe_surf/backend/frontend/assets/undo-2-CGpVoxxS.js +6 -0
  1643. vibe_surf/backend/frontend/assets/undo-BAkkNYmN.js +6 -0
  1644. vibe_surf/backend/frontend/assets/undo-dot-fxz9ZoUf.js +6 -0
  1645. vibe_surf/backend/frontend/assets/unfold-horizontal-Bz6GASed.js +6 -0
  1646. vibe_surf/backend/frontend/assets/unfold-vertical-DVuawiHD.js +6 -0
  1647. vibe_surf/backend/frontend/assets/ungroup-DZlCBfu8.js +6 -0
  1648. vibe_surf/backend/frontend/assets/university-DQQJPlHM.js +6 -0
  1649. vibe_surf/backend/frontend/assets/unlink-2-Bbf62oJC.js +6 -0
  1650. vibe_surf/backend/frontend/assets/unlink-rRnEYNBH.js +6 -0
  1651. vibe_surf/backend/frontend/assets/unplug-BE6bAKlE.js +6 -0
  1652. vibe_surf/backend/frontend/assets/upload-DgbNBlk6.js +6 -0
  1653. vibe_surf/backend/frontend/assets/usb-BsbOhQkP.js +6 -0
  1654. vibe_surf/backend/frontend/assets/use-post-add-user-s3pEdarP.js +1 -0
  1655. vibe_surf/backend/frontend/assets/user-C7_N9vjw.js +6 -0
  1656. vibe_surf/backend/frontend/assets/user-check-D85AcwGt.js +6 -0
  1657. vibe_surf/backend/frontend/assets/user-cog-BUSZoKWO.js +6 -0
  1658. vibe_surf/backend/frontend/assets/user-lock-DrG5znDk.js +6 -0
  1659. vibe_surf/backend/frontend/assets/user-minus-CjVZSxhC.js +6 -0
  1660. vibe_surf/backend/frontend/assets/user-pen-BllWYNRg.js +6 -0
  1661. vibe_surf/backend/frontend/assets/user-plus-Ct840ALN.js +6 -0
  1662. vibe_surf/backend/frontend/assets/user-round-D6DnOG0E.js +6 -0
  1663. vibe_surf/backend/frontend/assets/user-round-check-Ci15Wbid.js +6 -0
  1664. vibe_surf/backend/frontend/assets/user-round-cog-SrRmnnrG.js +6 -0
  1665. vibe_surf/backend/frontend/assets/user-round-minus-CZKo0fkN.js +6 -0
  1666. vibe_surf/backend/frontend/assets/user-round-pen-DQ88K1gY.js +6 -0
  1667. vibe_surf/backend/frontend/assets/user-round-plus-BtBHwnQH.js +6 -0
  1668. vibe_surf/backend/frontend/assets/user-round-search-mZx8k3ks.js +6 -0
  1669. vibe_surf/backend/frontend/assets/user-round-x-4MvMTCpy.js +6 -0
  1670. vibe_surf/backend/frontend/assets/user-search-CkEhATdm.js +6 -0
  1671. vibe_surf/backend/frontend/assets/user-x-DufZCLiX.js +6 -0
  1672. vibe_surf/backend/frontend/assets/users-DgOAHdb7.js +6 -0
  1673. vibe_surf/backend/frontend/assets/users-round-Bj4Zqvjj.js +6 -0
  1674. vibe_surf/backend/frontend/assets/utensils-CcfYVeqi.js +6 -0
  1675. vibe_surf/backend/frontend/assets/utensils-crossed-Daq7-gMB.js +6 -0
  1676. vibe_surf/backend/frontend/assets/utility-pole-BRYxk_9o.js +6 -0
  1677. vibe_surf/backend/frontend/assets/vanilla-picker-B6E6ObS_.js +8 -0
  1678. vibe_surf/backend/frontend/assets/variable-CQb_DxMu.js +6 -0
  1679. vibe_surf/backend/frontend/assets/vault-D7etPPcB.js +6 -0
  1680. vibe_surf/backend/frontend/assets/vegan-DhjhKnZM.js +6 -0
  1681. vibe_surf/backend/frontend/assets/venetian-mask-DGDNvUAT.js +6 -0
  1682. vibe_surf/backend/frontend/assets/venus-and-mars-BEW94wvT.js +6 -0
  1683. vibe_surf/backend/frontend/assets/venus-u9B-gdcz.js +6 -0
  1684. vibe_surf/backend/frontend/assets/vibrate-off-GMm1P59r.js +6 -0
  1685. vibe_surf/backend/frontend/assets/vibrate-ztsKQUo9.js +6 -0
  1686. vibe_surf/backend/frontend/assets/video-BRU-KCdj.js +6 -0
  1687. vibe_surf/backend/frontend/assets/video-off-UBhDkXSa.js +6 -0
  1688. vibe_surf/backend/frontend/assets/videotape-BnpqC2PU.js +6 -0
  1689. vibe_surf/backend/frontend/assets/view-SPlXqa2E.js +6 -0
  1690. vibe_surf/backend/frontend/assets/voicemail-CslFUibB.js +6 -0
  1691. vibe_surf/backend/frontend/assets/volleyball-YmSfEYj0.js +6 -0
  1692. vibe_surf/backend/frontend/assets/volume-1-DzSvYJXy.js +6 -0
  1693. vibe_surf/backend/frontend/assets/volume-2-CKYHuo73.js +6 -0
  1694. vibe_surf/backend/frontend/assets/volume-D2WpTg4b.js +6 -0
  1695. vibe_surf/backend/frontend/assets/volume-off-CXmQvaUO.js +6 -0
  1696. vibe_surf/backend/frontend/assets/volume-x-Dl4xNI1D.js +6 -0
  1697. vibe_surf/backend/frontend/assets/vote-DVUnQCxF.js +6 -0
  1698. vibe_surf/backend/frontend/assets/wallet-D9F1dFbt.js +6 -0
  1699. vibe_surf/backend/frontend/assets/wallet-cards-DkIuM2Gu.js +6 -0
  1700. vibe_surf/backend/frontend/assets/wallet-minimal-CUUsXAfP.js +6 -0
  1701. vibe_surf/backend/frontend/assets/wallpaper-BHliG6AQ.js +6 -0
  1702. vibe_surf/backend/frontend/assets/wand-sparkles-BA8i-2_I.js +6 -0
  1703. vibe_surf/backend/frontend/assets/wand-u2EI2dL2.js +6 -0
  1704. vibe_surf/backend/frontend/assets/warehouse-CxDEgPyp.js +6 -0
  1705. vibe_surf/backend/frontend/assets/washing-machine-CYoqAbT7.js +6 -0
  1706. vibe_surf/backend/frontend/assets/watch-eNq5oUsh.js +6 -0
  1707. vibe_surf/backend/frontend/assets/waves-Bs6o5G71.js +6 -0
  1708. vibe_surf/backend/frontend/assets/waves-ladder-0t2iIHt8.js +6 -0
  1709. vibe_surf/backend/frontend/assets/waypoints-DyScJk3j.js +6 -0
  1710. vibe_surf/backend/frontend/assets/webcam-BFZUWYUw.js +6 -0
  1711. vibe_surf/backend/frontend/assets/webhook-CMDaI4yk.js +6 -0
  1712. vibe_surf/backend/frontend/assets/webhook-off-DQzE1oMX.js +6 -0
  1713. vibe_surf/backend/frontend/assets/weight-g0EeSmAx.js +6 -0
  1714. vibe_surf/backend/frontend/assets/wheat-hvVtAPlc.js +6 -0
  1715. vibe_surf/backend/frontend/assets/wheat-off-6d_oRYIW.js +6 -0
  1716. vibe_surf/backend/frontend/assets/whole-word-CMHbYgQ-.js +6 -0
  1717. vibe_surf/backend/frontend/assets/wifi-CRHAo2Lb.js +6 -0
  1718. vibe_surf/backend/frontend/assets/wifi-high-BTElqamm.js +6 -0
  1719. vibe_surf/backend/frontend/assets/wifi-low-BFBJvE2C.js +6 -0
  1720. vibe_surf/backend/frontend/assets/wifi-off-DL1S7f79.js +6 -0
  1721. vibe_surf/backend/frontend/assets/wifi-pen-FkLT18-y.js +6 -0
  1722. vibe_surf/backend/frontend/assets/wifi-zero-koQAfMYN.js +6 -0
  1723. vibe_surf/backend/frontend/assets/wind-CgQDM8yC.js +6 -0
  1724. vibe_surf/backend/frontend/assets/wind-arrow-down-ByQJVZNf.js +6 -0
  1725. vibe_surf/backend/frontend/assets/wine-kngKIYWK.js +6 -0
  1726. vibe_surf/backend/frontend/assets/wine-off-DaVVtkyG.js +6 -0
  1727. vibe_surf/backend/frontend/assets/workflow-BBHA5vqf.js +6 -0
  1728. vibe_surf/backend/frontend/assets/worm-D8rJAL-s.js +6 -0
  1729. vibe_surf/backend/frontend/assets/wrap-text-s4fkGxHY.js +6 -0
  1730. vibe_surf/backend/frontend/assets/wrench-CYzg6B-q.js +6 -0
  1731. vibe_surf/backend/frontend/assets/youtube-BIzMVpJA.js +6 -0
  1732. vibe_surf/backend/frontend/assets/zap-nyAdqt4o.js +6 -0
  1733. vibe_surf/backend/frontend/assets/zap-off-Aii1CEgj.js +6 -0
  1734. vibe_surf/backend/frontend/assets/zoom-in-BNWeSenu.js +6 -0
  1735. vibe_surf/backend/frontend/assets/zoom-out-Bd2vIq2c.js +6 -0
  1736. vibe_surf/backend/frontend/favicon.ico +0 -0
  1737. vibe_surf/backend/frontend/index.html +24 -0
  1738. vibe_surf/backend/frontend/manifest.json +31 -0
  1739. vibe_surf/backend/llm_config.py +43 -0
  1740. vibe_surf/backend/main.py +707 -132
  1741. vibe_surf/backend/shared_state.py +482 -26
  1742. vibe_surf/backend/utils/encryption.py +40 -4
  1743. vibe_surf/backend/utils/llm_factory.py +24 -0
  1744. vibe_surf/backend/utils/utils.py +42 -0
  1745. vibe_surf/browser/agen_browser_profile.py +5 -0
  1746. vibe_surf/browser/agent_browser_session.py +219 -113
  1747. vibe_surf/browser/browser_manager.py +5 -4
  1748. vibe_surf/browser/find_page_element.py +1100 -0
  1749. vibe_surf/browser/page_operations.py +222 -0
  1750. vibe_surf/browser/watchdogs/action_watchdog.py +1 -83
  1751. vibe_surf/browser/watchdogs/dom_watchdog.py +17 -5
  1752. vibe_surf/chrome_extension/background.js +15 -5
  1753. vibe_surf/chrome_extension/config.js +10 -1
  1754. vibe_surf/chrome_extension/manifest.json +23 -8
  1755. vibe_surf/chrome_extension/scripts/api-client.js +166 -11
  1756. vibe_surf/chrome_extension/scripts/settings-general.js +513 -0
  1757. vibe_surf/chrome_extension/scripts/settings-integrations.js +998 -0
  1758. vibe_surf/chrome_extension/scripts/settings-manager.js +72 -1730
  1759. vibe_surf/chrome_extension/scripts/settings-profiles.js +1330 -0
  1760. vibe_surf/chrome_extension/scripts/settings-workflow.js +2911 -0
  1761. vibe_surf/chrome_extension/scripts/ui-manager.js +777 -506
  1762. vibe_surf/chrome_extension/scripts/version.js +3 -0
  1763. vibe_surf/chrome_extension/sidepanel.html +698 -17
  1764. vibe_surf/chrome_extension/styles/components.css +146 -0
  1765. vibe_surf/chrome_extension/styles/layout.css +2 -0
  1766. vibe_surf/chrome_extension/styles/settings-integrations.css +945 -0
  1767. vibe_surf/chrome_extension/styles/settings-modal.css +7 -3
  1768. vibe_surf/chrome_extension/styles/settings-responsive.css +37 -5
  1769. vibe_surf/chrome_extension/styles/settings-workflow.css +2347 -0
  1770. vibe_surf/cli.py +153 -10
  1771. vibe_surf/langflow/__init__.py +0 -0
  1772. vibe_surf/langflow/__main__.py +954 -0
  1773. vibe_surf/langflow/alembic/README +1 -0
  1774. vibe_surf/langflow/alembic/env.py +124 -0
  1775. vibe_surf/langflow/alembic/script.py.mako +31 -0
  1776. vibe_surf/langflow/alembic/versions/006b3990db50_add_unique_constraints.py +66 -0
  1777. vibe_surf/langflow/alembic/versions/012fb73ac359_add_folder_table.py +82 -0
  1778. vibe_surf/langflow/alembic/versions/0882f9657f22_encrypt_existing_mcp_auth_settings_.py +122 -0
  1779. vibe_surf/langflow/alembic/versions/0ae3a2674f32_update_the_columns_that_need_to_change_.py +71 -0
  1780. vibe_surf/langflow/alembic/versions/0b8757876a7c_.py +32 -0
  1781. vibe_surf/langflow/alembic/versions/0d60fcbd4e8e_create_vertex_builds_table.py +51 -0
  1782. vibe_surf/langflow/alembic/versions/1a110b568907_replace_credential_table_with_variable.py +66 -0
  1783. vibe_surf/langflow/alembic/versions/1b8b740a6fa3_remove_fk_constraint_in_message_.py +337 -0
  1784. vibe_surf/langflow/alembic/versions/1c79524817ed_add_unique_constraints_per_user_in_.py +43 -0
  1785. vibe_surf/langflow/alembic/versions/1cb603706752_modify_uniqueness_constraint_on_file_.py +279 -0
  1786. vibe_surf/langflow/alembic/versions/1d90f8a0efe1_update_description_columns_type.py +71 -0
  1787. vibe_surf/langflow/alembic/versions/1eab2c3eb45e_event_error.py +53 -0
  1788. vibe_surf/langflow/alembic/versions/1ef9c4f3765d_.py +54 -0
  1789. vibe_surf/langflow/alembic/versions/1f4d6df60295_add_default_fields_column.py +43 -0
  1790. vibe_surf/langflow/alembic/versions/260dbcc8b680_adds_tables.py +151 -0
  1791. vibe_surf/langflow/alembic/versions/29fe8f1f806b_add_missing_index.py +44 -0
  1792. vibe_surf/langflow/alembic/versions/2ac71eb9c3ae_adds_credential_table.py +55 -0
  1793. vibe_surf/langflow/alembic/versions/3162e83e485f_add_auth_settings_to_folder_and_merge.py +58 -0
  1794. vibe_surf/langflow/alembic/versions/3bb0ddf32dfb_add_unique_constraints_per_user_in_flow_.py +55 -0
  1795. vibe_surf/langflow/alembic/versions/4e5980a44eaa_fix_date_times_again.py +124 -0
  1796. vibe_surf/langflow/alembic/versions/58b28437a398_modify_nullable.py +66 -0
  1797. vibe_surf/langflow/alembic/versions/5ace73a7f223_new_remove_table_upgrade_op.py +39 -0
  1798. vibe_surf/langflow/alembic/versions/631faacf5da2_add_webhook_columns.py +45 -0
  1799. vibe_surf/langflow/alembic/versions/63b9c451fd30_add_icon_and_icon_bg_color_to_flow.py +50 -0
  1800. vibe_surf/langflow/alembic/versions/66f72f04a1de_add_mcp_support_with_project_settings_.py +54 -0
  1801. vibe_surf/langflow/alembic/versions/67cc006d50bf_add_profile_image_column.py +57 -0
  1802. vibe_surf/langflow/alembic/versions/6e7b581b5648_fix_nullable.py +59 -0
  1803. vibe_surf/langflow/alembic/versions/7843803a87b5_store_updates.py +55 -0
  1804. vibe_surf/langflow/alembic/versions/79e675cb6752_change_datetime_type.py +124 -0
  1805. vibe_surf/langflow/alembic/versions/7d2162acc8b2_adds_updated_at_and_folder_cols.py +74 -0
  1806. vibe_surf/langflow/alembic/versions/90be8e2ed91e_create_transactions_table.py +51 -0
  1807. vibe_surf/langflow/alembic/versions/93e2705fa8d6_add_column_save_path_to_flow.py +43 -0
  1808. vibe_surf/langflow/alembic/versions/a72f5cf9c2f9_add_endpoint_name_col.py +52 -0
  1809. vibe_surf/langflow/alembic/versions/b2fa308044b5_add_unique_constraints.py +101 -0
  1810. vibe_surf/langflow/alembic/versions/bc2f01c40e4a_new_fixes.py +73 -0
  1811. vibe_surf/langflow/alembic/versions/c153816fd85f_set_name_and_value_to_not_nullable.py +52 -0
  1812. vibe_surf/langflow/alembic/versions/d066bfd22890_add_message_table.py +52 -0
  1813. vibe_surf/langflow/alembic/versions/d2d475a1f7c0_add_tags_column_to_flow.py +41 -0
  1814. vibe_surf/langflow/alembic/versions/d37bc4322900_drop_single_constraint_on_files_name_.py +169 -0
  1815. vibe_surf/langflow/alembic/versions/d3dbf656a499_add_gradient_column_in_flow.py +41 -0
  1816. vibe_surf/langflow/alembic/versions/d9a6ea21edcd_rename_default_folder.py +75 -0
  1817. vibe_surf/langflow/alembic/versions/dd9e0804ebd1_add_v2_file_table.py +49 -0
  1818. vibe_surf/langflow/alembic/versions/e3162c1804e6_add_persistent_locked_state.py +43 -0
  1819. vibe_surf/langflow/alembic/versions/e3bc869fa272_fix_nullable.py +68 -0
  1820. vibe_surf/langflow/alembic/versions/e56d87f8994a_add_optins_column_to_user.py +38 -0
  1821. vibe_surf/langflow/alembic/versions/e5a65ecff2cd_nullable_in_vertex_build.py +49 -0
  1822. vibe_surf/langflow/alembic/versions/eb5866d51fd2_change_columns_to_be_nullable.py +31 -0
  1823. vibe_surf/langflow/alembic/versions/eb5e72293a8e_add_error_and_edit_flags_to_message.py +49 -0
  1824. vibe_surf/langflow/alembic/versions/f3b2d1f1002d_add_column_access_type_to_flow.py +37 -0
  1825. vibe_surf/langflow/alembic/versions/f5ee9749d1a6_user_id_can_be_null_in_flow.py +42 -0
  1826. vibe_surf/langflow/alembic/versions/fd531f8868b1_fix_credential_table.py +60 -0
  1827. vibe_surf/langflow/alembic.ini +113 -0
  1828. vibe_surf/langflow/api/__init__.py +5 -0
  1829. vibe_surf/langflow/api/build.py +557 -0
  1830. vibe_surf/langflow/api/disconnect.py +31 -0
  1831. vibe_surf/langflow/api/health_check_router.py +65 -0
  1832. vibe_surf/langflow/api/limited_background_tasks.py +29 -0
  1833. vibe_surf/langflow/api/log_router.py +103 -0
  1834. vibe_surf/langflow/api/router.py +63 -0
  1835. vibe_surf/langflow/api/schemas.py +14 -0
  1836. vibe_surf/langflow/api/utils.py +381 -0
  1837. vibe_surf/langflow/api/v1/__init__.py +41 -0
  1838. vibe_surf/langflow/api/v1/api_key.py +88 -0
  1839. vibe_surf/langflow/api/v1/auth_helpers.py +75 -0
  1840. vibe_surf/langflow/api/v1/base.py +50 -0
  1841. vibe_surf/langflow/api/v1/callback.py +136 -0
  1842. vibe_surf/langflow/api/v1/chat.py +675 -0
  1843. vibe_surf/langflow/api/v1/endpoints.py +800 -0
  1844. vibe_surf/langflow/api/v1/files.py +193 -0
  1845. vibe_surf/langflow/api/v1/flows.py +579 -0
  1846. vibe_surf/langflow/api/v1/folders.py +95 -0
  1847. vibe_surf/langflow/api/v1/knowledge_bases.py +452 -0
  1848. vibe_surf/langflow/api/v1/login.py +166 -0
  1849. vibe_surf/langflow/api/v1/mcp.py +137 -0
  1850. vibe_surf/langflow/api/v1/mcp_projects.py +1230 -0
  1851. vibe_surf/langflow/api/v1/mcp_utils.py +348 -0
  1852. vibe_surf/langflow/api/v1/monitor.py +203 -0
  1853. vibe_surf/langflow/api/v1/openai_responses.py +561 -0
  1854. vibe_surf/langflow/api/v1/projects.py +447 -0
  1855. vibe_surf/langflow/api/v1/schemas.py +488 -0
  1856. vibe_surf/langflow/api/v1/starter_projects.py +17 -0
  1857. vibe_surf/langflow/api/v1/store.py +182 -0
  1858. vibe_surf/langflow/api/v1/users.py +146 -0
  1859. vibe_surf/langflow/api/v1/validate.py +48 -0
  1860. vibe_surf/langflow/api/v1/variable.py +106 -0
  1861. vibe_surf/langflow/api/v1/voice_mode.py +1375 -0
  1862. vibe_surf/langflow/api/v2/__init__.py +7 -0
  1863. vibe_surf/langflow/api/v2/files.py +532 -0
  1864. vibe_surf/langflow/api/v2/mcp.py +330 -0
  1865. vibe_surf/langflow/base/__init__.py +0 -0
  1866. vibe_surf/langflow/base/agents/__init__.py +0 -0
  1867. vibe_surf/langflow/base/agents/agent.py +267 -0
  1868. vibe_surf/langflow/base/agents/callback.py +130 -0
  1869. vibe_surf/langflow/base/agents/context.py +109 -0
  1870. vibe_surf/langflow/base/agents/crewai/__init__.py +0 -0
  1871. vibe_surf/langflow/base/agents/crewai/crew.py +231 -0
  1872. vibe_surf/langflow/base/agents/crewai/tasks.py +12 -0
  1873. vibe_surf/langflow/base/agents/default_prompts.py +23 -0
  1874. vibe_surf/langflow/base/agents/errors.py +15 -0
  1875. vibe_surf/langflow/base/agents/events.py +346 -0
  1876. vibe_surf/langflow/base/agents/utils.py +205 -0
  1877. vibe_surf/langflow/base/astra_assistants/__init__.py +0 -0
  1878. vibe_surf/langflow/base/astra_assistants/util.py +171 -0
  1879. vibe_surf/langflow/base/chains/__init__.py +0 -0
  1880. vibe_surf/langflow/base/chains/model.py +19 -0
  1881. vibe_surf/langflow/base/composio/__init__.py +0 -0
  1882. vibe_surf/langflow/base/composio/composio_base.py +1301 -0
  1883. vibe_surf/langflow/base/compressors/__init__.py +0 -0
  1884. vibe_surf/langflow/base/compressors/model.py +60 -0
  1885. vibe_surf/langflow/base/constants.py +46 -0
  1886. vibe_surf/langflow/base/curl/__init__.py +0 -0
  1887. vibe_surf/langflow/base/curl/parse.py +188 -0
  1888. vibe_surf/langflow/base/data/__init__.py +5 -0
  1889. vibe_surf/langflow/base/data/base_file.py +698 -0
  1890. vibe_surf/langflow/base/data/docling_utils.py +280 -0
  1891. vibe_surf/langflow/base/data/utils.py +198 -0
  1892. vibe_surf/langflow/base/document_transformers/__init__.py +0 -0
  1893. vibe_surf/langflow/base/document_transformers/model.py +43 -0
  1894. vibe_surf/langflow/base/embeddings/__init__.py +0 -0
  1895. vibe_surf/langflow/base/embeddings/aiml_embeddings.py +62 -0
  1896. vibe_surf/langflow/base/embeddings/model.py +26 -0
  1897. vibe_surf/langflow/base/flow_processing/__init__.py +0 -0
  1898. vibe_surf/langflow/base/flow_processing/utils.py +86 -0
  1899. vibe_surf/langflow/base/huggingface/__init__.py +0 -0
  1900. vibe_surf/langflow/base/huggingface/model_bridge.py +133 -0
  1901. vibe_surf/langflow/base/io/__init__.py +0 -0
  1902. vibe_surf/langflow/base/io/chat.py +20 -0
  1903. vibe_surf/langflow/base/io/text.py +22 -0
  1904. vibe_surf/langflow/base/knowledge_bases/__init__.py +0 -0
  1905. vibe_surf/langflow/base/knowledge_bases/knowledge_base_utils.py +137 -0
  1906. vibe_surf/langflow/base/langchain_utilities/__init__.py +0 -0
  1907. vibe_surf/langflow/base/langchain_utilities/model.py +35 -0
  1908. vibe_surf/langflow/base/langchain_utilities/spider_constants.py +1 -0
  1909. vibe_surf/langflow/base/langwatch/__init__.py +0 -0
  1910. vibe_surf/langflow/base/langwatch/utils.py +18 -0
  1911. vibe_surf/langflow/base/mcp/__init__.py +0 -0
  1912. vibe_surf/langflow/base/mcp/constants.py +2 -0
  1913. vibe_surf/langflow/base/mcp/util.py +1544 -0
  1914. vibe_surf/langflow/base/memory/__init__.py +0 -0
  1915. vibe_surf/langflow/base/memory/memory.py +49 -0
  1916. vibe_surf/langflow/base/memory/model.py +38 -0
  1917. vibe_surf/langflow/base/models/__init__.py +3 -0
  1918. vibe_surf/langflow/base/models/aiml_constants.py +51 -0
  1919. vibe_surf/langflow/base/models/anthropic_constants.py +49 -0
  1920. vibe_surf/langflow/base/models/aws_constants.py +151 -0
  1921. vibe_surf/langflow/base/models/chat_result.py +76 -0
  1922. vibe_surf/langflow/base/models/google_generative_ai_constants.py +70 -0
  1923. vibe_surf/langflow/base/models/groq_constants.py +134 -0
  1924. vibe_surf/langflow/base/models/model.py +375 -0
  1925. vibe_surf/langflow/base/models/model_input_constants.py +299 -0
  1926. vibe_surf/langflow/base/models/model_metadata.py +41 -0
  1927. vibe_surf/langflow/base/models/model_utils.py +8 -0
  1928. vibe_surf/langflow/base/models/novita_constants.py +35 -0
  1929. vibe_surf/langflow/base/models/ollama_constants.py +49 -0
  1930. vibe_surf/langflow/base/models/openai_constants.py +121 -0
  1931. vibe_surf/langflow/base/models/sambanova_constants.py +18 -0
  1932. vibe_surf/langflow/base/processing/__init__.py +0 -0
  1933. vibe_surf/langflow/base/prompts/__init__.py +0 -0
  1934. vibe_surf/langflow/base/prompts/api_utils.py +224 -0
  1935. vibe_surf/langflow/base/prompts/utils.py +61 -0
  1936. vibe_surf/langflow/base/textsplitters/__init__.py +0 -0
  1937. vibe_surf/langflow/base/textsplitters/model.py +28 -0
  1938. vibe_surf/langflow/base/tools/__init__.py +0 -0
  1939. vibe_surf/langflow/base/tools/base.py +26 -0
  1940. vibe_surf/langflow/base/tools/component_tool.py +324 -0
  1941. vibe_surf/langflow/base/tools/constants.py +49 -0
  1942. vibe_surf/langflow/base/tools/flow_tool.py +131 -0
  1943. vibe_surf/langflow/base/tools/run_flow.py +227 -0
  1944. vibe_surf/langflow/base/vectorstores/__init__.py +0 -0
  1945. vibe_surf/langflow/base/vectorstores/model.py +193 -0
  1946. vibe_surf/langflow/base/vectorstores/utils.py +22 -0
  1947. vibe_surf/langflow/base/vectorstores/vector_store_connection_decorator.py +52 -0
  1948. vibe_surf/langflow/cli/__init__.py +0 -0
  1949. vibe_surf/langflow/cli/progress.py +233 -0
  1950. vibe_surf/langflow/components/FAISS/__init__.py +34 -0
  1951. vibe_surf/langflow/components/FAISS/faiss.py +111 -0
  1952. vibe_surf/langflow/components/Notion/__init__.py +19 -0
  1953. vibe_surf/langflow/components/Notion/add_content_to_page.py +269 -0
  1954. vibe_surf/langflow/components/Notion/create_page.py +94 -0
  1955. vibe_surf/langflow/components/Notion/list_database_properties.py +68 -0
  1956. vibe_surf/langflow/components/Notion/list_pages.py +122 -0
  1957. vibe_surf/langflow/components/Notion/list_users.py +77 -0
  1958. vibe_surf/langflow/components/Notion/page_content_viewer.py +93 -0
  1959. vibe_surf/langflow/components/Notion/search.py +111 -0
  1960. vibe_surf/langflow/components/Notion/update_page_property.py +114 -0
  1961. vibe_surf/langflow/components/__init__.py +270 -0
  1962. vibe_surf/langflow/components/_importing.py +37 -0
  1963. vibe_surf/langflow/components/agentql/__init__.py +3 -0
  1964. vibe_surf/langflow/components/agentql/agentql_api.py +151 -0
  1965. vibe_surf/langflow/components/agents/__init__.py +4 -0
  1966. vibe_surf/langflow/components/agents/agent.py +608 -0
  1967. vibe_surf/langflow/components/agents/mcp_component.py +511 -0
  1968. vibe_surf/langflow/components/aiml/__init__.py +37 -0
  1969. vibe_surf/langflow/components/aiml/aiml.py +115 -0
  1970. vibe_surf/langflow/components/aiml/aiml_embeddings.py +37 -0
  1971. vibe_surf/langflow/components/amazon/__init__.py +36 -0
  1972. vibe_surf/langflow/components/amazon/amazon_bedrock_embedding.py +109 -0
  1973. vibe_surf/langflow/components/amazon/amazon_bedrock_model.py +124 -0
  1974. vibe_surf/langflow/components/amazon/s3_bucket_uploader.py +211 -0
  1975. vibe_surf/langflow/components/anthropic/__init__.py +34 -0
  1976. vibe_surf/langflow/components/anthropic/anthropic.py +187 -0
  1977. vibe_surf/langflow/components/apify/__init__.py +5 -0
  1978. vibe_surf/langflow/components/apify/apify_actor.py +325 -0
  1979. vibe_surf/langflow/components/arxiv/__init__.py +3 -0
  1980. vibe_surf/langflow/components/arxiv/arxiv.py +163 -0
  1981. vibe_surf/langflow/components/assemblyai/__init__.py +46 -0
  1982. vibe_surf/langflow/components/assemblyai/assemblyai_get_subtitles.py +83 -0
  1983. vibe_surf/langflow/components/assemblyai/assemblyai_lemur.py +183 -0
  1984. vibe_surf/langflow/components/assemblyai/assemblyai_list_transcripts.py +95 -0
  1985. vibe_surf/langflow/components/assemblyai/assemblyai_poll_transcript.py +72 -0
  1986. vibe_surf/langflow/components/assemblyai/assemblyai_start_transcript.py +188 -0
  1987. vibe_surf/langflow/components/azure/__init__.py +37 -0
  1988. vibe_surf/langflow/components/azure/azure_openai.py +95 -0
  1989. vibe_surf/langflow/components/azure/azure_openai_embeddings.py +83 -0
  1990. vibe_surf/langflow/components/baidu/__init__.py +32 -0
  1991. vibe_surf/langflow/components/baidu/baidu_qianfan_chat.py +113 -0
  1992. vibe_surf/langflow/components/bing/__init__.py +3 -0
  1993. vibe_surf/langflow/components/bing/bing_search_api.py +61 -0
  1994. vibe_surf/langflow/components/cassandra/__init__.py +40 -0
  1995. vibe_surf/langflow/components/cassandra/cassandra.py +264 -0
  1996. vibe_surf/langflow/components/cassandra/cassandra_chat.py +92 -0
  1997. vibe_surf/langflow/components/cassandra/cassandra_graph.py +238 -0
  1998. vibe_surf/langflow/components/chains/__init__.py +0 -0
  1999. vibe_surf/langflow/components/chroma/__init__.py +34 -0
  2000. vibe_surf/langflow/components/chroma/chroma.py +169 -0
  2001. vibe_surf/langflow/components/cleanlab/__init__.py +40 -0
  2002. vibe_surf/langflow/components/cleanlab/cleanlab_evaluator.py +157 -0
  2003. vibe_surf/langflow/components/cleanlab/cleanlab_rag_evaluator.py +254 -0
  2004. vibe_surf/langflow/components/cleanlab/cleanlab_remediator.py +131 -0
  2005. vibe_surf/langflow/components/clickhouse/__init__.py +34 -0
  2006. vibe_surf/langflow/components/clickhouse/clickhouse.py +135 -0
  2007. vibe_surf/langflow/components/cloudflare/__init__.py +32 -0
  2008. vibe_surf/langflow/components/cloudflare/cloudflare.py +81 -0
  2009. vibe_surf/langflow/components/cohere/__init__.py +40 -0
  2010. vibe_surf/langflow/components/cohere/cohere_embeddings.py +81 -0
  2011. vibe_surf/langflow/components/cohere/cohere_models.py +46 -0
  2012. vibe_surf/langflow/components/cohere/cohere_rerank.py +51 -0
  2013. vibe_surf/langflow/components/composio/__init__.py +73 -0
  2014. vibe_surf/langflow/components/composio/composio_api.py +279 -0
  2015. vibe_surf/langflow/components/composio/dropbox_compnent.py +11 -0
  2016. vibe_surf/langflow/components/composio/github_composio.py +11 -0
  2017. vibe_surf/langflow/components/composio/gmail_composio.py +38 -0
  2018. vibe_surf/langflow/components/composio/googlecalendar_composio.py +11 -0
  2019. vibe_surf/langflow/components/composio/googlemeet_composio.py +11 -0
  2020. vibe_surf/langflow/components/composio/googletasks_composio.py +8 -0
  2021. vibe_surf/langflow/components/composio/linear_composio.py +11 -0
  2022. vibe_surf/langflow/components/composio/outlook_composio.py +11 -0
  2023. vibe_surf/langflow/components/composio/reddit_composio.py +11 -0
  2024. vibe_surf/langflow/components/composio/slack_composio.py +11 -0
  2025. vibe_surf/langflow/components/composio/slackbot_composio.py +11 -0
  2026. vibe_surf/langflow/components/composio/supabase_composio.py +11 -0
  2027. vibe_surf/langflow/components/composio/todoist_composio.py +11 -0
  2028. vibe_surf/langflow/components/composio/youtube_composio.py +11 -0
  2029. vibe_surf/langflow/components/confluence/__init__.py +3 -0
  2030. vibe_surf/langflow/components/confluence/confluence.py +84 -0
  2031. vibe_surf/langflow/components/couchbase/__init__.py +34 -0
  2032. vibe_surf/langflow/components/couchbase/couchbase.py +102 -0
  2033. vibe_surf/langflow/components/crewai/__init__.py +49 -0
  2034. vibe_surf/langflow/components/crewai/crewai.py +108 -0
  2035. vibe_surf/langflow/components/crewai/hierarchical_crew.py +47 -0
  2036. vibe_surf/langflow/components/crewai/hierarchical_task.py +45 -0
  2037. vibe_surf/langflow/components/crewai/sequential_crew.py +53 -0
  2038. vibe_surf/langflow/components/crewai/sequential_task.py +74 -0
  2039. vibe_surf/langflow/components/crewai/sequential_task_agent.py +144 -0
  2040. vibe_surf/langflow/components/custom_component/__init__.py +34 -0
  2041. vibe_surf/langflow/components/custom_component/custom_component.py +31 -0
  2042. vibe_surf/langflow/components/data/__init__.py +25 -0
  2043. vibe_surf/langflow/components/data/api_request.py +555 -0
  2044. vibe_surf/langflow/components/data/csv_to_data.py +96 -0
  2045. vibe_surf/langflow/components/data/directory.py +113 -0
  2046. vibe_surf/langflow/components/data/file.py +632 -0
  2047. vibe_surf/langflow/components/data/json_to_data.py +99 -0
  2048. vibe_surf/langflow/components/data/news_search.py +164 -0
  2049. vibe_surf/langflow/components/data/rss.py +69 -0
  2050. vibe_surf/langflow/components/data/sql_executor.py +99 -0
  2051. vibe_surf/langflow/components/data/url.py +299 -0
  2052. vibe_surf/langflow/components/data/web_search.py +112 -0
  2053. vibe_surf/langflow/components/data/webhook.py +56 -0
  2054. vibe_surf/langflow/components/datastax/__init__.py +70 -0
  2055. vibe_surf/langflow/components/datastax/astra_assistant_manager.py +306 -0
  2056. vibe_surf/langflow/components/datastax/astra_db.py +68 -0
  2057. vibe_surf/langflow/components/datastax/astra_vectorize.py +122 -0
  2058. vibe_surf/langflow/components/datastax/astradb_cql.py +314 -0
  2059. vibe_surf/langflow/components/datastax/astradb_graph.py +326 -0
  2060. vibe_surf/langflow/components/datastax/astradb_tool.py +418 -0
  2061. vibe_surf/langflow/components/datastax/astradb_vectorstore.py +1292 -0
  2062. vibe_surf/langflow/components/datastax/create_assistant.py +58 -0
  2063. vibe_surf/langflow/components/datastax/create_thread.py +32 -0
  2064. vibe_surf/langflow/components/datastax/dotenv.py +35 -0
  2065. vibe_surf/langflow/components/datastax/get_assistant.py +37 -0
  2066. vibe_surf/langflow/components/datastax/getenvvar.py +30 -0
  2067. vibe_surf/langflow/components/datastax/graph_rag.py +141 -0
  2068. vibe_surf/langflow/components/datastax/hcd.py +314 -0
  2069. vibe_surf/langflow/components/datastax/list_assistants.py +25 -0
  2070. vibe_surf/langflow/components/datastax/run.py +89 -0
  2071. vibe_surf/langflow/components/deactivated/__init__.py +19 -0
  2072. vibe_surf/langflow/components/deactivated/amazon_kendra.py +66 -0
  2073. vibe_surf/langflow/components/deactivated/chat_litellm_model.py +158 -0
  2074. vibe_surf/langflow/components/deactivated/code_block_extractor.py +26 -0
  2075. vibe_surf/langflow/components/deactivated/documents_to_data.py +22 -0
  2076. vibe_surf/langflow/components/deactivated/embed.py +16 -0
  2077. vibe_surf/langflow/components/deactivated/extract_key_from_data.py +46 -0
  2078. vibe_surf/langflow/components/deactivated/json_document_builder.py +59 -0
  2079. vibe_surf/langflow/components/deactivated/list_flows.py +20 -0
  2080. vibe_surf/langflow/components/deactivated/merge_data.py +93 -0
  2081. vibe_surf/langflow/components/deactivated/message.py +37 -0
  2082. vibe_surf/langflow/components/deactivated/metal.py +54 -0
  2083. vibe_surf/langflow/components/deactivated/multi_query.py +59 -0
  2084. vibe_surf/langflow/components/deactivated/retriever.py +43 -0
  2085. vibe_surf/langflow/components/deactivated/selective_passthrough.py +77 -0
  2086. vibe_surf/langflow/components/deactivated/should_run_next.py +40 -0
  2087. vibe_surf/langflow/components/deactivated/split_text.py +63 -0
  2088. vibe_surf/langflow/components/deactivated/store_message.py +24 -0
  2089. vibe_surf/langflow/components/deactivated/sub_flow.py +124 -0
  2090. vibe_surf/langflow/components/deactivated/vectara_self_query.py +76 -0
  2091. vibe_surf/langflow/components/deactivated/vector_store.py +24 -0
  2092. vibe_surf/langflow/components/deepseek/__init__.py +34 -0
  2093. vibe_surf/langflow/components/deepseek/deepseek.py +136 -0
  2094. vibe_surf/langflow/components/docling/__init__.py +43 -0
  2095. vibe_surf/langflow/components/docling/chunk_docling_document.py +186 -0
  2096. vibe_surf/langflow/components/docling/docling_inline.py +249 -0
  2097. vibe_surf/langflow/components/docling/docling_remote.py +192 -0
  2098. vibe_surf/langflow/components/docling/export_docling_document.py +117 -0
  2099. vibe_surf/langflow/components/documentloaders/__init__.py +0 -0
  2100. vibe_surf/langflow/components/duckduckgo/__init__.py +3 -0
  2101. vibe_surf/langflow/components/duckduckgo/duck_duck_go_search_run.py +92 -0
  2102. vibe_surf/langflow/components/elastic/__init__.py +37 -0
  2103. vibe_surf/langflow/components/elastic/elasticsearch.py +267 -0
  2104. vibe_surf/langflow/components/elastic/opensearch.py +243 -0
  2105. vibe_surf/langflow/components/embeddings/__init__.py +37 -0
  2106. vibe_surf/langflow/components/embeddings/similarity.py +77 -0
  2107. vibe_surf/langflow/components/embeddings/text_embedder.py +65 -0
  2108. vibe_surf/langflow/components/exa/__init__.py +3 -0
  2109. vibe_surf/langflow/components/exa/exa_search.py +68 -0
  2110. vibe_surf/langflow/components/firecrawl/__init__.py +43 -0
  2111. vibe_surf/langflow/components/firecrawl/firecrawl_crawl_api.py +88 -0
  2112. vibe_surf/langflow/components/firecrawl/firecrawl_extract_api.py +136 -0
  2113. vibe_surf/langflow/components/firecrawl/firecrawl_map_api.py +89 -0
  2114. vibe_surf/langflow/components/firecrawl/firecrawl_scrape_api.py +73 -0
  2115. vibe_surf/langflow/components/git/__init__.py +4 -0
  2116. vibe_surf/langflow/components/git/git.py +262 -0
  2117. vibe_surf/langflow/components/git/gitextractor.py +196 -0
  2118. vibe_surf/langflow/components/glean/__init__.py +3 -0
  2119. vibe_surf/langflow/components/glean/glean_search_api.py +173 -0
  2120. vibe_surf/langflow/components/google/__init__.py +17 -0
  2121. vibe_surf/langflow/components/google/gmail.py +193 -0
  2122. vibe_surf/langflow/components/google/google_bq_sql_executor.py +157 -0
  2123. vibe_surf/langflow/components/google/google_drive.py +92 -0
  2124. vibe_surf/langflow/components/google/google_drive_search.py +152 -0
  2125. vibe_surf/langflow/components/google/google_generative_ai.py +147 -0
  2126. vibe_surf/langflow/components/google/google_generative_ai_embeddings.py +141 -0
  2127. vibe_surf/langflow/components/google/google_oauth_token.py +89 -0
  2128. vibe_surf/langflow/components/google/google_search_api_core.py +68 -0
  2129. vibe_surf/langflow/components/groq/__init__.py +34 -0
  2130. vibe_surf/langflow/components/groq/groq.py +140 -0
  2131. vibe_surf/langflow/components/helpers/__init__.py +52 -0
  2132. vibe_surf/langflow/components/helpers/calculator_core.py +89 -0
  2133. vibe_surf/langflow/components/helpers/create_list.py +40 -0
  2134. vibe_surf/langflow/components/helpers/current_date.py +42 -0
  2135. vibe_surf/langflow/components/helpers/id_generator.py +42 -0
  2136. vibe_surf/langflow/components/helpers/memory.py +253 -0
  2137. vibe_surf/langflow/components/helpers/output_parser.py +46 -0
  2138. vibe_surf/langflow/components/helpers/store_message.py +91 -0
  2139. vibe_surf/langflow/components/homeassistant/__init__.py +7 -0
  2140. vibe_surf/langflow/components/homeassistant/home_assistant_control.py +152 -0
  2141. vibe_surf/langflow/components/homeassistant/list_home_assistant_states.py +137 -0
  2142. vibe_surf/langflow/components/huggingface/__init__.py +37 -0
  2143. vibe_surf/langflow/components/huggingface/huggingface.py +199 -0
  2144. vibe_surf/langflow/components/huggingface/huggingface_inference_api.py +106 -0
  2145. vibe_surf/langflow/components/ibm/__init__.py +34 -0
  2146. vibe_surf/langflow/components/ibm/watsonx.py +203 -0
  2147. vibe_surf/langflow/components/ibm/watsonx_embeddings.py +135 -0
  2148. vibe_surf/langflow/components/icosacomputing/__init__.py +5 -0
  2149. vibe_surf/langflow/components/icosacomputing/combinatorial_reasoner.py +84 -0
  2150. vibe_surf/langflow/components/input_output/__init__.py +38 -0
  2151. vibe_surf/langflow/components/input_output/chat.py +99 -0
  2152. vibe_surf/langflow/components/input_output/chat_output.py +169 -0
  2153. vibe_surf/langflow/components/input_output/text.py +27 -0
  2154. vibe_surf/langflow/components/input_output/text_output.py +29 -0
  2155. vibe_surf/langflow/components/jigsawstack/__init__.py +23 -0
  2156. vibe_surf/langflow/components/jigsawstack/ai_scrape.py +126 -0
  2157. vibe_surf/langflow/components/jigsawstack/ai_web_search.py +136 -0
  2158. vibe_surf/langflow/components/jigsawstack/file_read.py +115 -0
  2159. vibe_surf/langflow/components/jigsawstack/file_upload.py +94 -0
  2160. vibe_surf/langflow/components/jigsawstack/image_generation.py +205 -0
  2161. vibe_surf/langflow/components/jigsawstack/nsfw.py +60 -0
  2162. vibe_surf/langflow/components/jigsawstack/object_detection.py +124 -0
  2163. vibe_surf/langflow/components/jigsawstack/sentiment.py +112 -0
  2164. vibe_surf/langflow/components/jigsawstack/text_to_sql.py +90 -0
  2165. vibe_surf/langflow/components/jigsawstack/text_translate.py +77 -0
  2166. vibe_surf/langflow/components/jigsawstack/vocr.py +107 -0
  2167. vibe_surf/langflow/components/knowledge_bases/__init__.py +34 -0
  2168. vibe_surf/langflow/components/knowledge_bases/ingestion.py +697 -0
  2169. vibe_surf/langflow/components/knowledge_bases/retrieval.py +264 -0
  2170. vibe_surf/langflow/components/langchain_utilities/__init__.py +109 -0
  2171. vibe_surf/langflow/components/langchain_utilities/character.py +53 -0
  2172. vibe_surf/langflow/components/langchain_utilities/conversation.py +52 -0
  2173. vibe_surf/langflow/components/langchain_utilities/csv_agent.py +107 -0
  2174. vibe_surf/langflow/components/langchain_utilities/fake_embeddings.py +26 -0
  2175. vibe_surf/langflow/components/langchain_utilities/html_link_extractor.py +35 -0
  2176. vibe_surf/langflow/components/langchain_utilities/json_agent.py +45 -0
  2177. vibe_surf/langflow/components/langchain_utilities/langchain_hub.py +126 -0
  2178. vibe_surf/langflow/components/langchain_utilities/language_recursive.py +49 -0
  2179. vibe_surf/langflow/components/langchain_utilities/language_semantic.py +138 -0
  2180. vibe_surf/langflow/components/langchain_utilities/llm_checker.py +39 -0
  2181. vibe_surf/langflow/components/langchain_utilities/llm_math.py +42 -0
  2182. vibe_surf/langflow/components/langchain_utilities/natural_language.py +61 -0
  2183. vibe_surf/langflow/components/langchain_utilities/openai_tools.py +53 -0
  2184. vibe_surf/langflow/components/langchain_utilities/openapi.py +48 -0
  2185. vibe_surf/langflow/components/langchain_utilities/recursive_character.py +60 -0
  2186. vibe_surf/langflow/components/langchain_utilities/retrieval_qa.py +83 -0
  2187. vibe_surf/langflow/components/langchain_utilities/runnable_executor.py +137 -0
  2188. vibe_surf/langflow/components/langchain_utilities/self_query.py +80 -0
  2189. vibe_surf/langflow/components/langchain_utilities/spider.py +142 -0
  2190. vibe_surf/langflow/components/langchain_utilities/sql.py +40 -0
  2191. vibe_surf/langflow/components/langchain_utilities/sql_database.py +35 -0
  2192. vibe_surf/langflow/components/langchain_utilities/sql_generator.py +78 -0
  2193. vibe_surf/langflow/components/langchain_utilities/tool_calling.py +59 -0
  2194. vibe_surf/langflow/components/langchain_utilities/vector_store_info.py +49 -0
  2195. vibe_surf/langflow/components/langchain_utilities/vector_store_router.py +33 -0
  2196. vibe_surf/langflow/components/langchain_utilities/xml_agent.py +71 -0
  2197. vibe_surf/langflow/components/langwatch/__init__.py +3 -0
  2198. vibe_surf/langflow/components/langwatch/langwatch.py +278 -0
  2199. vibe_surf/langflow/components/link_extractors/__init__.py +0 -0
  2200. vibe_surf/langflow/components/lmstudio/__init__.py +34 -0
  2201. vibe_surf/langflow/components/lmstudio/lmstudioembeddings.py +89 -0
  2202. vibe_surf/langflow/components/lmstudio/lmstudiomodel.py +129 -0
  2203. vibe_surf/langflow/components/logic/__init__.py +52 -0
  2204. vibe_surf/langflow/components/logic/conditional_router.py +208 -0
  2205. vibe_surf/langflow/components/logic/data_conditional_router.py +126 -0
  2206. vibe_surf/langflow/components/logic/flow_tool.py +111 -0
  2207. vibe_surf/langflow/components/logic/listen.py +29 -0
  2208. vibe_surf/langflow/components/logic/loop.py +125 -0
  2209. vibe_surf/langflow/components/logic/notify.py +88 -0
  2210. vibe_surf/langflow/components/logic/pass_message.py +36 -0
  2211. vibe_surf/langflow/components/logic/run_flow.py +71 -0
  2212. vibe_surf/langflow/components/logic/sub_flow.py +115 -0
  2213. vibe_surf/langflow/components/maritalk/__init__.py +32 -0
  2214. vibe_surf/langflow/components/maritalk/maritalk.py +52 -0
  2215. vibe_surf/langflow/components/mem0/__init__.py +3 -0
  2216. vibe_surf/langflow/components/mem0/mem0_chat_memory.py +136 -0
  2217. vibe_surf/langflow/components/milvus/__init__.py +34 -0
  2218. vibe_surf/langflow/components/milvus/milvus.py +115 -0
  2219. vibe_surf/langflow/components/mistral/__init__.py +37 -0
  2220. vibe_surf/langflow/components/mistral/mistral.py +114 -0
  2221. vibe_surf/langflow/components/mistral/mistral_embeddings.py +58 -0
  2222. vibe_surf/langflow/components/models/__init__.py +34 -0
  2223. vibe_surf/langflow/components/models/embedding_model.py +114 -0
  2224. vibe_surf/langflow/components/models/language_model.py +144 -0
  2225. vibe_surf/langflow/components/mongodb/__init__.py +34 -0
  2226. vibe_surf/langflow/components/mongodb/mongodb_atlas.py +213 -0
  2227. vibe_surf/langflow/components/needle/__init__.py +3 -0
  2228. vibe_surf/langflow/components/needle/needle.py +104 -0
  2229. vibe_surf/langflow/components/notdiamond/__init__.py +36 -0
  2230. vibe_surf/langflow/components/notdiamond/notdiamond.py +228 -0
  2231. vibe_surf/langflow/components/novita/__init__.py +32 -0
  2232. vibe_surf/langflow/components/novita/novita.py +130 -0
  2233. vibe_surf/langflow/components/nvidia/__init__.py +57 -0
  2234. vibe_surf/langflow/components/nvidia/nvidia.py +151 -0
  2235. vibe_surf/langflow/components/nvidia/nvidia_embedding.py +77 -0
  2236. vibe_surf/langflow/components/nvidia/nvidia_ingest.py +317 -0
  2237. vibe_surf/langflow/components/nvidia/nvidia_rerank.py +63 -0
  2238. vibe_surf/langflow/components/nvidia/system_assist.py +65 -0
  2239. vibe_surf/langflow/components/olivya/__init__.py +3 -0
  2240. vibe_surf/langflow/components/olivya/olivya.py +116 -0
  2241. vibe_surf/langflow/components/ollama/__init__.py +37 -0
  2242. vibe_surf/langflow/components/ollama/ollama.py +330 -0
  2243. vibe_surf/langflow/components/ollama/ollama_embeddings.py +106 -0
  2244. vibe_surf/langflow/components/openai/__init__.py +37 -0
  2245. vibe_surf/langflow/components/openai/openai.py +100 -0
  2246. vibe_surf/langflow/components/openai/openai_chat_model.py +158 -0
  2247. vibe_surf/langflow/components/openrouter/__init__.py +32 -0
  2248. vibe_surf/langflow/components/openrouter/openrouter.py +202 -0
  2249. vibe_surf/langflow/components/output_parsers/__init__.py +0 -0
  2250. vibe_surf/langflow/components/perplexity/__init__.py +34 -0
  2251. vibe_surf/langflow/components/perplexity/perplexity.py +75 -0
  2252. vibe_surf/langflow/components/pgvector/__init__.py +34 -0
  2253. vibe_surf/langflow/components/pgvector/pgvector.py +72 -0
  2254. vibe_surf/langflow/components/pinecone/__init__.py +34 -0
  2255. vibe_surf/langflow/components/pinecone/pinecone.py +134 -0
  2256. vibe_surf/langflow/components/processing/__init__.py +117 -0
  2257. vibe_surf/langflow/components/processing/alter_metadata.py +109 -0
  2258. vibe_surf/langflow/components/processing/batch_run.py +205 -0
  2259. vibe_surf/langflow/components/processing/combine_text.py +40 -0
  2260. vibe_surf/langflow/components/processing/converter.py +150 -0
  2261. vibe_surf/langflow/components/processing/create_data.py +111 -0
  2262. vibe_surf/langflow/components/processing/data_operations.py +438 -0
  2263. vibe_surf/langflow/components/processing/data_to_dataframe.py +71 -0
  2264. vibe_surf/langflow/components/processing/dataframe_operations.py +310 -0
  2265. vibe_surf/langflow/components/processing/extract_key.py +54 -0
  2266. vibe_surf/langflow/components/processing/filter_data.py +43 -0
  2267. vibe_surf/langflow/components/processing/filter_data_values.py +89 -0
  2268. vibe_surf/langflow/components/processing/json_cleaner.py +104 -0
  2269. vibe_surf/langflow/components/processing/lambda_filter.py +154 -0
  2270. vibe_surf/langflow/components/processing/llm_router.py +499 -0
  2271. vibe_surf/langflow/components/processing/merge_data.py +91 -0
  2272. vibe_surf/langflow/components/processing/message_to_data.py +37 -0
  2273. vibe_surf/langflow/components/processing/parse_data.py +71 -0
  2274. vibe_surf/langflow/components/processing/parse_dataframe.py +69 -0
  2275. vibe_surf/langflow/components/processing/parse_json_data.py +91 -0
  2276. vibe_surf/langflow/components/processing/parser.py +143 -0
  2277. vibe_surf/langflow/components/processing/prompt.py +67 -0
  2278. vibe_surf/langflow/components/processing/python_repl_core.py +98 -0
  2279. vibe_surf/langflow/components/processing/regex.py +83 -0
  2280. vibe_surf/langflow/components/processing/save_file.py +208 -0
  2281. vibe_surf/langflow/components/processing/select_data.py +49 -0
  2282. vibe_surf/langflow/components/processing/split_text.py +141 -0
  2283. vibe_surf/langflow/components/processing/structured_output.py +206 -0
  2284. vibe_surf/langflow/components/processing/update_data.py +161 -0
  2285. vibe_surf/langflow/components/qdrant/__init__.py +34 -0
  2286. vibe_surf/langflow/components/qdrant/qdrant.py +109 -0
  2287. vibe_surf/langflow/components/redis/__init__.py +37 -0
  2288. vibe_surf/langflow/components/redis/redis.py +89 -0
  2289. vibe_surf/langflow/components/redis/redis_chat.py +43 -0
  2290. vibe_surf/langflow/components/sambanova/__init__.py +32 -0
  2291. vibe_surf/langflow/components/sambanova/sambanova.py +84 -0
  2292. vibe_surf/langflow/components/scrapegraph/__init__.py +40 -0
  2293. vibe_surf/langflow/components/scrapegraph/scrapegraph_markdownify_api.py +64 -0
  2294. vibe_surf/langflow/components/scrapegraph/scrapegraph_search_api.py +64 -0
  2295. vibe_surf/langflow/components/scrapegraph/scrapegraph_smart_scraper_api.py +71 -0
  2296. vibe_surf/langflow/components/searchapi/__init__.py +36 -0
  2297. vibe_surf/langflow/components/searchapi/search.py +79 -0
  2298. vibe_surf/langflow/components/serpapi/__init__.py +3 -0
  2299. vibe_surf/langflow/components/serpapi/serp.py +115 -0
  2300. vibe_surf/langflow/components/serper/__init__.py +3 -0
  2301. vibe_surf/langflow/components/serper/google_serper_api_core.py +74 -0
  2302. vibe_surf/langflow/components/supabase/__init__.py +37 -0
  2303. vibe_surf/langflow/components/supabase/supabase.py +76 -0
  2304. vibe_surf/langflow/components/tavily/__init__.py +4 -0
  2305. vibe_surf/langflow/components/tavily/tavily_extract.py +117 -0
  2306. vibe_surf/langflow/components/tavily/tavily_search.py +212 -0
  2307. vibe_surf/langflow/components/textsplitters/__init__.py +0 -0
  2308. vibe_surf/langflow/components/toolkits/__init__.py +0 -0
  2309. vibe_surf/langflow/components/tools/__init__.py +66 -0
  2310. vibe_surf/langflow/components/tools/calculator.py +104 -0
  2311. vibe_surf/langflow/components/tools/python_code_structured_tool.py +328 -0
  2312. vibe_surf/langflow/components/tools/python_repl.py +98 -0
  2313. vibe_surf/langflow/components/tools/search_api.py +88 -0
  2314. vibe_surf/langflow/components/tools/searxng.py +145 -0
  2315. vibe_surf/langflow/components/tools/serp_api.py +120 -0
  2316. vibe_surf/langflow/components/tools/tavily_search_tool.py +345 -0
  2317. vibe_surf/langflow/components/tools/wikidata_api.py +103 -0
  2318. vibe_surf/langflow/components/tools/wikipedia_api.py +50 -0
  2319. vibe_surf/langflow/components/tools/yahoo_finance.py +125 -0
  2320. vibe_surf/langflow/components/twelvelabs/__init__.py +52 -0
  2321. vibe_surf/langflow/components/twelvelabs/convert_astra_results.py +84 -0
  2322. vibe_surf/langflow/components/twelvelabs/pegasus_index.py +311 -0
  2323. vibe_surf/langflow/components/twelvelabs/split_video.py +291 -0
  2324. vibe_surf/langflow/components/twelvelabs/text_embeddings.py +57 -0
  2325. vibe_surf/langflow/components/twelvelabs/twelvelabs_pegasus.py +408 -0
  2326. vibe_surf/langflow/components/twelvelabs/video_embeddings.py +100 -0
  2327. vibe_surf/langflow/components/twelvelabs/video_file.py +179 -0
  2328. vibe_surf/langflow/components/unstructured/__init__.py +3 -0
  2329. vibe_surf/langflow/components/unstructured/unstructured.py +121 -0
  2330. vibe_surf/langflow/components/upstash/__init__.py +34 -0
  2331. vibe_surf/langflow/components/upstash/upstash.py +124 -0
  2332. vibe_surf/langflow/components/vectara/__init__.py +37 -0
  2333. vibe_surf/langflow/components/vectara/vectara.py +97 -0
  2334. vibe_surf/langflow/components/vectara/vectara_rag.py +164 -0
  2335. vibe_surf/langflow/components/vectorstores/__init__.py +34 -0
  2336. vibe_surf/langflow/components/vectorstores/local_db.py +262 -0
  2337. vibe_surf/langflow/components/vertexai/__init__.py +37 -0
  2338. vibe_surf/langflow/components/vertexai/vertexai.py +71 -0
  2339. vibe_surf/langflow/components/vertexai/vertexai_embeddings.py +67 -0
  2340. vibe_surf/langflow/components/weaviate/__init__.py +34 -0
  2341. vibe_surf/langflow/components/weaviate/weaviate.py +89 -0
  2342. vibe_surf/langflow/components/wikipedia/__init__.py +4 -0
  2343. vibe_surf/langflow/components/wikipedia/wikidata.py +86 -0
  2344. vibe_surf/langflow/components/wikipedia/wikipedia.py +53 -0
  2345. vibe_surf/langflow/components/wolframalpha/__init__.py +3 -0
  2346. vibe_surf/langflow/components/wolframalpha/wolfram_alpha_api.py +54 -0
  2347. vibe_surf/langflow/components/xai/__init__.py +32 -0
  2348. vibe_surf/langflow/components/xai/xai.py +167 -0
  2349. vibe_surf/langflow/components/youtube/__init__.py +52 -0
  2350. vibe_surf/langflow/components/youtube/channel.py +227 -0
  2351. vibe_surf/langflow/components/youtube/comments.py +231 -0
  2352. vibe_surf/langflow/components/youtube/playlist.py +33 -0
  2353. vibe_surf/langflow/components/youtube/search.py +120 -0
  2354. vibe_surf/langflow/components/youtube/trending.py +285 -0
  2355. vibe_surf/langflow/components/youtube/video_details.py +263 -0
  2356. vibe_surf/langflow/components/youtube/youtube_transcripts.py +118 -0
  2357. vibe_surf/langflow/components/zep/__init__.py +3 -0
  2358. vibe_surf/langflow/components/zep/zep.py +45 -0
  2359. vibe_surf/langflow/core/__init__.py +0 -0
  2360. vibe_surf/langflow/core/celery_app.py +11 -0
  2361. vibe_surf/langflow/core/celeryconfig.py +18 -0
  2362. vibe_surf/langflow/custom/__init__.py +4 -0
  2363. vibe_surf/langflow/custom/attributes.py +87 -0
  2364. vibe_surf/langflow/custom/code_parser/__init__.py +3 -0
  2365. vibe_surf/langflow/custom/code_parser/code_parser.py +361 -0
  2366. vibe_surf/langflow/custom/custom_component/__init__.py +0 -0
  2367. vibe_surf/langflow/custom/custom_component/base_component.py +118 -0
  2368. vibe_surf/langflow/custom/custom_component/component.py +1742 -0
  2369. vibe_surf/langflow/custom/custom_component/component_with_cache.py +8 -0
  2370. vibe_surf/langflow/custom/custom_component/custom_component.py +552 -0
  2371. vibe_surf/langflow/custom/dependency_analyzer.py +165 -0
  2372. vibe_surf/langflow/custom/directory_reader/__init__.py +3 -0
  2373. vibe_surf/langflow/custom/directory_reader/directory_reader.py +359 -0
  2374. vibe_surf/langflow/custom/directory_reader/utils.py +171 -0
  2375. vibe_surf/langflow/custom/eval.py +12 -0
  2376. vibe_surf/langflow/custom/schema.py +32 -0
  2377. vibe_surf/langflow/custom/tree_visitor.py +21 -0
  2378. vibe_surf/langflow/custom/utils.py +868 -0
  2379. vibe_surf/langflow/events/__init__.py +0 -0
  2380. vibe_surf/langflow/events/event_manager.py +108 -0
  2381. vibe_surf/langflow/exceptions/__init__.py +0 -0
  2382. vibe_surf/langflow/exceptions/api.py +34 -0
  2383. vibe_surf/langflow/exceptions/component.py +17 -0
  2384. vibe_surf/langflow/exceptions/serialization.py +56 -0
  2385. vibe_surf/langflow/field_typing/__init__.py +91 -0
  2386. vibe_surf/langflow/field_typing/constants.py +137 -0
  2387. vibe_surf/langflow/field_typing/range_spec.py +33 -0
  2388. vibe_surf/langflow/graph/__init__.py +6 -0
  2389. vibe_surf/langflow/graph/edge/__init__.py +0 -0
  2390. vibe_surf/langflow/graph/edge/base.py +277 -0
  2391. vibe_surf/langflow/graph/edge/schema.py +119 -0
  2392. vibe_surf/langflow/graph/edge/utils.py +0 -0
  2393. vibe_surf/langflow/graph/graph/__init__.py +0 -0
  2394. vibe_surf/langflow/graph/graph/ascii.py +202 -0
  2395. vibe_surf/langflow/graph/graph/base.py +2242 -0
  2396. vibe_surf/langflow/graph/graph/constants.py +58 -0
  2397. vibe_surf/langflow/graph/graph/runnable_vertices_manager.py +133 -0
  2398. vibe_surf/langflow/graph/graph/schema.py +53 -0
  2399. vibe_surf/langflow/graph/graph/state_model.py +66 -0
  2400. vibe_surf/langflow/graph/graph/utils.py +1024 -0
  2401. vibe_surf/langflow/graph/schema.py +75 -0
  2402. vibe_surf/langflow/graph/state/__init__.py +0 -0
  2403. vibe_surf/langflow/graph/state/model.py +237 -0
  2404. vibe_surf/langflow/graph/utils.py +229 -0
  2405. vibe_surf/langflow/graph/vertex/__init__.py +0 -0
  2406. vibe_surf/langflow/graph/vertex/base.py +811 -0
  2407. vibe_surf/langflow/graph/vertex/constants.py +0 -0
  2408. vibe_surf/langflow/graph/vertex/exceptions.py +4 -0
  2409. vibe_surf/langflow/graph/vertex/param_handler.py +255 -0
  2410. vibe_surf/langflow/graph/vertex/schema.py +26 -0
  2411. vibe_surf/langflow/graph/vertex/utils.py +19 -0
  2412. vibe_surf/langflow/graph/vertex/vertex_types.py +489 -0
  2413. vibe_surf/langflow/helpers/__init__.py +3 -0
  2414. vibe_surf/langflow/helpers/base_model.py +71 -0
  2415. vibe_surf/langflow/helpers/custom.py +13 -0
  2416. vibe_surf/langflow/helpers/data.py +206 -0
  2417. vibe_surf/langflow/helpers/flow.py +359 -0
  2418. vibe_surf/langflow/helpers/folders.py +26 -0
  2419. vibe_surf/langflow/helpers/user.py +27 -0
  2420. vibe_surf/langflow/initial_setup/__init__.py +0 -0
  2421. vibe_surf/langflow/initial_setup/constants.py +2 -0
  2422. vibe_surf/langflow/initial_setup/load.py +21 -0
  2423. vibe_surf/langflow/initial_setup/profile_pictures/People/People Avatar-01-01.svg +102 -0
  2424. vibe_surf/langflow/initial_setup/profile_pictures/People/People Avatar-01-02.svg +135 -0
  2425. vibe_surf/langflow/initial_setup/profile_pictures/People/People Avatar-01-03.svg +126 -0
  2426. vibe_surf/langflow/initial_setup/profile_pictures/People/People Avatar-01-04.svg +132 -0
  2427. vibe_surf/langflow/initial_setup/profile_pictures/People/People Avatar-01-05.svg +151 -0
  2428. vibe_surf/langflow/initial_setup/profile_pictures/People/People Avatar-01-06.svg +132 -0
  2429. vibe_surf/langflow/initial_setup/profile_pictures/People/People Avatar-01-07.svg +138 -0
  2430. vibe_surf/langflow/initial_setup/profile_pictures/People/People Avatar-01-08.svg +125 -0
  2431. vibe_surf/langflow/initial_setup/profile_pictures/People/People Avatar-01-09.svg +137 -0
  2432. vibe_surf/langflow/initial_setup/profile_pictures/People/People Avatar-01-10.svg +109 -0
  2433. vibe_surf/langflow/initial_setup/profile_pictures/People/People Avatar-01-11.svg +140 -0
  2434. vibe_surf/langflow/initial_setup/profile_pictures/People/People Avatar-01-12.svg +99 -0
  2435. vibe_surf/langflow/initial_setup/profile_pictures/People/People Avatar-01-13.svg +118 -0
  2436. vibe_surf/langflow/initial_setup/profile_pictures/People/People Avatar-01-14.svg +99 -0
  2437. vibe_surf/langflow/initial_setup/profile_pictures/People/People Avatar-01-15.svg +90 -0
  2438. vibe_surf/langflow/initial_setup/profile_pictures/People/People Avatar-01-16.svg +106 -0
  2439. vibe_surf/langflow/initial_setup/profile_pictures/People/People Avatar-01-17.svg +97 -0
  2440. vibe_surf/langflow/initial_setup/profile_pictures/People/People Avatar-01-18.svg +128 -0
  2441. vibe_surf/langflow/initial_setup/profile_pictures/People/People Avatar-01-19.svg +100 -0
  2442. vibe_surf/langflow/initial_setup/profile_pictures/People/People Avatar-01-20.svg +101 -0
  2443. vibe_surf/langflow/initial_setup/profile_pictures/People/People Avatar-01-21.svg +134 -0
  2444. vibe_surf/langflow/initial_setup/profile_pictures/People/People Avatar-01-22.svg +127 -0
  2445. vibe_surf/langflow/initial_setup/profile_pictures/People/People Avatar-01-23.svg +120 -0
  2446. vibe_surf/langflow/initial_setup/profile_pictures/People/People Avatar-01-24.svg +110 -0
  2447. vibe_surf/langflow/initial_setup/profile_pictures/People/People Avatar-01-25.svg +79 -0
  2448. vibe_surf/langflow/initial_setup/profile_pictures/People/People Avatar-01-26.svg +98 -0
  2449. vibe_surf/langflow/initial_setup/profile_pictures/People/People Avatar-01-27.svg +113 -0
  2450. vibe_surf/langflow/initial_setup/profile_pictures/People/People Avatar-02-01.svg +113 -0
  2451. vibe_surf/langflow/initial_setup/profile_pictures/People/People Avatar-02-02.svg +167 -0
  2452. vibe_surf/langflow/initial_setup/profile_pictures/People/People Avatar-02-03.svg +91 -0
  2453. vibe_surf/langflow/initial_setup/profile_pictures/People/People Avatar-02-04.svg +114 -0
  2454. vibe_surf/langflow/initial_setup/profile_pictures/People/People Avatar-02-05.svg +71 -0
  2455. vibe_surf/langflow/initial_setup/profile_pictures/People/People Avatar-02-06.svg +105 -0
  2456. vibe_surf/langflow/initial_setup/profile_pictures/People/People Avatar-02-07.svg +101 -0
  2457. vibe_surf/langflow/initial_setup/profile_pictures/People/People Avatar-02-08.svg +92 -0
  2458. vibe_surf/langflow/initial_setup/profile_pictures/People/People Avatar-02-09.svg +91 -0
  2459. vibe_surf/langflow/initial_setup/profile_pictures/People/People Avatar-02-10.svg +110 -0
  2460. vibe_surf/langflow/initial_setup/profile_pictures/People/People Avatar-02-11.svg +102 -0
  2461. vibe_surf/langflow/initial_setup/profile_pictures/People/People Avatar-02-12.svg +92 -0
  2462. vibe_surf/langflow/initial_setup/profile_pictures/People/People Avatar-02-13.svg +77 -0
  2463. vibe_surf/langflow/initial_setup/profile_pictures/People/People Avatar-02-14.svg +99 -0
  2464. vibe_surf/langflow/initial_setup/profile_pictures/People/People Avatar-02-15.svg +81 -0
  2465. vibe_surf/langflow/initial_setup/profile_pictures/People/People Avatar-02-16.svg +91 -0
  2466. vibe_surf/langflow/initial_setup/profile_pictures/People/People Avatar-02-17.svg +100 -0
  2467. vibe_surf/langflow/initial_setup/profile_pictures/People/People Avatar-02-18.svg +99 -0
  2468. vibe_surf/langflow/initial_setup/profile_pictures/People/People Avatar-02-19.svg +155 -0
  2469. vibe_surf/langflow/initial_setup/profile_pictures/People/People Avatar-02-20.svg +110 -0
  2470. vibe_surf/langflow/initial_setup/profile_pictures/People/People Avatar-02-21.svg +128 -0
  2471. vibe_surf/langflow/initial_setup/profile_pictures/People/People Avatar-02-22.svg +90 -0
  2472. vibe_surf/langflow/initial_setup/profile_pictures/People/People Avatar-02-23.svg +117 -0
  2473. vibe_surf/langflow/initial_setup/profile_pictures/People/People Avatar-02-24.svg +100 -0
  2474. vibe_surf/langflow/initial_setup/profile_pictures/People/People Avatar-02-25.svg +97 -0
  2475. vibe_surf/langflow/initial_setup/profile_pictures/People/People Avatar-02-26.svg +105 -0
  2476. vibe_surf/langflow/initial_setup/profile_pictures/People/People Avatar-02-27.svg +82 -0
  2477. vibe_surf/langflow/initial_setup/profile_pictures/Space/026-alien.svg +1 -0
  2478. vibe_surf/langflow/initial_setup/profile_pictures/Space/027-satellite.svg +1 -0
  2479. vibe_surf/langflow/initial_setup/profile_pictures/Space/028-alien.svg +1 -0
  2480. vibe_surf/langflow/initial_setup/profile_pictures/Space/029-telescope.svg +1 -0
  2481. vibe_surf/langflow/initial_setup/profile_pictures/Space/030-books.svg +1 -0
  2482. vibe_surf/langflow/initial_setup/profile_pictures/Space/031-planet.svg +1 -0
  2483. vibe_surf/langflow/initial_setup/profile_pictures/Space/032-constellation.svg +1 -0
  2484. vibe_surf/langflow/initial_setup/profile_pictures/Space/033-planet.svg +1 -0
  2485. vibe_surf/langflow/initial_setup/profile_pictures/Space/034-alien.svg +1 -0
  2486. vibe_surf/langflow/initial_setup/profile_pictures/Space/035-globe.svg +1 -0
  2487. vibe_surf/langflow/initial_setup/profile_pictures/Space/036-eclipse.svg +1 -0
  2488. vibe_surf/langflow/initial_setup/profile_pictures/Space/037-meteor.svg +1 -0
  2489. vibe_surf/langflow/initial_setup/profile_pictures/Space/038-eclipse.svg +1 -0
  2490. vibe_surf/langflow/initial_setup/profile_pictures/Space/039-Asteroid.svg +1 -0
  2491. vibe_surf/langflow/initial_setup/profile_pictures/Space/040-mission.svg +1 -0
  2492. vibe_surf/langflow/initial_setup/profile_pictures/Space/041-spaceship.svg +1 -0
  2493. vibe_surf/langflow/initial_setup/profile_pictures/Space/042-space shuttle.svg +1 -0
  2494. vibe_surf/langflow/initial_setup/profile_pictures/Space/043-space shuttle.svg +1 -0
  2495. vibe_surf/langflow/initial_setup/profile_pictures/Space/044-rocket.svg +1 -0
  2496. vibe_surf/langflow/initial_setup/profile_pictures/Space/045-astronaut.svg +1 -0
  2497. vibe_surf/langflow/initial_setup/profile_pictures/Space/046-rocket.svg +1 -0
  2498. vibe_surf/langflow/initial_setup/profile_pictures/Space/047-computer.svg +1 -0
  2499. vibe_surf/langflow/initial_setup/profile_pictures/Space/048-satellite.svg +1 -0
  2500. vibe_surf/langflow/initial_setup/profile_pictures/Space/049-astronaut.svg +1 -0
  2501. vibe_surf/langflow/initial_setup/profile_pictures/Space/050-space robot.svg +1 -0
  2502. vibe_surf/langflow/initial_setup/setup.py +1108 -0
  2503. vibe_surf/langflow/initial_setup/starter_projects/Basic Prompt Chaining.json +1976 -0
  2504. vibe_surf/langflow/initial_setup/starter_projects/Basic Prompting.json +1051 -0
  2505. vibe_surf/langflow/initial_setup/starter_projects/Blog Writer.json +1529 -0
  2506. vibe_surf/langflow/initial_setup/starter_projects/Custom Component Generator.json +2671 -0
  2507. vibe_surf/langflow/initial_setup/starter_projects/Document Q&A.json +1522 -0
  2508. vibe_surf/langflow/initial_setup/starter_projects/Financial Report Parser.json +1418 -0
  2509. vibe_surf/langflow/initial_setup/starter_projects/Hybrid Search RAG.json +2718 -0
  2510. vibe_surf/langflow/initial_setup/starter_projects/Image Sentiment Analysis.json +1884 -0
  2511. vibe_surf/langflow/initial_setup/starter_projects/Instagram Copywriter.json +3069 -0
  2512. vibe_surf/langflow/initial_setup/starter_projects/Invoice Summarizer.json +1666 -0
  2513. vibe_surf/langflow/initial_setup/starter_projects/Knowledge Ingestion.json +1042 -0
  2514. vibe_surf/langflow/initial_setup/starter_projects/Knowledge Retrieval.json +630 -0
  2515. vibe_surf/langflow/initial_setup/starter_projects/Market Research.json +2532 -0
  2516. vibe_surf/langflow/initial_setup/starter_projects/Meeting Summary.json +3263 -0
  2517. vibe_surf/langflow/initial_setup/starter_projects/Memory Chatbot.json +1419 -0
  2518. vibe_surf/langflow/initial_setup/starter_projects/News Aggregator.json +1835 -0
  2519. vibe_surf/langflow/initial_setup/starter_projects/Nvidia Remix.json +4866 -0
  2520. vibe_surf/langflow/initial_setup/starter_projects/Pok/303/251dex Agent.json" +1739 -0
  2521. vibe_surf/langflow/initial_setup/starter_projects/Portfolio Website Code Generator.json +2243 -0
  2522. vibe_surf/langflow/initial_setup/starter_projects/Price Deal Finder.json +2099 -0
  2523. vibe_surf/langflow/initial_setup/starter_projects/Research Agent.json +3032 -0
  2524. vibe_surf/langflow/initial_setup/starter_projects/Research Translation Loop.json +1580 -0
  2525. vibe_surf/langflow/initial_setup/starter_projects/SEO Keyword Generator.json +1091 -0
  2526. vibe_surf/langflow/initial_setup/starter_projects/SaaS Pricing.json +1416 -0
  2527. vibe_surf/langflow/initial_setup/starter_projects/Search agent.json +1455 -0
  2528. vibe_surf/langflow/initial_setup/starter_projects/Sequential Tasks Agents.json +4101 -0
  2529. vibe_surf/langflow/initial_setup/starter_projects/Simple Agent.json +1841 -0
  2530. vibe_surf/langflow/initial_setup/starter_projects/Social Media Agent.json +1759 -0
  2531. vibe_surf/langflow/initial_setup/starter_projects/Text Sentiment Analysis.json +2557 -0
  2532. vibe_surf/langflow/initial_setup/starter_projects/Travel Planning Agents.json +3448 -0
  2533. vibe_surf/langflow/initial_setup/starter_projects/Twitter Thread Generator.json +1978 -0
  2534. vibe_surf/langflow/initial_setup/starter_projects/Vector Store RAG.json +4850 -0
  2535. vibe_surf/langflow/initial_setup/starter_projects/Youtube Analysis.json +2734 -0
  2536. vibe_surf/langflow/initial_setup/starter_projects/__init__.py +19 -0
  2537. vibe_surf/langflow/initial_setup/starter_projects/basic_prompting.py +28 -0
  2538. vibe_surf/langflow/initial_setup/starter_projects/blog_writer.py +46 -0
  2539. vibe_surf/langflow/initial_setup/starter_projects/complex_agent.py +96 -0
  2540. vibe_surf/langflow/initial_setup/starter_projects/document_qa.py +39 -0
  2541. vibe_surf/langflow/initial_setup/starter_projects/hierarchical_tasks_agent.py +69 -0
  2542. vibe_surf/langflow/initial_setup/starter_projects/memory_chatbot.py +31 -0
  2543. vibe_surf/langflow/initial_setup/starter_projects/sequential_tasks_agent.py +97 -0
  2544. vibe_surf/langflow/initial_setup/starter_projects/vector_store_rag.py +61 -0
  2545. vibe_surf/langflow/inputs/__init__.py +68 -0
  2546. vibe_surf/langflow/inputs/constants.py +2 -0
  2547. vibe_surf/langflow/inputs/input_mixin.py +312 -0
  2548. vibe_surf/langflow/inputs/inputs.py +706 -0
  2549. vibe_surf/langflow/inputs/utils.py +32 -0
  2550. vibe_surf/langflow/inputs/validators.py +19 -0
  2551. vibe_surf/langflow/interface/__init__.py +0 -0
  2552. vibe_surf/langflow/interface/components.py +496 -0
  2553. vibe_surf/langflow/interface/importing/__init__.py +5 -0
  2554. vibe_surf/langflow/interface/importing/utils.py +39 -0
  2555. vibe_surf/langflow/interface/initialize/__init__.py +3 -0
  2556. vibe_surf/langflow/interface/initialize/loading.py +200 -0
  2557. vibe_surf/langflow/interface/listing.py +26 -0
  2558. vibe_surf/langflow/interface/run.py +45 -0
  2559. vibe_surf/langflow/interface/utils.py +112 -0
  2560. vibe_surf/langflow/io/__init__.py +63 -0
  2561. vibe_surf/langflow/io/schema.py +304 -0
  2562. vibe_surf/langflow/langflow_launcher.py +51 -0
  2563. vibe_surf/langflow/legacy_custom/__init__.py +0 -0
  2564. vibe_surf/langflow/legacy_custom/customs.py +16 -0
  2565. vibe_surf/langflow/load/__init__.py +12 -0
  2566. vibe_surf/langflow/load/load.py +250 -0
  2567. vibe_surf/langflow/load/utils.py +126 -0
  2568. vibe_surf/langflow/logging/__init__.py +4 -0
  2569. vibe_surf/langflow/logging/logger.py +407 -0
  2570. vibe_surf/langflow/logging/setup.py +16 -0
  2571. vibe_surf/langflow/main.py +550 -0
  2572. vibe_surf/langflow/memory.py +326 -0
  2573. vibe_surf/langflow/middleware.py +59 -0
  2574. vibe_surf/langflow/processing/__init__.py +0 -0
  2575. vibe_surf/langflow/processing/process.py +216 -0
  2576. vibe_surf/langflow/processing/utils.py +25 -0
  2577. vibe_surf/langflow/py.typed +0 -0
  2578. vibe_surf/langflow/schema/__init__.py +6 -0
  2579. vibe_surf/langflow/schema/artifact.py +82 -0
  2580. vibe_surf/langflow/schema/content_block.py +62 -0
  2581. vibe_surf/langflow/schema/content_types.py +91 -0
  2582. vibe_surf/langflow/schema/data.py +306 -0
  2583. vibe_surf/langflow/schema/dataframe.py +206 -0
  2584. vibe_surf/langflow/schema/dotdict.py +71 -0
  2585. vibe_surf/langflow/schema/encoders.py +13 -0
  2586. vibe_surf/langflow/schema/graph.py +47 -0
  2587. vibe_surf/langflow/schema/image.py +128 -0
  2588. vibe_surf/langflow/schema/log.py +33 -0
  2589. vibe_surf/langflow/schema/message.py +483 -0
  2590. vibe_surf/langflow/schema/openai_responses_schemas.py +74 -0
  2591. vibe_surf/langflow/schema/playground_events.py +182 -0
  2592. vibe_surf/langflow/schema/properties.py +39 -0
  2593. vibe_surf/langflow/schema/schema.py +121 -0
  2594. vibe_surf/langflow/schema/serialize.py +14 -0
  2595. vibe_surf/langflow/schema/table.py +140 -0
  2596. vibe_surf/langflow/schema/validators.py +114 -0
  2597. vibe_surf/langflow/serialization/__init__.py +3 -0
  2598. vibe_surf/langflow/serialization/constants.py +2 -0
  2599. vibe_surf/langflow/serialization/serialization.py +320 -0
  2600. vibe_surf/langflow/server.py +70 -0
  2601. vibe_surf/langflow/services/__init__.py +4 -0
  2602. vibe_surf/langflow/services/auth/__init__.py +0 -0
  2603. vibe_surf/langflow/services/auth/factory.py +15 -0
  2604. vibe_surf/langflow/services/auth/mcp_encryption.py +120 -0
  2605. vibe_surf/langflow/services/auth/service.py +15 -0
  2606. vibe_surf/langflow/services/auth/utils.py +583 -0
  2607. vibe_surf/langflow/services/base.py +28 -0
  2608. vibe_surf/langflow/services/cache/__init__.py +12 -0
  2609. vibe_surf/langflow/services/cache/base.py +183 -0
  2610. vibe_surf/langflow/services/cache/disk.py +95 -0
  2611. vibe_surf/langflow/services/cache/factory.py +44 -0
  2612. vibe_surf/langflow/services/cache/service.py +355 -0
  2613. vibe_surf/langflow/services/cache/utils.py +169 -0
  2614. vibe_surf/langflow/services/chat/__init__.py +0 -0
  2615. vibe_surf/langflow/services/chat/cache.py +150 -0
  2616. vibe_surf/langflow/services/chat/config.py +2 -0
  2617. vibe_surf/langflow/services/chat/factory.py +11 -0
  2618. vibe_surf/langflow/services/chat/schema.py +10 -0
  2619. vibe_surf/langflow/services/chat/service.py +67 -0
  2620. vibe_surf/langflow/services/database/__init__.py +0 -0
  2621. vibe_surf/langflow/services/database/factory.py +21 -0
  2622. vibe_surf/langflow/services/database/models/__init__.py +19 -0
  2623. vibe_surf/langflow/services/database/models/api_key/__init__.py +3 -0
  2624. vibe_surf/langflow/services/database/models/api_key/crud.py +74 -0
  2625. vibe_surf/langflow/services/database/models/api_key/model.py +66 -0
  2626. vibe_surf/langflow/services/database/models/base.py +17 -0
  2627. vibe_surf/langflow/services/database/models/file/__init__.py +5 -0
  2628. vibe_surf/langflow/services/database/models/file/crud.py +14 -0
  2629. vibe_surf/langflow/services/database/models/file/model.py +19 -0
  2630. vibe_surf/langflow/services/database/models/flow/__init__.py +3 -0
  2631. vibe_surf/langflow/services/database/models/flow/model.py +283 -0
  2632. vibe_surf/langflow/services/database/models/flow/schema.py +6 -0
  2633. vibe_surf/langflow/services/database/models/flow/utils.py +42 -0
  2634. vibe_surf/langflow/services/database/models/folder/__init__.py +3 -0
  2635. vibe_surf/langflow/services/database/models/folder/constants.py +2 -0
  2636. vibe_surf/langflow/services/database/models/folder/model.py +61 -0
  2637. vibe_surf/langflow/services/database/models/folder/pagination_model.py +10 -0
  2638. vibe_surf/langflow/services/database/models/folder/utils.py +45 -0
  2639. vibe_surf/langflow/services/database/models/message/__init__.py +3 -0
  2640. vibe_surf/langflow/services/database/models/message/crud.py +26 -0
  2641. vibe_surf/langflow/services/database/models/message/model.py +182 -0
  2642. vibe_surf/langflow/services/database/models/transactions/__init__.py +3 -0
  2643. vibe_surf/langflow/services/database/models/transactions/crud.py +82 -0
  2644. vibe_surf/langflow/services/database/models/transactions/model.py +65 -0
  2645. vibe_surf/langflow/services/database/models/user/__init__.py +8 -0
  2646. vibe_surf/langflow/services/database/models/user/crud.py +69 -0
  2647. vibe_surf/langflow/services/database/models/user/model.py +82 -0
  2648. vibe_surf/langflow/services/database/models/variable/__init__.py +3 -0
  2649. vibe_surf/langflow/services/database/models/variable/model.py +73 -0
  2650. vibe_surf/langflow/services/database/models/vertex_builds/__init__.py +3 -0
  2651. vibe_surf/langflow/services/database/models/vertex_builds/crud.py +145 -0
  2652. vibe_surf/langflow/services/database/models/vertex_builds/model.py +83 -0
  2653. vibe_surf/langflow/services/database/service.py +485 -0
  2654. vibe_surf/langflow/services/database/session.py +62 -0
  2655. vibe_surf/langflow/services/database/utils.py +88 -0
  2656. vibe_surf/langflow/services/deps.py +259 -0
  2657. vibe_surf/langflow/services/factory.py +88 -0
  2658. vibe_surf/langflow/services/flow/__init__.py +0 -0
  2659. vibe_surf/langflow/services/flow/flow_runner.py +265 -0
  2660. vibe_surf/langflow/services/job_queue/__init__.py +0 -0
  2661. vibe_surf/langflow/services/job_queue/factory.py +11 -0
  2662. vibe_surf/langflow/services/job_queue/service.py +328 -0
  2663. vibe_surf/langflow/services/manager.py +149 -0
  2664. vibe_surf/langflow/services/mcp_composer/__init__.py +6 -0
  2665. vibe_surf/langflow/services/mcp_composer/factory.py +15 -0
  2666. vibe_surf/langflow/services/mcp_composer/service.py +591 -0
  2667. vibe_surf/langflow/services/schema.py +23 -0
  2668. vibe_surf/langflow/services/session/__init__.py +0 -0
  2669. vibe_surf/langflow/services/session/factory.py +18 -0
  2670. vibe_surf/langflow/services/session/service.py +63 -0
  2671. vibe_surf/langflow/services/session/utils.py +18 -0
  2672. vibe_surf/langflow/services/settings/__init__.py +3 -0
  2673. vibe_surf/langflow/services/settings/auth.py +147 -0
  2674. vibe_surf/langflow/services/settings/base.py +587 -0
  2675. vibe_surf/langflow/services/settings/constants.py +34 -0
  2676. vibe_surf/langflow/services/settings/factory.py +22 -0
  2677. vibe_surf/langflow/services/settings/feature_flags.py +11 -0
  2678. vibe_surf/langflow/services/settings/manager.py +49 -0
  2679. vibe_surf/langflow/services/settings/service.py +32 -0
  2680. vibe_surf/langflow/services/settings/utils.py +40 -0
  2681. vibe_surf/langflow/services/shared_component_cache/__init__.py +0 -0
  2682. vibe_surf/langflow/services/shared_component_cache/factory.py +18 -0
  2683. vibe_surf/langflow/services/shared_component_cache/service.py +7 -0
  2684. vibe_surf/langflow/services/socket/__init__.py +0 -0
  2685. vibe_surf/langflow/services/socket/factory.py +20 -0
  2686. vibe_surf/langflow/services/socket/service.py +84 -0
  2687. vibe_surf/langflow/services/socket/utils.py +112 -0
  2688. vibe_surf/langflow/services/state/__init__.py +0 -0
  2689. vibe_surf/langflow/services/state/factory.py +16 -0
  2690. vibe_surf/langflow/services/state/service.py +82 -0
  2691. vibe_surf/langflow/services/storage/__init__.py +0 -0
  2692. vibe_surf/langflow/services/storage/constants.py +28 -0
  2693. vibe_surf/langflow/services/storage/factory.py +30 -0
  2694. vibe_surf/langflow/services/storage/local.py +127 -0
  2695. vibe_surf/langflow/services/storage/s3.py +105 -0
  2696. vibe_surf/langflow/services/storage/service.py +51 -0
  2697. vibe_surf/langflow/services/storage/utils.py +5 -0
  2698. vibe_surf/langflow/services/store/__init__.py +0 -0
  2699. vibe_surf/langflow/services/store/exceptions.py +25 -0
  2700. vibe_surf/langflow/services/store/factory.py +20 -0
  2701. vibe_surf/langflow/services/store/schema.py +74 -0
  2702. vibe_surf/langflow/services/store/service.py +600 -0
  2703. vibe_surf/langflow/services/store/utils.py +67 -0
  2704. vibe_surf/langflow/services/task/__init__.py +0 -0
  2705. vibe_surf/langflow/services/task/backends/__init__.py +0 -0
  2706. vibe_surf/langflow/services/task/backends/anyio.py +117 -0
  2707. vibe_surf/langflow/services/task/backends/base.py +15 -0
  2708. vibe_surf/langflow/services/task/backends/celery.py +29 -0
  2709. vibe_surf/langflow/services/task/factory.py +14 -0
  2710. vibe_surf/langflow/services/task/service.py +40 -0
  2711. vibe_surf/langflow/services/task/temp_flow_cleanup.py +136 -0
  2712. vibe_surf/langflow/services/task/utils.py +23 -0
  2713. vibe_surf/langflow/services/telemetry/__init__.py +0 -0
  2714. vibe_surf/langflow/services/telemetry/factory.py +20 -0
  2715. vibe_surf/langflow/services/telemetry/opentelemetry.py +253 -0
  2716. vibe_surf/langflow/services/telemetry/schema.py +45 -0
  2717. vibe_surf/langflow/services/telemetry/service.py +281 -0
  2718. vibe_surf/langflow/services/tracing/__init__.py +0 -0
  2719. vibe_surf/langflow/services/tracing/arize_phoenix.py +375 -0
  2720. vibe_surf/langflow/services/tracing/base.py +71 -0
  2721. vibe_surf/langflow/services/tracing/factory.py +20 -0
  2722. vibe_surf/langflow/services/tracing/langfuse.py +170 -0
  2723. vibe_surf/langflow/services/tracing/langsmith.py +208 -0
  2724. vibe_surf/langflow/services/tracing/langwatch.py +185 -0
  2725. vibe_surf/langflow/services/tracing/opik.py +235 -0
  2726. vibe_surf/langflow/services/tracing/schema.py +20 -0
  2727. vibe_surf/langflow/services/tracing/service.py +460 -0
  2728. vibe_surf/langflow/services/tracing/traceloop.py +244 -0
  2729. vibe_surf/langflow/services/tracing/utils.py +29 -0
  2730. vibe_surf/langflow/services/utils.py +246 -0
  2731. vibe_surf/langflow/services/variable/__init__.py +0 -0
  2732. vibe_surf/langflow/services/variable/base.py +119 -0
  2733. vibe_surf/langflow/services/variable/constants.py +2 -0
  2734. vibe_surf/langflow/services/variable/factory.py +28 -0
  2735. vibe_surf/langflow/services/variable/kubernetes.py +204 -0
  2736. vibe_surf/langflow/services/variable/kubernetes_secrets.py +193 -0
  2737. vibe_surf/langflow/services/variable/service.py +195 -0
  2738. vibe_surf/langflow/settings.py +12 -0
  2739. vibe_surf/langflow/template/__init__.py +10 -0
  2740. vibe_surf/langflow/template/field/__init__.py +0 -0
  2741. vibe_surf/langflow/template/field/base.py +257 -0
  2742. vibe_surf/langflow/template/field/prompt.py +2 -0
  2743. vibe_surf/langflow/template/frontend_node/__init__.py +6 -0
  2744. vibe_surf/langflow/template/frontend_node/base.py +214 -0
  2745. vibe_surf/langflow/template/frontend_node/constants.py +65 -0
  2746. vibe_surf/langflow/template/frontend_node/custom_components.py +97 -0
  2747. vibe_surf/langflow/template/template/__init__.py +0 -0
  2748. vibe_surf/langflow/template/template/base.py +99 -0
  2749. vibe_surf/langflow/template/utils.py +217 -0
  2750. vibe_surf/langflow/type_extraction/__init__.py +0 -0
  2751. vibe_surf/langflow/type_extraction/type_extraction.py +78 -0
  2752. vibe_surf/langflow/utils/__init__.py +0 -0
  2753. vibe_surf/langflow/utils/async_helpers.py +42 -0
  2754. vibe_surf/langflow/utils/component_utils.py +147 -0
  2755. vibe_surf/langflow/utils/compression.py +19 -0
  2756. vibe_surf/langflow/utils/concurrency.py +60 -0
  2757. vibe_surf/langflow/utils/connection_string_parser.py +8 -0
  2758. vibe_surf/langflow/utils/constants.py +205 -0
  2759. vibe_surf/langflow/utils/data_structure.py +212 -0
  2760. vibe_surf/langflow/utils/image.py +102 -0
  2761. vibe_surf/langflow/utils/lazy_load.py +15 -0
  2762. vibe_surf/langflow/utils/migration.py +61 -0
  2763. vibe_surf/langflow/utils/payload.py +84 -0
  2764. vibe_surf/langflow/utils/schemas.py +117 -0
  2765. vibe_surf/langflow/utils/template_validation.py +284 -0
  2766. vibe_surf/langflow/utils/util.py +479 -0
  2767. vibe_surf/langflow/utils/util_strings.py +56 -0
  2768. vibe_surf/langflow/utils/validate.py +489 -0
  2769. vibe_surf/langflow/utils/version.py +72 -0
  2770. vibe_surf/langflow/utils/voice_utils.py +92 -0
  2771. vibe_surf/langflow/worker.py +37 -0
  2772. vibe_surf/llm/openai_compatible.py +2 -9
  2773. vibe_surf/logger.py +3 -3
  2774. vibe_surf/telemetry/__init__.py +60 -0
  2775. vibe_surf/telemetry/service.py +113 -0
  2776. vibe_surf/telemetry/views.py +188 -0
  2777. vibe_surf/tools/browser_use_tools.py +206 -44
  2778. vibe_surf/tools/composio_client.py +458 -0
  2779. vibe_surf/tools/file_system.py +7 -3
  2780. vibe_surf/tools/mcp_client.py +21 -2
  2781. vibe_surf/tools/utils.py +1540 -0
  2782. vibe_surf/tools/vibesurf_tools.py +980 -975
  2783. vibe_surf/tools/views.py +126 -8
  2784. vibe_surf/tools/website_api/__init__.py +0 -0
  2785. vibe_surf/tools/website_api/douyin/__init__.py +0 -0
  2786. vibe_surf/tools/website_api/douyin/client.py +861 -0
  2787. vibe_surf/tools/website_api/douyin/helpers.py +239 -0
  2788. vibe_surf/tools/website_api/weibo/__init__.py +0 -0
  2789. vibe_surf/tools/website_api/weibo/client.py +777 -0
  2790. vibe_surf/tools/website_api/weibo/helpers.py +997 -0
  2791. vibe_surf/tools/website_api/xhs/__init__.py +0 -0
  2792. vibe_surf/tools/website_api/xhs/client.py +814 -0
  2793. vibe_surf/tools/website_api/xhs/helpers.py +302 -0
  2794. vibe_surf/tools/website_api/youtube/__init__.py +32 -0
  2795. vibe_surf/tools/website_api/youtube/client.py +1267 -0
  2796. vibe_surf/tools/website_api/youtube/helpers.py +420 -0
  2797. vibe_surf/utils.py +34 -0
  2798. vibe_surf/workflows/Browser/browser_click_element.py +189 -0
  2799. vibe_surf/workflows/Browser/browser_drag_drop.py +81 -0
  2800. vibe_surf/workflows/Browser/browser_evaluate_js.py +178 -0
  2801. vibe_surf/workflows/Browser/browser_extract_content.py +197 -0
  2802. vibe_surf/workflows/Browser/browser_focus_element.py +153 -0
  2803. vibe_surf/workflows/Browser/browser_generate_js.py +85 -0
  2804. vibe_surf/workflows/Browser/browser_go_back.py +45 -0
  2805. vibe_surf/workflows/Browser/browser_go_forward.py +44 -0
  2806. vibe_surf/workflows/Browser/browser_hover_element.py +154 -0
  2807. vibe_surf/workflows/Browser/browser_html_content.py +73 -0
  2808. vibe_surf/workflows/Browser/browser_input_text.py +169 -0
  2809. vibe_surf/workflows/Browser/browser_navigate.py +50 -0
  2810. vibe_surf/workflows/Browser/browser_new_tab.py +50 -0
  2811. vibe_surf/workflows/Browser/browser_page_info.py +67 -0
  2812. vibe_surf/workflows/Browser/browser_press_key.py +51 -0
  2813. vibe_surf/workflows/Browser/browser_reload.py +44 -0
  2814. vibe_surf/workflows/Browser/browser_scroll.py +99 -0
  2815. vibe_surf/workflows/Browser/browser_search.py +88 -0
  2816. vibe_surf/workflows/Browser/browser_select_options.py +94 -0
  2817. vibe_surf/workflows/Browser/browser_session.py +54 -0
  2818. vibe_surf/workflows/Browser/browser_take_screenshot.py +76 -0
  2819. vibe_surf/workflows/Browser/browser_upload_file.py +178 -0
  2820. vibe_surf/workflows/Browser/browser_wait.py +46 -0
  2821. vibe_surf/workflows/Browser/close_browser_session.py +51 -0
  2822. vibe_surf/workflows/FileSystem/extract_content_from_file.py +112 -0
  2823. vibe_surf/workflows/FileSystem/load_json.py +136 -0
  2824. vibe_surf/workflows/Integrations/composio_api.py +279 -0
  2825. vibe_surf/workflows/Integrations/douyin.py +232 -0
  2826. vibe_surf/workflows/Integrations/dropbox_compnent.py +11 -0
  2827. vibe_surf/workflows/Integrations/github_composio.py +11 -0
  2828. vibe_surf/workflows/Integrations/gmail_composio.py +38 -0
  2829. vibe_surf/workflows/Integrations/googlecalendar_composio.py +11 -0
  2830. vibe_surf/workflows/Integrations/googlemeet_composio.py +11 -0
  2831. vibe_surf/workflows/Integrations/googletasks_composio.py +8 -0
  2832. vibe_surf/workflows/Integrations/linear_composio.py +11 -0
  2833. vibe_surf/workflows/Integrations/outlook_composio.py +11 -0
  2834. vibe_surf/workflows/Integrations/reddit_composio.py +11 -0
  2835. vibe_surf/workflows/Integrations/slack_composio.py +11 -0
  2836. vibe_surf/workflows/Integrations/slackbot_composio.py +11 -0
  2837. vibe_surf/workflows/Integrations/supabase_composio.py +11 -0
  2838. vibe_surf/workflows/Integrations/todoist_composio.py +11 -0
  2839. vibe_surf/workflows/Integrations/weibo.py +244 -0
  2840. vibe_surf/workflows/Integrations/xiaohongshu.py +229 -0
  2841. vibe_surf/workflows/Integrations/yahoo.py +103 -0
  2842. vibe_surf/workflows/Integrations/youtube.py +251 -0
  2843. vibe_surf/workflows/Integrations/youtube_composio.py +11 -0
  2844. vibe_surf/workflows/VibeSurf/advanced_search.py +166 -0
  2845. vibe_surf/workflows/VibeSurf/browser_use_agent.py +150 -0
  2846. vibe_surf/workflows/VibeSurf/llm_profiles.py +103 -0
  2847. vibe_surf/workflows/VibeSurf/select_dataframe.py +44 -0
  2848. vibe_surf/workflows/VibeSurf/variable_manager.py +140 -0
  2849. vibe_surf/workflows/VibeSurf/vibesurf_agent.py +113 -0
  2850. vibesurf-0.2.6.dist-info/METADATA +406 -0
  2851. vibesurf-0.2.6.dist-info/RECORD +2916 -0
  2852. vibesurf-0.2.6.dist-info/licenses/LICENSE +22 -0
  2853. vibesurf-0.1.26.dist-info/METADATA +0 -126
  2854. vibesurf-0.1.26.dist-info/RECORD +0 -104
  2855. vibesurf-0.1.26.dist-info/licenses/LICENSE +0 -201
  2856. {vibesurf-0.1.26.dist-info → vibesurf-0.2.6.dist-info}/WHEEL +0 -0
  2857. {vibesurf-0.1.26.dist-info → vibesurf-0.2.6.dist-info}/entry_points.txt +0 -0
  2858. {vibesurf-0.1.26.dist-info → vibesurf-0.2.6.dist-info}/top_level.txt +0 -0
@@ -0,0 +1,2557 @@
1
+ {
2
+ "data": {
3
+ "edges": [
4
+ {
5
+ "animated": false,
6
+ "className": "",
7
+ "data": {
8
+ "sourceHandle": {
9
+ "dataType": "Prompt",
10
+ "id": "Prompt-RaLHB",
11
+ "name": "prompt",
12
+ "output_types": [
13
+ "Message"
14
+ ]
15
+ },
16
+ "targetHandle": {
17
+ "fieldName": "input_value",
18
+ "id": "LanguageModelComponent-qFXT1",
19
+ "inputTypes": [
20
+ "Message"
21
+ ],
22
+ "type": "str"
23
+ }
24
+ },
25
+ "id": "reactflow__edge-Prompt-RaLHB{œdataTypeœ:œPromptœ,œidœ:œPrompt-RaLHBœ,œnameœ:œpromptœ,œoutput_typesœ:[œMessageœ]}-LanguageModelComponent-qFXT1{œfieldNameœ:œinput_valueœ,œidœ:œLanguageModelComponent-qFXT1œ,œinputTypesœ:[œMessageœ],œtypeœ:œstrœ}",
26
+ "selected": false,
27
+ "source": "Prompt-RaLHB",
28
+ "sourceHandle": "{œdataTypeœ: œPromptœ, œidœ: œPrompt-RaLHBœ, œnameœ: œpromptœ, œoutput_typesœ: [œMessageœ]}",
29
+ "target": "LanguageModelComponent-qFXT1",
30
+ "targetHandle": "{œfieldNameœ: œinput_valueœ, œidœ: œLanguageModelComponent-qFXT1œ, œinputTypesœ: [œMessageœ], œtypeœ: œstrœ}"
31
+ },
32
+ {
33
+ "animated": false,
34
+ "className": "",
35
+ "data": {
36
+ "sourceHandle": {
37
+ "dataType": "LanguageModelComponent",
38
+ "id": "LanguageModelComponent-qFXT1",
39
+ "name": "text_output",
40
+ "output_types": [
41
+ "Message"
42
+ ]
43
+ },
44
+ "targetHandle": {
45
+ "fieldName": "summary",
46
+ "id": "Prompt-C5FYM",
47
+ "inputTypes": [
48
+ "Message"
49
+ ],
50
+ "type": "str"
51
+ }
52
+ },
53
+ "id": "reactflow__edge-LanguageModelComponent-qFXT1{œdataTypeœ:œLanguageModelComponentœ,œidœ:œLanguageModelComponent-qFXT1œ,œnameœ:œtext_outputœ,œoutput_typesœ:[œMessageœ]}-Prompt-C5FYM{œfieldNameœ:œsummaryœ,œidœ:œPrompt-C5FYMœ,œinputTypesœ:[œMessageœ],œtypeœ:œstrœ}",
54
+ "selected": false,
55
+ "source": "LanguageModelComponent-qFXT1",
56
+ "sourceHandle": "{œdataTypeœ: œLanguageModelComponentœ, œidœ: œLanguageModelComponent-qFXT1œ, œnameœ: œtext_outputœ, œoutput_typesœ: [œMessageœ]}",
57
+ "target": "Prompt-C5FYM",
58
+ "targetHandle": "{œfieldNameœ: œsummaryœ, œidœ: œPrompt-C5FYMœ, œinputTypesœ: [œMessageœ], œtypeœ: œstrœ}"
59
+ },
60
+ {
61
+ "animated": false,
62
+ "className": "",
63
+ "data": {
64
+ "sourceHandle": {
65
+ "dataType": "Prompt",
66
+ "id": "Prompt-C5FYM",
67
+ "name": "prompt",
68
+ "output_types": [
69
+ "Message"
70
+ ]
71
+ },
72
+ "targetHandle": {
73
+ "fieldName": "input_value",
74
+ "id": "LanguageModelComponent-Wp3pC",
75
+ "inputTypes": [
76
+ "Message"
77
+ ],
78
+ "type": "str"
79
+ }
80
+ },
81
+ "id": "reactflow__edge-Prompt-C5FYM{œdataTypeœ:œPromptœ,œidœ:œPrompt-C5FYMœ,œnameœ:œpromptœ,œoutput_typesœ:[œMessageœ]}-LanguageModelComponent-Wp3pC{œfieldNameœ:œinput_valueœ,œidœ:œLanguageModelComponent-Wp3pCœ,œinputTypesœ:[œMessageœ],œtypeœ:œstrœ}",
82
+ "selected": false,
83
+ "source": "Prompt-C5FYM",
84
+ "sourceHandle": "{œdataTypeœ: œPromptœ, œidœ: œPrompt-C5FYMœ, œnameœ: œpromptœ, œoutput_typesœ: [œMessageœ]}",
85
+ "target": "LanguageModelComponent-Wp3pC",
86
+ "targetHandle": "{œfieldNameœ: œinput_valueœ, œidœ: œLanguageModelComponent-Wp3pCœ, œinputTypesœ: [œMessageœ], œtypeœ: œstrœ}"
87
+ },
88
+ {
89
+ "animated": false,
90
+ "className": "",
91
+ "data": {
92
+ "sourceHandle": {
93
+ "dataType": "LanguageModelComponent",
94
+ "id": "LanguageModelComponent-Wp3pC",
95
+ "name": "text_output",
96
+ "output_types": [
97
+ "Message"
98
+ ]
99
+ },
100
+ "targetHandle": {
101
+ "fieldName": "input_value",
102
+ "id": "ChatOutput-K40Du",
103
+ "inputTypes": [
104
+ "Data",
105
+ "DataFrame",
106
+ "Message"
107
+ ],
108
+ "type": "other"
109
+ }
110
+ },
111
+ "id": "reactflow__edge-LanguageModelComponent-Wp3pC{œdataTypeœ:œLanguageModelComponentœ,œidœ:œLanguageModelComponent-Wp3pCœ,œnameœ:œtext_outputœ,œoutput_typesœ:[œMessageœ]}-ChatOutput-K40Du{œfieldNameœ:œinput_valueœ,œidœ:œChatOutput-K40Duœ,œinputTypesœ:[œDataœ,œDataFrameœ,œMessageœ],œtypeœ:œotherœ}",
112
+ "selected": false,
113
+ "source": "LanguageModelComponent-Wp3pC",
114
+ "sourceHandle": "{œdataTypeœ: œLanguageModelComponentœ, œidœ: œLanguageModelComponent-Wp3pCœ, œnameœ: œtext_outputœ, œoutput_typesœ: [œMessageœ]}",
115
+ "target": "ChatOutput-K40Du",
116
+ "targetHandle": "{œfieldNameœ: œinput_valueœ, œidœ: œChatOutput-K40Duœ, œinputTypesœ: [œDataœ, œDataFrameœ, œMessageœ], œtypeœ: œotherœ}"
117
+ },
118
+ {
119
+ "animated": false,
120
+ "className": "",
121
+ "data": {
122
+ "sourceHandle": {
123
+ "dataType": "Prompt",
124
+ "id": "Prompt-dabhh",
125
+ "name": "prompt",
126
+ "output_types": [
127
+ "Message"
128
+ ]
129
+ },
130
+ "targetHandle": {
131
+ "fieldName": "system_message",
132
+ "id": "LanguageModelComponent-gYAmH",
133
+ "inputTypes": [
134
+ "Message"
135
+ ],
136
+ "type": "str"
137
+ }
138
+ },
139
+ "id": "reactflow__edge-Prompt-dabhh{œdataTypeœ:œPromptœ,œidœ:œPrompt-dabhhœ,œnameœ:œpromptœ,œoutput_typesœ:[œMessageœ]}-LanguageModelComponent-gYAmH{œfieldNameœ:œsystem_messageœ,œidœ:œLanguageModelComponent-gYAmHœ,œinputTypesœ:[œMessageœ],œtypeœ:œstrœ}",
140
+ "selected": false,
141
+ "source": "Prompt-dabhh",
142
+ "sourceHandle": "{œdataTypeœ: œPromptœ, œidœ: œPrompt-dabhhœ, œnameœ: œpromptœ, œoutput_typesœ: [œMessageœ]}",
143
+ "target": "LanguageModelComponent-gYAmH",
144
+ "targetHandle": "{œfieldNameœ: œsystem_messageœ, œidœ: œLanguageModelComponent-gYAmHœ, œinputTypesœ: [œMessageœ], œtypeœ: œstrœ}"
145
+ },
146
+ {
147
+ "animated": false,
148
+ "className": "",
149
+ "data": {
150
+ "sourceHandle": {
151
+ "dataType": "LanguageModelComponent",
152
+ "id": "LanguageModelComponent-gYAmH",
153
+ "name": "text_output",
154
+ "output_types": [
155
+ "Message"
156
+ ]
157
+ },
158
+ "targetHandle": {
159
+ "fieldName": "input_value",
160
+ "id": "ChatOutput-yiSgq",
161
+ "inputTypes": [
162
+ "Data",
163
+ "DataFrame",
164
+ "Message"
165
+ ],
166
+ "type": "other"
167
+ }
168
+ },
169
+ "id": "reactflow__edge-LanguageModelComponent-gYAmH{œdataTypeœ:œLanguageModelComponentœ,œidœ:œLanguageModelComponent-gYAmHœ,œnameœ:œtext_outputœ,œoutput_typesœ:[œMessageœ]}-ChatOutput-yiSgq{œfieldNameœ:œinput_valueœ,œidœ:œChatOutput-yiSgqœ,œinputTypesœ:[œDataœ,œDataFrameœ,œMessageœ],œtypeœ:œotherœ}",
170
+ "selected": false,
171
+ "source": "LanguageModelComponent-gYAmH",
172
+ "sourceHandle": "{œdataTypeœ: œLanguageModelComponentœ, œidœ: œLanguageModelComponent-gYAmHœ, œnameœ: œtext_outputœ, œoutput_typesœ: [œMessageœ]}",
173
+ "target": "ChatOutput-yiSgq",
174
+ "targetHandle": "{œfieldNameœ: œinput_valueœ, œidœ: œChatOutput-yiSgqœ, œinputTypesœ: [œDataœ, œDataFrameœ, œMessageœ], œtypeœ: œotherœ}"
175
+ },
176
+ {
177
+ "className": "",
178
+ "data": {
179
+ "sourceHandle": {
180
+ "dataType": "File",
181
+ "id": "File-oAEuF",
182
+ "name": "message",
183
+ "output_types": [
184
+ "Message"
185
+ ]
186
+ },
187
+ "targetHandle": {
188
+ "fieldName": "input_value",
189
+ "id": "LanguageModelComponent-gYAmH",
190
+ "inputTypes": [
191
+ "Message"
192
+ ],
193
+ "type": "str"
194
+ }
195
+ },
196
+ "id": "xy-edge__File-oAEuF{œdataTypeœ:œFileœ,œidœ:œFile-oAEuFœ,œnameœ:œmessageœ,œoutput_typesœ:[œMessageœ]}-LanguageModelComponent-gYAmH{œfieldNameœ:œinput_valueœ,œidœ:œLanguageModelComponent-gYAmHœ,œinputTypesœ:[œMessageœ],œtypeœ:œstrœ}",
197
+ "source": "File-oAEuF",
198
+ "sourceHandle": "{œdataTypeœ: œFileœ, œidœ: œFile-oAEuFœ, œnameœ: œmessageœ, œoutput_typesœ: [œMessageœ]}",
199
+ "target": "LanguageModelComponent-gYAmH",
200
+ "targetHandle": "{œfieldNameœ: œinput_valueœ, œidœ: œLanguageModelComponent-gYAmHœ, œinputTypesœ: [œMessageœ], œtypeœ: œstrœ}"
201
+ },
202
+ {
203
+ "className": "",
204
+ "data": {
205
+ "sourceHandle": {
206
+ "dataType": "File",
207
+ "id": "File-oAEuF",
208
+ "name": "message",
209
+ "output_types": [
210
+ "Message"
211
+ ]
212
+ },
213
+ "targetHandle": {
214
+ "fieldName": "text",
215
+ "id": "Prompt-RaLHB",
216
+ "inputTypes": [
217
+ "Message"
218
+ ],
219
+ "type": "str"
220
+ }
221
+ },
222
+ "id": "xy-edge__File-oAEuF{œdataTypeœ:œFileœ,œidœ:œFile-oAEuFœ,œnameœ:œmessageœ,œoutput_typesœ:[œMessageœ]}-Prompt-RaLHB{œfieldNameœ:œtextœ,œidœ:œPrompt-RaLHBœ,œinputTypesœ:[œMessageœ],œtypeœ:œstrœ}",
223
+ "source": "File-oAEuF",
224
+ "sourceHandle": "{œdataTypeœ: œFileœ, œidœ: œFile-oAEuFœ, œnameœ: œmessageœ, œoutput_typesœ: [œMessageœ]}",
225
+ "target": "Prompt-RaLHB",
226
+ "targetHandle": "{œfieldNameœ: œtextœ, œidœ: œPrompt-RaLHBœ, œinputTypesœ: [œMessageœ], œtypeœ: œstrœ}"
227
+ }
228
+ ],
229
+ "nodes": [
230
+ {
231
+ "data": {
232
+ "id": "Prompt-C5FYM",
233
+ "node": {
234
+ "base_classes": [
235
+ "Message"
236
+ ],
237
+ "beta": false,
238
+ "conditional_paths": [],
239
+ "custom_fields": {
240
+ "template": [
241
+ "summary"
242
+ ]
243
+ },
244
+ "description": "Create a prompt template with dynamic variables.",
245
+ "display_name": "Prompt",
246
+ "documentation": "",
247
+ "edited": false,
248
+ "field_order": [
249
+ "template",
250
+ "tool_placeholder"
251
+ ],
252
+ "frozen": false,
253
+ "icon": "braces",
254
+ "legacy": false,
255
+ "metadata": {},
256
+ "minimized": false,
257
+ "output_types": [],
258
+ "outputs": [
259
+ {
260
+ "allows_loop": false,
261
+ "cache": true,
262
+ "display_name": "Prompt",
263
+ "group_outputs": false,
264
+ "method": "build_prompt",
265
+ "name": "prompt",
266
+ "selected": "Message",
267
+ "tool_mode": true,
268
+ "types": [
269
+ "Message"
270
+ ],
271
+ "value": "__UNDEFINED__"
272
+ }
273
+ ],
274
+ "pinned": false,
275
+ "template": {
276
+ "_type": "Component",
277
+ "code": {
278
+ "advanced": true,
279
+ "dynamic": true,
280
+ "fileTypes": [],
281
+ "file_path": "",
282
+ "info": "",
283
+ "list": false,
284
+ "load_from_db": false,
285
+ "multiline": true,
286
+ "name": "code",
287
+ "password": false,
288
+ "placeholder": "",
289
+ "required": true,
290
+ "show": true,
291
+ "title_case": false,
292
+ "type": "code",
293
+ "value": "from vibe_surf.langflow.base.prompts.api_utils import process_prompt_template\nfrom vibe_surf.langflow.custom.custom_component.component import Component\nfrom vibe_surf.langflow.inputs.inputs import DefaultPromptField\nfrom vibe_surf.langflow.io import MessageTextInput, Output, PromptInput\nfrom vibe_surf.langflow.schema.message import Message\nfrom vibe_surf.langflow.template.utils import update_template_values\n\n\nclass PromptComponent(Component):\n display_name: str = \"Prompt\"\n description: str = \"Create a prompt template with dynamic variables.\"\n icon = \"braces\"\n trace_type = \"prompt\"\n name = \"Prompt\"\n\n inputs = [\n PromptInput(name=\"template\", display_name=\"Template\"),\n MessageTextInput(\n name=\"tool_placeholder\",\n display_name=\"Tool Placeholder\",\n tool_mode=True,\n advanced=True,\n info=\"A placeholder input for tool mode.\",\n ),\n ]\n\n outputs = [\n Output(display_name=\"Prompt\", name=\"prompt\", method=\"build_prompt\"),\n ]\n\n async def build_prompt(self) -> Message:\n prompt = Message.from_template(**self._attributes)\n self.status = prompt.text\n return prompt\n\n def _update_template(self, frontend_node: dict):\n prompt_template = frontend_node[\"template\"][\"template\"][\"value\"]\n custom_fields = frontend_node[\"custom_fields\"]\n frontend_node_template = frontend_node[\"template\"]\n _ = process_prompt_template(\n template=prompt_template,\n name=\"template\",\n custom_fields=custom_fields,\n frontend_node_template=frontend_node_template,\n )\n return frontend_node\n\n async def update_frontend_node(self, new_frontend_node: dict, current_frontend_node: dict):\n \"\"\"This function is called after the code validation is done.\"\"\"\n frontend_node = await super().update_frontend_node(new_frontend_node, current_frontend_node)\n template = frontend_node[\"template\"][\"template\"][\"value\"]\n # Kept it duplicated for backwards compatibility\n _ = process_prompt_template(\n template=template,\n name=\"template\",\n custom_fields=frontend_node[\"custom_fields\"],\n frontend_node_template=frontend_node[\"template\"],\n )\n # Now that template is updated, we need to grab any values that were set in the current_frontend_node\n # and update the frontend_node with those values\n update_template_values(new_template=frontend_node, previous_template=current_frontend_node[\"template\"])\n return frontend_node\n\n def _get_fallback_input(self, **kwargs):\n return DefaultPromptField(**kwargs)\n"
294
+ },
295
+ "summary": {
296
+ "advanced": false,
297
+ "display_name": "summary",
298
+ "dynamic": false,
299
+ "field_type": "str",
300
+ "fileTypes": [],
301
+ "file_path": "",
302
+ "info": "",
303
+ "input_types": [
304
+ "Message"
305
+ ],
306
+ "list": false,
307
+ "load_from_db": false,
308
+ "multiline": true,
309
+ "name": "summary",
310
+ "placeholder": "",
311
+ "required": false,
312
+ "show": true,
313
+ "title_case": false,
314
+ "type": "str",
315
+ "value": ""
316
+ },
317
+ "template": {
318
+ "_input_type": "PromptInput",
319
+ "advanced": false,
320
+ "display_name": "Template",
321
+ "dynamic": false,
322
+ "info": "",
323
+ "list": false,
324
+ "list_add_label": "Add More",
325
+ "load_from_db": false,
326
+ "name": "template",
327
+ "placeholder": "",
328
+ "required": false,
329
+ "show": true,
330
+ "title_case": false,
331
+ "tool_mode": false,
332
+ "trace_as_input": true,
333
+ "type": "prompt",
334
+ "value": "Based on the following summary of discussions in the Langflow community, generate a well-structured and actionable technical recommendation for the development team. The recommendation should be clear, precise, and directly applicable to improve vibe_surf.langflow.\n\nGuidelines for the Action Item:\nBe Specific: Clearly define the issue, feature request, or improvement.\nProvide Context: Briefly justify why this action is necessary based on user discussions.\nSuggest a Next Step: Outline what the technical team should do to address the issue or enhance the platform.\nPrioritize if Relevant: If multiple issues are discussed, focus on the most urgent or impactful one.\n\nSummary:\n{summary}\n\nProvide a concise, structured, and technically sound action item that the Langflow team can implement.\n\nreturn:\n- {summary}\n- [action item]\n- [sentiment]\n- [start_date]\n- [end_date]\n\nyou need to return the data in json format\n\nReturn Format:\nEnsure that both \"summary\" and \"action_item\" are single string values, not lists and without nested objects or additional keys.\n\n"
335
+ },
336
+ "tool_placeholder": {
337
+ "_input_type": "MessageTextInput",
338
+ "advanced": true,
339
+ "display_name": "Tool Placeholder",
340
+ "dynamic": false,
341
+ "info": "A placeholder input for tool mode.",
342
+ "input_types": [
343
+ "Message"
344
+ ],
345
+ "list": false,
346
+ "list_add_label": "Add More",
347
+ "load_from_db": false,
348
+ "name": "tool_placeholder",
349
+ "placeholder": "",
350
+ "required": false,
351
+ "show": true,
352
+ "title_case": false,
353
+ "tool_mode": true,
354
+ "trace_as_input": true,
355
+ "trace_as_metadata": true,
356
+ "type": "str",
357
+ "value": ""
358
+ }
359
+ },
360
+ "tool_mode": false
361
+ },
362
+ "selected_output": "prompt",
363
+ "showNode": true,
364
+ "type": "Prompt"
365
+ },
366
+ "dragging": false,
367
+ "id": "Prompt-C5FYM",
368
+ "measured": {
369
+ "height": 366,
370
+ "width": 320
371
+ },
372
+ "position": {
373
+ "x": -973.805557188769,
374
+ "y": 1081.112870159395
375
+ },
376
+ "selected": false,
377
+ "type": "genericNode"
378
+ },
379
+ {
380
+ "data": {
381
+ "id": "Prompt-RaLHB",
382
+ "node": {
383
+ "base_classes": [
384
+ "Message"
385
+ ],
386
+ "beta": false,
387
+ "conditional_paths": [],
388
+ "custom_fields": {
389
+ "template": [
390
+ "text"
391
+ ]
392
+ },
393
+ "description": "Create a prompt template with dynamic variables.",
394
+ "display_name": "Prompt",
395
+ "documentation": "",
396
+ "edited": false,
397
+ "error": null,
398
+ "field_order": [
399
+ "template",
400
+ "tool_placeholder"
401
+ ],
402
+ "frozen": false,
403
+ "full_path": null,
404
+ "icon": "braces",
405
+ "is_composition": null,
406
+ "is_input": null,
407
+ "is_output": null,
408
+ "legacy": false,
409
+ "metadata": {},
410
+ "minimized": false,
411
+ "name": "",
412
+ "output_types": [],
413
+ "outputs": [
414
+ {
415
+ "allows_loop": false,
416
+ "cache": true,
417
+ "display_name": "Prompt",
418
+ "group_outputs": false,
419
+ "method": "build_prompt",
420
+ "name": "prompt",
421
+ "selected": "Message",
422
+ "tool_mode": true,
423
+ "types": [
424
+ "Message"
425
+ ],
426
+ "value": "__UNDEFINED__"
427
+ }
428
+ ],
429
+ "pinned": false,
430
+ "priority": null,
431
+ "template": {
432
+ "_type": "Component",
433
+ "code": {
434
+ "advanced": true,
435
+ "dynamic": true,
436
+ "fileTypes": [],
437
+ "file_path": "",
438
+ "info": "",
439
+ "list": false,
440
+ "load_from_db": false,
441
+ "multiline": true,
442
+ "name": "code",
443
+ "password": false,
444
+ "placeholder": "",
445
+ "required": true,
446
+ "show": true,
447
+ "title_case": false,
448
+ "type": "code",
449
+ "value": "from vibe_surf.langflow.base.prompts.api_utils import process_prompt_template\nfrom vibe_surf.langflow.custom.custom_component.component import Component\nfrom vibe_surf.langflow.inputs.inputs import DefaultPromptField\nfrom vibe_surf.langflow.io import MessageTextInput, Output, PromptInput\nfrom vibe_surf.langflow.schema.message import Message\nfrom vibe_surf.langflow.template.utils import update_template_values\n\n\nclass PromptComponent(Component):\n display_name: str = \"Prompt\"\n description: str = \"Create a prompt template with dynamic variables.\"\n icon = \"braces\"\n trace_type = \"prompt\"\n name = \"Prompt\"\n\n inputs = [\n PromptInput(name=\"template\", display_name=\"Template\"),\n MessageTextInput(\n name=\"tool_placeholder\",\n display_name=\"Tool Placeholder\",\n tool_mode=True,\n advanced=True,\n info=\"A placeholder input for tool mode.\",\n ),\n ]\n\n outputs = [\n Output(display_name=\"Prompt\", name=\"prompt\", method=\"build_prompt\"),\n ]\n\n async def build_prompt(self) -> Message:\n prompt = Message.from_template(**self._attributes)\n self.status = prompt.text\n return prompt\n\n def _update_template(self, frontend_node: dict):\n prompt_template = frontend_node[\"template\"][\"template\"][\"value\"]\n custom_fields = frontend_node[\"custom_fields\"]\n frontend_node_template = frontend_node[\"template\"]\n _ = process_prompt_template(\n template=prompt_template,\n name=\"template\",\n custom_fields=custom_fields,\n frontend_node_template=frontend_node_template,\n )\n return frontend_node\n\n async def update_frontend_node(self, new_frontend_node: dict, current_frontend_node: dict):\n \"\"\"This function is called after the code validation is done.\"\"\"\n frontend_node = await super().update_frontend_node(new_frontend_node, current_frontend_node)\n template = frontend_node[\"template\"][\"template\"][\"value\"]\n # Kept it duplicated for backwards compatibility\n _ = process_prompt_template(\n template=template,\n name=\"template\",\n custom_fields=frontend_node[\"custom_fields\"],\n frontend_node_template=frontend_node[\"template\"],\n )\n # Now that template is updated, we need to grab any values that were set in the current_frontend_node\n # and update the frontend_node with those values\n update_template_values(new_template=frontend_node, previous_template=current_frontend_node[\"template\"])\n return frontend_node\n\n def _get_fallback_input(self, **kwargs):\n return DefaultPromptField(**kwargs)\n"
450
+ },
451
+ "template": {
452
+ "_input_type": "PromptInput",
453
+ "advanced": false,
454
+ "display_name": "Template",
455
+ "dynamic": false,
456
+ "info": "",
457
+ "list": false,
458
+ "list_add_label": "Add More",
459
+ "load_from_db": false,
460
+ "name": "template",
461
+ "placeholder": "",
462
+ "required": false,
463
+ "show": true,
464
+ "title_case": false,
465
+ "tool_mode": false,
466
+ "trace_as_input": true,
467
+ "type": "prompt",
468
+ "value": "You are analyzing messages from an online community or discussion platform. Your task is to generate a well-structured, concise, and informative summary of the key discussions that took place in a specific channel or group during a given time period. This summary will provide actionable insights for community managers, stakeholders, or decision-makers. \n\nYou will receive a list of messages containing **message_id, created_at, and message_content**. \n\n### **Task 1: Summarization** \nFrom the **message_content**, generate a cohesive, flowing summary in paragraph form, avoiding bullet points or fragmented structures. The summary should be written in clear, professional English, ensuring a natural reading experience. \n\nFocus on the following key discussion areas (if applicable): \n- **Feature Requests & Enhancements**: Suggestions for new features, improvements, or emerging use cases. \n- **Issues & Problems**: Reports of challenges, technical difficulties, or troubleshooting discussions. \n- **Community Feedback**: Reactions to updates, usability concerns, and overall user sentiment. \n- **General Topics**: Broader discussions relevant to the platform, industry trends, or key interests of the community. \n\nMessages may be written in different languages, depending on the community. However, the summary must always be in English and should be structured as a natural, flowing narrative rather than a list of points. \n\n### **Task 2: Sentiment Analysis** \nAnalyze the overall **sentiment** of the summary based on user feedback, discussions, and general tone. The sentiment should reflect how the community perceives recent updates, issues, or the overall experience. \n\n#### **Classification Criteria:** \n- **Positive**: The discussion contains mostly favorable feedback, enthusiasm about new topics, successful problem resolutions, or constructive engagement. \n- **Neutral**: The discussion is balanced, with a mix of praise, constructive criticism, and open-ended conversations without strong emotions. \n- **Negative**: The discussion is dominated by frustrations, unresolved issues, strong criticisms, or concerns about the platform's direction. \n\n### **Input:** \nHere is the list of messages: \n{text} \n\n### **Return Format:** \n- **summary**: A cohesive, well-structured summary written in continuous prose, without bullet points. \n- **sentiment**: One of the sentiment categories (**Positive, Neutral, or Negative**). \n- **start_date**: The earliest message timestamp in the format **'yyyy-mm-dd'**. \n- **end_date**: The most recent message timestamp in the format **'yyyy-mm-dd'**. \n"
469
+ },
470
+ "text": {
471
+ "advanced": false,
472
+ "display_name": "text",
473
+ "dynamic": false,
474
+ "field_type": "str",
475
+ "fileTypes": [],
476
+ "file_path": "",
477
+ "info": "",
478
+ "input_types": [
479
+ "Message"
480
+ ],
481
+ "list": false,
482
+ "load_from_db": false,
483
+ "multiline": true,
484
+ "name": "text",
485
+ "placeholder": "",
486
+ "required": false,
487
+ "show": true,
488
+ "title_case": false,
489
+ "type": "str",
490
+ "value": ""
491
+ },
492
+ "tool_placeholder": {
493
+ "_input_type": "MessageTextInput",
494
+ "advanced": true,
495
+ "display_name": "Tool Placeholder",
496
+ "dynamic": false,
497
+ "info": "A placeholder input for tool mode.",
498
+ "input_types": [
499
+ "Message"
500
+ ],
501
+ "list": false,
502
+ "list_add_label": "Add More",
503
+ "load_from_db": false,
504
+ "name": "tool_placeholder",
505
+ "placeholder": "",
506
+ "required": false,
507
+ "show": true,
508
+ "title_case": false,
509
+ "tool_mode": true,
510
+ "trace_as_input": true,
511
+ "trace_as_metadata": true,
512
+ "type": "str",
513
+ "value": ""
514
+ }
515
+ },
516
+ "tool_mode": false
517
+ },
518
+ "selected_output": "prompt",
519
+ "showNode": true,
520
+ "type": "Prompt"
521
+ },
522
+ "dragging": false,
523
+ "id": "Prompt-RaLHB",
524
+ "measured": {
525
+ "height": 366,
526
+ "width": 320
527
+ },
528
+ "position": {
529
+ "x": -1691.3505617322087,
530
+ "y": 1010.953782441708
531
+ },
532
+ "selected": false,
533
+ "type": "genericNode"
534
+ },
535
+ {
536
+ "data": {
537
+ "id": "Prompt-dabhh",
538
+ "node": {
539
+ "base_classes": [
540
+ "Message"
541
+ ],
542
+ "beta": false,
543
+ "conditional_paths": [],
544
+ "custom_fields": {
545
+ "template": []
546
+ },
547
+ "description": "Create a prompt template with dynamic variables.",
548
+ "display_name": "Prompt",
549
+ "documentation": "",
550
+ "edited": false,
551
+ "field_order": [
552
+ "template",
553
+ "tool_placeholder"
554
+ ],
555
+ "frozen": false,
556
+ "icon": "braces",
557
+ "legacy": false,
558
+ "metadata": {},
559
+ "minimized": false,
560
+ "output_types": [],
561
+ "outputs": [
562
+ {
563
+ "allows_loop": false,
564
+ "cache": true,
565
+ "display_name": "Prompt",
566
+ "group_outputs": false,
567
+ "method": "build_prompt",
568
+ "name": "prompt",
569
+ "selected": "Message",
570
+ "tool_mode": true,
571
+ "types": [
572
+ "Message"
573
+ ],
574
+ "value": "__UNDEFINED__"
575
+ }
576
+ ],
577
+ "pinned": false,
578
+ "template": {
579
+ "_type": "Component",
580
+ "code": {
581
+ "advanced": true,
582
+ "dynamic": true,
583
+ "fileTypes": [],
584
+ "file_path": "",
585
+ "info": "",
586
+ "list": false,
587
+ "load_from_db": false,
588
+ "multiline": true,
589
+ "name": "code",
590
+ "password": false,
591
+ "placeholder": "",
592
+ "required": true,
593
+ "show": true,
594
+ "title_case": false,
595
+ "type": "code",
596
+ "value": "from vibe_surf.langflow.base.prompts.api_utils import process_prompt_template\nfrom vibe_surf.langflow.custom.custom_component.component import Component\nfrom vibe_surf.langflow.inputs.inputs import DefaultPromptField\nfrom vibe_surf.langflow.io import MessageTextInput, Output, PromptInput\nfrom vibe_surf.langflow.schema.message import Message\nfrom vibe_surf.langflow.template.utils import update_template_values\n\n\nclass PromptComponent(Component):\n display_name: str = \"Prompt\"\n description: str = \"Create a prompt template with dynamic variables.\"\n icon = \"braces\"\n trace_type = \"prompt\"\n name = \"Prompt\"\n\n inputs = [\n PromptInput(name=\"template\", display_name=\"Template\"),\n MessageTextInput(\n name=\"tool_placeholder\",\n display_name=\"Tool Placeholder\",\n tool_mode=True,\n advanced=True,\n info=\"A placeholder input for tool mode.\",\n ),\n ]\n\n outputs = [\n Output(display_name=\"Prompt\", name=\"prompt\", method=\"build_prompt\"),\n ]\n\n async def build_prompt(self) -> Message:\n prompt = Message.from_template(**self._attributes)\n self.status = prompt.text\n return prompt\n\n def _update_template(self, frontend_node: dict):\n prompt_template = frontend_node[\"template\"][\"template\"][\"value\"]\n custom_fields = frontend_node[\"custom_fields\"]\n frontend_node_template = frontend_node[\"template\"]\n _ = process_prompt_template(\n template=prompt_template,\n name=\"template\",\n custom_fields=custom_fields,\n frontend_node_template=frontend_node_template,\n )\n return frontend_node\n\n async def update_frontend_node(self, new_frontend_node: dict, current_frontend_node: dict):\n \"\"\"This function is called after the code validation is done.\"\"\"\n frontend_node = await super().update_frontend_node(new_frontend_node, current_frontend_node)\n template = frontend_node[\"template\"][\"template\"][\"value\"]\n # Kept it duplicated for backwards compatibility\n _ = process_prompt_template(\n template=template,\n name=\"template\",\n custom_fields=frontend_node[\"custom_fields\"],\n frontend_node_template=frontend_node[\"template\"],\n )\n # Now that template is updated, we need to grab any values that were set in the current_frontend_node\n # and update the frontend_node with those values\n update_template_values(new_template=frontend_node, previous_template=current_frontend_node[\"template\"])\n return frontend_node\n\n def _get_fallback_input(self, **kwargs):\n return DefaultPromptField(**kwargs)\n"
597
+ },
598
+ "template": {
599
+ "_input_type": "PromptInput",
600
+ "advanced": false,
601
+ "display_name": "Template",
602
+ "dynamic": false,
603
+ "info": "",
604
+ "list": false,
605
+ "list_add_label": "Add More",
606
+ "load_from_db": false,
607
+ "name": "template",
608
+ "placeholder": "",
609
+ "required": false,
610
+ "show": true,
611
+ "title_case": false,
612
+ "tool_mode": false,
613
+ "trace_as_input": true,
614
+ "type": "prompt",
615
+ "value": "You are an NLP expert assisting the technical team in analyzing user messages. The analysis will be used by the team to make decisions more effectively.\n\n**Task 1:**\n#### **1. Message Classification **\nClassify the message into a **single category** that best describes its purpose. Choose the category from the predefined list below. This classification will help the technical team identify specific themes and make decisions faster.\n\n- **Release Notes**: A message announcing updates, new features, integrations, important information about new versions for users.\n- **Feature Request**: A suggestion or idea for a new feature or enhancement.\n- **Bug Report**: A message reporting a clear technical failure, malfunction, or unexpected behavior in vibe_surf.langflow. The user explicitly describes an issue where: A feature does not work as expected; The system crashes, freezes, or behaves unpredictably.\n- **User Question**: Any question or uncertainty regarding features, functionality, implementation, or general use. This includes both technical questions and general doubts, regardless of complexity or specificity.\n- **Complaint**: A message expressing dissatisfaction or frustration with a feature or issue.\n- **Positive Feedback**: Messages expressing gratitude alongside useful feedback, such as confirming that an issue has been resolved or a feature works as intended.\n\n\n##### **Important Instructions for Classification:**\n- Ensure each message is classified into **only one category** based on its primary intent or purpose. If multiple intents are detected, select the most relevant category that reflects the user's main goal.\n- Do not create new categories or use freeform text for classification. Always use one of the predefined categories exactly as they appear in the list above.\n\n**task 2**\nAnalyze the sentiment of the message and classify it into one of the following categories:\n- **Positive**: The message conveys positivity, satisfaction, gratitude, or encouragement.\n- **Neutral**: The message is factual, descriptive, or lacks any emotional tone.\n- **Negative**: The message conveys frustration, dissatisfaction, or criticism.\n\n\nreturn:\n- [message_id]\n- [message_category] \n- [message_sentiment]\n\nYou need to output the results in JSON format.\n"
616
+ },
617
+ "tool_placeholder": {
618
+ "_input_type": "MessageTextInput",
619
+ "advanced": true,
620
+ "display_name": "Tool Placeholder",
621
+ "dynamic": false,
622
+ "info": "A placeholder input for tool mode.",
623
+ "input_types": [
624
+ "Message"
625
+ ],
626
+ "list": false,
627
+ "list_add_label": "Add More",
628
+ "load_from_db": false,
629
+ "name": "tool_placeholder",
630
+ "placeholder": "",
631
+ "required": false,
632
+ "show": true,
633
+ "title_case": false,
634
+ "tool_mode": true,
635
+ "trace_as_input": true,
636
+ "trace_as_metadata": true,
637
+ "type": "str",
638
+ "value": ""
639
+ }
640
+ },
641
+ "tool_mode": false
642
+ },
643
+ "showNode": true,
644
+ "type": "Prompt"
645
+ },
646
+ "dragging": false,
647
+ "id": "Prompt-dabhh",
648
+ "measured": {
649
+ "height": 283,
650
+ "width": 320
651
+ },
652
+ "position": {
653
+ "x": -1668.597994833308,
654
+ "y": 651.6625805464743
655
+ },
656
+ "selected": false,
657
+ "type": "genericNode"
658
+ },
659
+ {
660
+ "data": {
661
+ "id": "note-VyXUq",
662
+ "node": {
663
+ "description": "# Sentiment Analysis Flow \n\nThis flow processes text data, analyzes sentiment, and provides structured insights. \n\n## Prerequisite\n\n* [OpenAI API key](https://platform.openai.com/docs/)\n\n## Quickstart\n\n1. Add your [OpenAI API key](https://platform.openai.com/docs/) to the OpenAI model components.\n2. In the **File Component**, load text data in `.txt`, `.csv`, or `.json` formats.\n3. Open the **Playground** to see the analysis and recommendation the flow constructs.\n\n## How It Works \n\n1. The **Data to Message** component converts raw data into structured messages. \n\n2. The **NLP expert** prompt provides sentiment analysis, while the **Analyzing messages** prompt summarizes messages from a discussion board.\n\n3. The final **Prompt Component** creates a structured recommendation prompt to ensure that the AI model receives well-formatted input. \n\n4. The **OpenAI Model Component** processes the text and classifies the sentiment as **Positive, Neutral, or Negative**. \n\n",
664
+ "display_name": "",
665
+ "documentation": "",
666
+ "template": {}
667
+ },
668
+ "type": "note"
669
+ },
670
+ "dragging": false,
671
+ "height": 574,
672
+ "id": "note-VyXUq",
673
+ "measured": {
674
+ "height": 574,
675
+ "width": 412
676
+ },
677
+ "position": {
678
+ "x": -2540.3162463532744,
679
+ "y": 678.7879484347079
680
+ },
681
+ "resizing": false,
682
+ "selected": false,
683
+ "type": "noteNode",
684
+ "width": 412
685
+ },
686
+ {
687
+ "data": {
688
+ "id": "ChatOutput-yiSgq",
689
+ "node": {
690
+ "base_classes": [
691
+ "Message"
692
+ ],
693
+ "beta": false,
694
+ "conditional_paths": [],
695
+ "custom_fields": {},
696
+ "description": "Display a chat message in the Playground.",
697
+ "display_name": "Chat Output",
698
+ "documentation": "",
699
+ "edited": false,
700
+ "field_order": [
701
+ "input_value",
702
+ "should_store_message",
703
+ "sender",
704
+ "sender_name",
705
+ "session_id",
706
+ "data_template",
707
+ "background_color",
708
+ "chat_icon",
709
+ "text_color",
710
+ "clean_data"
711
+ ],
712
+ "frozen": false,
713
+ "icon": "MessagesSquare",
714
+ "legacy": false,
715
+ "metadata": {},
716
+ "minimized": true,
717
+ "output_types": [],
718
+ "outputs": [
719
+ {
720
+ "allows_loop": false,
721
+ "cache": true,
722
+ "display_name": "Output Message",
723
+ "group_outputs": false,
724
+ "method": "message_response",
725
+ "name": "message",
726
+ "selected": "Message",
727
+ "tool_mode": true,
728
+ "types": [
729
+ "Message"
730
+ ],
731
+ "value": "__UNDEFINED__"
732
+ }
733
+ ],
734
+ "pinned": false,
735
+ "template": {
736
+ "_type": "Component",
737
+ "code": {
738
+ "advanced": true,
739
+ "dynamic": true,
740
+ "fileTypes": [],
741
+ "file_path": "",
742
+ "info": "",
743
+ "list": false,
744
+ "load_from_db": false,
745
+ "multiline": true,
746
+ "name": "code",
747
+ "password": false,
748
+ "placeholder": "",
749
+ "required": true,
750
+ "show": true,
751
+ "title_case": false,
752
+ "type": "code",
753
+ "value": "from collections.abc import Generator\nfrom typing import Any\n\nimport orjson\nfrom fastapi.encoders import jsonable_encoder\n\nfrom vibe_surf.langflow.base.io.chat import ChatComponent\nfrom vibe_surf.langflow.helpers.data import safe_convert\nfrom vibe_surf.langflow.inputs.inputs import BoolInput, DropdownInput, HandleInput, MessageTextInput\nfrom vibe_surf.langflow.schema.data import Data\nfrom vibe_surf.langflow.schema.dataframe import DataFrame\nfrom vibe_surf.langflow.schema.message import Message\nfrom vibe_surf.langflow.schema.properties import Source\nfrom vibe_surf.langflow.template.field.base import Output\nfrom vibe_surf.langflow.utils.constants import (\n MESSAGE_SENDER_AI,\n MESSAGE_SENDER_NAME_AI,\n MESSAGE_SENDER_USER,\n)\n\n\nclass ChatOutput(ChatComponent):\n display_name = \"Chat Output\"\n description = \"Display a chat message in the Playground.\"\n documentation: str = \"https://docs.vibe_surf.langflow.org/components-io#chat-output\"\n icon = \"MessagesSquare\"\n name = \"ChatOutput\"\n minimized = True\n\n inputs = [\n HandleInput(\n name=\"input_value\",\n display_name=\"Inputs\",\n info=\"Message to be passed as output.\",\n input_types=[\"Data\", \"DataFrame\", \"Message\"],\n required=True,\n ),\n BoolInput(\n name=\"should_store_message\",\n display_name=\"Store Messages\",\n info=\"Store the message in the history.\",\n value=True,\n advanced=True,\n ),\n DropdownInput(\n name=\"sender\",\n display_name=\"Sender Type\",\n options=[MESSAGE_SENDER_AI, MESSAGE_SENDER_USER],\n value=MESSAGE_SENDER_AI,\n advanced=True,\n info=\"Type of sender.\",\n ),\n MessageTextInput(\n name=\"sender_name\",\n display_name=\"Sender Name\",\n info=\"Name of the sender.\",\n value=MESSAGE_SENDER_NAME_AI,\n advanced=True,\n ),\n MessageTextInput(\n name=\"session_id\",\n display_name=\"Session ID\",\n info=\"The session ID of the chat. If empty, the current session ID parameter will be used.\",\n advanced=True,\n ),\n MessageTextInput(\n name=\"data_template\",\n display_name=\"Data Template\",\n value=\"{text}\",\n advanced=True,\n info=\"Template to convert Data to Text. If left empty, it will be dynamically set to the Data's text key.\",\n ),\n ]\n outputs = [\n Output(\n display_name=\"Output Message\",\n name=\"message\",\n method=\"message_response\",\n ),\n ]\n\n def _build_source(self, id_: str | None, display_name: str | None, source: str | None) -> Source:\n source_dict = {}\n if id_:\n source_dict[\"id\"] = id_\n if display_name:\n source_dict[\"display_name\"] = display_name\n if source:\n # Handle case where source is a ChatOpenAI object\n if hasattr(source, \"model_name\"):\n source_dict[\"source\"] = source.model_name\n elif hasattr(source, \"model\"):\n source_dict[\"source\"] = str(source.model)\n else:\n source_dict[\"source\"] = str(source)\n return Source(**source_dict)\n\n async def message_response(self) -> Message:\n # First convert the input to string if needed\n text = self.convert_to_string()\n\n # Get source properties\n source, _icon, display_name, source_id = self.get_properties_from_source_component()\n\n # Create or use existing Message object\n if isinstance(self.input_value, Message):\n message = self.input_value\n # Update message properties\n message.text = text\n else:\n message = Message(text=text)\n\n # Set message properties\n message.sender = self.sender\n message.sender_name = self.sender_name\n message.session_id = self.session_id\n message.flow_id = self.graph.flow_id if hasattr(self, \"graph\") else None\n message.properties.source = self._build_source(source_id, display_name, source)\n\n # Store message if needed\n if self.session_id and self.should_store_message:\n stored_message = await self.send_message(message)\n self.message.value = stored_message\n message = stored_message\n\n self.status = message\n return message\n\n def _serialize_data(self, data: Data) -> str:\n \"\"\"Serialize Data object to JSON string.\"\"\"\n # Convert data.data to JSON-serializable format\n serializable_data = jsonable_encoder(data.data)\n # Serialize with orjson, enabling pretty printing with indentation\n json_bytes = orjson.dumps(serializable_data, option=orjson.OPT_INDENT_2)\n # Convert bytes to string and wrap in Markdown code blocks\n return \"```json\\n\" + json_bytes.decode(\"utf-8\") + \"\\n```\"\n\n def _validate_input(self) -> None:\n \"\"\"Validate the input data and raise ValueError if invalid.\"\"\"\n if self.input_value is None:\n msg = \"Input data cannot be None\"\n raise ValueError(msg)\n if isinstance(self.input_value, list) and not all(\n isinstance(item, Message | Data | DataFrame | str) for item in self.input_value\n ):\n invalid_types = [\n type(item).__name__\n for item in self.input_value\n if not isinstance(item, Message | Data | DataFrame | str)\n ]\n msg = f\"Expected Data or DataFrame or Message or str, got {invalid_types}\"\n raise TypeError(msg)\n if not isinstance(\n self.input_value,\n Message | Data | DataFrame | str | list | Generator | type(None),\n ):\n type_name = type(self.input_value).__name__\n msg = f\"Expected Data or DataFrame or Message or str, Generator or None, got {type_name}\"\n raise TypeError(msg)\n\n def convert_to_string(self) -> str | Generator[Any, None, None]:\n \"\"\"Convert input data to string with proper error handling.\"\"\"\n self._validate_input()\n if isinstance(self.input_value, list):\n clean_data: bool = getattr(self, \"clean_data\", False)\n return \"\\n\".join([safe_convert(item, clean_data=clean_data) for item in self.input_value])\n if isinstance(self.input_value, Generator):\n return self.input_value\n return safe_convert(self.input_value)\n"
754
+ },
755
+ "data_template": {
756
+ "_input_type": "MessageTextInput",
757
+ "advanced": true,
758
+ "display_name": "Data Template",
759
+ "dynamic": false,
760
+ "info": "Template to convert Data to Text. If left empty, it will be dynamically set to the Data's text key.",
761
+ "input_types": [
762
+ "Message"
763
+ ],
764
+ "list": false,
765
+ "list_add_label": "Add More",
766
+ "load_from_db": false,
767
+ "name": "data_template",
768
+ "placeholder": "",
769
+ "required": false,
770
+ "show": true,
771
+ "title_case": false,
772
+ "tool_mode": false,
773
+ "trace_as_input": true,
774
+ "trace_as_metadata": true,
775
+ "type": "str",
776
+ "value": "{text}"
777
+ },
778
+ "input_value": {
779
+ "_input_type": "HandleInput",
780
+ "advanced": false,
781
+ "display_name": "Inputs",
782
+ "dynamic": false,
783
+ "info": "Message to be passed as output.",
784
+ "input_types": [
785
+ "Data",
786
+ "DataFrame",
787
+ "Message"
788
+ ],
789
+ "list": false,
790
+ "list_add_label": "Add More",
791
+ "name": "input_value",
792
+ "placeholder": "",
793
+ "required": true,
794
+ "show": true,
795
+ "title_case": false,
796
+ "trace_as_metadata": true,
797
+ "type": "other",
798
+ "value": ""
799
+ },
800
+ "sender": {
801
+ "_input_type": "DropdownInput",
802
+ "advanced": true,
803
+ "combobox": false,
804
+ "dialog_inputs": {},
805
+ "display_name": "Sender Type",
806
+ "dynamic": false,
807
+ "info": "Type of sender.",
808
+ "name": "sender",
809
+ "options": [
810
+ "Machine",
811
+ "User"
812
+ ],
813
+ "options_metadata": [],
814
+ "placeholder": "",
815
+ "required": false,
816
+ "show": true,
817
+ "title_case": false,
818
+ "toggle": false,
819
+ "tool_mode": false,
820
+ "trace_as_metadata": true,
821
+ "type": "str",
822
+ "value": "Machine"
823
+ },
824
+ "sender_name": {
825
+ "_input_type": "MessageTextInput",
826
+ "advanced": true,
827
+ "display_name": "Sender Name",
828
+ "dynamic": false,
829
+ "info": "Name of the sender.",
830
+ "input_types": [
831
+ "Message"
832
+ ],
833
+ "list": false,
834
+ "list_add_label": "Add More",
835
+ "load_from_db": false,
836
+ "name": "sender_name",
837
+ "placeholder": "",
838
+ "required": false,
839
+ "show": true,
840
+ "title_case": false,
841
+ "tool_mode": false,
842
+ "trace_as_input": true,
843
+ "trace_as_metadata": true,
844
+ "type": "str",
845
+ "value": "AI"
846
+ },
847
+ "session_id": {
848
+ "_input_type": "MessageTextInput",
849
+ "advanced": true,
850
+ "display_name": "Session ID",
851
+ "dynamic": false,
852
+ "info": "The session ID of the chat. If empty, the current session ID parameter will be used.",
853
+ "input_types": [
854
+ "Message"
855
+ ],
856
+ "list": false,
857
+ "list_add_label": "Add More",
858
+ "load_from_db": false,
859
+ "name": "session_id",
860
+ "placeholder": "",
861
+ "required": false,
862
+ "show": true,
863
+ "title_case": false,
864
+ "tool_mode": false,
865
+ "trace_as_input": true,
866
+ "trace_as_metadata": true,
867
+ "type": "str",
868
+ "value": ""
869
+ },
870
+ "should_store_message": {
871
+ "_input_type": "BoolInput",
872
+ "advanced": true,
873
+ "display_name": "Store Messages",
874
+ "dynamic": false,
875
+ "info": "Store the message in the history.",
876
+ "list": false,
877
+ "list_add_label": "Add More",
878
+ "name": "should_store_message",
879
+ "placeholder": "",
880
+ "required": false,
881
+ "show": true,
882
+ "title_case": false,
883
+ "tool_mode": false,
884
+ "trace_as_metadata": true,
885
+ "type": "bool",
886
+ "value": true
887
+ }
888
+ },
889
+ "tool_mode": false
890
+ },
891
+ "showNode": false,
892
+ "type": "ChatOutput"
893
+ },
894
+ "dragging": false,
895
+ "id": "ChatOutput-yiSgq",
896
+ "measured": {
897
+ "height": 48,
898
+ "width": 192
899
+ },
900
+ "position": {
901
+ "x": -729.8594083908358,
902
+ "y": 571.9033552511398
903
+ },
904
+ "selected": false,
905
+ "type": "genericNode"
906
+ },
907
+ {
908
+ "data": {
909
+ "id": "ChatOutput-K40Du",
910
+ "node": {
911
+ "base_classes": [
912
+ "Message"
913
+ ],
914
+ "beta": false,
915
+ "conditional_paths": [],
916
+ "custom_fields": {},
917
+ "description": "Display a chat message in the Playground.",
918
+ "display_name": "Chat Output",
919
+ "documentation": "",
920
+ "edited": false,
921
+ "field_order": [
922
+ "input_value",
923
+ "should_store_message",
924
+ "sender",
925
+ "sender_name",
926
+ "session_id",
927
+ "data_template",
928
+ "background_color",
929
+ "chat_icon",
930
+ "text_color",
931
+ "clean_data"
932
+ ],
933
+ "frozen": false,
934
+ "icon": "MessagesSquare",
935
+ "legacy": false,
936
+ "metadata": {},
937
+ "minimized": true,
938
+ "output_types": [],
939
+ "outputs": [
940
+ {
941
+ "allows_loop": false,
942
+ "cache": true,
943
+ "display_name": "Output Message",
944
+ "group_outputs": false,
945
+ "method": "message_response",
946
+ "name": "message",
947
+ "selected": "Message",
948
+ "tool_mode": true,
949
+ "types": [
950
+ "Message"
951
+ ],
952
+ "value": "__UNDEFINED__"
953
+ }
954
+ ],
955
+ "pinned": false,
956
+ "template": {
957
+ "_type": "Component",
958
+ "code": {
959
+ "advanced": true,
960
+ "dynamic": true,
961
+ "fileTypes": [],
962
+ "file_path": "",
963
+ "info": "",
964
+ "list": false,
965
+ "load_from_db": false,
966
+ "multiline": true,
967
+ "name": "code",
968
+ "password": false,
969
+ "placeholder": "",
970
+ "required": true,
971
+ "show": true,
972
+ "title_case": false,
973
+ "type": "code",
974
+ "value": "from collections.abc import Generator\nfrom typing import Any\n\nimport orjson\nfrom fastapi.encoders import jsonable_encoder\n\nfrom vibe_surf.langflow.base.io.chat import ChatComponent\nfrom vibe_surf.langflow.helpers.data import safe_convert\nfrom vibe_surf.langflow.inputs.inputs import BoolInput, DropdownInput, HandleInput, MessageTextInput\nfrom vibe_surf.langflow.schema.data import Data\nfrom vibe_surf.langflow.schema.dataframe import DataFrame\nfrom vibe_surf.langflow.schema.message import Message\nfrom vibe_surf.langflow.schema.properties import Source\nfrom vibe_surf.langflow.template.field.base import Output\nfrom vibe_surf.langflow.utils.constants import (\n MESSAGE_SENDER_AI,\n MESSAGE_SENDER_NAME_AI,\n MESSAGE_SENDER_USER,\n)\n\n\nclass ChatOutput(ChatComponent):\n display_name = \"Chat Output\"\n description = \"Display a chat message in the Playground.\"\n documentation: str = \"https://docs.vibe_surf.langflow.org/components-io#chat-output\"\n icon = \"MessagesSquare\"\n name = \"ChatOutput\"\n minimized = True\n\n inputs = [\n HandleInput(\n name=\"input_value\",\n display_name=\"Inputs\",\n info=\"Message to be passed as output.\",\n input_types=[\"Data\", \"DataFrame\", \"Message\"],\n required=True,\n ),\n BoolInput(\n name=\"should_store_message\",\n display_name=\"Store Messages\",\n info=\"Store the message in the history.\",\n value=True,\n advanced=True,\n ),\n DropdownInput(\n name=\"sender\",\n display_name=\"Sender Type\",\n options=[MESSAGE_SENDER_AI, MESSAGE_SENDER_USER],\n value=MESSAGE_SENDER_AI,\n advanced=True,\n info=\"Type of sender.\",\n ),\n MessageTextInput(\n name=\"sender_name\",\n display_name=\"Sender Name\",\n info=\"Name of the sender.\",\n value=MESSAGE_SENDER_NAME_AI,\n advanced=True,\n ),\n MessageTextInput(\n name=\"session_id\",\n display_name=\"Session ID\",\n info=\"The session ID of the chat. If empty, the current session ID parameter will be used.\",\n advanced=True,\n ),\n MessageTextInput(\n name=\"data_template\",\n display_name=\"Data Template\",\n value=\"{text}\",\n advanced=True,\n info=\"Template to convert Data to Text. If left empty, it will be dynamically set to the Data's text key.\",\n ),\n ]\n outputs = [\n Output(\n display_name=\"Output Message\",\n name=\"message\",\n method=\"message_response\",\n ),\n ]\n\n def _build_source(self, id_: str | None, display_name: str | None, source: str | None) -> Source:\n source_dict = {}\n if id_:\n source_dict[\"id\"] = id_\n if display_name:\n source_dict[\"display_name\"] = display_name\n if source:\n # Handle case where source is a ChatOpenAI object\n if hasattr(source, \"model_name\"):\n source_dict[\"source\"] = source.model_name\n elif hasattr(source, \"model\"):\n source_dict[\"source\"] = str(source.model)\n else:\n source_dict[\"source\"] = str(source)\n return Source(**source_dict)\n\n async def message_response(self) -> Message:\n # First convert the input to string if needed\n text = self.convert_to_string()\n\n # Get source properties\n source, _icon, display_name, source_id = self.get_properties_from_source_component()\n\n # Create or use existing Message object\n if isinstance(self.input_value, Message):\n message = self.input_value\n # Update message properties\n message.text = text\n else:\n message = Message(text=text)\n\n # Set message properties\n message.sender = self.sender\n message.sender_name = self.sender_name\n message.session_id = self.session_id\n message.flow_id = self.graph.flow_id if hasattr(self, \"graph\") else None\n message.properties.source = self._build_source(source_id, display_name, source)\n\n # Store message if needed\n if self.session_id and self.should_store_message:\n stored_message = await self.send_message(message)\n self.message.value = stored_message\n message = stored_message\n\n self.status = message\n return message\n\n def _serialize_data(self, data: Data) -> str:\n \"\"\"Serialize Data object to JSON string.\"\"\"\n # Convert data.data to JSON-serializable format\n serializable_data = jsonable_encoder(data.data)\n # Serialize with orjson, enabling pretty printing with indentation\n json_bytes = orjson.dumps(serializable_data, option=orjson.OPT_INDENT_2)\n # Convert bytes to string and wrap in Markdown code blocks\n return \"```json\\n\" + json_bytes.decode(\"utf-8\") + \"\\n```\"\n\n def _validate_input(self) -> None:\n \"\"\"Validate the input data and raise ValueError if invalid.\"\"\"\n if self.input_value is None:\n msg = \"Input data cannot be None\"\n raise ValueError(msg)\n if isinstance(self.input_value, list) and not all(\n isinstance(item, Message | Data | DataFrame | str) for item in self.input_value\n ):\n invalid_types = [\n type(item).__name__\n for item in self.input_value\n if not isinstance(item, Message | Data | DataFrame | str)\n ]\n msg = f\"Expected Data or DataFrame or Message or str, got {invalid_types}\"\n raise TypeError(msg)\n if not isinstance(\n self.input_value,\n Message | Data | DataFrame | str | list | Generator | type(None),\n ):\n type_name = type(self.input_value).__name__\n msg = f\"Expected Data or DataFrame or Message or str, Generator or None, got {type_name}\"\n raise TypeError(msg)\n\n def convert_to_string(self) -> str | Generator[Any, None, None]:\n \"\"\"Convert input data to string with proper error handling.\"\"\"\n self._validate_input()\n if isinstance(self.input_value, list):\n clean_data: bool = getattr(self, \"clean_data\", False)\n return \"\\n\".join([safe_convert(item, clean_data=clean_data) for item in self.input_value])\n if isinstance(self.input_value, Generator):\n return self.input_value\n return safe_convert(self.input_value)\n"
975
+ },
976
+ "data_template": {
977
+ "_input_type": "MessageTextInput",
978
+ "advanced": true,
979
+ "display_name": "Data Template",
980
+ "dynamic": false,
981
+ "info": "Template to convert Data to Text. If left empty, it will be dynamically set to the Data's text key.",
982
+ "input_types": [
983
+ "Message"
984
+ ],
985
+ "list": false,
986
+ "list_add_label": "Add More",
987
+ "load_from_db": false,
988
+ "name": "data_template",
989
+ "placeholder": "",
990
+ "required": false,
991
+ "show": true,
992
+ "title_case": false,
993
+ "tool_mode": false,
994
+ "trace_as_input": true,
995
+ "trace_as_metadata": true,
996
+ "type": "str",
997
+ "value": "{text}"
998
+ },
999
+ "input_value": {
1000
+ "_input_type": "HandleInput",
1001
+ "advanced": false,
1002
+ "display_name": "Inputs",
1003
+ "dynamic": false,
1004
+ "info": "Message to be passed as output.",
1005
+ "input_types": [
1006
+ "Data",
1007
+ "DataFrame",
1008
+ "Message"
1009
+ ],
1010
+ "list": false,
1011
+ "list_add_label": "Add More",
1012
+ "name": "input_value",
1013
+ "placeholder": "",
1014
+ "required": true,
1015
+ "show": true,
1016
+ "title_case": false,
1017
+ "trace_as_metadata": true,
1018
+ "type": "other",
1019
+ "value": ""
1020
+ },
1021
+ "sender": {
1022
+ "_input_type": "DropdownInput",
1023
+ "advanced": true,
1024
+ "combobox": false,
1025
+ "dialog_inputs": {},
1026
+ "display_name": "Sender Type",
1027
+ "dynamic": false,
1028
+ "info": "Type of sender.",
1029
+ "name": "sender",
1030
+ "options": [
1031
+ "Machine",
1032
+ "User"
1033
+ ],
1034
+ "options_metadata": [],
1035
+ "placeholder": "",
1036
+ "required": false,
1037
+ "show": true,
1038
+ "title_case": false,
1039
+ "toggle": false,
1040
+ "tool_mode": false,
1041
+ "trace_as_metadata": true,
1042
+ "type": "str",
1043
+ "value": "Machine"
1044
+ },
1045
+ "sender_name": {
1046
+ "_input_type": "MessageTextInput",
1047
+ "advanced": true,
1048
+ "display_name": "Sender Name",
1049
+ "dynamic": false,
1050
+ "info": "Name of the sender.",
1051
+ "input_types": [
1052
+ "Message"
1053
+ ],
1054
+ "list": false,
1055
+ "list_add_label": "Add More",
1056
+ "load_from_db": false,
1057
+ "name": "sender_name",
1058
+ "placeholder": "",
1059
+ "required": false,
1060
+ "show": true,
1061
+ "title_case": false,
1062
+ "tool_mode": false,
1063
+ "trace_as_input": true,
1064
+ "trace_as_metadata": true,
1065
+ "type": "str",
1066
+ "value": "AI"
1067
+ },
1068
+ "session_id": {
1069
+ "_input_type": "MessageTextInput",
1070
+ "advanced": true,
1071
+ "display_name": "Session ID",
1072
+ "dynamic": false,
1073
+ "info": "The session ID of the chat. If empty, the current session ID parameter will be used.",
1074
+ "input_types": [
1075
+ "Message"
1076
+ ],
1077
+ "list": false,
1078
+ "list_add_label": "Add More",
1079
+ "load_from_db": false,
1080
+ "name": "session_id",
1081
+ "placeholder": "",
1082
+ "required": false,
1083
+ "show": true,
1084
+ "title_case": false,
1085
+ "tool_mode": false,
1086
+ "trace_as_input": true,
1087
+ "trace_as_metadata": true,
1088
+ "type": "str",
1089
+ "value": ""
1090
+ },
1091
+ "should_store_message": {
1092
+ "_input_type": "BoolInput",
1093
+ "advanced": true,
1094
+ "display_name": "Store Messages",
1095
+ "dynamic": false,
1096
+ "info": "Store the message in the history.",
1097
+ "list": false,
1098
+ "list_add_label": "Add More",
1099
+ "name": "should_store_message",
1100
+ "placeholder": "",
1101
+ "required": false,
1102
+ "show": true,
1103
+ "title_case": false,
1104
+ "tool_mode": false,
1105
+ "trace_as_metadata": true,
1106
+ "type": "bool",
1107
+ "value": true
1108
+ }
1109
+ },
1110
+ "tool_mode": false
1111
+ },
1112
+ "showNode": false,
1113
+ "type": "ChatOutput"
1114
+ },
1115
+ "dragging": false,
1116
+ "id": "ChatOutput-K40Du",
1117
+ "measured": {
1118
+ "height": 48,
1119
+ "width": 192
1120
+ },
1121
+ "position": {
1122
+ "x": -155.57589738233636,
1123
+ "y": 1127.8168564025477
1124
+ },
1125
+ "selected": false,
1126
+ "type": "genericNode"
1127
+ },
1128
+ {
1129
+ "data": {
1130
+ "id": "note-S1pun",
1131
+ "node": {
1132
+ "description": "### 💡 Add your OpenAI API key here 👇",
1133
+ "display_name": "",
1134
+ "documentation": "",
1135
+ "template": {
1136
+ "backgroundColor": "transparent"
1137
+ }
1138
+ },
1139
+ "type": "note"
1140
+ },
1141
+ "dragging": false,
1142
+ "height": 326,
1143
+ "id": "note-S1pun",
1144
+ "measured": {
1145
+ "height": 326,
1146
+ "width": 353
1147
+ },
1148
+ "position": {
1149
+ "x": -1279.8293449946098,
1150
+ "y": 253.39163784131915
1151
+ },
1152
+ "resizing": false,
1153
+ "selected": false,
1154
+ "type": "noteNode",
1155
+ "width": 353
1156
+ },
1157
+ {
1158
+ "data": {
1159
+ "id": "note-ZAMRC",
1160
+ "node": {
1161
+ "description": "### 💡 Add your OpenAI API key here 👇",
1162
+ "display_name": "",
1163
+ "documentation": "",
1164
+ "template": {
1165
+ "backgroundColor": "transparent"
1166
+ }
1167
+ },
1168
+ "type": "note"
1169
+ },
1170
+ "dragging": false,
1171
+ "id": "note-ZAMRC",
1172
+ "measured": {
1173
+ "height": 324,
1174
+ "width": 324
1175
+ },
1176
+ "position": {
1177
+ "x": -619.6308693439651,
1178
+ "y": 957.9933268279298
1179
+ },
1180
+ "selected": false,
1181
+ "type": "noteNode"
1182
+ },
1183
+ {
1184
+ "data": {
1185
+ "id": "note-KreFC",
1186
+ "node": {
1187
+ "description": "### 💡 Add your OpenAI API key here 👇",
1188
+ "display_name": "",
1189
+ "documentation": "",
1190
+ "template": {
1191
+ "backgroundColor": "transparent"
1192
+ }
1193
+ },
1194
+ "type": "note"
1195
+ },
1196
+ "dragging": false,
1197
+ "id": "note-KreFC",
1198
+ "measured": {
1199
+ "height": 324,
1200
+ "width": 324
1201
+ },
1202
+ "position": {
1203
+ "x": -1309.8036340068625,
1204
+ "y": 925.6888138443481
1205
+ },
1206
+ "selected": false,
1207
+ "type": "noteNode"
1208
+ },
1209
+ {
1210
+ "data": {
1211
+ "id": "LanguageModelComponent-qFXT1",
1212
+ "node": {
1213
+ "base_classes": [
1214
+ "LanguageModel",
1215
+ "Message"
1216
+ ],
1217
+ "beta": false,
1218
+ "category": "models",
1219
+ "conditional_paths": [],
1220
+ "custom_fields": {},
1221
+ "description": "Runs a language model given a specified provider. ",
1222
+ "display_name": "Language Model",
1223
+ "documentation": "",
1224
+ "edited": false,
1225
+ "field_order": [
1226
+ "provider",
1227
+ "model_name",
1228
+ "api_key",
1229
+ "input_value",
1230
+ "system_message",
1231
+ "stream",
1232
+ "temperature"
1233
+ ],
1234
+ "frozen": false,
1235
+ "icon": "brain-circuit",
1236
+ "key": "LanguageModelComponent",
1237
+ "legacy": false,
1238
+ "metadata": {
1239
+ "keywords": [
1240
+ "model",
1241
+ "llm",
1242
+ "language model",
1243
+ "large language model"
1244
+ ]
1245
+ },
1246
+ "minimized": false,
1247
+ "output_types": [],
1248
+ "outputs": [
1249
+ {
1250
+ "allows_loop": false,
1251
+ "cache": true,
1252
+ "display_name": "Model Response",
1253
+ "group_outputs": false,
1254
+ "method": "text_response",
1255
+ "name": "text_output",
1256
+ "options": null,
1257
+ "required_inputs": null,
1258
+ "selected": "Message",
1259
+ "tool_mode": true,
1260
+ "types": [
1261
+ "Message"
1262
+ ],
1263
+ "value": "__UNDEFINED__"
1264
+ },
1265
+ {
1266
+ "allows_loop": false,
1267
+ "cache": true,
1268
+ "display_name": "Language Model",
1269
+ "group_outputs": false,
1270
+ "method": "build_model",
1271
+ "name": "model_output",
1272
+ "options": null,
1273
+ "required_inputs": null,
1274
+ "selected": "LanguageModel",
1275
+ "tool_mode": true,
1276
+ "types": [
1277
+ "LanguageModel"
1278
+ ],
1279
+ "value": "__UNDEFINED__"
1280
+ }
1281
+ ],
1282
+ "pinned": false,
1283
+ "priority": 0,
1284
+ "score": 0.28173906304863156,
1285
+ "template": {
1286
+ "_type": "Component",
1287
+ "api_key": {
1288
+ "_input_type": "SecretStrInput",
1289
+ "advanced": false,
1290
+ "display_name": "OpenAI API Key",
1291
+ "dynamic": false,
1292
+ "info": "Model Provider API key",
1293
+ "input_types": [],
1294
+ "load_from_db": true,
1295
+ "name": "api_key",
1296
+ "password": true,
1297
+ "placeholder": "",
1298
+ "real_time_refresh": true,
1299
+ "required": false,
1300
+ "show": true,
1301
+ "title_case": false,
1302
+ "type": "str",
1303
+ "value": "OPENAI_API_KEY"
1304
+ },
1305
+ "code": {
1306
+ "advanced": true,
1307
+ "dynamic": true,
1308
+ "fileTypes": [],
1309
+ "file_path": "",
1310
+ "info": "",
1311
+ "list": false,
1312
+ "load_from_db": false,
1313
+ "multiline": true,
1314
+ "name": "code",
1315
+ "password": false,
1316
+ "placeholder": "",
1317
+ "required": true,
1318
+ "show": true,
1319
+ "title_case": false,
1320
+ "type": "code",
1321
+ "value": "from typing import Any\n\nfrom langchain_anthropic import ChatAnthropic\nfrom langchain_google_genai import ChatGoogleGenerativeAI\nfrom langchain_openai import ChatOpenAI\n\nfrom vibe_surf.langflow.base.models.anthropic_constants import ANTHROPIC_MODELS\nfrom vibe_surf.langflow.base.models.google_generative_ai_constants import GOOGLE_GENERATIVE_AI_MODELS\nfrom vibe_surf.langflow.base.models.model import LCModelComponent\nfrom vibe_surf.langflow.base.models.openai_constants import OPENAI_CHAT_MODEL_NAMES, OPENAI_REASONING_MODEL_NAMES\nfrom vibe_surf.langflow.field_typing import LanguageModel\nfrom vibe_surf.langflow.field_typing.range_spec import RangeSpec\nfrom vibe_surf.langflow.inputs.inputs import BoolInput\nfrom vibe_surf.langflow.io import DropdownInput, MessageInput, MultilineInput, SecretStrInput, SliderInput\nfrom vibe_surf.langflow.schema.dotdict import dotdict\n\n\nclass LanguageModelComponent(LCModelComponent):\n display_name = \"Language Model\"\n description = \"Runs a language model given a specified provider.\"\n documentation: str = \"https://docs.vibe_surf.langflow.org/components-models\"\n icon = \"brain-circuit\"\n category = \"models\"\n priority = 0 # Set priority to 0 to make it appear first\n\n inputs = [\n DropdownInput(\n name=\"provider\",\n display_name=\"Model Provider\",\n options=[\"OpenAI\", \"Anthropic\", \"Google\"],\n value=\"OpenAI\",\n info=\"Select the model provider\",\n real_time_refresh=True,\n options_metadata=[{\"icon\": \"OpenAI\"}, {\"icon\": \"Anthropic\"}, {\"icon\": \"GoogleGenerativeAI\"}],\n ),\n DropdownInput(\n name=\"model_name\",\n display_name=\"Model Name\",\n options=OPENAI_CHAT_MODEL_NAMES + OPENAI_REASONING_MODEL_NAMES,\n value=OPENAI_CHAT_MODEL_NAMES[0],\n info=\"Select the model to use\",\n real_time_refresh=True,\n ),\n SecretStrInput(\n name=\"api_key\",\n display_name=\"OpenAI API Key\",\n info=\"Model Provider API key\",\n required=False,\n show=True,\n real_time_refresh=True,\n ),\n MessageInput(\n name=\"input_value\",\n display_name=\"Input\",\n info=\"The input text to send to the model\",\n ),\n MultilineInput(\n name=\"system_message\",\n display_name=\"System Message\",\n info=\"A system message that helps set the behavior of the assistant\",\n advanced=False,\n ),\n BoolInput(\n name=\"stream\",\n display_name=\"Stream\",\n info=\"Whether to stream the response\",\n value=False,\n advanced=True,\n ),\n SliderInput(\n name=\"temperature\",\n display_name=\"Temperature\",\n value=0.1,\n info=\"Controls randomness in responses\",\n range_spec=RangeSpec(min=0, max=1, step=0.01),\n advanced=True,\n ),\n ]\n\n def build_model(self) -> LanguageModel:\n provider = self.provider\n model_name = self.model_name\n temperature = self.temperature\n stream = self.stream\n\n if provider == \"OpenAI\":\n if not self.api_key:\n msg = \"OpenAI API key is required when using OpenAI provider\"\n raise ValueError(msg)\n\n if model_name in OPENAI_REASONING_MODEL_NAMES:\n # reasoning models do not support temperature (yet)\n temperature = None\n\n return ChatOpenAI(\n model_name=model_name,\n temperature=temperature,\n streaming=stream,\n openai_api_key=self.api_key,\n )\n if provider == \"Anthropic\":\n if not self.api_key:\n msg = \"Anthropic API key is required when using Anthropic provider\"\n raise ValueError(msg)\n return ChatAnthropic(\n model=model_name,\n temperature=temperature,\n streaming=stream,\n anthropic_api_key=self.api_key,\n )\n if provider == \"Google\":\n if not self.api_key:\n msg = \"Google API key is required when using Google provider\"\n raise ValueError(msg)\n return ChatGoogleGenerativeAI(\n model=model_name,\n temperature=temperature,\n streaming=stream,\n google_api_key=self.api_key,\n )\n msg = f\"Unknown provider: {provider}\"\n raise ValueError(msg)\n\n def update_build_config(self, build_config: dotdict, field_value: Any, field_name: str | None = None) -> dotdict:\n if field_name == \"provider\":\n if field_value == \"OpenAI\":\n build_config[\"model_name\"][\"options\"] = OPENAI_CHAT_MODEL_NAMES + OPENAI_REASONING_MODEL_NAMES\n build_config[\"model_name\"][\"value\"] = OPENAI_CHAT_MODEL_NAMES[0]\n build_config[\"api_key\"][\"display_name\"] = \"OpenAI API Key\"\n elif field_value == \"Anthropic\":\n build_config[\"model_name\"][\"options\"] = ANTHROPIC_MODELS\n build_config[\"model_name\"][\"value\"] = ANTHROPIC_MODELS[0]\n build_config[\"api_key\"][\"display_name\"] = \"Anthropic API Key\"\n elif field_value == \"Google\":\n build_config[\"model_name\"][\"options\"] = GOOGLE_GENERATIVE_AI_MODELS\n build_config[\"model_name\"][\"value\"] = GOOGLE_GENERATIVE_AI_MODELS[0]\n build_config[\"api_key\"][\"display_name\"] = \"Google API Key\"\n elif field_name == \"model_name\" and field_value.startswith(\"o1\") and self.provider == \"OpenAI\":\n # Hide system_message for o1 models - currently unsupported\n if \"system_message\" in build_config:\n build_config[\"system_message\"][\"show\"] = False\n elif field_name == \"model_name\" and not field_value.startswith(\"o1\") and \"system_message\" in build_config:\n build_config[\"system_message\"][\"show\"] = True\n return build_config\n"
1322
+ },
1323
+ "input_value": {
1324
+ "_input_type": "MessageInput",
1325
+ "advanced": false,
1326
+ "display_name": "Input",
1327
+ "dynamic": false,
1328
+ "info": "The input text to send to the model",
1329
+ "input_types": [
1330
+ "Message"
1331
+ ],
1332
+ "list": false,
1333
+ "list_add_label": "Add More",
1334
+ "load_from_db": false,
1335
+ "name": "input_value",
1336
+ "placeholder": "",
1337
+ "required": false,
1338
+ "show": true,
1339
+ "title_case": false,
1340
+ "tool_mode": false,
1341
+ "trace_as_input": true,
1342
+ "trace_as_metadata": true,
1343
+ "type": "str",
1344
+ "value": ""
1345
+ },
1346
+ "model_name": {
1347
+ "_input_type": "DropdownInput",
1348
+ "advanced": false,
1349
+ "combobox": false,
1350
+ "dialog_inputs": {},
1351
+ "display_name": "Model Name",
1352
+ "dynamic": false,
1353
+ "info": "Select the model to use",
1354
+ "name": "model_name",
1355
+ "options": [
1356
+ "gpt-4o-mini",
1357
+ "gpt-4o",
1358
+ "gpt-4.1",
1359
+ "gpt-4.1-mini",
1360
+ "gpt-4.1-nano",
1361
+ "gpt-4.5-preview",
1362
+ "gpt-4-turbo",
1363
+ "gpt-4-turbo-preview",
1364
+ "gpt-4",
1365
+ "gpt-3.5-turbo"
1366
+ ],
1367
+ "options_metadata": [],
1368
+ "placeholder": "",
1369
+ "required": false,
1370
+ "show": true,
1371
+ "title_case": false,
1372
+ "toggle": false,
1373
+ "tool_mode": false,
1374
+ "trace_as_metadata": true,
1375
+ "type": "str",
1376
+ "value": "gpt-4.1"
1377
+ },
1378
+ "provider": {
1379
+ "_input_type": "DropdownInput",
1380
+ "advanced": false,
1381
+ "combobox": false,
1382
+ "dialog_inputs": {},
1383
+ "display_name": "Model Provider",
1384
+ "dynamic": false,
1385
+ "info": "Select the model provider",
1386
+ "name": "provider",
1387
+ "options": [
1388
+ "OpenAI",
1389
+ "Anthropic",
1390
+ "Google"
1391
+ ],
1392
+ "options_metadata": [
1393
+ {
1394
+ "icon": "OpenAI"
1395
+ },
1396
+ {
1397
+ "icon": "Anthropic"
1398
+ },
1399
+ {
1400
+ "icon": "Google"
1401
+ }
1402
+ ],
1403
+ "placeholder": "",
1404
+ "real_time_refresh": true,
1405
+ "required": false,
1406
+ "show": true,
1407
+ "title_case": false,
1408
+ "toggle": false,
1409
+ "tool_mode": false,
1410
+ "trace_as_metadata": true,
1411
+ "type": "str",
1412
+ "value": "OpenAI"
1413
+ },
1414
+ "stream": {
1415
+ "_input_type": "BoolInput",
1416
+ "advanced": true,
1417
+ "display_name": "Stream",
1418
+ "dynamic": false,
1419
+ "info": "Whether to stream the response",
1420
+ "list": false,
1421
+ "list_add_label": "Add More",
1422
+ "name": "stream",
1423
+ "placeholder": "",
1424
+ "required": false,
1425
+ "show": true,
1426
+ "title_case": false,
1427
+ "tool_mode": false,
1428
+ "trace_as_metadata": true,
1429
+ "type": "bool",
1430
+ "value": false
1431
+ },
1432
+ "system_message": {
1433
+ "_input_type": "MultilineInput",
1434
+ "advanced": true,
1435
+ "copy_field": false,
1436
+ "display_name": "System Message",
1437
+ "dynamic": false,
1438
+ "info": "A system message that helps set the behavior of the assistant",
1439
+ "input_types": [
1440
+ "Message"
1441
+ ],
1442
+ "list": false,
1443
+ "list_add_label": "Add More",
1444
+ "load_from_db": false,
1445
+ "multiline": true,
1446
+ "name": "system_message",
1447
+ "placeholder": "",
1448
+ "required": false,
1449
+ "show": true,
1450
+ "title_case": false,
1451
+ "tool_mode": false,
1452
+ "trace_as_input": true,
1453
+ "trace_as_metadata": true,
1454
+ "type": "str",
1455
+ "value": ""
1456
+ },
1457
+ "temperature": {
1458
+ "_input_type": "SliderInput",
1459
+ "advanced": true,
1460
+ "display_name": "Temperature",
1461
+ "dynamic": false,
1462
+ "info": "Controls randomness in responses",
1463
+ "max_label": "",
1464
+ "max_label_icon": "",
1465
+ "min_label": "",
1466
+ "min_label_icon": "",
1467
+ "name": "temperature",
1468
+ "placeholder": "",
1469
+ "range_spec": {
1470
+ "max": 1,
1471
+ "min": 0,
1472
+ "step": 0.01,
1473
+ "step_type": "float"
1474
+ },
1475
+ "required": false,
1476
+ "show": true,
1477
+ "slider_buttons": false,
1478
+ "slider_buttons_options": [],
1479
+ "slider_input": false,
1480
+ "title_case": false,
1481
+ "tool_mode": false,
1482
+ "type": "slider",
1483
+ "value": 0.1
1484
+ }
1485
+ },
1486
+ "tool_mode": false
1487
+ },
1488
+ "selected_output": "text_output",
1489
+ "showNode": true,
1490
+ "type": "LanguageModelComponent"
1491
+ },
1492
+ "dragging": false,
1493
+ "id": "LanguageModelComponent-qFXT1",
1494
+ "measured": {
1495
+ "height": 450,
1496
+ "width": 320
1497
+ },
1498
+ "position": {
1499
+ "x": -1319.462305610481,
1500
+ "y": 976.7543982544241
1501
+ },
1502
+ "selected": false,
1503
+ "type": "genericNode"
1504
+ },
1505
+ {
1506
+ "data": {
1507
+ "id": "LanguageModelComponent-Wp3pC",
1508
+ "node": {
1509
+ "base_classes": [
1510
+ "LanguageModel",
1511
+ "Message"
1512
+ ],
1513
+ "beta": false,
1514
+ "category": "models",
1515
+ "conditional_paths": [],
1516
+ "custom_fields": {},
1517
+ "description": "Runs a language model given a specified provider. ",
1518
+ "display_name": "Language Model",
1519
+ "documentation": "",
1520
+ "edited": false,
1521
+ "field_order": [
1522
+ "provider",
1523
+ "model_name",
1524
+ "api_key",
1525
+ "input_value",
1526
+ "system_message",
1527
+ "stream",
1528
+ "temperature"
1529
+ ],
1530
+ "frozen": false,
1531
+ "icon": "brain-circuit",
1532
+ "key": "LanguageModelComponent",
1533
+ "legacy": false,
1534
+ "metadata": {
1535
+ "keywords": [
1536
+ "model",
1537
+ "llm",
1538
+ "language model",
1539
+ "large language model"
1540
+ ]
1541
+ },
1542
+ "minimized": false,
1543
+ "output_types": [],
1544
+ "outputs": [
1545
+ {
1546
+ "allows_loop": false,
1547
+ "cache": true,
1548
+ "display_name": "Model Response",
1549
+ "group_outputs": false,
1550
+ "method": "text_response",
1551
+ "name": "text_output",
1552
+ "options": null,
1553
+ "required_inputs": null,
1554
+ "selected": "Message",
1555
+ "tool_mode": true,
1556
+ "types": [
1557
+ "Message"
1558
+ ],
1559
+ "value": "__UNDEFINED__"
1560
+ },
1561
+ {
1562
+ "allows_loop": false,
1563
+ "cache": true,
1564
+ "display_name": "Language Model",
1565
+ "group_outputs": false,
1566
+ "method": "build_model",
1567
+ "name": "model_output",
1568
+ "options": null,
1569
+ "required_inputs": null,
1570
+ "selected": "LanguageModel",
1571
+ "tool_mode": true,
1572
+ "types": [
1573
+ "LanguageModel"
1574
+ ],
1575
+ "value": "__UNDEFINED__"
1576
+ }
1577
+ ],
1578
+ "pinned": false,
1579
+ "priority": 0,
1580
+ "score": 0.28173906304863156,
1581
+ "template": {
1582
+ "_type": "Component",
1583
+ "api_key": {
1584
+ "_input_type": "SecretStrInput",
1585
+ "advanced": false,
1586
+ "display_name": "OpenAI API Key",
1587
+ "dynamic": false,
1588
+ "info": "Model Provider API key",
1589
+ "input_types": [],
1590
+ "load_from_db": true,
1591
+ "name": "api_key",
1592
+ "password": true,
1593
+ "placeholder": "",
1594
+ "real_time_refresh": true,
1595
+ "required": false,
1596
+ "show": true,
1597
+ "title_case": false,
1598
+ "type": "str",
1599
+ "value": "OPENAI_API_KEY"
1600
+ },
1601
+ "code": {
1602
+ "advanced": true,
1603
+ "dynamic": true,
1604
+ "fileTypes": [],
1605
+ "file_path": "",
1606
+ "info": "",
1607
+ "list": false,
1608
+ "load_from_db": false,
1609
+ "multiline": true,
1610
+ "name": "code",
1611
+ "password": false,
1612
+ "placeholder": "",
1613
+ "required": true,
1614
+ "show": true,
1615
+ "title_case": false,
1616
+ "type": "code",
1617
+ "value": "from typing import Any\n\nfrom langchain_anthropic import ChatAnthropic\nfrom langchain_google_genai import ChatGoogleGenerativeAI\nfrom langchain_openai import ChatOpenAI\n\nfrom vibe_surf.langflow.base.models.anthropic_constants import ANTHROPIC_MODELS\nfrom vibe_surf.langflow.base.models.google_generative_ai_constants import GOOGLE_GENERATIVE_AI_MODELS\nfrom vibe_surf.langflow.base.models.model import LCModelComponent\nfrom vibe_surf.langflow.base.models.openai_constants import OPENAI_CHAT_MODEL_NAMES, OPENAI_REASONING_MODEL_NAMES\nfrom vibe_surf.langflow.field_typing import LanguageModel\nfrom vibe_surf.langflow.field_typing.range_spec import RangeSpec\nfrom vibe_surf.langflow.inputs.inputs import BoolInput\nfrom vibe_surf.langflow.io import DropdownInput, MessageInput, MultilineInput, SecretStrInput, SliderInput\nfrom vibe_surf.langflow.schema.dotdict import dotdict\n\n\nclass LanguageModelComponent(LCModelComponent):\n display_name = \"Language Model\"\n description = \"Runs a language model given a specified provider.\"\n documentation: str = \"https://docs.vibe_surf.langflow.org/components-models\"\n icon = \"brain-circuit\"\n category = \"models\"\n priority = 0 # Set priority to 0 to make it appear first\n\n inputs = [\n DropdownInput(\n name=\"provider\",\n display_name=\"Model Provider\",\n options=[\"OpenAI\", \"Anthropic\", \"Google\"],\n value=\"OpenAI\",\n info=\"Select the model provider\",\n real_time_refresh=True,\n options_metadata=[{\"icon\": \"OpenAI\"}, {\"icon\": \"Anthropic\"}, {\"icon\": \"GoogleGenerativeAI\"}],\n ),\n DropdownInput(\n name=\"model_name\",\n display_name=\"Model Name\",\n options=OPENAI_CHAT_MODEL_NAMES + OPENAI_REASONING_MODEL_NAMES,\n value=OPENAI_CHAT_MODEL_NAMES[0],\n info=\"Select the model to use\",\n real_time_refresh=True,\n ),\n SecretStrInput(\n name=\"api_key\",\n display_name=\"OpenAI API Key\",\n info=\"Model Provider API key\",\n required=False,\n show=True,\n real_time_refresh=True,\n ),\n MessageInput(\n name=\"input_value\",\n display_name=\"Input\",\n info=\"The input text to send to the model\",\n ),\n MultilineInput(\n name=\"system_message\",\n display_name=\"System Message\",\n info=\"A system message that helps set the behavior of the assistant\",\n advanced=False,\n ),\n BoolInput(\n name=\"stream\",\n display_name=\"Stream\",\n info=\"Whether to stream the response\",\n value=False,\n advanced=True,\n ),\n SliderInput(\n name=\"temperature\",\n display_name=\"Temperature\",\n value=0.1,\n info=\"Controls randomness in responses\",\n range_spec=RangeSpec(min=0, max=1, step=0.01),\n advanced=True,\n ),\n ]\n\n def build_model(self) -> LanguageModel:\n provider = self.provider\n model_name = self.model_name\n temperature = self.temperature\n stream = self.stream\n\n if provider == \"OpenAI\":\n if not self.api_key:\n msg = \"OpenAI API key is required when using OpenAI provider\"\n raise ValueError(msg)\n\n if model_name in OPENAI_REASONING_MODEL_NAMES:\n # reasoning models do not support temperature (yet)\n temperature = None\n\n return ChatOpenAI(\n model_name=model_name,\n temperature=temperature,\n streaming=stream,\n openai_api_key=self.api_key,\n )\n if provider == \"Anthropic\":\n if not self.api_key:\n msg = \"Anthropic API key is required when using Anthropic provider\"\n raise ValueError(msg)\n return ChatAnthropic(\n model=model_name,\n temperature=temperature,\n streaming=stream,\n anthropic_api_key=self.api_key,\n )\n if provider == \"Google\":\n if not self.api_key:\n msg = \"Google API key is required when using Google provider\"\n raise ValueError(msg)\n return ChatGoogleGenerativeAI(\n model=model_name,\n temperature=temperature,\n streaming=stream,\n google_api_key=self.api_key,\n )\n msg = f\"Unknown provider: {provider}\"\n raise ValueError(msg)\n\n def update_build_config(self, build_config: dotdict, field_value: Any, field_name: str | None = None) -> dotdict:\n if field_name == \"provider\":\n if field_value == \"OpenAI\":\n build_config[\"model_name\"][\"options\"] = OPENAI_CHAT_MODEL_NAMES + OPENAI_REASONING_MODEL_NAMES\n build_config[\"model_name\"][\"value\"] = OPENAI_CHAT_MODEL_NAMES[0]\n build_config[\"api_key\"][\"display_name\"] = \"OpenAI API Key\"\n elif field_value == \"Anthropic\":\n build_config[\"model_name\"][\"options\"] = ANTHROPIC_MODELS\n build_config[\"model_name\"][\"value\"] = ANTHROPIC_MODELS[0]\n build_config[\"api_key\"][\"display_name\"] = \"Anthropic API Key\"\n elif field_value == \"Google\":\n build_config[\"model_name\"][\"options\"] = GOOGLE_GENERATIVE_AI_MODELS\n build_config[\"model_name\"][\"value\"] = GOOGLE_GENERATIVE_AI_MODELS[0]\n build_config[\"api_key\"][\"display_name\"] = \"Google API Key\"\n elif field_name == \"model_name\" and field_value.startswith(\"o1\") and self.provider == \"OpenAI\":\n # Hide system_message for o1 models - currently unsupported\n if \"system_message\" in build_config:\n build_config[\"system_message\"][\"show\"] = False\n elif field_name == \"model_name\" and not field_value.startswith(\"o1\") and \"system_message\" in build_config:\n build_config[\"system_message\"][\"show\"] = True\n return build_config\n"
1618
+ },
1619
+ "input_value": {
1620
+ "_input_type": "MessageInput",
1621
+ "advanced": false,
1622
+ "display_name": "Input",
1623
+ "dynamic": false,
1624
+ "info": "The input text to send to the model",
1625
+ "input_types": [
1626
+ "Message"
1627
+ ],
1628
+ "list": false,
1629
+ "list_add_label": "Add More",
1630
+ "load_from_db": false,
1631
+ "name": "input_value",
1632
+ "placeholder": "",
1633
+ "required": false,
1634
+ "show": true,
1635
+ "title_case": false,
1636
+ "tool_mode": false,
1637
+ "trace_as_input": true,
1638
+ "trace_as_metadata": true,
1639
+ "type": "str",
1640
+ "value": ""
1641
+ },
1642
+ "model_name": {
1643
+ "_input_type": "DropdownInput",
1644
+ "advanced": false,
1645
+ "combobox": false,
1646
+ "dialog_inputs": {},
1647
+ "display_name": "Model Name",
1648
+ "dynamic": false,
1649
+ "info": "Select the model to use",
1650
+ "name": "model_name",
1651
+ "options": [
1652
+ "gpt-4o-mini",
1653
+ "gpt-4o",
1654
+ "gpt-4.1",
1655
+ "gpt-4.1-mini",
1656
+ "gpt-4.1-nano",
1657
+ "gpt-4.5-preview",
1658
+ "gpt-4-turbo",
1659
+ "gpt-4-turbo-preview",
1660
+ "gpt-4",
1661
+ "gpt-3.5-turbo"
1662
+ ],
1663
+ "options_metadata": [],
1664
+ "placeholder": "",
1665
+ "required": false,
1666
+ "show": true,
1667
+ "title_case": false,
1668
+ "toggle": false,
1669
+ "tool_mode": false,
1670
+ "trace_as_metadata": true,
1671
+ "type": "str",
1672
+ "value": "gpt-4.1"
1673
+ },
1674
+ "provider": {
1675
+ "_input_type": "DropdownInput",
1676
+ "advanced": false,
1677
+ "combobox": false,
1678
+ "dialog_inputs": {},
1679
+ "display_name": "Model Provider",
1680
+ "dynamic": false,
1681
+ "info": "Select the model provider",
1682
+ "name": "provider",
1683
+ "options": [
1684
+ "OpenAI",
1685
+ "Anthropic",
1686
+ "Google"
1687
+ ],
1688
+ "options_metadata": [
1689
+ {
1690
+ "icon": "OpenAI"
1691
+ },
1692
+ {
1693
+ "icon": "Anthropic"
1694
+ },
1695
+ {
1696
+ "icon": "Google"
1697
+ }
1698
+ ],
1699
+ "placeholder": "",
1700
+ "real_time_refresh": true,
1701
+ "required": false,
1702
+ "show": true,
1703
+ "title_case": false,
1704
+ "toggle": false,
1705
+ "tool_mode": false,
1706
+ "trace_as_metadata": true,
1707
+ "type": "str",
1708
+ "value": "OpenAI"
1709
+ },
1710
+ "stream": {
1711
+ "_input_type": "BoolInput",
1712
+ "advanced": true,
1713
+ "display_name": "Stream",
1714
+ "dynamic": false,
1715
+ "info": "Whether to stream the response",
1716
+ "list": false,
1717
+ "list_add_label": "Add More",
1718
+ "name": "stream",
1719
+ "placeholder": "",
1720
+ "required": false,
1721
+ "show": true,
1722
+ "title_case": false,
1723
+ "tool_mode": false,
1724
+ "trace_as_metadata": true,
1725
+ "type": "bool",
1726
+ "value": false
1727
+ },
1728
+ "system_message": {
1729
+ "_input_type": "MultilineInput",
1730
+ "advanced": true,
1731
+ "copy_field": false,
1732
+ "display_name": "System Message",
1733
+ "dynamic": false,
1734
+ "info": "A system message that helps set the behavior of the assistant",
1735
+ "input_types": [
1736
+ "Message"
1737
+ ],
1738
+ "list": false,
1739
+ "list_add_label": "Add More",
1740
+ "load_from_db": false,
1741
+ "multiline": true,
1742
+ "name": "system_message",
1743
+ "placeholder": "",
1744
+ "required": false,
1745
+ "show": true,
1746
+ "title_case": false,
1747
+ "tool_mode": false,
1748
+ "trace_as_input": true,
1749
+ "trace_as_metadata": true,
1750
+ "type": "str",
1751
+ "value": ""
1752
+ },
1753
+ "temperature": {
1754
+ "_input_type": "SliderInput",
1755
+ "advanced": true,
1756
+ "display_name": "Temperature",
1757
+ "dynamic": false,
1758
+ "info": "Controls randomness in responses",
1759
+ "max_label": "",
1760
+ "max_label_icon": "",
1761
+ "min_label": "",
1762
+ "min_label_icon": "",
1763
+ "name": "temperature",
1764
+ "placeholder": "",
1765
+ "range_spec": {
1766
+ "max": 1,
1767
+ "min": 0,
1768
+ "step": 0.01,
1769
+ "step_type": "float"
1770
+ },
1771
+ "required": false,
1772
+ "show": true,
1773
+ "slider_buttons": false,
1774
+ "slider_buttons_options": [],
1775
+ "slider_input": false,
1776
+ "title_case": false,
1777
+ "tool_mode": false,
1778
+ "type": "slider",
1779
+ "value": 0.1
1780
+ }
1781
+ },
1782
+ "tool_mode": false
1783
+ },
1784
+ "showNode": true,
1785
+ "type": "LanguageModelComponent"
1786
+ },
1787
+ "dragging": false,
1788
+ "id": "LanguageModelComponent-Wp3pC",
1789
+ "measured": {
1790
+ "height": 450,
1791
+ "width": 320
1792
+ },
1793
+ "position": {
1794
+ "x": -610.7115573962577,
1795
+ "y": 1009.6862512017519
1796
+ },
1797
+ "selected": false,
1798
+ "type": "genericNode"
1799
+ },
1800
+ {
1801
+ "data": {
1802
+ "id": "LanguageModelComponent-gYAmH",
1803
+ "node": {
1804
+ "base_classes": [
1805
+ "LanguageModel",
1806
+ "Message"
1807
+ ],
1808
+ "beta": false,
1809
+ "category": "models",
1810
+ "conditional_paths": [],
1811
+ "custom_fields": {},
1812
+ "description": "Runs a language model given a specified provider. ",
1813
+ "display_name": "Language Model",
1814
+ "documentation": "",
1815
+ "edited": false,
1816
+ "field_order": [
1817
+ "provider",
1818
+ "model_name",
1819
+ "api_key",
1820
+ "input_value",
1821
+ "system_message",
1822
+ "stream",
1823
+ "temperature"
1824
+ ],
1825
+ "frozen": false,
1826
+ "icon": "brain-circuit",
1827
+ "key": "LanguageModelComponent",
1828
+ "legacy": false,
1829
+ "metadata": {
1830
+ "keywords": [
1831
+ "model",
1832
+ "llm",
1833
+ "language model",
1834
+ "large language model"
1835
+ ]
1836
+ },
1837
+ "minimized": false,
1838
+ "output_types": [],
1839
+ "outputs": [
1840
+ {
1841
+ "allows_loop": false,
1842
+ "cache": true,
1843
+ "display_name": "Model Response",
1844
+ "group_outputs": false,
1845
+ "method": "text_response",
1846
+ "name": "text_output",
1847
+ "options": null,
1848
+ "required_inputs": null,
1849
+ "selected": "Message",
1850
+ "tool_mode": true,
1851
+ "types": [
1852
+ "Message"
1853
+ ],
1854
+ "value": "__UNDEFINED__"
1855
+ },
1856
+ {
1857
+ "allows_loop": false,
1858
+ "cache": true,
1859
+ "display_name": "Language Model",
1860
+ "group_outputs": false,
1861
+ "method": "build_model",
1862
+ "name": "model_output",
1863
+ "options": null,
1864
+ "required_inputs": null,
1865
+ "selected": "LanguageModel",
1866
+ "tool_mode": true,
1867
+ "types": [
1868
+ "LanguageModel"
1869
+ ],
1870
+ "value": "__UNDEFINED__"
1871
+ }
1872
+ ],
1873
+ "pinned": false,
1874
+ "priority": 0,
1875
+ "score": 0.28173906304863156,
1876
+ "template": {
1877
+ "_type": "Component",
1878
+ "api_key": {
1879
+ "_input_type": "SecretStrInput",
1880
+ "advanced": false,
1881
+ "display_name": "OpenAI API Key",
1882
+ "dynamic": false,
1883
+ "info": "Model Provider API key",
1884
+ "input_types": [],
1885
+ "load_from_db": true,
1886
+ "name": "api_key",
1887
+ "password": true,
1888
+ "placeholder": "",
1889
+ "real_time_refresh": true,
1890
+ "required": false,
1891
+ "show": true,
1892
+ "title_case": false,
1893
+ "type": "str",
1894
+ "value": "OPENAI_API_KEY"
1895
+ },
1896
+ "code": {
1897
+ "advanced": true,
1898
+ "dynamic": true,
1899
+ "fileTypes": [],
1900
+ "file_path": "",
1901
+ "info": "",
1902
+ "list": false,
1903
+ "load_from_db": false,
1904
+ "multiline": true,
1905
+ "name": "code",
1906
+ "password": false,
1907
+ "placeholder": "",
1908
+ "required": true,
1909
+ "show": true,
1910
+ "title_case": false,
1911
+ "type": "code",
1912
+ "value": "from typing import Any\n\nfrom langchain_anthropic import ChatAnthropic\nfrom langchain_google_genai import ChatGoogleGenerativeAI\nfrom langchain_openai import ChatOpenAI\n\nfrom vibe_surf.langflow.base.models.anthropic_constants import ANTHROPIC_MODELS\nfrom vibe_surf.langflow.base.models.google_generative_ai_constants import GOOGLE_GENERATIVE_AI_MODELS\nfrom vibe_surf.langflow.base.models.model import LCModelComponent\nfrom vibe_surf.langflow.base.models.openai_constants import OPENAI_CHAT_MODEL_NAMES, OPENAI_REASONING_MODEL_NAMES\nfrom vibe_surf.langflow.field_typing import LanguageModel\nfrom vibe_surf.langflow.field_typing.range_spec import RangeSpec\nfrom vibe_surf.langflow.inputs.inputs import BoolInput\nfrom vibe_surf.langflow.io import DropdownInput, MessageInput, MultilineInput, SecretStrInput, SliderInput\nfrom vibe_surf.langflow.schema.dotdict import dotdict\n\n\nclass LanguageModelComponent(LCModelComponent):\n display_name = \"Language Model\"\n description = \"Runs a language model given a specified provider.\"\n documentation: str = \"https://docs.vibe_surf.langflow.org/components-models\"\n icon = \"brain-circuit\"\n category = \"models\"\n priority = 0 # Set priority to 0 to make it appear first\n\n inputs = [\n DropdownInput(\n name=\"provider\",\n display_name=\"Model Provider\",\n options=[\"OpenAI\", \"Anthropic\", \"Google\"],\n value=\"OpenAI\",\n info=\"Select the model provider\",\n real_time_refresh=True,\n options_metadata=[{\"icon\": \"OpenAI\"}, {\"icon\": \"Anthropic\"}, {\"icon\": \"GoogleGenerativeAI\"}],\n ),\n DropdownInput(\n name=\"model_name\",\n display_name=\"Model Name\",\n options=OPENAI_CHAT_MODEL_NAMES + OPENAI_REASONING_MODEL_NAMES,\n value=OPENAI_CHAT_MODEL_NAMES[0],\n info=\"Select the model to use\",\n real_time_refresh=True,\n ),\n SecretStrInput(\n name=\"api_key\",\n display_name=\"OpenAI API Key\",\n info=\"Model Provider API key\",\n required=False,\n show=True,\n real_time_refresh=True,\n ),\n MessageInput(\n name=\"input_value\",\n display_name=\"Input\",\n info=\"The input text to send to the model\",\n ),\n MultilineInput(\n name=\"system_message\",\n display_name=\"System Message\",\n info=\"A system message that helps set the behavior of the assistant\",\n advanced=False,\n ),\n BoolInput(\n name=\"stream\",\n display_name=\"Stream\",\n info=\"Whether to stream the response\",\n value=False,\n advanced=True,\n ),\n SliderInput(\n name=\"temperature\",\n display_name=\"Temperature\",\n value=0.1,\n info=\"Controls randomness in responses\",\n range_spec=RangeSpec(min=0, max=1, step=0.01),\n advanced=True,\n ),\n ]\n\n def build_model(self) -> LanguageModel:\n provider = self.provider\n model_name = self.model_name\n temperature = self.temperature\n stream = self.stream\n\n if provider == \"OpenAI\":\n if not self.api_key:\n msg = \"OpenAI API key is required when using OpenAI provider\"\n raise ValueError(msg)\n\n if model_name in OPENAI_REASONING_MODEL_NAMES:\n # reasoning models do not support temperature (yet)\n temperature = None\n\n return ChatOpenAI(\n model_name=model_name,\n temperature=temperature,\n streaming=stream,\n openai_api_key=self.api_key,\n )\n if provider == \"Anthropic\":\n if not self.api_key:\n msg = \"Anthropic API key is required when using Anthropic provider\"\n raise ValueError(msg)\n return ChatAnthropic(\n model=model_name,\n temperature=temperature,\n streaming=stream,\n anthropic_api_key=self.api_key,\n )\n if provider == \"Google\":\n if not self.api_key:\n msg = \"Google API key is required when using Google provider\"\n raise ValueError(msg)\n return ChatGoogleGenerativeAI(\n model=model_name,\n temperature=temperature,\n streaming=stream,\n google_api_key=self.api_key,\n )\n msg = f\"Unknown provider: {provider}\"\n raise ValueError(msg)\n\n def update_build_config(self, build_config: dotdict, field_value: Any, field_name: str | None = None) -> dotdict:\n if field_name == \"provider\":\n if field_value == \"OpenAI\":\n build_config[\"model_name\"][\"options\"] = OPENAI_CHAT_MODEL_NAMES + OPENAI_REASONING_MODEL_NAMES\n build_config[\"model_name\"][\"value\"] = OPENAI_CHAT_MODEL_NAMES[0]\n build_config[\"api_key\"][\"display_name\"] = \"OpenAI API Key\"\n elif field_value == \"Anthropic\":\n build_config[\"model_name\"][\"options\"] = ANTHROPIC_MODELS\n build_config[\"model_name\"][\"value\"] = ANTHROPIC_MODELS[0]\n build_config[\"api_key\"][\"display_name\"] = \"Anthropic API Key\"\n elif field_value == \"Google\":\n build_config[\"model_name\"][\"options\"] = GOOGLE_GENERATIVE_AI_MODELS\n build_config[\"model_name\"][\"value\"] = GOOGLE_GENERATIVE_AI_MODELS[0]\n build_config[\"api_key\"][\"display_name\"] = \"Google API Key\"\n elif field_name == \"model_name\" and field_value.startswith(\"o1\") and self.provider == \"OpenAI\":\n # Hide system_message for o1 models - currently unsupported\n if \"system_message\" in build_config:\n build_config[\"system_message\"][\"show\"] = False\n elif field_name == \"model_name\" and not field_value.startswith(\"o1\") and \"system_message\" in build_config:\n build_config[\"system_message\"][\"show\"] = True\n return build_config\n"
1913
+ },
1914
+ "input_value": {
1915
+ "_input_type": "MessageInput",
1916
+ "advanced": false,
1917
+ "display_name": "Input",
1918
+ "dynamic": false,
1919
+ "info": "The input text to send to the model",
1920
+ "input_types": [
1921
+ "Message"
1922
+ ],
1923
+ "list": false,
1924
+ "list_add_label": "Add More",
1925
+ "load_from_db": false,
1926
+ "name": "input_value",
1927
+ "placeholder": "",
1928
+ "required": false,
1929
+ "show": true,
1930
+ "title_case": false,
1931
+ "tool_mode": false,
1932
+ "trace_as_input": true,
1933
+ "trace_as_metadata": true,
1934
+ "type": "str",
1935
+ "value": ""
1936
+ },
1937
+ "model_name": {
1938
+ "_input_type": "DropdownInput",
1939
+ "advanced": false,
1940
+ "combobox": false,
1941
+ "dialog_inputs": {},
1942
+ "display_name": "Model Name",
1943
+ "dynamic": false,
1944
+ "info": "Select the model to use",
1945
+ "name": "model_name",
1946
+ "options": [
1947
+ "gpt-4o-mini",
1948
+ "gpt-4o",
1949
+ "gpt-4.1",
1950
+ "gpt-4.1-mini",
1951
+ "gpt-4.1-nano",
1952
+ "gpt-4.5-preview",
1953
+ "gpt-4-turbo",
1954
+ "gpt-4-turbo-preview",
1955
+ "gpt-4",
1956
+ "gpt-3.5-turbo"
1957
+ ],
1958
+ "options_metadata": [],
1959
+ "placeholder": "",
1960
+ "required": false,
1961
+ "show": true,
1962
+ "title_case": false,
1963
+ "toggle": false,
1964
+ "tool_mode": false,
1965
+ "trace_as_metadata": true,
1966
+ "type": "str",
1967
+ "value": "gpt-4.1"
1968
+ },
1969
+ "provider": {
1970
+ "_input_type": "DropdownInput",
1971
+ "advanced": false,
1972
+ "combobox": false,
1973
+ "dialog_inputs": {},
1974
+ "display_name": "Model Provider",
1975
+ "dynamic": false,
1976
+ "info": "Select the model provider",
1977
+ "name": "provider",
1978
+ "options": [
1979
+ "OpenAI",
1980
+ "Anthropic",
1981
+ "Google"
1982
+ ],
1983
+ "options_metadata": [
1984
+ {
1985
+ "icon": "OpenAI"
1986
+ },
1987
+ {
1988
+ "icon": "Anthropic"
1989
+ },
1990
+ {
1991
+ "icon": "Google"
1992
+ }
1993
+ ],
1994
+ "placeholder": "",
1995
+ "real_time_refresh": true,
1996
+ "required": false,
1997
+ "show": true,
1998
+ "title_case": false,
1999
+ "toggle": false,
2000
+ "tool_mode": false,
2001
+ "trace_as_metadata": true,
2002
+ "type": "str",
2003
+ "value": "OpenAI"
2004
+ },
2005
+ "stream": {
2006
+ "_input_type": "BoolInput",
2007
+ "advanced": true,
2008
+ "display_name": "Stream",
2009
+ "dynamic": false,
2010
+ "info": "Whether to stream the response",
2011
+ "list": false,
2012
+ "list_add_label": "Add More",
2013
+ "name": "stream",
2014
+ "placeholder": "",
2015
+ "required": false,
2016
+ "show": true,
2017
+ "title_case": false,
2018
+ "tool_mode": false,
2019
+ "trace_as_metadata": true,
2020
+ "type": "bool",
2021
+ "value": false
2022
+ },
2023
+ "system_message": {
2024
+ "_input_type": "MultilineInput",
2025
+ "advanced": false,
2026
+ "copy_field": false,
2027
+ "display_name": "System Message",
2028
+ "dynamic": false,
2029
+ "info": "A system message that helps set the behavior of the assistant",
2030
+ "input_types": [
2031
+ "Message"
2032
+ ],
2033
+ "list": false,
2034
+ "list_add_label": "Add More",
2035
+ "load_from_db": false,
2036
+ "multiline": true,
2037
+ "name": "system_message",
2038
+ "placeholder": "",
2039
+ "required": false,
2040
+ "show": true,
2041
+ "title_case": false,
2042
+ "tool_mode": false,
2043
+ "trace_as_input": true,
2044
+ "trace_as_metadata": true,
2045
+ "type": "str",
2046
+ "value": ""
2047
+ },
2048
+ "temperature": {
2049
+ "_input_type": "SliderInput",
2050
+ "advanced": true,
2051
+ "display_name": "Temperature",
2052
+ "dynamic": false,
2053
+ "info": "Controls randomness in responses",
2054
+ "max_label": "",
2055
+ "max_label_icon": "",
2056
+ "min_label": "",
2057
+ "min_label_icon": "",
2058
+ "name": "temperature",
2059
+ "placeholder": "",
2060
+ "range_spec": {
2061
+ "max": 1,
2062
+ "min": 0,
2063
+ "step": 0.01,
2064
+ "step_type": "float"
2065
+ },
2066
+ "required": false,
2067
+ "show": true,
2068
+ "slider_buttons": false,
2069
+ "slider_buttons_options": [],
2070
+ "slider_input": false,
2071
+ "title_case": false,
2072
+ "tool_mode": false,
2073
+ "type": "slider",
2074
+ "value": 0.1
2075
+ }
2076
+ },
2077
+ "tool_mode": false
2078
+ },
2079
+ "showNode": true,
2080
+ "type": "LanguageModelComponent"
2081
+ },
2082
+ "dragging": false,
2083
+ "id": "LanguageModelComponent-gYAmH",
2084
+ "measured": {
2085
+ "height": 532,
2086
+ "width": 320
2087
+ },
2088
+ "position": {
2089
+ "x": -1273.6440754228947,
2090
+ "y": 303.799142374253
2091
+ },
2092
+ "selected": false,
2093
+ "type": "genericNode"
2094
+ },
2095
+ {
2096
+ "data": {
2097
+ "id": "File-oAEuF",
2098
+ "node": {
2099
+ "base_classes": [
2100
+ "Message"
2101
+ ],
2102
+ "beta": false,
2103
+ "conditional_paths": [],
2104
+ "custom_fields": {},
2105
+ "description": "Loads content from one or more files.",
2106
+ "display_name": "File",
2107
+ "documentation": "",
2108
+ "edited": false,
2109
+ "field_order": [
2110
+ "path",
2111
+ "file_path",
2112
+ "separator",
2113
+ "silent_errors",
2114
+ "delete_server_file_after_processing",
2115
+ "ignore_unsupported_extensions",
2116
+ "ignore_unspecified_files",
2117
+ "use_multithreading",
2118
+ "concurrency_multithreading"
2119
+ ],
2120
+ "frozen": false,
2121
+ "icon": "file-text",
2122
+ "legacy": false,
2123
+ "metadata": {},
2124
+ "minimized": false,
2125
+ "output_types": [],
2126
+ "outputs": [
2127
+ {
2128
+ "allows_loop": false,
2129
+ "cache": true,
2130
+ "display_name": "Raw Content",
2131
+ "group_outputs": false,
2132
+ "method": "load_files_message",
2133
+ "name": "message",
2134
+ "selected": "Message",
2135
+ "tool_mode": true,
2136
+ "types": [
2137
+ "Message"
2138
+ ],
2139
+ "value": "__UNDEFINED__"
2140
+ }
2141
+ ],
2142
+ "pinned": false,
2143
+ "template": {
2144
+ "_type": "Component",
2145
+ "advanced_mode": {
2146
+ "_input_type": "BoolInput",
2147
+ "advanced": false,
2148
+ "display_name": "Advanced Parser",
2149
+ "dynamic": false,
2150
+ "info": "Enable advanced document processing and export with Docling for PDFs, images, and office documents. Available only for single file processing.Note that advanced document processing can consume significant resources.",
2151
+ "list": false,
2152
+ "list_add_label": "Add More",
2153
+ "name": "advanced_mode",
2154
+ "placeholder": "",
2155
+ "real_time_refresh": true,
2156
+ "required": false,
2157
+ "show": false,
2158
+ "title_case": false,
2159
+ "tool_mode": false,
2160
+ "trace_as_metadata": true,
2161
+ "type": "bool",
2162
+ "value": false
2163
+ },
2164
+ "code": {
2165
+ "advanced": true,
2166
+ "dynamic": true,
2167
+ "fileTypes": [],
2168
+ "file_path": "",
2169
+ "info": "",
2170
+ "list": false,
2171
+ "load_from_db": false,
2172
+ "multiline": true,
2173
+ "name": "code",
2174
+ "password": false,
2175
+ "placeholder": "",
2176
+ "required": true,
2177
+ "show": true,
2178
+ "title_case": false,
2179
+ "type": "code",
2180
+ "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 json\nimport subprocess\nimport sys\nimport textwrap\nfrom copy import deepcopy\nfrom typing import TYPE_CHECKING, Any\n\nfrom vibe_surf.langflow.base.data.base_file import BaseFileComponent\nfrom vibe_surf.langflow.base.data.utils import TEXT_FILE_TYPES, parallel_load_data, parse_text_file_to_data\nfrom vibe_surf.langflow.io import (\n BoolInput,\n DropdownInput,\n FileInput,\n IntInput,\n MessageTextInput,\n Output,\n StrInput,\n)\nfrom vibe_surf.langflow.schema.data import Data\nfrom vibe_surf.langflow.schema.message import Message\n\nif TYPE_CHECKING:\n from vibe_surf.langflow.schema import DataFrame\n\n\nclass FileComponent(BaseFileComponent):\n \"\"\"File component with optional Docling processing (isolated in a subprocess).\"\"\"\n\n display_name = \"File\"\n description = \"Loads content from one or more files.\"\n documentation: str = \"https://docs.vibe_surf.langflow.org/components-data#file\"\n icon = \"file-text\"\n name = \"File\"\n\n # Docling-supported/compatible extensions; TEXT_FILE_TYPES are supported by the base loader.\n VALID_EXTENSIONS = [\n *TEXT_FILE_TYPES,\n \"adoc\",\n \"asciidoc\",\n \"asc\",\n \"bmp\",\n \"dotx\",\n \"dotm\",\n \"docm\",\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 # Fixed export settings used when markdown export is requested.\n EXPORT_FORMAT = \"Markdown\"\n IMAGE_MODE = \"placeholder\"\n\n # ---- Inputs / Outputs (kept as close to original as possible) -------------------\n _base_inputs = deepcopy(BaseFileComponent._base_inputs)\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 break\n\n inputs = [\n *_base_inputs,\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 \"Available only for single file processing.\"\n \"Note that advanced document processing can consume significant resources.\"\n ),\n show=False,\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\"),\n ]\n\n # ------------------------------ UI helpers --------------------------------------\n\n def _path_value(self, template: dict) -> list[str]:\n \"\"\"Return the list of currently selected file paths from the template.\"\"\"\n return template.get(\"path\", {}).get(\"file_path\", [])\n\n def update_build_config(\n self,\n build_config: dict[str, Any],\n field_value: Any,\n field_name: str | None = None,\n ) -> dict[str, Any]:\n \"\"\"Show/hide Advanced Parser and related fields based on selection context.\"\"\"\n if field_name == \"path\":\n paths = self._path_value(build_config)\n file_path = paths[0] if paths else \"\"\n file_count = len(field_value) if field_value else 0\n\n # Advanced mode only for single (non-tabular) file\n allow_advanced = file_count == 1 and not file_path.endswith((\".csv\", \".xlsx\", \".parquet\"))\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\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(display_name=\"Structured Content\", name=\"dataframe\", method=\"load_files_structured\"),\n )\n elif file_path.endswith(\".json\"):\n frontend_node[\"outputs\"].append(\n Output(display_name=\"Structured Content\", name=\"json\", method=\"load_files_json\"),\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(display_name=\"Structured Output\", name=\"advanced_dataframe\", method=\"load_files_dataframe\"),\n )\n frontend_node[\"outputs\"].append(\n Output(display_name=\"Markdown\", name=\"advanced_markdown\", method=\"load_files_markdown\"),\n )\n frontend_node[\"outputs\"].append(\n Output(display_name=\"File Path\", name=\"path\", method=\"load_files_path\"),\n )\n else:\n frontend_node[\"outputs\"].append(\n Output(display_name=\"Raw Content\", name=\"message\", method=\"load_files_message\"),\n )\n frontend_node[\"outputs\"].append(\n Output(display_name=\"File Path\", name=\"path\", method=\"load_files_path\"),\n )\n else:\n # Multiple files => DataFrame output; advanced parser disabled\n frontend_node[\"outputs\"].append(Output(display_name=\"Files\", name=\"dataframe\", method=\"load_files\"))\n\n return frontend_node\n\n # ------------------------------ Core processing ----------------------------------\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 \".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 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 if not file_path:\n return None\n\n args: dict[str, Any] = {\n \"file_path\": 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: {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 # Strategy 1: latest layout\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:\n pass\n # Strategy 2: alternative layout\n try:\n from docling.document_converter import DocumentConverter # type: ignore\n try:\n from docling_core.types import ConversionStatus, InputFormat # type: ignore\n except Exception:\n try:\n from docling.datamodel import ConversionStatus, InputFormat # type: ignore\n except Exception:\n class ConversionStatus: SUCCESS = \"success\"\n class InputFormat:\n PDF=\"pdf\"; IMAGE=\"image\"\n try:\n from docling_core.types.doc import ImageRefMode # type: ignore\n except Exception:\n class ImageRefMode:\n PLACEHOLDER=\"placeholder\"; EMBEDDED=\"embedded\"\n return ConversionStatus, InputFormat, DocumentConverter, ImageRefMode, \"alternative\"\n except Exception:\n pass\n # Strategy 3: basic converter only\n try:\n from docling.document_converter import DocumentConverter # type: ignore\n class ConversionStatus: SUCCESS = \"success\"\n class InputFormat:\n PDF=\"pdf\"; IMAGE=\"image\"\n class ImageRefMode:\n PLACEHOLDER=\"placeholder\"; EMBEDDED=\"embedded\"\n return ConversionStatus, InputFormat, DocumentConverter, ImageRefMode, \"basic\"\n except Exception as e:\n raise ImportError(f\"Docling imports failed: {e}\") from 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.pipeline.vlm_pipeline import VlmPipeline\n from docling.document_converter import PdfFormatOption # type: ignore\n\n vl_pipe = VlmPipelineOptions()\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(pipeline_cls=VlmPipeline)\n if hasattr(input_format, \"IMAGE\"):\n fmt[getattr(input_format, \"IMAGE\")] = PdfFormatOption(pipeline_cls=VlmPipeline)\n\n return DocumentConverter(format_options=fmt)\n except Exception:\n return DocumentConverter()\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\": 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={\"error\": f\"Invalid JSON from Docling subprocess: {e}. stderr={err_msg}\", \"file_path\": file_path},\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 - Single file + 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 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 # Advanced path: only for a single Docling-compatible file\n if len(file_list) == 1:\n file_path = str(file_list[0].path)\n if self.advanced_mode and self._is_docling_compatible(file_path):\n advanced_data: Data | None = self._process_docling_in_subprocess(file_path)\n\n # --- UNNEST: expand each element in `doc` to its own Data row\n payload = getattr(advanced_data, \"data\", {}) or {}\n doc_rows = payload.get(\"doc\")\n if isinstance(doc_rows, list):\n rows: list[Data | None] = [\n Data(\n data={\n \"file_path\": file_path,\n **(item if isinstance(item, dict) else {\"value\": item}),\n },\n )\n for item in doc_rows\n ]\n return self.rollup_data(file_list, rows)\n\n # If not structured, keep as-is (e.g., markdown export or error dict)\n return self.rollup_data(file_list, [advanced_data])\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 file_paths = [str(f.path) for f in file_list]\n self.log(f\"Starting parallel processing of {len(file_paths)} files with concurrency: {concurrency}.\")\n my_data = parallel_load_data(\n file_paths,\n silent_errors=self.silent_errors,\n load_function=process_file_standard,\n max_concurrency=concurrency,\n )\n return self.rollup_data(file_list, my_data)\n\n # ------------------------------ Output helpers -----------------------------------\n\n def load_files_helper(self) -> DataFrame:\n result = self.load_files()\n\n # Error condition - raise error if no text and an error is present\n if not hasattr(result, \"text\"):\n if hasattr(result, \"error\"):\n raise ValueError(result.error[0])\n msg = \"No content generated.\"\n raise ValueError(msg)\n\n return result\n\n def load_files_dataframe(self) -> DataFrame:\n \"\"\"Load files using advanced Docling processing and export to DataFrame format.\"\"\"\n self.markdown = False\n return self.load_files_helper()\n\n def load_files_markdown(self) -> Message:\n \"\"\"Load files using advanced Docling processing and export to Markdown format.\"\"\"\n self.markdown = True\n result = self.load_files_helper()\n return Message(text=str(result.text[0]))\n"
2181
+ },
2182
+ "concurrency_multithreading": {
2183
+ "_input_type": "IntInput",
2184
+ "advanced": true,
2185
+ "display_name": "Processing Concurrency",
2186
+ "dynamic": false,
2187
+ "info": "When multiple files are being processed, the number of files to process concurrently.",
2188
+ "list": false,
2189
+ "list_add_label": "Add More",
2190
+ "name": "concurrency_multithreading",
2191
+ "placeholder": "",
2192
+ "required": false,
2193
+ "show": true,
2194
+ "title_case": false,
2195
+ "tool_mode": false,
2196
+ "trace_as_metadata": true,
2197
+ "type": "int",
2198
+ "value": 1
2199
+ },
2200
+ "delete_server_file_after_processing": {
2201
+ "_input_type": "BoolInput",
2202
+ "advanced": true,
2203
+ "display_name": "Delete Server File After Processing",
2204
+ "dynamic": false,
2205
+ "info": "If true, the Server File Path will be deleted after processing.",
2206
+ "list": false,
2207
+ "list_add_label": "Add More",
2208
+ "name": "delete_server_file_after_processing",
2209
+ "placeholder": "",
2210
+ "required": false,
2211
+ "show": true,
2212
+ "title_case": false,
2213
+ "tool_mode": false,
2214
+ "trace_as_metadata": true,
2215
+ "type": "bool",
2216
+ "value": true
2217
+ },
2218
+ "doc_key": {
2219
+ "_input_type": "MessageTextInput",
2220
+ "advanced": true,
2221
+ "display_name": "Doc Key",
2222
+ "dynamic": false,
2223
+ "info": "The key to use for the DoclingDocument column.",
2224
+ "input_types": [
2225
+ "Message"
2226
+ ],
2227
+ "list": false,
2228
+ "list_add_label": "Add More",
2229
+ "load_from_db": false,
2230
+ "name": "doc_key",
2231
+ "placeholder": "",
2232
+ "required": false,
2233
+ "show": false,
2234
+ "title_case": false,
2235
+ "tool_mode": false,
2236
+ "trace_as_input": true,
2237
+ "trace_as_metadata": true,
2238
+ "type": "str",
2239
+ "value": "doc"
2240
+ },
2241
+ "file_path": {
2242
+ "_input_type": "HandleInput",
2243
+ "advanced": true,
2244
+ "display_name": "Server File Path",
2245
+ "dynamic": false,
2246
+ "info": "Data object with a 'file_path' property pointing to server file or a Message object with a path to the file. Supercedes 'Path' but supports same file types.",
2247
+ "input_types": [
2248
+ "Data",
2249
+ "Message"
2250
+ ],
2251
+ "list": true,
2252
+ "list_add_label": "Add More",
2253
+ "name": "file_path",
2254
+ "placeholder": "",
2255
+ "required": false,
2256
+ "show": true,
2257
+ "title_case": false,
2258
+ "trace_as_metadata": true,
2259
+ "type": "other",
2260
+ "value": ""
2261
+ },
2262
+ "ignore_unspecified_files": {
2263
+ "_input_type": "BoolInput",
2264
+ "advanced": true,
2265
+ "display_name": "Ignore Unspecified Files",
2266
+ "dynamic": false,
2267
+ "info": "If true, Data with no 'file_path' property will be ignored.",
2268
+ "list": false,
2269
+ "list_add_label": "Add More",
2270
+ "name": "ignore_unspecified_files",
2271
+ "placeholder": "",
2272
+ "required": false,
2273
+ "show": true,
2274
+ "title_case": false,
2275
+ "tool_mode": false,
2276
+ "trace_as_metadata": true,
2277
+ "type": "bool",
2278
+ "value": false
2279
+ },
2280
+ "ignore_unsupported_extensions": {
2281
+ "_input_type": "BoolInput",
2282
+ "advanced": true,
2283
+ "display_name": "Ignore Unsupported Extensions",
2284
+ "dynamic": false,
2285
+ "info": "If true, files with unsupported extensions will not be processed.",
2286
+ "list": false,
2287
+ "list_add_label": "Add More",
2288
+ "name": "ignore_unsupported_extensions",
2289
+ "placeholder": "",
2290
+ "required": false,
2291
+ "show": true,
2292
+ "title_case": false,
2293
+ "tool_mode": false,
2294
+ "trace_as_metadata": true,
2295
+ "type": "bool",
2296
+ "value": true
2297
+ },
2298
+ "markdown": {
2299
+ "_input_type": "BoolInput",
2300
+ "advanced": false,
2301
+ "display_name": "Markdown Export",
2302
+ "dynamic": false,
2303
+ "info": "Export processed documents to Markdown format. Only available when advanced mode is enabled.",
2304
+ "list": false,
2305
+ "list_add_label": "Add More",
2306
+ "name": "markdown",
2307
+ "placeholder": "",
2308
+ "required": false,
2309
+ "show": false,
2310
+ "title_case": false,
2311
+ "tool_mode": false,
2312
+ "trace_as_metadata": true,
2313
+ "type": "bool",
2314
+ "value": false
2315
+ },
2316
+ "md_image_placeholder": {
2317
+ "_input_type": "StrInput",
2318
+ "advanced": true,
2319
+ "display_name": "Image placeholder",
2320
+ "dynamic": false,
2321
+ "info": "Specify the image placeholder for markdown exports.",
2322
+ "list": false,
2323
+ "list_add_label": "Add More",
2324
+ "load_from_db": false,
2325
+ "name": "md_image_placeholder",
2326
+ "placeholder": "",
2327
+ "required": false,
2328
+ "show": false,
2329
+ "title_case": false,
2330
+ "tool_mode": false,
2331
+ "trace_as_metadata": true,
2332
+ "type": "str",
2333
+ "value": "<!-- image -->"
2334
+ },
2335
+ "md_page_break_placeholder": {
2336
+ "_input_type": "StrInput",
2337
+ "advanced": true,
2338
+ "display_name": "Page break placeholder",
2339
+ "dynamic": false,
2340
+ "info": "Add this placeholder between pages in the markdown output.",
2341
+ "list": false,
2342
+ "list_add_label": "Add More",
2343
+ "load_from_db": false,
2344
+ "name": "md_page_break_placeholder",
2345
+ "placeholder": "",
2346
+ "required": false,
2347
+ "show": false,
2348
+ "title_case": false,
2349
+ "tool_mode": false,
2350
+ "trace_as_metadata": true,
2351
+ "type": "str",
2352
+ "value": ""
2353
+ },
2354
+ "ocr_engine": {
2355
+ "_input_type": "DropdownInput",
2356
+ "advanced": true,
2357
+ "combobox": false,
2358
+ "dialog_inputs": {},
2359
+ "display_name": "OCR Engine",
2360
+ "dynamic": false,
2361
+ "info": "OCR engine to use. Only available when pipeline is set to 'standard'.",
2362
+ "name": "ocr_engine",
2363
+ "options": [
2364
+ "None",
2365
+ "easyocr"
2366
+ ],
2367
+ "options_metadata": [],
2368
+ "placeholder": "",
2369
+ "required": false,
2370
+ "show": false,
2371
+ "title_case": false,
2372
+ "toggle": false,
2373
+ "tool_mode": false,
2374
+ "trace_as_metadata": true,
2375
+ "type": "str",
2376
+ "value": ""
2377
+ },
2378
+ "path": {
2379
+ "_input_type": "FileInput",
2380
+ "advanced": false,
2381
+ "display_name": "Files",
2382
+ "dynamic": false,
2383
+ "fileTypes": [
2384
+ "csv",
2385
+ "json",
2386
+ "pdf",
2387
+ "txt",
2388
+ "md",
2389
+ "mdx",
2390
+ "yaml",
2391
+ "yml",
2392
+ "xml",
2393
+ "html",
2394
+ "htm",
2395
+ "docx",
2396
+ "py",
2397
+ "sh",
2398
+ "sql",
2399
+ "js",
2400
+ "ts",
2401
+ "tsx",
2402
+ "adoc",
2403
+ "asciidoc",
2404
+ "asc",
2405
+ "bmp",
2406
+ "dotx",
2407
+ "dotm",
2408
+ "docm",
2409
+ "jpeg",
2410
+ "png",
2411
+ "potx",
2412
+ "ppsx",
2413
+ "pptm",
2414
+ "potm",
2415
+ "ppsm",
2416
+ "pptx",
2417
+ "tiff",
2418
+ "xls",
2419
+ "xlsx",
2420
+ "xhtml",
2421
+ "webp",
2422
+ "zip",
2423
+ "tar",
2424
+ "tgz",
2425
+ "bz2",
2426
+ "gz"
2427
+ ],
2428
+ "file_path": [],
2429
+ "info": "Supported file extensions: csv, json, pdf, txt, md, mdx, yaml, yml, xml, html, htm, docx, py, sh, sql, js, ts, tsx, adoc, asciidoc, asc, bmp, dotx, dotm, docm, jpeg, png, potx, ppsx, pptm, potm, ppsm, pptx, tiff, xls, xlsx, xhtml, webp; optionally bundled in file extensions: zip, tar, tgz, bz2, gz",
2430
+ "list": true,
2431
+ "list_add_label": "Add More",
2432
+ "name": "path",
2433
+ "placeholder": "",
2434
+ "real_time_refresh": true,
2435
+ "required": false,
2436
+ "show": true,
2437
+ "temp_file": false,
2438
+ "title_case": false,
2439
+ "trace_as_metadata": true,
2440
+ "type": "file",
2441
+ "value": ""
2442
+ },
2443
+ "pipeline": {
2444
+ "_input_type": "DropdownInput",
2445
+ "advanced": true,
2446
+ "combobox": false,
2447
+ "dialog_inputs": {},
2448
+ "display_name": "Pipeline",
2449
+ "dynamic": false,
2450
+ "info": "Docling pipeline to use",
2451
+ "name": "pipeline",
2452
+ "options": [
2453
+ "standard",
2454
+ "vlm"
2455
+ ],
2456
+ "options_metadata": [],
2457
+ "placeholder": "",
2458
+ "required": false,
2459
+ "show": true,
2460
+ "title_case": false,
2461
+ "toggle": false,
2462
+ "tool_mode": false,
2463
+ "trace_as_metadata": true,
2464
+ "type": "str",
2465
+ "value": "standard"
2466
+ },
2467
+ "separator": {
2468
+ "_input_type": "StrInput",
2469
+ "advanced": true,
2470
+ "display_name": "Separator",
2471
+ "dynamic": false,
2472
+ "info": "Specify the separator to use between multiple outputs in Message format.",
2473
+ "list": false,
2474
+ "list_add_label": "Add More",
2475
+ "load_from_db": false,
2476
+ "name": "separator",
2477
+ "placeholder": "",
2478
+ "required": false,
2479
+ "show": true,
2480
+ "title_case": false,
2481
+ "tool_mode": false,
2482
+ "trace_as_metadata": true,
2483
+ "type": "str",
2484
+ "value": "\n\n"
2485
+ },
2486
+ "silent_errors": {
2487
+ "_input_type": "BoolInput",
2488
+ "advanced": true,
2489
+ "display_name": "Silent Errors",
2490
+ "dynamic": false,
2491
+ "info": "If true, errors will not raise an exception.",
2492
+ "list": false,
2493
+ "list_add_label": "Add More",
2494
+ "name": "silent_errors",
2495
+ "placeholder": "",
2496
+ "required": false,
2497
+ "show": true,
2498
+ "title_case": false,
2499
+ "tool_mode": false,
2500
+ "trace_as_metadata": true,
2501
+ "type": "bool",
2502
+ "value": false
2503
+ },
2504
+ "use_multithreading": {
2505
+ "_input_type": "BoolInput",
2506
+ "advanced": true,
2507
+ "display_name": "[Deprecated] Use Multithreading",
2508
+ "dynamic": false,
2509
+ "info": "Set 'Processing Concurrency' greater than 1 to enable multithreading.",
2510
+ "list": false,
2511
+ "list_add_label": "Add More",
2512
+ "name": "use_multithreading",
2513
+ "placeholder": "",
2514
+ "required": false,
2515
+ "show": true,
2516
+ "title_case": false,
2517
+ "tool_mode": false,
2518
+ "trace_as_metadata": true,
2519
+ "type": "bool",
2520
+ "value": true
2521
+ }
2522
+ },
2523
+ "tool_mode": false
2524
+ },
2525
+ "showNode": true,
2526
+ "type": "File"
2527
+ },
2528
+ "dragging": false,
2529
+ "id": "File-oAEuF",
2530
+ "measured": {
2531
+ "height": 229,
2532
+ "width": 320
2533
+ },
2534
+ "position": {
2535
+ "x": -2084.702607272029,
2536
+ "y": 876.5761449064685
2537
+ },
2538
+ "selected": false,
2539
+ "type": "genericNode"
2540
+ }
2541
+ ],
2542
+ "viewport": {
2543
+ "x": 1531.333069410271,
2544
+ "y": -51.51956711530852,
2545
+ "zoom": 0.5298593037007338
2546
+ }
2547
+ },
2548
+ "description": "Load text data from various file formats, process it into structured messages, and analyze sentiment using AI-powered classification.",
2549
+ "endpoint_name": null,
2550
+ "id": "dc9f3c5d-b43a-493e-9dee-8e6d0c55a9ca",
2551
+ "is_component": false,
2552
+ "last_tested_version": "1.4.3",
2553
+ "name": "Text Sentiment Analysis",
2554
+ "tags": [
2555
+ "classification"
2556
+ ]
2557
+ }