vibesurf 0.1.21__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 (2868) hide show
  1. vibe_surf/_version.py +2 -2
  2. vibe_surf/agents/browser_use_agent.py +16 -354
  3. vibe_surf/agents/prompts/vibe_surf_prompt.py +45 -0
  4. vibe_surf/agents/report_writer_agent.py +71 -21
  5. vibe_surf/agents/vibe_surf_agent.py +234 -111
  6. vibe_surf/agents/views.py +6 -15
  7. vibe_surf/backend/api/agent.py +38 -0
  8. vibe_surf/backend/api/composio.py +1047 -0
  9. vibe_surf/backend/api/config.py +3 -1
  10. vibe_surf/backend/api/schedule.py +331 -0
  11. vibe_surf/backend/api/task.py +2 -2
  12. vibe_surf/backend/api/vibesurf.py +449 -0
  13. vibe_surf/backend/database/migrations/v005_add_composio_integration.sql +33 -0
  14. vibe_surf/backend/database/migrations/v006_add_credentials_table.sql +26 -0
  15. vibe_surf/backend/database/migrations/v007_add_schedule_table.sql +29 -0
  16. vibe_surf/backend/database/models.py +86 -1
  17. vibe_surf/backend/database/queries.py +567 -4
  18. vibe_surf/backend/frontend/assets/MCPLangflow-Bzb6g6Zx.png +0 -0
  19. vibe_surf/backend/frontend/assets/SlackIcon-DH9MFXnM.js +1 -0
  20. vibe_surf/backend/frontend/assets/Wikipedia-MKjlsFhR.js +1 -0
  21. vibe_surf/backend/frontend/assets/Wolfram-DZjh94KW.js +1 -0
  22. vibe_surf/backend/frontend/assets/__vite-browser-external-BIHI7g3E.js +1 -0
  23. vibe_surf/backend/frontend/assets/a-arrow-down-M5pMOHfz.js +6 -0
  24. vibe_surf/backend/frontend/assets/a-arrow-up-Bhux1P9g.js +6 -0
  25. vibe_surf/backend/frontend/assets/a-large-small-CxpoIZ2k.js +6 -0
  26. vibe_surf/backend/frontend/assets/accessibility-DIOswxup.js +6 -0
  27. vibe_surf/backend/frontend/assets/activity-Cgoj6BfB.js +6 -0
  28. vibe_surf/backend/frontend/assets/air-vent-BRuCRSP-.js +6 -0
  29. vibe_surf/backend/frontend/assets/airplay-D6ddOHpT.js +6 -0
  30. vibe_surf/backend/frontend/assets/alarm-clock-BswE0svo.js +6 -0
  31. vibe_surf/backend/frontend/assets/alarm-clock-check-CMKnL746.js +6 -0
  32. vibe_surf/backend/frontend/assets/alarm-clock-minus-Cmry03T1.js +6 -0
  33. vibe_surf/backend/frontend/assets/alarm-clock-off-ByCGR7KD.js +6 -0
  34. vibe_surf/backend/frontend/assets/alarm-clock-plus-D80NSz4S.js +6 -0
  35. vibe_surf/backend/frontend/assets/alarm-smoke-DyUVOJUh.js +6 -0
  36. vibe_surf/backend/frontend/assets/album-CGIJADgR.js +6 -0
  37. vibe_surf/backend/frontend/assets/align-center-Cb9nxg1u.js +6 -0
  38. vibe_surf/backend/frontend/assets/align-center-horizontal-DunWyH8w.js +6 -0
  39. vibe_surf/backend/frontend/assets/align-center-vertical-COWbwf4r.js +6 -0
  40. vibe_surf/backend/frontend/assets/align-end-horizontal-BXGWZnJg.js +6 -0
  41. vibe_surf/backend/frontend/assets/align-end-vertical-DsDprlL7.js +6 -0
  42. vibe_surf/backend/frontend/assets/align-horizontal-distribute-center-fSZ29QkE.js +6 -0
  43. vibe_surf/backend/frontend/assets/align-horizontal-distribute-end-C3BFRnLg.js +6 -0
  44. vibe_surf/backend/frontend/assets/align-horizontal-distribute-start-DqYzU1-w.js +6 -0
  45. vibe_surf/backend/frontend/assets/align-horizontal-justify-center-2iNXkDKh.js +6 -0
  46. vibe_surf/backend/frontend/assets/align-horizontal-justify-end-COPIkT0U.js +6 -0
  47. vibe_surf/backend/frontend/assets/align-horizontal-justify-start-DoS3Jrzb.js +6 -0
  48. vibe_surf/backend/frontend/assets/align-horizontal-space-around-k9yEGjMh.js +6 -0
  49. vibe_surf/backend/frontend/assets/align-horizontal-space-between-C6RzmtkD.js +6 -0
  50. vibe_surf/backend/frontend/assets/align-justify-BvD3xtAK.js +6 -0
  51. vibe_surf/backend/frontend/assets/align-left-BP84nxXJ.js +6 -0
  52. vibe_surf/backend/frontend/assets/align-right-6z3k9YVj.js +6 -0
  53. vibe_surf/backend/frontend/assets/align-start-horizontal-DRihqJTg.js +6 -0
  54. vibe_surf/backend/frontend/assets/align-start-vertical-Bs-ISVmy.js +6 -0
  55. vibe_surf/backend/frontend/assets/align-vertical-distribute-center-CU82VWLq.js +6 -0
  56. vibe_surf/backend/frontend/assets/align-vertical-distribute-end-IrubG5LP.js +6 -0
  57. vibe_surf/backend/frontend/assets/align-vertical-distribute-start-BgBu3t8X.js +6 -0
  58. vibe_surf/backend/frontend/assets/align-vertical-justify-center-e7psKZ4D.js +6 -0
  59. vibe_surf/backend/frontend/assets/align-vertical-justify-end-CncIBU5b.js +6 -0
  60. vibe_surf/backend/frontend/assets/align-vertical-justify-start-21_MQReA.js +6 -0
  61. vibe_surf/backend/frontend/assets/align-vertical-space-around-NJNn7zPP.js +6 -0
  62. vibe_surf/backend/frontend/assets/align-vertical-space-between-LYs4c5i9.js +6 -0
  63. vibe_surf/backend/frontend/assets/ambulance-jMfwSVYH.js +6 -0
  64. vibe_surf/backend/frontend/assets/ampersand-B1-1HYj1.js +6 -0
  65. vibe_surf/backend/frontend/assets/ampersands-DVVxe50v.js +6 -0
  66. vibe_surf/backend/frontend/assets/amphora-B12bYdql.js +6 -0
  67. vibe_surf/backend/frontend/assets/anchor-C_JuZyO5.js +6 -0
  68. vibe_surf/backend/frontend/assets/angry-KqzvbAxB.js +6 -0
  69. vibe_surf/backend/frontend/assets/annoyed-CZXUdq0q.js +6 -0
  70. vibe_surf/backend/frontend/assets/antenna-CFlKnuEE.js +6 -0
  71. vibe_surf/backend/frontend/assets/anvil-ObmOBzcW.js +6 -0
  72. vibe_surf/backend/frontend/assets/aperture-CU6mXxj8.js +6 -0
  73. vibe_surf/backend/frontend/assets/apify_white-uCJdZkTU.png +0 -0
  74. vibe_surf/backend/frontend/assets/app-window-D5iSiHiS.js +6 -0
  75. vibe_surf/backend/frontend/assets/app-window-mac-QOaPWoGX.js +6 -0
  76. vibe_surf/backend/frontend/assets/apple-D7ZsI-et.js +6 -0
  77. vibe_surf/backend/frontend/assets/archive-FLn_d8Ny.js +6 -0
  78. vibe_surf/backend/frontend/assets/archive-restore-C668KwvC.js +6 -0
  79. vibe_surf/backend/frontend/assets/archive-x-DJJed9T2.js +6 -0
  80. vibe_surf/backend/frontend/assets/armchair-DfXLs0Nj.js +6 -0
  81. vibe_surf/backend/frontend/assets/arrow-big-down-DU2dtkeu.js +6 -0
  82. vibe_surf/backend/frontend/assets/arrow-big-down-dash-CzsIOlhF.js +6 -0
  83. vibe_surf/backend/frontend/assets/arrow-big-left-CCeUj8q9.js +6 -0
  84. vibe_surf/backend/frontend/assets/arrow-big-left-dash-CFpRtORj.js +6 -0
  85. vibe_surf/backend/frontend/assets/arrow-big-right-C1QE56k7.js +6 -0
  86. vibe_surf/backend/frontend/assets/arrow-big-right-dash-D6H2wruv.js +6 -0
  87. vibe_surf/backend/frontend/assets/arrow-big-up-0f0CsejQ.js +6 -0
  88. vibe_surf/backend/frontend/assets/arrow-big-up-dash-Dz-Sbw66.js +6 -0
  89. vibe_surf/backend/frontend/assets/arrow-down-0-1-B1PGN6BJ.js +6 -0
  90. vibe_surf/backend/frontend/assets/arrow-down-1-0-Bcl1KrrL.js +6 -0
  91. vibe_surf/backend/frontend/assets/arrow-down-DZKzcieL.js +6 -0
  92. vibe_surf/backend/frontend/assets/arrow-down-a-z-DurN_xiR.js +6 -0
  93. vibe_surf/backend/frontend/assets/arrow-down-from-line-D2i9DDA0.js +6 -0
  94. vibe_surf/backend/frontend/assets/arrow-down-left-Pid0zUYj.js +6 -0
  95. vibe_surf/backend/frontend/assets/arrow-down-narrow-wide-DtnDCgZY.js +6 -0
  96. vibe_surf/backend/frontend/assets/arrow-down-right-BgepY9bM.js +6 -0
  97. vibe_surf/backend/frontend/assets/arrow-down-to-dot-C5rQ12yn.js +6 -0
  98. vibe_surf/backend/frontend/assets/arrow-down-to-line-DovZ64L0.js +6 -0
  99. vibe_surf/backend/frontend/assets/arrow-down-up-D5-v7CDC.js +6 -0
  100. vibe_surf/backend/frontend/assets/arrow-down-wide-narrow-CGAsRLvP.js +6 -0
  101. vibe_surf/backend/frontend/assets/arrow-down-z-a-DOGHwUgR.js +6 -0
  102. vibe_surf/backend/frontend/assets/arrow-left-from-line-DwY8iDxY.js +6 -0
  103. vibe_surf/backend/frontend/assets/arrow-left-hKr3yGVm.js +6 -0
  104. vibe_surf/backend/frontend/assets/arrow-left-right-Be5fvvG0.js +6 -0
  105. vibe_surf/backend/frontend/assets/arrow-left-to-line-DKHIypu3.js +6 -0
  106. vibe_surf/backend/frontend/assets/arrow-right-BaRZuB8W.js +6 -0
  107. vibe_surf/backend/frontend/assets/arrow-right-from-line-D3jqt4-q.js +6 -0
  108. vibe_surf/backend/frontend/assets/arrow-right-left-BKRuMAR-.js +6 -0
  109. vibe_surf/backend/frontend/assets/arrow-right-to-line-rtWVy_CC.js +6 -0
  110. vibe_surf/backend/frontend/assets/arrow-up-0-1-yF8Nt_KM.js +6 -0
  111. vibe_surf/backend/frontend/assets/arrow-up-1-0-WRlLFmSw.js +6 -0
  112. vibe_surf/backend/frontend/assets/arrow-up-BKnAmgTC.js +6 -0
  113. vibe_surf/backend/frontend/assets/arrow-up-a-z-COXfk41y.js +6 -0
  114. vibe_surf/backend/frontend/assets/arrow-up-down-Dtw4v35K.js +6 -0
  115. vibe_surf/backend/frontend/assets/arrow-up-from-dot-B1XSjc2P.js +6 -0
  116. vibe_surf/backend/frontend/assets/arrow-up-from-line-C-lHvDpd.js +6 -0
  117. vibe_surf/backend/frontend/assets/arrow-up-left-CYojov8T.js +6 -0
  118. vibe_surf/backend/frontend/assets/arrow-up-narrow-wide-B54CYEHs.js +6 -0
  119. vibe_surf/backend/frontend/assets/arrow-up-right-Bdo9Z-7A.js +6 -0
  120. vibe_surf/backend/frontend/assets/arrow-up-to-line-DS_I-9Vp.js +6 -0
  121. vibe_surf/backend/frontend/assets/arrow-up-wide-narrow-B3GeXj9O.js +6 -0
  122. vibe_surf/backend/frontend/assets/arrow-up-z-a-CdyZuD75.js +6 -0
  123. vibe_surf/backend/frontend/assets/arrows-up-from-line-0sYhsLRw.js +6 -0
  124. vibe_surf/backend/frontend/assets/asterisk-CQWlVYDB.js +6 -0
  125. vibe_surf/backend/frontend/assets/at-sign-Dug8NlWL.js +6 -0
  126. vibe_surf/backend/frontend/assets/atom-Cx1vCOFb.js +6 -0
  127. vibe_surf/backend/frontend/assets/audio-lines-Cimsj6_f.js +6 -0
  128. vibe_surf/backend/frontend/assets/audio-waveform-BxCl1LyQ.js +6 -0
  129. vibe_surf/backend/frontend/assets/award-dRU3xhJ7.js +6 -0
  130. vibe_surf/backend/frontend/assets/axe-B8CCMGTD.js +6 -0
  131. vibe_surf/backend/frontend/assets/axis-3d-D2ZIjjx3.js +6 -0
  132. vibe_surf/backend/frontend/assets/baby-DWh5CwfC.js +6 -0
  133. vibe_surf/backend/frontend/assets/backpack-D9rjYWvf.js +6 -0
  134. vibe_surf/backend/frontend/assets/badge-C0r2CPAV.js +6 -0
  135. vibe_surf/backend/frontend/assets/badge-alert-Do89zN-s.js +6 -0
  136. vibe_surf/backend/frontend/assets/badge-cent-Dmv_cqc-.js +6 -0
  137. vibe_surf/backend/frontend/assets/badge-check--_Rese0X.js +6 -0
  138. vibe_surf/backend/frontend/assets/badge-dollar-sign-BHnNL8ma.js +6 -0
  139. vibe_surf/backend/frontend/assets/badge-euro-CKNQv-oO.js +6 -0
  140. vibe_surf/backend/frontend/assets/badge-help-BlZAHEa-.js +6 -0
  141. vibe_surf/backend/frontend/assets/badge-indian-rupee-BNIUcLaI.js +6 -0
  142. vibe_surf/backend/frontend/assets/badge-info-CrX5KTPR.js +6 -0
  143. vibe_surf/backend/frontend/assets/badge-japanese-yen-0mdbiK5f.js +6 -0
  144. vibe_surf/backend/frontend/assets/badge-minus-BX_scLIK.js +6 -0
  145. vibe_surf/backend/frontend/assets/badge-percent-BSJP3Okj.js +6 -0
  146. vibe_surf/backend/frontend/assets/badge-plus-DhlqCq3Z.js +6 -0
  147. vibe_surf/backend/frontend/assets/badge-pound-sterling-QpnkBN56.js +6 -0
  148. vibe_surf/backend/frontend/assets/badge-russian-ruble-L30Ncxnh.js +6 -0
  149. vibe_surf/backend/frontend/assets/badge-swiss-franc-BQrLli-C.js +6 -0
  150. vibe_surf/backend/frontend/assets/badge-x-DDXVSWE5.js +6 -0
  151. vibe_surf/backend/frontend/assets/baggage-claim-Nd9Qw4rX.js +6 -0
  152. vibe_surf/backend/frontend/assets/ban-fSKv80ss.js +6 -0
  153. vibe_surf/backend/frontend/assets/banana-DTClkW0x.js +6 -0
  154. vibe_surf/backend/frontend/assets/bandage-DLyvBCvf.js +6 -0
  155. vibe_surf/backend/frontend/assets/banknote-ArlwGdT1.js +6 -0
  156. vibe_surf/backend/frontend/assets/banknote-arrow-down-Dx9vP7KP.js +6 -0
  157. vibe_surf/backend/frontend/assets/banknote-arrow-up-CZNOWrKW.js +6 -0
  158. vibe_surf/backend/frontend/assets/banknote-x-y8ot0KXI.js +6 -0
  159. vibe_surf/backend/frontend/assets/barcode-U3mgwXvC.js +6 -0
  160. vibe_surf/backend/frontend/assets/baseline-Bb17nsNt.js +6 -0
  161. vibe_surf/backend/frontend/assets/bath-Fu-10Xqv.js +6 -0
  162. vibe_surf/backend/frontend/assets/battery-D2ng6PHz.js +6 -0
  163. vibe_surf/backend/frontend/assets/battery-charging-BBA_U97U.js +6 -0
  164. vibe_surf/backend/frontend/assets/battery-full-D74R09iv.js +6 -0
  165. vibe_surf/backend/frontend/assets/battery-low-BMeJBmJp.js +6 -0
  166. vibe_surf/backend/frontend/assets/battery-medium-clKHZw71.js +6 -0
  167. vibe_surf/backend/frontend/assets/battery-plus-DxtzU1bB.js +6 -0
  168. vibe_surf/backend/frontend/assets/battery-warning-1NEZ4eCa.js +6 -0
  169. vibe_surf/backend/frontend/assets/beaker-Br0pnmtw.js +6 -0
  170. vibe_surf/backend/frontend/assets/bean-B04lfjZo.js +6 -0
  171. vibe_surf/backend/frontend/assets/bean-off-C6H6plJJ.js +6 -0
  172. vibe_surf/backend/frontend/assets/bed-B7xWDlGQ.js +6 -0
  173. vibe_surf/backend/frontend/assets/bed-double-We8EVOE6.js +6 -0
  174. vibe_surf/backend/frontend/assets/bed-single-C-tVm75i.js +6 -0
  175. vibe_surf/backend/frontend/assets/beef-BzzCqLUx.js +6 -0
  176. vibe_surf/backend/frontend/assets/beer-B1aIU5Wp.js +6 -0
  177. vibe_surf/backend/frontend/assets/beer-off-T9p0sUQ_.js +6 -0
  178. vibe_surf/backend/frontend/assets/bell-BiEY08q7.js +6 -0
  179. vibe_surf/backend/frontend/assets/bell-dot-D6ZHJmF9.js +6 -0
  180. vibe_surf/backend/frontend/assets/bell-electric-BjP0O4kE.js +6 -0
  181. vibe_surf/backend/frontend/assets/bell-minus-Cw2KMMsV.js +6 -0
  182. vibe_surf/backend/frontend/assets/bell-off-JUGEvepv.js +6 -0
  183. vibe_surf/backend/frontend/assets/bell-plus-BtwPCtO5.js +6 -0
  184. vibe_surf/backend/frontend/assets/bell-ring-B_RAFBbK.js +6 -0
  185. vibe_surf/backend/frontend/assets/between-horizontal-end-DG9RojRP.js +6 -0
  186. vibe_surf/backend/frontend/assets/between-horizontal-start-BNuWKIUb.js +6 -0
  187. vibe_surf/backend/frontend/assets/between-vertical-end-CUvl7S4G.js +6 -0
  188. vibe_surf/backend/frontend/assets/between-vertical-start-tYvnZE7k.js +6 -0
  189. vibe_surf/backend/frontend/assets/biceps-flexed-D2zMmbhv.js +6 -0
  190. vibe_surf/backend/frontend/assets/bike-DPdpsZIt.js +6 -0
  191. vibe_surf/backend/frontend/assets/binary-DnnraEVk.js +6 -0
  192. vibe_surf/backend/frontend/assets/binoculars-BXc-CFA4.js +6 -0
  193. vibe_surf/backend/frontend/assets/biohazard-D-6PF7OA.js +6 -0
  194. vibe_surf/backend/frontend/assets/bird-CYNkrqM5.js +6 -0
  195. vibe_surf/backend/frontend/assets/bitcoin-DG6PDKEk.js +6 -0
  196. vibe_surf/backend/frontend/assets/blend-COR-wQIS.js +6 -0
  197. vibe_surf/backend/frontend/assets/blinds-_pD0AjwU.js +6 -0
  198. vibe_surf/backend/frontend/assets/blocks-C0goFnXe.js +6 -0
  199. vibe_surf/backend/frontend/assets/bluetooth-BFH9HCot.js +6 -0
  200. vibe_surf/backend/frontend/assets/bluetooth-connected-C9JKQLmC.js +6 -0
  201. vibe_surf/backend/frontend/assets/bluetooth-off-ka-F7ZnG.js +6 -0
  202. vibe_surf/backend/frontend/assets/bluetooth-searching-BdyfX9rD.js +6 -0
  203. vibe_surf/backend/frontend/assets/bold-CZSxbQF9.js +6 -0
  204. vibe_surf/backend/frontend/assets/bolt-BjrrPChn.js +6 -0
  205. vibe_surf/backend/frontend/assets/bomb-CMlcm4r9.js +6 -0
  206. vibe_surf/backend/frontend/assets/bone-qWIxHNfL.js +6 -0
  207. vibe_surf/backend/frontend/assets/book-BfRvOdc3.js +6 -0
  208. vibe_surf/backend/frontend/assets/book-a-CpoCb7Zv.js +6 -0
  209. vibe_surf/backend/frontend/assets/book-audio-cBKWAq-p.js +6 -0
  210. vibe_surf/backend/frontend/assets/book-check-CqwOgoOp.js +6 -0
  211. vibe_surf/backend/frontend/assets/book-copy-ORHl4yqI.js +6 -0
  212. vibe_surf/backend/frontend/assets/book-dashed-BrJdSa-D.js +6 -0
  213. vibe_surf/backend/frontend/assets/book-down-Bj4JV-P-.js +6 -0
  214. vibe_surf/backend/frontend/assets/book-headphones-BYuIU1gj.js +6 -0
  215. vibe_surf/backend/frontend/assets/book-heart-DCUxVJaU.js +6 -0
  216. vibe_surf/backend/frontend/assets/book-image-BPpCKv6n.js +6 -0
  217. vibe_surf/backend/frontend/assets/book-key-Ca_EtM6h.js +6 -0
  218. vibe_surf/backend/frontend/assets/book-lock-Bldzz1aF.js +6 -0
  219. vibe_surf/backend/frontend/assets/book-marked-BCleXwJ3.js +6 -0
  220. vibe_surf/backend/frontend/assets/book-minus-XoJOGZOx.js +6 -0
  221. vibe_surf/backend/frontend/assets/book-open-DUlI5XCY.js +6 -0
  222. vibe_surf/backend/frontend/assets/book-open-check-BEksHFoQ.js +6 -0
  223. vibe_surf/backend/frontend/assets/book-open-text-CiKyiRt-.js +6 -0
  224. vibe_surf/backend/frontend/assets/book-plus-DuUfSKu2.js +6 -0
  225. vibe_surf/backend/frontend/assets/book-text-TTfLk4-M.js +6 -0
  226. vibe_surf/backend/frontend/assets/book-type-CMV326FZ.js +6 -0
  227. vibe_surf/backend/frontend/assets/book-up-2-CGiuKI0n.js +6 -0
  228. vibe_surf/backend/frontend/assets/book-up-d2hb8aDq.js +6 -0
  229. vibe_surf/backend/frontend/assets/book-user-BsZySUGG.js +6 -0
  230. vibe_surf/backend/frontend/assets/book-x-CoSA25As.js +6 -0
  231. vibe_surf/backend/frontend/assets/bookmark-CVx8aFGk.js +6 -0
  232. vibe_surf/backend/frontend/assets/bookmark-check-Zh_1fqo_.js +6 -0
  233. vibe_surf/backend/frontend/assets/bookmark-minus---KmRSON.js +6 -0
  234. vibe_surf/backend/frontend/assets/bookmark-plus-ZY-aQ6r5.js +6 -0
  235. vibe_surf/backend/frontend/assets/bookmark-x-DnEKBdZC.js +6 -0
  236. vibe_surf/backend/frontend/assets/boom-box-D5cJf4pI.js +6 -0
  237. vibe_surf/backend/frontend/assets/bot-BbS7VJ5s.js +6 -0
  238. vibe_surf/backend/frontend/assets/bot-message-square-Bm4hBAbI.js +6 -0
  239. vibe_surf/backend/frontend/assets/bot-off-CFjG1wx4.js +6 -0
  240. vibe_surf/backend/frontend/assets/bow-arrow-Bupk8VJM.js +6 -0
  241. vibe_surf/backend/frontend/assets/box-CyVAC5Vv.js +6 -0
  242. vibe_surf/backend/frontend/assets/boxes-B3xCa_UA.js +6 -0
  243. vibe_surf/backend/frontend/assets/braces-QLXt2h0B.js +6 -0
  244. vibe_surf/backend/frontend/assets/brackets-CEy7gs9d.js +6 -0
  245. vibe_surf/backend/frontend/assets/brain-circuit-WmeDjyy5.js +6 -0
  246. vibe_surf/backend/frontend/assets/brain-cog-DKDdpxNn.js +6 -0
  247. vibe_surf/backend/frontend/assets/brain-ziGJYeS1.js +6 -0
  248. vibe_surf/backend/frontend/assets/brick-wall-DXer5s5J.js +6 -0
  249. vibe_surf/backend/frontend/assets/brick-wall-fire-CfXr8Krv.js +6 -0
  250. vibe_surf/backend/frontend/assets/briefcase-C2YbssAg.js +6 -0
  251. vibe_surf/backend/frontend/assets/briefcase-business-CJCpJSkU.js +6 -0
  252. vibe_surf/backend/frontend/assets/briefcase-conveyor-belt-B0jqiIT4.js +6 -0
  253. vibe_surf/backend/frontend/assets/briefcase-medical-BBH0C6ZQ.js +6 -0
  254. vibe_surf/backend/frontend/assets/bring-to-front-ywT72zy-.js +6 -0
  255. vibe_surf/backend/frontend/assets/brush-_uc9w_j1.js +6 -0
  256. vibe_surf/backend/frontend/assets/bubbles-ggRrvDQI.js +6 -0
  257. vibe_surf/backend/frontend/assets/bug-6l9frAXO.js +6 -0
  258. vibe_surf/backend/frontend/assets/bug-off-BmK1mJ7T.js +6 -0
  259. vibe_surf/backend/frontend/assets/bug-play-DbXJeqOa.js +6 -0
  260. vibe_surf/backend/frontend/assets/building-2-Cf9gYIvy.js +6 -0
  261. vibe_surf/backend/frontend/assets/building-D9eMVeBu.js +6 -0
  262. vibe_surf/backend/frontend/assets/bus-COrhWbdv.js +6 -0
  263. vibe_surf/backend/frontend/assets/bus-front-Csav5OG_.js +6 -0
  264. vibe_surf/backend/frontend/assets/cable-BPG7O6tf.js +6 -0
  265. vibe_surf/backend/frontend/assets/cable-car-ChPtZlze.js +6 -0
  266. vibe_surf/backend/frontend/assets/cake-DnmMZhI2.js +6 -0
  267. vibe_surf/backend/frontend/assets/cake-slice-Clc5mDPW.js +6 -0
  268. vibe_surf/backend/frontend/assets/calculator-C77I3XPN.js +6 -0
  269. vibe_surf/backend/frontend/assets/calendar-1-BMs-t7Zd.js +6 -0
  270. vibe_surf/backend/frontend/assets/calendar-DuLRS-6L.js +6 -0
  271. vibe_surf/backend/frontend/assets/calendar-arrow-down-DoVsOnV0.js +6 -0
  272. vibe_surf/backend/frontend/assets/calendar-arrow-up-Ca_1_rkT.js +6 -0
  273. vibe_surf/backend/frontend/assets/calendar-check-2-0JmvXRsb.js +6 -0
  274. vibe_surf/backend/frontend/assets/calendar-check-DtTDIbPE.js +6 -0
  275. vibe_surf/backend/frontend/assets/calendar-clock-39XA2NxZ.js +6 -0
  276. vibe_surf/backend/frontend/assets/calendar-cog-B3elAX8P.js +6 -0
  277. vibe_surf/backend/frontend/assets/calendar-days-B_4sd_nS.js +6 -0
  278. vibe_surf/backend/frontend/assets/calendar-fold-1GZdJiY5.js +6 -0
  279. vibe_surf/backend/frontend/assets/calendar-heart-C20Gu6Pq.js +6 -0
  280. vibe_surf/backend/frontend/assets/calendar-minus-2-C2uYA9Xy.js +6 -0
  281. vibe_surf/backend/frontend/assets/calendar-minus-Bf9ZhUgX.js +6 -0
  282. vibe_surf/backend/frontend/assets/calendar-off-oqUiDnlM.js +6 -0
  283. vibe_surf/backend/frontend/assets/calendar-plus-2-D5AF7K6Z.js +6 -0
  284. vibe_surf/backend/frontend/assets/calendar-plus-DFRLvp48.js +6 -0
  285. vibe_surf/backend/frontend/assets/calendar-range-BtbX_u86.js +6 -0
  286. vibe_surf/backend/frontend/assets/calendar-search-DKFr3oFg.js +6 -0
  287. vibe_surf/backend/frontend/assets/calendar-sync-J6s1mjVg.js +6 -0
  288. vibe_surf/backend/frontend/assets/calendar-x-16dHXmS-.js +6 -0
  289. vibe_surf/backend/frontend/assets/calendar-x-2-DASXeIpI.js +6 -0
  290. vibe_surf/backend/frontend/assets/camera-C73rx5T7.js +6 -0
  291. vibe_surf/backend/frontend/assets/camera-off-lYXrg8Ab.js +6 -0
  292. vibe_surf/backend/frontend/assets/candy-DHin-JSi.js +6 -0
  293. vibe_surf/backend/frontend/assets/candy-cane-BrFztxP3.js +6 -0
  294. vibe_surf/backend/frontend/assets/candy-off-C6p9RmsL.js +6 -0
  295. vibe_surf/backend/frontend/assets/cannabis-BIomtlTh.js +6 -0
  296. vibe_surf/backend/frontend/assets/captions-CU9AD1HN.js +6 -0
  297. vibe_surf/backend/frontend/assets/captions-off-BQabz_7T.js +6 -0
  298. vibe_surf/backend/frontend/assets/car-CIepr4l8.js +6 -0
  299. vibe_surf/backend/frontend/assets/car-front-BvC3NXIU.js +6 -0
  300. vibe_surf/backend/frontend/assets/car-taxi-front-D6kk_vUY.js +6 -0
  301. vibe_surf/backend/frontend/assets/caravan-B4YvOfvY.js +6 -0
  302. vibe_surf/backend/frontend/assets/carrot-DScNmGFZ.js +6 -0
  303. vibe_surf/backend/frontend/assets/case-lower-iW8MijQ2.js +6 -0
  304. vibe_surf/backend/frontend/assets/case-sensitive-DggKI0Fh.js +6 -0
  305. vibe_surf/backend/frontend/assets/case-upper-BC22BC0q.js +6 -0
  306. vibe_surf/backend/frontend/assets/cassette-tape-PMwALept.js +6 -0
  307. vibe_surf/backend/frontend/assets/cast-Kq2v55CB.js +6 -0
  308. vibe_surf/backend/frontend/assets/castle-DJzhSlL6.js +6 -0
  309. vibe_surf/backend/frontend/assets/cat-Cszwi-0j.js +6 -0
  310. vibe_surf/backend/frontend/assets/cctv-4zeLHFGP.js +6 -0
  311. vibe_surf/backend/frontend/assets/chart-area-JyFaZNpl.js +6 -0
  312. vibe_surf/backend/frontend/assets/chart-bar-Bcnue-Eu.js +6 -0
  313. vibe_surf/backend/frontend/assets/chart-bar-big-dJ6tM8UP.js +6 -0
  314. vibe_surf/backend/frontend/assets/chart-bar-decreasing-jviD9Nka.js +6 -0
  315. vibe_surf/backend/frontend/assets/chart-bar-increasing-BcpuBWlQ.js +6 -0
  316. vibe_surf/backend/frontend/assets/chart-bar-stacked-DLxMM-a6.js +6 -0
  317. vibe_surf/backend/frontend/assets/chart-candlestick-BK5WOKib.js +6 -0
  318. vibe_surf/backend/frontend/assets/chart-column-BjT_DIge.js +6 -0
  319. vibe_surf/backend/frontend/assets/chart-column-big-BoOEhNxT.js +6 -0
  320. vibe_surf/backend/frontend/assets/chart-column-decreasing-B3PEhFWj.js +6 -0
  321. vibe_surf/backend/frontend/assets/chart-column-increasing-KTAFoIBT.js +6 -0
  322. vibe_surf/backend/frontend/assets/chart-column-stacked-Drci0FWY.js +6 -0
  323. vibe_surf/backend/frontend/assets/chart-gantt-CxLhKfws.js +6 -0
  324. vibe_surf/backend/frontend/assets/chart-line-Deh3i4SN.js +6 -0
  325. vibe_surf/backend/frontend/assets/chart-network-1nLETKIo.js +6 -0
  326. vibe_surf/backend/frontend/assets/chart-no-axes-column-BBUb9OL4.js +6 -0
  327. vibe_surf/backend/frontend/assets/chart-no-axes-column-decreasing-BNGTEmAA.js +6 -0
  328. vibe_surf/backend/frontend/assets/chart-no-axes-column-increasing-DYl5MpQr.js +6 -0
  329. vibe_surf/backend/frontend/assets/chart-no-axes-combined-Bwo9fVPi.js +6 -0
  330. vibe_surf/backend/frontend/assets/chart-no-axes-gantt-CIpwp7-G.js +6 -0
  331. vibe_surf/backend/frontend/assets/chart-pie-Brn9eScK.js +6 -0
  332. vibe_surf/backend/frontend/assets/chart-scatter-BFmfnF4I.js +6 -0
  333. vibe_surf/backend/frontend/assets/chart-spline-iPy-W03i.js +6 -0
  334. vibe_surf/backend/frontend/assets/check-check-CQEfDsmx.js +6 -0
  335. vibe_surf/backend/frontend/assets/chef-hat-DdOkr4i8.js +6 -0
  336. vibe_surf/backend/frontend/assets/cherry-XkD_QiBI.js +6 -0
  337. vibe_surf/backend/frontend/assets/chevron-first-muFwJevA.js +6 -0
  338. vibe_surf/backend/frontend/assets/chevron-last-Bn079TLv.js +6 -0
  339. vibe_surf/backend/frontend/assets/chevron-left-BhWYBFsk.js +6 -0
  340. vibe_surf/backend/frontend/assets/chevron-right-zm672Mdr.js +6 -0
  341. vibe_surf/backend/frontend/assets/chevrons-down-T3mOFRB2.js +6 -0
  342. vibe_surf/backend/frontend/assets/chevrons-down-up-BfWmsaYK.js +6 -0
  343. vibe_surf/backend/frontend/assets/chevrons-left-BLFCiP6g.js +6 -0
  344. vibe_surf/backend/frontend/assets/chevrons-left-right-Cgp4lAQF.js +6 -0
  345. vibe_surf/backend/frontend/assets/chevrons-left-right-ellipsis-BZSVxQ-x.js +6 -0
  346. vibe_surf/backend/frontend/assets/chevrons-right-DMKOjes0.js +6 -0
  347. vibe_surf/backend/frontend/assets/chevrons-right-left-Clwbiy09.js +6 -0
  348. vibe_surf/backend/frontend/assets/chevrons-up-CdrwLxmN.js +6 -0
  349. vibe_surf/backend/frontend/assets/chrome-46ygw5lK.js +6 -0
  350. vibe_surf/backend/frontend/assets/church-DQW3bkcl.js +6 -0
  351. vibe_surf/backend/frontend/assets/cigarette-CTvLdOLV.js +6 -0
  352. vibe_surf/backend/frontend/assets/cigarette-off-D0kR9lro.js +6 -0
  353. vibe_surf/backend/frontend/assets/circle-alert-QG2k6eWP.js +6 -0
  354. vibe_surf/backend/frontend/assets/circle-arrow-down-BHFs0Q9-.js +6 -0
  355. vibe_surf/backend/frontend/assets/circle-arrow-left-DQWeTJLw.js +6 -0
  356. vibe_surf/backend/frontend/assets/circle-arrow-out-down-left-B_oYI2Rn.js +6 -0
  357. vibe_surf/backend/frontend/assets/circle-arrow-out-down-right-BL4vxEs9.js +6 -0
  358. vibe_surf/backend/frontend/assets/circle-arrow-out-up-left-CFi1FNF-.js +6 -0
  359. vibe_surf/backend/frontend/assets/circle-arrow-out-up-right-CmMWk14E.js +6 -0
  360. vibe_surf/backend/frontend/assets/circle-arrow-right-dhHL8jIm.js +6 -0
  361. vibe_surf/backend/frontend/assets/circle-arrow-up-B8XWR9s_.js +6 -0
  362. vibe_surf/backend/frontend/assets/circle-check-CRm9QkNA.js +6 -0
  363. vibe_surf/backend/frontend/assets/circle-check-big-CPPNLArI.js +6 -0
  364. vibe_surf/backend/frontend/assets/circle-chevron-down-Cs4S5V03.js +6 -0
  365. vibe_surf/backend/frontend/assets/circle-chevron-left-V81BDvwB.js +6 -0
  366. vibe_surf/backend/frontend/assets/circle-chevron-right-CRa7Bkcz.js +6 -0
  367. vibe_surf/backend/frontend/assets/circle-chevron-up-FDxLxvSd.js +6 -0
  368. vibe_surf/backend/frontend/assets/circle-dashed-DD55_roy.js +6 -0
  369. vibe_surf/backend/frontend/assets/circle-divide-DKpocsWo.js +6 -0
  370. vibe_surf/backend/frontend/assets/circle-dollar-sign-p7_bVi5m.js +6 -0
  371. vibe_surf/backend/frontend/assets/circle-dot-Be13EypY.js +6 -0
  372. vibe_surf/backend/frontend/assets/circle-dot-dashed-KuVNkxEv.js +6 -0
  373. vibe_surf/backend/frontend/assets/circle-ellipsis-BSLpVL-C.js +6 -0
  374. vibe_surf/backend/frontend/assets/circle-equal-_Mfed9km.js +6 -0
  375. vibe_surf/backend/frontend/assets/circle-fading-arrow-up-D_E3BIXf.js +6 -0
  376. vibe_surf/backend/frontend/assets/circle-fading-plus-5ZA5Je_2.js +6 -0
  377. vibe_surf/backend/frontend/assets/circle-gauge-b41i9Azv.js +6 -0
  378. vibe_surf/backend/frontend/assets/circle-help-BOLgIUsf.js +6 -0
  379. vibe_surf/backend/frontend/assets/circle-minus-C41JxC_E.js +6 -0
  380. vibe_surf/backend/frontend/assets/circle-off-yuGaN1EU.js +6 -0
  381. vibe_surf/backend/frontend/assets/circle-parking-B-DnXhcd.js +6 -0
  382. vibe_surf/backend/frontend/assets/circle-parking-off-DsCM2b8j.js +6 -0
  383. vibe_surf/backend/frontend/assets/circle-pause-Dqufdu9m.js +6 -0
  384. vibe_surf/backend/frontend/assets/circle-percent-Dp8UwPQq.js +6 -0
  385. vibe_surf/backend/frontend/assets/circle-play-N8vi1Pcd.js +6 -0
  386. vibe_surf/backend/frontend/assets/circle-plus-wD1VqIgT.js +6 -0
  387. vibe_surf/backend/frontend/assets/circle-power-DBZAmaYW.js +6 -0
  388. vibe_surf/backend/frontend/assets/circle-slash-2-hdq8_Fp6.js +6 -0
  389. vibe_surf/backend/frontend/assets/circle-slash-CSrHLLP2.js +6 -0
  390. vibe_surf/backend/frontend/assets/circle-small-BQ6lrOIo.js +6 -0
  391. vibe_surf/backend/frontend/assets/circle-stop-xgLQ9Loi.js +6 -0
  392. vibe_surf/backend/frontend/assets/circle-user-CzvrnVH9.js +6 -0
  393. vibe_surf/backend/frontend/assets/circle-user-round-0JhYfAcs.js +6 -0
  394. vibe_surf/backend/frontend/assets/circuit-board-DpN-UUwV.js +6 -0
  395. vibe_surf/backend/frontend/assets/citrus-BGWHfGg3.js +6 -0
  396. vibe_surf/backend/frontend/assets/clapperboard-9m-99Aof.js +6 -0
  397. vibe_surf/backend/frontend/assets/clipboard-C-MVPhAy.js +6 -0
  398. vibe_surf/backend/frontend/assets/clipboard-check-Bonb2WoP.js +6 -0
  399. vibe_surf/backend/frontend/assets/clipboard-copy-CmRHdw5h.js +6 -0
  400. vibe_surf/backend/frontend/assets/clipboard-list-DEof2iPM.js +6 -0
  401. vibe_surf/backend/frontend/assets/clipboard-minus-DN2QuVOG.js +6 -0
  402. vibe_surf/backend/frontend/assets/clipboard-paste-B20nudiB.js +6 -0
  403. vibe_surf/backend/frontend/assets/clipboard-pen-BZJamOnq.js +6 -0
  404. vibe_surf/backend/frontend/assets/clipboard-pen-line-DScYxgpw.js +6 -0
  405. vibe_surf/backend/frontend/assets/clipboard-plus-DJb4TcvR.js +6 -0
  406. vibe_surf/backend/frontend/assets/clipboard-type-DaibEn_w.js +6 -0
  407. vibe_surf/backend/frontend/assets/clipboard-x-CebR2xkR.js +6 -0
  408. vibe_surf/backend/frontend/assets/clock-1-Cz0OEQH3.js +6 -0
  409. vibe_surf/backend/frontend/assets/clock-10-BMLTtzHQ.js +6 -0
  410. vibe_surf/backend/frontend/assets/clock-11-CZ6m52x1.js +6 -0
  411. vibe_surf/backend/frontend/assets/clock-12-BXZWDgbr.js +6 -0
  412. vibe_surf/backend/frontend/assets/clock-2-ElC7DzP5.js +6 -0
  413. vibe_surf/backend/frontend/assets/clock-3-DN86BONK.js +6 -0
  414. vibe_surf/backend/frontend/assets/clock-4-CV9eUVD9.js +6 -0
  415. vibe_surf/backend/frontend/assets/clock-5-DgMTU8BD.js +6 -0
  416. vibe_surf/backend/frontend/assets/clock-6-_RjAiNVz.js +6 -0
  417. vibe_surf/backend/frontend/assets/clock-7-DsWDnhwN.js +6 -0
  418. vibe_surf/backend/frontend/assets/clock-8-CY-eCfWq.js +6 -0
  419. vibe_surf/backend/frontend/assets/clock-9-D4aWNYpk.js +6 -0
  420. vibe_surf/backend/frontend/assets/clock-UtAbEQE0.js +6 -0
  421. vibe_surf/backend/frontend/assets/clock-alert-gi6h-zRT.js +6 -0
  422. vibe_surf/backend/frontend/assets/clock-arrow-down-CC9Qp0ac.js +6 -0
  423. vibe_surf/backend/frontend/assets/clock-arrow-up-Cjt2qN9V.js +6 -0
  424. vibe_surf/backend/frontend/assets/clock-fading-BJp0FFxY.js +6 -0
  425. vibe_surf/backend/frontend/assets/cloud-TYaHXSiL.js +6 -0
  426. vibe_surf/backend/frontend/assets/cloud-alert-Dp4WVua8.js +6 -0
  427. vibe_surf/backend/frontend/assets/cloud-cog-Dlyn4rqA.js +6 -0
  428. vibe_surf/backend/frontend/assets/cloud-download-DH8UN3eX.js +6 -0
  429. vibe_surf/backend/frontend/assets/cloud-drizzle-s8348ic3.js +6 -0
  430. vibe_surf/backend/frontend/assets/cloud-fog-DHRDnzsg.js +6 -0
  431. vibe_surf/backend/frontend/assets/cloud-hail-D7nJGZgB.js +6 -0
  432. vibe_surf/backend/frontend/assets/cloud-lightning-CscbfdPI.js +6 -0
  433. vibe_surf/backend/frontend/assets/cloud-moon-C6897Z5z.js +6 -0
  434. vibe_surf/backend/frontend/assets/cloud-moon-rain-B6pK_auO.js +6 -0
  435. vibe_surf/backend/frontend/assets/cloud-off-1kN_AD0k.js +6 -0
  436. vibe_surf/backend/frontend/assets/cloud-rain-Dj6B4fBD.js +6 -0
  437. vibe_surf/backend/frontend/assets/cloud-rain-wind-BJrdBUd4.js +6 -0
  438. vibe_surf/backend/frontend/assets/cloud-snow-LK6lpCkZ.js +6 -0
  439. vibe_surf/backend/frontend/assets/cloud-sun-CRH8EQEJ.js +6 -0
  440. vibe_surf/backend/frontend/assets/cloud-sun-rain-7IssqnpA.js +6 -0
  441. vibe_surf/backend/frontend/assets/cloud-upload-tI3Dz1zd.js +6 -0
  442. vibe_surf/backend/frontend/assets/cloudy-okUc5uOM.js +6 -0
  443. vibe_surf/backend/frontend/assets/clover-O6CtUOhV.js +6 -0
  444. vibe_surf/backend/frontend/assets/club-SnWEwVMR.js +6 -0
  445. vibe_surf/backend/frontend/assets/code-xml-CYTnIdXN.js +6 -0
  446. vibe_surf/backend/frontend/assets/codepen-UxBTFH8q.js +6 -0
  447. vibe_surf/backend/frontend/assets/codesandbox-CSRpmotF.js +6 -0
  448. vibe_surf/backend/frontend/assets/coffee-BTr4K8Gn.js +6 -0
  449. vibe_surf/backend/frontend/assets/cog-C7RMqAcW.js +6 -0
  450. vibe_surf/backend/frontend/assets/coins-D7gWOtE7.js +6 -0
  451. vibe_surf/backend/frontend/assets/columns-2-WBM3YpNL.js +6 -0
  452. vibe_surf/backend/frontend/assets/columns-3-DyAMu-k8.js +6 -0
  453. vibe_surf/backend/frontend/assets/columns-3-cog-zfUPAOg0.js +6 -0
  454. vibe_surf/backend/frontend/assets/columns-4-Qz-B3Dvq.js +6 -0
  455. vibe_surf/backend/frontend/assets/combine-CLZvnf8j.js +6 -0
  456. vibe_surf/backend/frontend/assets/command-D8ymLYGG.js +6 -0
  457. vibe_surf/backend/frontend/assets/compass-DGYgNSVa.js +6 -0
  458. vibe_surf/backend/frontend/assets/component-CwL9ER1Q.js +6 -0
  459. vibe_surf/backend/frontend/assets/computer-QNTojt_5.js +6 -0
  460. vibe_surf/backend/frontend/assets/concierge-bell-C7jm8QJd.js +6 -0
  461. vibe_surf/backend/frontend/assets/cone-C9TQbkDB.js +6 -0
  462. vibe_surf/backend/frontend/assets/construction-CSyYpaz5.js +6 -0
  463. vibe_surf/backend/frontend/assets/contact-CFldvJVP.js +6 -0
  464. vibe_surf/backend/frontend/assets/contact-round-DA1kjclM.js +6 -0
  465. vibe_surf/backend/frontend/assets/container-BfGJKo0o.js +6 -0
  466. vibe_surf/backend/frontend/assets/contrast-DmYhTvN3.js +6 -0
  467. vibe_surf/backend/frontend/assets/cookie-Cw70purP.js +6 -0
  468. vibe_surf/backend/frontend/assets/cooking-pot-WzjjWZaR.js +6 -0
  469. vibe_surf/backend/frontend/assets/copy-BPjnY3ea.js +6 -0
  470. vibe_surf/backend/frontend/assets/copy-check-B6hqPf9B.js +6 -0
  471. vibe_surf/backend/frontend/assets/copy-minus-DMGhawAT.js +6 -0
  472. vibe_surf/backend/frontend/assets/copy-plus-DcW4_i4R.js +6 -0
  473. vibe_surf/backend/frontend/assets/copy-slash-Cn_xel6o.js +6 -0
  474. vibe_surf/backend/frontend/assets/copy-x-Dmf3jckJ.js +6 -0
  475. vibe_surf/backend/frontend/assets/copyleft-CJDbqV_Y.js +6 -0
  476. vibe_surf/backend/frontend/assets/copyright-Buw-D4Xa.js +6 -0
  477. vibe_surf/backend/frontend/assets/corner-down-left-BhPTW3SL.js +6 -0
  478. vibe_surf/backend/frontend/assets/corner-down-right-B_Md48mW.js +6 -0
  479. vibe_surf/backend/frontend/assets/corner-left-down-DDc0LvYT.js +6 -0
  480. vibe_surf/backend/frontend/assets/corner-left-up-C_EIQYvd.js +6 -0
  481. vibe_surf/backend/frontend/assets/corner-right-down-Bipz7-p6.js +6 -0
  482. vibe_surf/backend/frontend/assets/corner-right-up-euSAC3Mi.js +6 -0
  483. vibe_surf/backend/frontend/assets/corner-up-left-CRvdJT3E.js +6 -0
  484. vibe_surf/backend/frontend/assets/corner-up-right-CCK7dhVV.js +6 -0
  485. vibe_surf/backend/frontend/assets/cpu-DB-52VKi.js +6 -0
  486. vibe_surf/backend/frontend/assets/creative-commons-CXWueat0.js +6 -0
  487. vibe_surf/backend/frontend/assets/credit-card-CR5swmPL.js +6 -0
  488. vibe_surf/backend/frontend/assets/croissant-ClZbIF3L.js +6 -0
  489. vibe_surf/backend/frontend/assets/crop-DSXkvq6D.js +6 -0
  490. vibe_surf/backend/frontend/assets/cross-CkHV6YOi.js +6 -0
  491. vibe_surf/backend/frontend/assets/crosshair-C3tcoYxo.js +6 -0
  492. vibe_surf/backend/frontend/assets/crown-0LB9DCRa.js +6 -0
  493. vibe_surf/backend/frontend/assets/cuboid-CidkVtLJ.js +6 -0
  494. vibe_surf/backend/frontend/assets/cup-soda-DG_5s6Ma.js +6 -0
  495. vibe_surf/backend/frontend/assets/currency-AEQeyk_J.js +6 -0
  496. vibe_surf/backend/frontend/assets/cylinder-Da7lV5Pc.js +6 -0
  497. vibe_surf/backend/frontend/assets/dam-BIFS7P89.js +6 -0
  498. vibe_surf/backend/frontend/assets/database-Dx9euHTJ.js +6 -0
  499. vibe_surf/backend/frontend/assets/database-backup-Bbbt7mXt.js +6 -0
  500. vibe_surf/backend/frontend/assets/database-zap-CJC7IfdF.js +6 -0
  501. vibe_surf/backend/frontend/assets/decimals-arrow-left-BrRd8_vb.js +6 -0
  502. vibe_surf/backend/frontend/assets/decimals-arrow-right-Cglo48c9.js +6 -0
  503. vibe_surf/backend/frontend/assets/delete-C9qTL0sD.js +6 -0
  504. vibe_surf/backend/frontend/assets/dessert-7PTt5JJ0.js +6 -0
  505. vibe_surf/backend/frontend/assets/diameter-oheO2UGD.js +6 -0
  506. vibe_surf/backend/frontend/assets/diamond-DhBpDMNy.js +6 -0
  507. vibe_surf/backend/frontend/assets/diamond-minus-BqTULDvb.js +6 -0
  508. vibe_surf/backend/frontend/assets/diamond-percent-D1Ck8xGc.js +6 -0
  509. vibe_surf/backend/frontend/assets/diamond-plus-DfSf7Xoq.js +6 -0
  510. vibe_surf/backend/frontend/assets/dice-1-CIRG2xPK.js +6 -0
  511. vibe_surf/backend/frontend/assets/dice-2-r7s36USZ.js +6 -0
  512. vibe_surf/backend/frontend/assets/dice-3-Cl7FLe3x.js +6 -0
  513. vibe_surf/backend/frontend/assets/dice-4-D-yJWiku.js +6 -0
  514. vibe_surf/backend/frontend/assets/dice-5-Ci09NYyS.js +6 -0
  515. vibe_surf/backend/frontend/assets/dice-6-CC2FLvLo.js +6 -0
  516. vibe_surf/backend/frontend/assets/dices-CmB6hNUU.js +6 -0
  517. vibe_surf/backend/frontend/assets/diff-oCWjvY-c.js +6 -0
  518. vibe_surf/backend/frontend/assets/disc-2-DpUl7fl6.js +6 -0
  519. vibe_surf/backend/frontend/assets/disc-3-BugUAszu.js +6 -0
  520. vibe_surf/backend/frontend/assets/disc-DUbtGdHe.js +6 -0
  521. vibe_surf/backend/frontend/assets/disc-album-CXJRMctz.js +6 -0
  522. vibe_surf/backend/frontend/assets/divide-CY1K-HT7.js +6 -0
  523. vibe_surf/backend/frontend/assets/dna-CeE8ObeE.js +6 -0
  524. vibe_surf/backend/frontend/assets/dna-off-BviJKT3C.js +6 -0
  525. vibe_surf/backend/frontend/assets/dock-eIe8zGWk.js +6 -0
  526. vibe_surf/backend/frontend/assets/dog-CSlDDqxp.js +6 -0
  527. vibe_surf/backend/frontend/assets/dollar-sign-5U68U397.js +6 -0
  528. vibe_surf/backend/frontend/assets/donut-BeawTrlI.js +6 -0
  529. vibe_surf/backend/frontend/assets/door-closed-CwY8Mg15.js +6 -0
  530. vibe_surf/backend/frontend/assets/door-open-DFgi7N5B.js +6 -0
  531. vibe_surf/backend/frontend/assets/dot-fPF_etdO.js +6 -0
  532. vibe_surf/backend/frontend/assets/download-gSwRRqnX.js +6 -0
  533. vibe_surf/backend/frontend/assets/drafting-compass-Dj_7EFRc.js +6 -0
  534. vibe_surf/backend/frontend/assets/drama-BlDJuZEs.js +6 -0
  535. vibe_surf/backend/frontend/assets/dribbble-C0k3dpAi.js +6 -0
  536. vibe_surf/backend/frontend/assets/drill-COJcLBB4.js +6 -0
  537. vibe_surf/backend/frontend/assets/droplet-5wuLGLgZ.js +6 -0
  538. vibe_surf/backend/frontend/assets/droplet-off-Bra_6Oh9.js +6 -0
  539. vibe_surf/backend/frontend/assets/droplets-BE8PR1pM.js +6 -0
  540. vibe_surf/backend/frontend/assets/drum-DnJ1RUvq.js +6 -0
  541. vibe_surf/backend/frontend/assets/drumstick-JGiBDDwZ.js +6 -0
  542. vibe_surf/backend/frontend/assets/dumbbell-BEtc4tyd.js +6 -0
  543. vibe_surf/backend/frontend/assets/ear-DAqeJjkr.js +6 -0
  544. vibe_surf/backend/frontend/assets/ear-off-BA7gp4ie.js +6 -0
  545. vibe_surf/backend/frontend/assets/earth-CUlUl7Bp.js +6 -0
  546. vibe_surf/backend/frontend/assets/earth-lock-sl59Ywm7.js +6 -0
  547. vibe_surf/backend/frontend/assets/eclipse-DY7fC5N3.js +6 -0
  548. vibe_surf/backend/frontend/assets/egg-DxfY2UB8.js +6 -0
  549. vibe_surf/backend/frontend/assets/egg-fried-D2Eo3APu.js +6 -0
  550. vibe_surf/backend/frontend/assets/egg-off-DqYobjwG.js +6 -0
  551. vibe_surf/backend/frontend/assets/ellipsis-DgOuKLdR.js +6 -0
  552. vibe_surf/backend/frontend/assets/ellipsis-vertical--sr8F_UD.js +6 -0
  553. vibe_surf/backend/frontend/assets/equal-DS1qMZhi.js +6 -0
  554. vibe_surf/backend/frontend/assets/equal-approximately-mgMMBVF_.js +6 -0
  555. vibe_surf/backend/frontend/assets/equal-not-1Alw8lqE.js +6 -0
  556. vibe_surf/backend/frontend/assets/eraser-IStMo8nh.js +6 -0
  557. vibe_surf/backend/frontend/assets/ethernet-port-B6SRY0d8.js +6 -0
  558. vibe_surf/backend/frontend/assets/euro-S1kGUYTE.js +6 -0
  559. vibe_surf/backend/frontend/assets/expand-Cj8IQccm.js +6 -0
  560. vibe_surf/backend/frontend/assets/eye-DrnoCeKD.js +6 -0
  561. vibe_surf/backend/frontend/assets/eye-closed-B0cNIHJN.js +6 -0
  562. vibe_surf/backend/frontend/assets/eye-off-DIIh42Ws.js +6 -0
  563. vibe_surf/backend/frontend/assets/facebook-Df9Fpfnn.js +6 -0
  564. vibe_surf/backend/frontend/assets/factory-BLKvR2Z1.js +6 -0
  565. vibe_surf/backend/frontend/assets/fan-C-xRuGdo.js +6 -0
  566. vibe_surf/backend/frontend/assets/fast-forward-Bae5V83y.js +6 -0
  567. vibe_surf/backend/frontend/assets/feather-DTPfgED2.js +6 -0
  568. vibe_surf/backend/frontend/assets/fence-Mr7VQ0O9.js +6 -0
  569. vibe_surf/backend/frontend/assets/ferris-wheel-D82pDMqi.js +6 -0
  570. vibe_surf/backend/frontend/assets/figma-DBFJo9L2.js +6 -0
  571. vibe_surf/backend/frontend/assets/file-DvuZsaUg.js +6 -0
  572. vibe_surf/backend/frontend/assets/file-archive-DRtB2ivb.js +6 -0
  573. vibe_surf/backend/frontend/assets/file-audio-2-JE5iEkL9.js +6 -0
  574. vibe_surf/backend/frontend/assets/file-audio-C4RwC1BT.js +6 -0
  575. vibe_surf/backend/frontend/assets/file-axis-3d-DQSHzEo4.js +6 -0
  576. vibe_surf/backend/frontend/assets/file-badge-2-P__XKUXn.js +6 -0
  577. vibe_surf/backend/frontend/assets/file-badge-CejYglxU.js +6 -0
  578. vibe_surf/backend/frontend/assets/file-box-CgFMY7Rp.js +6 -0
  579. vibe_surf/backend/frontend/assets/file-chart-column-Bq5PyMwY.js +6 -0
  580. vibe_surf/backend/frontend/assets/file-chart-column-increasing-t_d1wCSV.js +6 -0
  581. vibe_surf/backend/frontend/assets/file-chart-line-Df6iedBR.js +6 -0
  582. vibe_surf/backend/frontend/assets/file-chart-pie-YH23adPM.js +6 -0
  583. vibe_surf/backend/frontend/assets/file-check-2-CKcRkU0L.js +6 -0
  584. vibe_surf/backend/frontend/assets/file-check-BYZznME9.js +6 -0
  585. vibe_surf/backend/frontend/assets/file-clock-8rD4-Bqt.js +6 -0
  586. vibe_surf/backend/frontend/assets/file-code-2-BjV8KhR4.js +6 -0
  587. vibe_surf/backend/frontend/assets/file-code-CXS3YUpM.js +6 -0
  588. vibe_surf/backend/frontend/assets/file-cog-GKLng0Qf.js +6 -0
  589. vibe_surf/backend/frontend/assets/file-diff-B_7HXPkJ.js +6 -0
  590. vibe_surf/backend/frontend/assets/file-digit-AtVulYi7.js +6 -0
  591. vibe_surf/backend/frontend/assets/file-down-CJIG5dHj.js +6 -0
  592. vibe_surf/backend/frontend/assets/file-heart-B8jWzdG5.js +6 -0
  593. vibe_surf/backend/frontend/assets/file-image-CXtDt3N3.js +6 -0
  594. vibe_surf/backend/frontend/assets/file-input-B-0mgcKT.js +6 -0
  595. vibe_surf/backend/frontend/assets/file-json-2-DQHJM93o.js +6 -0
  596. vibe_surf/backend/frontend/assets/file-json-BmrGDLh2.js +6 -0
  597. vibe_surf/backend/frontend/assets/file-key-2-DnpQ1dTj.js +6 -0
  598. vibe_surf/backend/frontend/assets/file-key-D3lJXveQ.js +6 -0
  599. vibe_surf/backend/frontend/assets/file-lock-2-DWdLzoF7.js +6 -0
  600. vibe_surf/backend/frontend/assets/file-lock-ZMZB3U4I.js +6 -0
  601. vibe_surf/backend/frontend/assets/file-minus-2-CsTsio0s.js +6 -0
  602. vibe_surf/backend/frontend/assets/file-minus-CtfRmVme.js +6 -0
  603. vibe_surf/backend/frontend/assets/file-music-DHhVu2aK.js +6 -0
  604. vibe_surf/backend/frontend/assets/file-output-CjQ-FMg0.js +6 -0
  605. vibe_surf/backend/frontend/assets/file-pen-C9S_u4U9.js +6 -0
  606. vibe_surf/backend/frontend/assets/file-pen-line-niZF4quE.js +6 -0
  607. vibe_surf/backend/frontend/assets/file-plus-2-DzIiS2EM.js +6 -0
  608. vibe_surf/backend/frontend/assets/file-plus-Bloe0E45.js +6 -0
  609. vibe_surf/backend/frontend/assets/file-question-BBTjP9h0.js +6 -0
  610. vibe_surf/backend/frontend/assets/file-scan-B3Bn2EZN.js +6 -0
  611. vibe_surf/backend/frontend/assets/file-search-2-DnC8d9OD.js +6 -0
  612. vibe_surf/backend/frontend/assets/file-search-DzPGZllw.js +6 -0
  613. vibe_surf/backend/frontend/assets/file-sliders-BHYXa9jQ.js +6 -0
  614. vibe_surf/backend/frontend/assets/file-spreadsheet-DvjPpK9G.js +6 -0
  615. vibe_surf/backend/frontend/assets/file-stack-yJR4id_3.js +6 -0
  616. vibe_surf/backend/frontend/assets/file-symlink-BWQBdrEp.js +6 -0
  617. vibe_surf/backend/frontend/assets/file-terminal-CvhcKgiv.js +6 -0
  618. vibe_surf/backend/frontend/assets/file-text-tuxzZhRs.js +6 -0
  619. vibe_surf/backend/frontend/assets/file-type-2-Dgantaer.js +6 -0
  620. vibe_surf/backend/frontend/assets/file-type-DfZBPqmH.js +6 -0
  621. vibe_surf/backend/frontend/assets/file-up-GXfnonbH.js +6 -0
  622. vibe_surf/backend/frontend/assets/file-user-N7Fan7ao.js +6 -0
  623. vibe_surf/backend/frontend/assets/file-video-2-B4JBmAcG.js +6 -0
  624. vibe_surf/backend/frontend/assets/file-video-Fsp8g5kU.js +6 -0
  625. vibe_surf/backend/frontend/assets/file-volume-2-Cg1A9z8S.js +6 -0
  626. vibe_surf/backend/frontend/assets/file-volume-xzVZMKW0.js +6 -0
  627. vibe_surf/backend/frontend/assets/file-warning-CS2F3Xr2.js +6 -0
  628. vibe_surf/backend/frontend/assets/file-x-2-BNUgAQH8.js +6 -0
  629. vibe_surf/backend/frontend/assets/file-x-DTK5Zfd-.js +6 -0
  630. vibe_surf/backend/frontend/assets/files-CNx4yvup.js +6 -0
  631. vibe_surf/backend/frontend/assets/film-Dec7cGCL.js +6 -0
  632. vibe_surf/backend/frontend/assets/fingerprint-B_IGMLcp.js +6 -0
  633. vibe_surf/backend/frontend/assets/fire-extinguisher-CjZilrfE.js +6 -0
  634. vibe_surf/backend/frontend/assets/fish-CXs3XpVQ.js +6 -0
  635. vibe_surf/backend/frontend/assets/fish-off-BfYutBG_.js +6 -0
  636. vibe_surf/backend/frontend/assets/fish-symbol-DFoA8GWJ.js +6 -0
  637. vibe_surf/backend/frontend/assets/flag-cx37QYSs.js +6 -0
  638. vibe_surf/backend/frontend/assets/flag-off-DyXYguA1.js +6 -0
  639. vibe_surf/backend/frontend/assets/flag-triangle-left-Dvsg9XUg.js +6 -0
  640. vibe_surf/backend/frontend/assets/flag-triangle-right-CluL18qS.js +6 -0
  641. vibe_surf/backend/frontend/assets/flame-DwjoBypP.js +6 -0
  642. vibe_surf/backend/frontend/assets/flame-kindling-DFbZUxx1.js +6 -0
  643. vibe_surf/backend/frontend/assets/flashlight-eSCrcAU_.js +6 -0
  644. vibe_surf/backend/frontend/assets/flashlight-off-C6ZnSGnv.js +6 -0
  645. vibe_surf/backend/frontend/assets/flask-conical-CqZXJFUg.js +6 -0
  646. vibe_surf/backend/frontend/assets/flask-conical-off-DLnkLxdX.js +6 -0
  647. vibe_surf/backend/frontend/assets/flask-round-Dukzlk12.js +6 -0
  648. vibe_surf/backend/frontend/assets/flip-horizontal-2-DPCHT9Se.js +6 -0
  649. vibe_surf/backend/frontend/assets/flip-horizontal-B27Zih29.js +6 -0
  650. vibe_surf/backend/frontend/assets/flip-vertical-2-BLZ7P_e7.js +6 -0
  651. vibe_surf/backend/frontend/assets/flip-vertical-BKIxHZUr.js +6 -0
  652. vibe_surf/backend/frontend/assets/flower-2-C3USolHO.js +6 -0
  653. vibe_surf/backend/frontend/assets/flower-MuZltbIo.js +6 -0
  654. vibe_surf/backend/frontend/assets/focus-42uZfpdQ.js +6 -0
  655. vibe_surf/backend/frontend/assets/fold-horizontal-Di0iHFys.js +6 -0
  656. vibe_surf/backend/frontend/assets/fold-vertical-DTaNfFgW.js +6 -0
  657. vibe_surf/backend/frontend/assets/folder-CZZJq_yO.js +6 -0
  658. vibe_surf/backend/frontend/assets/folder-archive-B9gmPXfh.js +6 -0
  659. vibe_surf/backend/frontend/assets/folder-check-D8RNiC0h.js +6 -0
  660. vibe_surf/backend/frontend/assets/folder-clock-xJeq54e5.js +6 -0
  661. vibe_surf/backend/frontend/assets/folder-closed-J_oj7irx.js +6 -0
  662. vibe_surf/backend/frontend/assets/folder-code-sdeNF88C.js +6 -0
  663. vibe_surf/backend/frontend/assets/folder-cog-DaxTyB8x.js +6 -0
  664. vibe_surf/backend/frontend/assets/folder-dot-CcddM8ht.js +6 -0
  665. vibe_surf/backend/frontend/assets/folder-down-B6ibnVRy.js +6 -0
  666. vibe_surf/backend/frontend/assets/folder-git-2-C1s592lv.js +6 -0
  667. vibe_surf/backend/frontend/assets/folder-git-DT6ZCpGc.js +6 -0
  668. vibe_surf/backend/frontend/assets/folder-heart-_fpvnFcA.js +6 -0
  669. vibe_surf/backend/frontend/assets/folder-input-OCjNnVk-.js +6 -0
  670. vibe_surf/backend/frontend/assets/folder-kanban-DgbGiYl_.js +6 -0
  671. vibe_surf/backend/frontend/assets/folder-key-6dl4vOVJ.js +6 -0
  672. vibe_surf/backend/frontend/assets/folder-lock-C0FPUNUM.js +6 -0
  673. vibe_surf/backend/frontend/assets/folder-minus-CnnUrRgx.js +6 -0
  674. vibe_surf/backend/frontend/assets/folder-open-B6qoyzo4.js +6 -0
  675. vibe_surf/backend/frontend/assets/folder-open-dot-vcn79EAq.js +6 -0
  676. vibe_surf/backend/frontend/assets/folder-output-aqyTbjq1.js +6 -0
  677. vibe_surf/backend/frontend/assets/folder-pen-DONbvY-M.js +6 -0
  678. vibe_surf/backend/frontend/assets/folder-plus-B1CMWyUH.js +6 -0
  679. vibe_surf/backend/frontend/assets/folder-root-CO03ueMD.js +6 -0
  680. vibe_surf/backend/frontend/assets/folder-search-2-vXSwPDsr.js +6 -0
  681. vibe_surf/backend/frontend/assets/folder-search-CqRRhEYi.js +6 -0
  682. vibe_surf/backend/frontend/assets/folder-symlink-CyG26ZIM.js +6 -0
  683. vibe_surf/backend/frontend/assets/folder-sync-D7kc3Qv9.js +6 -0
  684. vibe_surf/backend/frontend/assets/folder-tree-B_kJAFgg.js +6 -0
  685. vibe_surf/backend/frontend/assets/folder-up-CPWWXuBL.js +6 -0
  686. vibe_surf/backend/frontend/assets/folder-x-BgWBu65a.js +6 -0
  687. vibe_surf/backend/frontend/assets/folders-BqIxqB0_.js +6 -0
  688. vibe_surf/backend/frontend/assets/footprints-U_DOce2V.js +6 -0
  689. vibe_surf/backend/frontend/assets/forklift-HwzIz7aw.js +6 -0
  690. vibe_surf/backend/frontend/assets/forward-DjYLGiCR.js +6 -0
  691. vibe_surf/backend/frontend/assets/frame-poMkf2ta.js +6 -0
  692. vibe_surf/backend/frontend/assets/framer-DNQvf86-.js +6 -0
  693. vibe_surf/backend/frontend/assets/frown-BnHOvtLa.js +6 -0
  694. vibe_surf/backend/frontend/assets/fuel-Cm_lHCJg.js +6 -0
  695. vibe_surf/backend/frontend/assets/fullscreen-COEG0zVc.js +6 -0
  696. vibe_surf/backend/frontend/assets/funnel-BKREn55d.js +6 -0
  697. vibe_surf/backend/frontend/assets/funnel-plus-B1RbFoZ4.js +6 -0
  698. vibe_surf/backend/frontend/assets/funnel-x-z3lufNFJ.js +6 -0
  699. vibe_surf/backend/frontend/assets/gallery-horizontal-CZQKmb1v.js +6 -0
  700. vibe_surf/backend/frontend/assets/gallery-horizontal-end-rt0pNZmd.js +6 -0
  701. vibe_surf/backend/frontend/assets/gallery-thumbnails-BawPOO5E.js +6 -0
  702. vibe_surf/backend/frontend/assets/gallery-vertical-DHlqWz-O.js +6 -0
  703. vibe_surf/backend/frontend/assets/gallery-vertical-end-1UBU5tP0.js +6 -0
  704. vibe_surf/backend/frontend/assets/gamepad-2-CGlBaPJy.js +6 -0
  705. vibe_surf/backend/frontend/assets/gamepad-B7EN8TXy.js +6 -0
  706. vibe_surf/backend/frontend/assets/gauge-CkJyJpYu.js +6 -0
  707. vibe_surf/backend/frontend/assets/gavel-BXOFsfyc.js +6 -0
  708. vibe_surf/backend/frontend/assets/gem-DJaoJhpp.js +6 -0
  709. vibe_surf/backend/frontend/assets/ghost-5jDlD5mv.js +6 -0
  710. vibe_surf/backend/frontend/assets/gift-DTuN9n1d.js +6 -0
  711. vibe_surf/backend/frontend/assets/git-branch-CAxiUjEF.js +6 -0
  712. vibe_surf/backend/frontend/assets/git-branch-plus-BcouIUD3.js +6 -0
  713. vibe_surf/backend/frontend/assets/git-commit-horizontal-DqOnbX0A.js +6 -0
  714. vibe_surf/backend/frontend/assets/git-commit-vertical-DEAmtVm7.js +6 -0
  715. vibe_surf/backend/frontend/assets/git-compare-8F4A8hf8.js +6 -0
  716. vibe_surf/backend/frontend/assets/git-compare-arrows-BCgbMQBd.js +6 -0
  717. vibe_surf/backend/frontend/assets/git-fork-UmnYpjac.js +6 -0
  718. vibe_surf/backend/frontend/assets/git-graph-MIRVcG3s.js +6 -0
  719. vibe_surf/backend/frontend/assets/git-merge-1ccPZB0a.js +6 -0
  720. vibe_surf/backend/frontend/assets/git-pull-request-BAmJjoSf.js +6 -0
  721. vibe_surf/backend/frontend/assets/git-pull-request-arrow-hDbG9s0T.js +6 -0
  722. vibe_surf/backend/frontend/assets/git-pull-request-closed-DZVF4_75.js +6 -0
  723. vibe_surf/backend/frontend/assets/git-pull-request-create-B_ikGAua.js +6 -0
  724. vibe_surf/backend/frontend/assets/git-pull-request-create-arrow-OlDcvuiA.js +6 -0
  725. vibe_surf/backend/frontend/assets/git-pull-request-draft-CfvzgQz4.js +6 -0
  726. vibe_surf/backend/frontend/assets/github-DlTWmBTt.js +6 -0
  727. vibe_surf/backend/frontend/assets/gitlab-DquWeR50.js +6 -0
  728. vibe_surf/backend/frontend/assets/glass-water-yuqxiPgK.js +6 -0
  729. vibe_surf/backend/frontend/assets/glasses-DPTQtusr.js +6 -0
  730. vibe_surf/backend/frontend/assets/globe-D1X1kv-g.js +6 -0
  731. vibe_surf/backend/frontend/assets/globe-lock-miWknHfI.js +6 -0
  732. vibe_surf/backend/frontend/assets/goal-BY1nb-LN.js +6 -0
  733. vibe_surf/backend/frontend/assets/grab-CnmpLOMH.js +6 -0
  734. vibe_surf/backend/frontend/assets/graduation-cap-CcH89wnV.js +6 -0
  735. vibe_surf/backend/frontend/assets/grape-CIiMFgS_.js +6 -0
  736. vibe_surf/backend/frontend/assets/grid-2x2-DyXR6Owe.js +6 -0
  737. vibe_surf/backend/frontend/assets/grid-2x2-check-D2GIuWpl.js +6 -0
  738. vibe_surf/backend/frontend/assets/grid-2x2-plus-D89B7CNh.js +6 -0
  739. vibe_surf/backend/frontend/assets/grid-2x2-x-CMeekq27.js +6 -0
  740. vibe_surf/backend/frontend/assets/grid-3x3-qKjElxaz.js +6 -0
  741. vibe_surf/backend/frontend/assets/grip--SsS48b-.js +6 -0
  742. vibe_surf/backend/frontend/assets/grip-horizontal-DapWkFjo.js +6 -0
  743. vibe_surf/backend/frontend/assets/grip-vertical-vn3rXQIt.js +6 -0
  744. vibe_surf/backend/frontend/assets/group-XhzCMXdw.js +6 -0
  745. vibe_surf/backend/frontend/assets/guitar-But8OLt2.js +6 -0
  746. vibe_surf/backend/frontend/assets/ham-_9G65W_I.js +6 -0
  747. vibe_surf/backend/frontend/assets/hammer-C2AZqVnX.js +6 -0
  748. vibe_surf/backend/frontend/assets/hand-DXuxSiOo.js +6 -0
  749. vibe_surf/backend/frontend/assets/hand-coins-mma7__lh.js +6 -0
  750. vibe_surf/backend/frontend/assets/hand-heart-DNtq1bnS.js +6 -0
  751. vibe_surf/backend/frontend/assets/hand-helping-Cdw7lKNu.js +6 -0
  752. vibe_surf/backend/frontend/assets/hand-metal-CcoWdRUV.js +6 -0
  753. vibe_surf/backend/frontend/assets/hand-platter-DoQTVTFx.js +6 -0
  754. vibe_surf/backend/frontend/assets/handshake-CJyspjIU.js +6 -0
  755. vibe_surf/backend/frontend/assets/hard-drive-ZduQuJtY.js +6 -0
  756. vibe_surf/backend/frontend/assets/hard-drive-download-D_hUh11c.js +6 -0
  757. vibe_surf/backend/frontend/assets/hard-drive-upload-BBPLIyZo.js +6 -0
  758. vibe_surf/backend/frontend/assets/hard-hat-OlmGevRI.js +6 -0
  759. vibe_surf/backend/frontend/assets/hash-COjLjaYu.js +6 -0
  760. vibe_surf/backend/frontend/assets/haze-Vf7OsAWn.js +6 -0
  761. vibe_surf/backend/frontend/assets/hdmi-port-B3C9bYX1.js +6 -0
  762. vibe_surf/backend/frontend/assets/heading-1-Dyyb72R2.js +6 -0
  763. vibe_surf/backend/frontend/assets/heading-2-ClF7vOi5.js +6 -0
  764. vibe_surf/backend/frontend/assets/heading-3-DPRazJfc.js +6 -0
  765. vibe_surf/backend/frontend/assets/heading-4-3e6Zii5g.js +6 -0
  766. vibe_surf/backend/frontend/assets/heading-5-GEVsfo30.js +6 -0
  767. vibe_surf/backend/frontend/assets/heading-6-CtX8dWYy.js +6 -0
  768. vibe_surf/backend/frontend/assets/heading-C_c5dBtC.js +6 -0
  769. vibe_surf/backend/frontend/assets/headphone-off-VkuNIw42.js +6 -0
  770. vibe_surf/backend/frontend/assets/headphones-BdMKOmhg.js +6 -0
  771. vibe_surf/backend/frontend/assets/headset-CGOllUmf.js +6 -0
  772. vibe_surf/backend/frontend/assets/heart-J_dfRIZ7.js +6 -0
  773. vibe_surf/backend/frontend/assets/heart-crack-BDNXXAjd.js +6 -0
  774. vibe_surf/backend/frontend/assets/heart-handshake-BhQLIVaj.js +6 -0
  775. vibe_surf/backend/frontend/assets/heart-minus-Dgexi3zQ.js +6 -0
  776. vibe_surf/backend/frontend/assets/heart-off-DF68jDRm.js +6 -0
  777. vibe_surf/backend/frontend/assets/heart-plus-D3LX6R_l.js +6 -0
  778. vibe_surf/backend/frontend/assets/heart-pulse-DnwkpqSJ.js +6 -0
  779. vibe_surf/backend/frontend/assets/heater-Bilq_TPS.js +6 -0
  780. vibe_surf/backend/frontend/assets/hexagon-BEvfIIaV.js +6 -0
  781. vibe_surf/backend/frontend/assets/highlighter-CNa8UVQD.js +6 -0
  782. vibe_surf/backend/frontend/assets/history-BggOc8wP.js +6 -0
  783. vibe_surf/backend/frontend/assets/hop-BCUHAdeR.js +6 -0
  784. vibe_surf/backend/frontend/assets/hop-off-B5f9Fr80.js +6 -0
  785. vibe_surf/backend/frontend/assets/hospital-Dk0tqXu9.js +6 -0
  786. vibe_surf/backend/frontend/assets/hotel-CXl-yW7B.js +6 -0
  787. vibe_surf/backend/frontend/assets/hourglass-DSRXQwTc.js +6 -0
  788. vibe_surf/backend/frontend/assets/house-Bhp2WF4v.js +6 -0
  789. vibe_surf/backend/frontend/assets/house-plug-DXm5j2Xq.js +6 -0
  790. vibe_surf/backend/frontend/assets/house-plus-KMp_x4hA.js +6 -0
  791. vibe_surf/backend/frontend/assets/house-wifi-Ccrar5-8.js +6 -0
  792. vibe_surf/backend/frontend/assets/ice-cream-bowl-j3qet3-o.js +6 -0
  793. vibe_surf/backend/frontend/assets/ice-cream-cone-XtpMBOSu.js +6 -0
  794. vibe_surf/backend/frontend/assets/id-card-BqzQOrR_.js +6 -0
  795. vibe_surf/backend/frontend/assets/image-B3lEwdvu.js +6 -0
  796. vibe_surf/backend/frontend/assets/image-down-sVdzbwfm.js +6 -0
  797. vibe_surf/backend/frontend/assets/image-minus-BdddBiyu.js +6 -0
  798. vibe_surf/backend/frontend/assets/image-off-CCZ9kVWH.js +6 -0
  799. vibe_surf/backend/frontend/assets/image-play-LNuKchCO.js +6 -0
  800. vibe_surf/backend/frontend/assets/image-plus-B4GTKJ6Z.js +6 -0
  801. vibe_surf/backend/frontend/assets/image-up-BfxmsdpY.js +6 -0
  802. vibe_surf/backend/frontend/assets/image-upscale-CexWZ50d.js +6 -0
  803. vibe_surf/backend/frontend/assets/images-C8Wp1eOg.js +6 -0
  804. vibe_surf/backend/frontend/assets/import-ec27SWYy.js +6 -0
  805. vibe_surf/backend/frontend/assets/inbox-YvwvpFKi.js +6 -0
  806. vibe_surf/backend/frontend/assets/indent-decrease-Dp0BVsoQ.js +6 -0
  807. vibe_surf/backend/frontend/assets/indent-increase-D3BuYj2n.js +6 -0
  808. vibe_surf/backend/frontend/assets/index-2CcQW4OZ.js +13 -0
  809. vibe_surf/backend/frontend/assets/index-4vq5awkV.js +1 -0
  810. vibe_surf/backend/frontend/assets/index-5ZZlgfo-.js +1 -0
  811. vibe_surf/backend/frontend/assets/index-6dxAUV6Y.js +1 -0
  812. vibe_surf/backend/frontend/assets/index-AzcZQWVx.js +2723 -0
  813. vibe_surf/backend/frontend/assets/index-B-IDFsd0.js +1 -0
  814. vibe_surf/backend/frontend/assets/index-B-ohDVDe.js +1 -0
  815. vibe_surf/backend/frontend/assets/index-B1Q4y1qa.js +1 -0
  816. vibe_surf/backend/frontend/assets/index-B1SY6fah.js +1 -0
  817. vibe_surf/backend/frontend/assets/index-B2ljcLYu.js +1 -0
  818. vibe_surf/backend/frontend/assets/index-B4-H1yfm.js +108 -0
  819. vibe_surf/backend/frontend/assets/index-B6MKztQU.js +1 -0
  820. vibe_surf/backend/frontend/assets/index-B7i2Q-3O.js +1 -0
  821. vibe_surf/backend/frontend/assets/index-B9Wx-Ii0.js +1 -0
  822. vibe_surf/backend/frontend/assets/index-BFzpTaXY.js +1 -0
  823. vibe_surf/backend/frontend/assets/index-BIBNbmyC.js +1 -0
  824. vibe_surf/backend/frontend/assets/index-BL_hoToU.js +1 -0
  825. vibe_surf/backend/frontend/assets/index-BOeI-zQ9.js +1 -0
  826. vibe_surf/backend/frontend/assets/index-BPEpFAuc.js +1 -0
  827. vibe_surf/backend/frontend/assets/index-BQ1eB4fC.js +1 -0
  828. vibe_surf/backend/frontend/assets/index-BQ2H2d3f.js +1 -0
  829. vibe_surf/backend/frontend/assets/index-BR-8IPV4.js +205 -0
  830. vibe_surf/backend/frontend/assets/index-BV8ArFsA.js +1 -0
  831. vibe_surf/backend/frontend/assets/index-BWwASCq5.js +1 -0
  832. vibe_surf/backend/frontend/assets/index-BWwglY3I.js +1 -0
  833. vibe_surf/backend/frontend/assets/index-B_Qz_foX.js +1 -0
  834. vibe_surf/backend/frontend/assets/index-BaoW7GZH.js +1 -0
  835. vibe_surf/backend/frontend/assets/index-BcrHz-y8.js +1 -0
  836. vibe_surf/backend/frontend/assets/index-BdSzkc1f.js +20 -0
  837. vibe_surf/backend/frontend/assets/index-BeLkvqxv.js +1 -0
  838. vibe_surf/backend/frontend/assets/index-Beq_etUM.js +1 -0
  839. vibe_surf/backend/frontend/assets/index-BgzQso9y.js +1 -0
  840. vibe_surf/backend/frontend/assets/index-BiNrEY13.js +1 -0
  841. vibe_surf/backend/frontend/assets/index-Bja3ZEZo.js +1 -0
  842. vibe_surf/backend/frontend/assets/index-BmcD7XCM.js +1 -0
  843. vibe_surf/backend/frontend/assets/index-BmnwJzsA.js +1 -0
  844. vibe_surf/backend/frontend/assets/index-BssAenIo.js +1 -0
  845. vibe_surf/backend/frontend/assets/index-BvEZ1ywS.js +1 -0
  846. vibe_surf/backend/frontend/assets/index-BwO1owi8.js +1 -0
  847. vibe_surf/backend/frontend/assets/index-BwXsJbuu.js +21 -0
  848. vibe_surf/backend/frontend/assets/index-BwlG2DdK.js +1 -0
  849. vibe_surf/backend/frontend/assets/index-BzjC6B6I.js +1 -0
  850. vibe_surf/backend/frontend/assets/index-C0BOag_5.js +1 -0
  851. vibe_surf/backend/frontend/assets/index-C0EsaEHC.js +1 -0
  852. vibe_surf/backend/frontend/assets/index-C0IGIaTE.js +1 -0
  853. vibe_surf/backend/frontend/assets/index-C0IdY_9F.js +1 -0
  854. vibe_surf/backend/frontend/assets/index-C1DABLwl.js +1 -0
  855. vibe_surf/backend/frontend/assets/index-C1JE4AZB.js +1 -0
  856. vibe_surf/backend/frontend/assets/index-C1Rkl2Ur.js +1 -0
  857. vibe_surf/backend/frontend/assets/index-C2YWu5t8.js +1 -0
  858. vibe_surf/backend/frontend/assets/index-C2_4AcrM.js +1 -0
  859. vibe_surf/backend/frontend/assets/index-C48IE5LT.js +1 -0
  860. vibe_surf/backend/frontend/assets/index-C4JqQnzd.js +1 -0
  861. vibe_surf/backend/frontend/assets/index-C5QqjjEO.js +1 -0
  862. vibe_surf/backend/frontend/assets/index-C6ZyrgxW.js +1 -0
  863. vibe_surf/backend/frontend/assets/index-C9n9R8Ob.js +1 -0
  864. vibe_surf/backend/frontend/assets/index-CATPt8gz.js +1 -0
  865. vibe_surf/backend/frontend/assets/index-CAc6KlCl.js +1 -0
  866. vibe_surf/backend/frontend/assets/index-CAeE91z_.js +1 -0
  867. vibe_surf/backend/frontend/assets/index-CBLrD5S8.js +1 -0
  868. vibe_surf/backend/frontend/assets/index-CEx7_efn.js +1 -0
  869. vibe_surf/backend/frontend/assets/index-CGNwvjd6.js +1 -0
  870. vibe_surf/backend/frontend/assets/index-CJIkyYuu.js +1 -0
  871. vibe_surf/backend/frontend/assets/index-CL8YNknR.js +1 -0
  872. vibe_surf/backend/frontend/assets/index-CQ4c4zmh.js +1 -0
  873. vibe_surf/backend/frontend/assets/index-CSKpbeRU.js +1 -0
  874. vibe_surf/backend/frontend/assets/index-CTJUto70.js +1 -0
  875. vibe_surf/backend/frontend/assets/index-CUm8t_3-.js +1 -0
  876. vibe_surf/backend/frontend/assets/index-CWaG8YQf.js +1 -0
  877. vibe_surf/backend/frontend/assets/index-CWqCL2_S.js +1 -0
  878. vibe_surf/backend/frontend/assets/index-CZKjLvxC.js +1 -0
  879. vibe_surf/backend/frontend/assets/index-C_a_gjJ3.js +7382 -0
  880. vibe_surf/backend/frontend/assets/index-C_gjztJA.js +1 -0
  881. vibe_surf/backend/frontend/assets/index-Cd394DZ3.js +1 -0
  882. vibe_surf/backend/frontend/assets/index-Ch_ENQTO.js +1 -0
  883. vibe_surf/backend/frontend/assets/index-CjDauRtw.js +1 -0
  884. vibe_surf/backend/frontend/assets/index-Cjsyudia.js +1 -0
  885. vibe_surf/backend/frontend/assets/index-Ck0Rk7OE.js +1 -0
  886. vibe_surf/backend/frontend/assets/index-Ct1jT_zG.js +1 -0
  887. vibe_surf/backend/frontend/assets/index-CtZOHuJR.js +1 -0
  888. vibe_surf/backend/frontend/assets/index-CwylYZIy.js +1 -0
  889. vibe_surf/backend/frontend/assets/index-CxGAIJCD.js +1 -0
  890. vibe_surf/backend/frontend/assets/index-D-6VXnmQ.js +1 -0
  891. vibe_surf/backend/frontend/assets/index-D-_pq5D8.js +1 -0
  892. vibe_surf/backend/frontend/assets/index-D-oTsuqV.js +1 -0
  893. vibe_surf/backend/frontend/assets/index-D8iHrvl3.js +1 -0
  894. vibe_surf/backend/frontend/assets/index-DDYB0tod.js +1 -0
  895. vibe_surf/backend/frontend/assets/index-DDtHdtyM.js +1 -0
  896. vibe_surf/backend/frontend/assets/index-DH3R0iod.js +1 -0
  897. vibe_surf/backend/frontend/assets/index-DJAmqieX.js +1 -0
  898. vibe_surf/backend/frontend/assets/index-DJYhOcBD.js +1 -0
  899. vibe_surf/backend/frontend/assets/index-DQKxDe4Q.js +1 -0
  900. vibe_surf/backend/frontend/assets/index-DS9glxiF.js +1 -0
  901. vibe_surf/backend/frontend/assets/index-DUjF6qus.js +2 -0
  902. vibe_surf/backend/frontend/assets/index-DXYmUzC_.css +1 -0
  903. vibe_surf/backend/frontend/assets/index-D_wRbh5r.js +1 -0
  904. vibe_surf/backend/frontend/assets/index-Db4BfmcT.js +1 -0
  905. vibe_surf/backend/frontend/assets/index-DfZGZYcK.js +1 -0
  906. vibe_surf/backend/frontend/assets/index-DlDGYPf2.js +1 -0
  907. vibe_surf/backend/frontend/assets/index-DlFy5Gok.js +1 -0
  908. vibe_surf/backend/frontend/assets/index-DmVpDlko.js +1 -0
  909. vibe_surf/backend/frontend/assets/index-Dpc9wHta.js +1 -0
  910. vibe_surf/backend/frontend/assets/index-DvcAIETO.js +1 -0
  911. vibe_surf/backend/frontend/assets/index-Dwi-X1Od.js +1 -0
  912. vibe_surf/backend/frontend/assets/index-FMPFv3Wf.js +1 -0
  913. vibe_surf/backend/frontend/assets/index-H3Uskc2o.js +1 -0
  914. vibe_surf/backend/frontend/assets/index-JWfrTs_0.js +1 -0
  915. vibe_surf/backend/frontend/assets/index-LX3KOMfj.js +1 -0
  916. vibe_surf/backend/frontend/assets/index-LXWgTVf4.js +1 -0
  917. vibe_surf/backend/frontend/assets/index-WJ6PviAq.js +1 -0
  918. vibe_surf/backend/frontend/assets/index-WrqFIXAC.js +1 -0
  919. vibe_surf/backend/frontend/assets/index-Yoj1a8xs.js +1 -0
  920. vibe_surf/backend/frontend/assets/index-YxTPhodS.js +1 -0
  921. vibe_surf/backend/frontend/assets/index-_8LB3oNa.js +1 -0
  922. vibe_surf/backend/frontend/assets/index-bNhROe-x.js +1 -0
  923. vibe_surf/backend/frontend/assets/index-cQAtXO5d.js +1 -0
  924. vibe_surf/backend/frontend/assets/index-hIdlDvEv.js +1 -0
  925. vibe_surf/backend/frontend/assets/index-hxJwU1-s.js +1 -0
  926. vibe_surf/backend/frontend/assets/index-iA_X3O5r.js +1 -0
  927. vibe_surf/backend/frontend/assets/index-iW93REva.js +1 -0
  928. vibe_surf/backend/frontend/assets/index-k2RdCBHb.js +1 -0
  929. vibe_surf/backend/frontend/assets/index-kJKg9EzG.js +1 -0
  930. vibe_surf/backend/frontend/assets/index-mX6ATl2n.js +1 -0
  931. vibe_surf/backend/frontend/assets/index-muCxPdjC.js +1 -0
  932. vibe_surf/backend/frontend/assets/index-nd1f74Wi.js +1 -0
  933. vibe_surf/backend/frontend/assets/index-qGbEX4n3.js +1 -0
  934. vibe_surf/backend/frontend/assets/index-qOd-CLaR.js +1 -0
  935. vibe_surf/backend/frontend/assets/index-sguRseYw.js +1 -0
  936. vibe_surf/backend/frontend/assets/index-vd7ILFrg.js +1 -0
  937. vibe_surf/backend/frontend/assets/index-we6mCAhv.js +1 -0
  938. vibe_surf/backend/frontend/assets/index-x0VA7yzX.js +1 -0
  939. vibe_surf/backend/frontend/assets/index-yCVeNkNd.js +1 -0
  940. vibe_surf/backend/frontend/assets/indian-rupee-ClaZI0Dh.js +6 -0
  941. vibe_surf/backend/frontend/assets/infinity-LKjcIaZa.js +6 -0
  942. vibe_surf/backend/frontend/assets/info-DFBdB7_c.js +6 -0
  943. vibe_surf/backend/frontend/assets/inspection-panel-DGzE6245.js +6 -0
  944. vibe_surf/backend/frontend/assets/instagram-CJj5AWOV.js +6 -0
  945. vibe_surf/backend/frontend/assets/italic-CKFB3the.js +6 -0
  946. vibe_surf/backend/frontend/assets/iteration-ccw-YnfylsKm.js +6 -0
  947. vibe_surf/backend/frontend/assets/iteration-cw-DTHRwCcy.js +6 -0
  948. vibe_surf/backend/frontend/assets/japanese-yen-BG_Inyh_.js +6 -0
  949. vibe_surf/backend/frontend/assets/joystick-bJVSvZlL.js +6 -0
  950. vibe_surf/backend/frontend/assets/kanban-KP-K8pC9.js +6 -0
  951. vibe_surf/backend/frontend/assets/key-CNaiqe5q.js +6 -0
  952. vibe_surf/backend/frontend/assets/key-round-RTYFDTCa.js +6 -0
  953. vibe_surf/backend/frontend/assets/key-square-C7EKR-zE.js +6 -0
  954. vibe_surf/backend/frontend/assets/keyboard-DaM0Dl19.js +6 -0
  955. vibe_surf/backend/frontend/assets/keyboard-music-CzJZiHzS.js +6 -0
  956. vibe_surf/backend/frontend/assets/keyboard-off-C9Jl7GZs.js +6 -0
  957. vibe_surf/backend/frontend/assets/lamp-DK_3DJnO.js +6 -0
  958. vibe_surf/backend/frontend/assets/lamp-ceiling-B8sGjZ8c.js +6 -0
  959. vibe_surf/backend/frontend/assets/lamp-desk-CxWpiNas.js +6 -0
  960. vibe_surf/backend/frontend/assets/lamp-floor-EUFzRKf7.js +6 -0
  961. vibe_surf/backend/frontend/assets/lamp-wall-down-BV84JTWM.js +6 -0
  962. vibe_surf/backend/frontend/assets/lamp-wall-up-BqpaYZN9.js +6 -0
  963. vibe_surf/backend/frontend/assets/land-plot-Dly_Debw.js +6 -0
  964. vibe_surf/backend/frontend/assets/landmark-W6MewilS.js +6 -0
  965. vibe_surf/backend/frontend/assets/languages-BQghN4Gu.js +6 -0
  966. vibe_surf/backend/frontend/assets/laptop-BysYcdO1.js +6 -0
  967. vibe_surf/backend/frontend/assets/laptop-minimal-CUViKl_u.js +6 -0
  968. vibe_surf/backend/frontend/assets/laptop-minimal-check-BZNY8l54.js +6 -0
  969. vibe_surf/backend/frontend/assets/lasso-CBTyEbGH.js +6 -0
  970. vibe_surf/backend/frontend/assets/lasso-select-D9j71vtb.js +6 -0
  971. vibe_surf/backend/frontend/assets/laugh-fkxJEAC6.js +6 -0
  972. vibe_surf/backend/frontend/assets/layers-2-B3mnroGJ.js +6 -0
  973. vibe_surf/backend/frontend/assets/layers-CLO8Qj7V.js +6 -0
  974. vibe_surf/backend/frontend/assets/layout-dashboard-BCgC4-j3.js +6 -0
  975. vibe_surf/backend/frontend/assets/layout-grid-DQlh6Dv5.js +6 -0
  976. vibe_surf/backend/frontend/assets/layout-list-BK2Y57B-.js +6 -0
  977. vibe_surf/backend/frontend/assets/layout-panel-left-BzdjKizu.js +6 -0
  978. vibe_surf/backend/frontend/assets/layout-panel-top-CmMnqmez.js +6 -0
  979. vibe_surf/backend/frontend/assets/layout-template-DkuzhO5B.js +6 -0
  980. vibe_surf/backend/frontend/assets/lazyIconImports-Cbxc-ykm.js +2 -0
  981. vibe_surf/backend/frontend/assets/leaf-D1Z4WxA8.js +6 -0
  982. vibe_surf/backend/frontend/assets/leafy-green-C7IHTNVi.js +6 -0
  983. vibe_surf/backend/frontend/assets/lectern-BpswhiFV.js +6 -0
  984. vibe_surf/backend/frontend/assets/letter-text-B_mZgzJ7.js +6 -0
  985. vibe_surf/backend/frontend/assets/library-BEQ0EBja.js +6 -0
  986. vibe_surf/backend/frontend/assets/library-big-C32jLDwT.js +6 -0
  987. vibe_surf/backend/frontend/assets/life-buoy-AWdXr4CQ.js +6 -0
  988. vibe_surf/backend/frontend/assets/ligature-DRsGqV7j.js +6 -0
  989. vibe_surf/backend/frontend/assets/lightbulb-D3KZbCQp.js +6 -0
  990. vibe_surf/backend/frontend/assets/lightbulb-off-iSDmy8d6.js +6 -0
  991. vibe_surf/backend/frontend/assets/link-2-CCZYGxDI.js +6 -0
  992. vibe_surf/backend/frontend/assets/link-2-off-BWpEKUCS.js +6 -0
  993. vibe_surf/backend/frontend/assets/link-Diw-YZ8t.js +6 -0
  994. vibe_surf/backend/frontend/assets/linkedin-CExn9EK5.js +6 -0
  995. vibe_surf/backend/frontend/assets/list-CB9zDbEv.js +6 -0
  996. vibe_surf/backend/frontend/assets/list-check-CCdijvLD.js +6 -0
  997. vibe_surf/backend/frontend/assets/list-checks-B1EQ8oeV.js +6 -0
  998. vibe_surf/backend/frontend/assets/list-collapse-B_Nyhn3U.js +6 -0
  999. vibe_surf/backend/frontend/assets/list-end-BRGFPR4T.js +6 -0
  1000. vibe_surf/backend/frontend/assets/list-filter-DR4JqPVX.js +6 -0
  1001. vibe_surf/backend/frontend/assets/list-filter-plus-Q7j2JYzP.js +6 -0
  1002. vibe_surf/backend/frontend/assets/list-minus-DrLtfmEG.js +6 -0
  1003. vibe_surf/backend/frontend/assets/list-music-C6MOQHoL.js +6 -0
  1004. vibe_surf/backend/frontend/assets/list-ordered-Db8L0lqU.js +6 -0
  1005. vibe_surf/backend/frontend/assets/list-plus-C1dade1Z.js +6 -0
  1006. vibe_surf/backend/frontend/assets/list-restart-CyRkF6Xo.js +6 -0
  1007. vibe_surf/backend/frontend/assets/list-start-CAn16QHF.js +6 -0
  1008. vibe_surf/backend/frontend/assets/list-todo-giJ3EaBY.js +6 -0
  1009. vibe_surf/backend/frontend/assets/list-tree-ZTTp4tz8.js +6 -0
  1010. vibe_surf/backend/frontend/assets/list-video-SNqnTTmu.js +6 -0
  1011. vibe_surf/backend/frontend/assets/list-x-XeDairuR.js +6 -0
  1012. vibe_surf/backend/frontend/assets/loader-RYX0GikH.js +6 -0
  1013. vibe_surf/backend/frontend/assets/loader-circle-CjMVhyrE.js +6 -0
  1014. vibe_surf/backend/frontend/assets/loader-pinwheel-Dv08mzUX.js +6 -0
  1015. vibe_surf/backend/frontend/assets/locate-DcqAXVyu.js +6 -0
  1016. vibe_surf/backend/frontend/assets/locate-fixed-BgaqK3FM.js +6 -0
  1017. vibe_surf/backend/frontend/assets/locate-off-1UN8A6fK.js +6 -0
  1018. vibe_surf/backend/frontend/assets/location-edit-DFbMZW6i.js +6 -0
  1019. vibe_surf/backend/frontend/assets/lock-DWN4LH3Q.js +6 -0
  1020. vibe_surf/backend/frontend/assets/lock-keyhole-aeS26SmF.js +6 -0
  1021. vibe_surf/backend/frontend/assets/lock-keyhole-open-CoXzZLpr.js +6 -0
  1022. vibe_surf/backend/frontend/assets/lock-open-CBPubokC.js +6 -0
  1023. vibe_surf/backend/frontend/assets/log-in-BW8pmSIu.js +6 -0
  1024. vibe_surf/backend/frontend/assets/log-out-D-d0DczA.js +6 -0
  1025. vibe_surf/backend/frontend/assets/logo_dark-_nccwgMn.png +0 -0
  1026. vibe_surf/backend/frontend/assets/logo_light-DKZjS8CD.png +0 -0
  1027. vibe_surf/backend/frontend/assets/logs-AXuVwIE_.js +6 -0
  1028. vibe_surf/backend/frontend/assets/lollipop-CxugcHkj.js +6 -0
  1029. vibe_surf/backend/frontend/assets/luggage-CFtS088O.js +6 -0
  1030. vibe_surf/backend/frontend/assets/magnet-BpIqKX0D.js +6 -0
  1031. vibe_surf/backend/frontend/assets/mail-1Br8NAMK.js +6 -0
  1032. vibe_surf/backend/frontend/assets/mail-check-DFwD0fvI.js +6 -0
  1033. vibe_surf/backend/frontend/assets/mail-minus-B_KovqmT.js +6 -0
  1034. vibe_surf/backend/frontend/assets/mail-open-VEmMVybi.js +6 -0
  1035. vibe_surf/backend/frontend/assets/mail-plus-D-1Wacj7.js +6 -0
  1036. vibe_surf/backend/frontend/assets/mail-question-CJK96wre.js +6 -0
  1037. vibe_surf/backend/frontend/assets/mail-search-Du6F72Wj.js +6 -0
  1038. vibe_surf/backend/frontend/assets/mail-warning-BI87_kvG.js +6 -0
  1039. vibe_surf/backend/frontend/assets/mail-x-DU415vbZ.js +6 -0
  1040. vibe_surf/backend/frontend/assets/mailbox-CMHDAMVZ.js +6 -0
  1041. vibe_surf/backend/frontend/assets/mails-CUDj41Cn.js +6 -0
  1042. vibe_surf/backend/frontend/assets/map-D2I0g3OZ.js +6 -0
  1043. vibe_surf/backend/frontend/assets/map-pin-CiM6iB2r.js +6 -0
  1044. vibe_surf/backend/frontend/assets/map-pin-check-BQWCC6Uv.js +6 -0
  1045. vibe_surf/backend/frontend/assets/map-pin-check-inside-CVhhgPHY.js +6 -0
  1046. vibe_surf/backend/frontend/assets/map-pin-house-CXbXX8w-.js +6 -0
  1047. vibe_surf/backend/frontend/assets/map-pin-minus-D0dRHvgd.js +6 -0
  1048. vibe_surf/backend/frontend/assets/map-pin-minus-inside-DGpPZYAi.js +6 -0
  1049. vibe_surf/backend/frontend/assets/map-pin-off-EbFPnlZq.js +6 -0
  1050. vibe_surf/backend/frontend/assets/map-pin-plus-BLD0VcG5.js +6 -0
  1051. vibe_surf/backend/frontend/assets/map-pin-plus-inside-CapcP3Yk.js +6 -0
  1052. vibe_surf/backend/frontend/assets/map-pin-x-DrNWALEC.js +6 -0
  1053. vibe_surf/backend/frontend/assets/map-pin-x-inside-9DqM8z-J.js +6 -0
  1054. vibe_surf/backend/frontend/assets/map-pinned-DHMQpBhr.js +6 -0
  1055. vibe_surf/backend/frontend/assets/map-plus-CQm0KS9c.js +6 -0
  1056. vibe_surf/backend/frontend/assets/mars-CcweinsF.js +6 -0
  1057. vibe_surf/backend/frontend/assets/mars-stroke-OWTfhzV5.js +6 -0
  1058. vibe_surf/backend/frontend/assets/martini-DGORgxbx.js +6 -0
  1059. vibe_surf/backend/frontend/assets/maximize-2-CN4UuSQb.js +6 -0
  1060. vibe_surf/backend/frontend/assets/maximize-DOYuzVqB.js +6 -0
  1061. vibe_surf/backend/frontend/assets/medal-DZT2ADyJ.js +6 -0
  1062. vibe_surf/backend/frontend/assets/megaphone-DN4B6I5c.js +6 -0
  1063. vibe_surf/backend/frontend/assets/megaphone-off-DRAddUqF.js +6 -0
  1064. vibe_surf/backend/frontend/assets/meh-CTX3Y793.js +6 -0
  1065. vibe_surf/backend/frontend/assets/memory-stick-CSG08PuA.js +6 -0
  1066. vibe_surf/backend/frontend/assets/menu-BUvQ8bhy.js +6 -0
  1067. vibe_surf/backend/frontend/assets/merge-xkPPWyBJ.js +6 -0
  1068. vibe_surf/backend/frontend/assets/message-circle-BSqs77ZY.js +6 -0
  1069. vibe_surf/backend/frontend/assets/message-circle-code-EW46-KUX.js +6 -0
  1070. vibe_surf/backend/frontend/assets/message-circle-dashed-BOxWD8kE.js +6 -0
  1071. vibe_surf/backend/frontend/assets/message-circle-heart-CBhiUXeV.js +6 -0
  1072. vibe_surf/backend/frontend/assets/message-circle-more-DqfUhx6W.js +6 -0
  1073. vibe_surf/backend/frontend/assets/message-circle-off-DrsP7VV_.js +6 -0
  1074. vibe_surf/backend/frontend/assets/message-circle-plus-IixbN-s-.js +6 -0
  1075. vibe_surf/backend/frontend/assets/message-circle-question-DsMgtwwS.js +6 -0
  1076. vibe_surf/backend/frontend/assets/message-circle-reply-D_Eog9Yc.js +6 -0
  1077. vibe_surf/backend/frontend/assets/message-circle-warning-D656cL7l.js +6 -0
  1078. vibe_surf/backend/frontend/assets/message-circle-x-CXWR4BBb.js +6 -0
  1079. vibe_surf/backend/frontend/assets/message-square-DKWryKVG.js +6 -0
  1080. vibe_surf/backend/frontend/assets/message-square-code-0ANFU-JW.js +6 -0
  1081. vibe_surf/backend/frontend/assets/message-square-dashed-DaZwp2x1.js +6 -0
  1082. vibe_surf/backend/frontend/assets/message-square-diff-DpJLi_UX.js +6 -0
  1083. vibe_surf/backend/frontend/assets/message-square-dot-OcgwyxZC.js +6 -0
  1084. vibe_surf/backend/frontend/assets/message-square-heart-CKfZOSw8.js +6 -0
  1085. vibe_surf/backend/frontend/assets/message-square-lock-BnNy_yw5.js +6 -0
  1086. vibe_surf/backend/frontend/assets/message-square-more-D2WGFzms.js +6 -0
  1087. vibe_surf/backend/frontend/assets/message-square-off-DV5974j6.js +6 -0
  1088. vibe_surf/backend/frontend/assets/message-square-plus-7icA5g-P.js +6 -0
  1089. vibe_surf/backend/frontend/assets/message-square-quote-DdAvA-a_.js +6 -0
  1090. vibe_surf/backend/frontend/assets/message-square-reply-Cg9Dlls7.js +6 -0
  1091. vibe_surf/backend/frontend/assets/message-square-share-BptAhOEV.js +6 -0
  1092. vibe_surf/backend/frontend/assets/message-square-text-Cu-Ycwsi.js +6 -0
  1093. vibe_surf/backend/frontend/assets/message-square-warning-DxIzJ5bt.js +6 -0
  1094. vibe_surf/backend/frontend/assets/message-square-x-BF9akIp2.js +6 -0
  1095. vibe_surf/backend/frontend/assets/messages-square-AjrRNZXQ.js +6 -0
  1096. vibe_surf/backend/frontend/assets/mic-BXU1SRXR.js +6 -0
  1097. vibe_surf/backend/frontend/assets/mic-off-BUQ1-6-l.js +6 -0
  1098. vibe_surf/backend/frontend/assets/mic-vocal-CG4Yw8We.js +6 -0
  1099. vibe_surf/backend/frontend/assets/microchip-CodKB7m1.js +6 -0
  1100. vibe_surf/backend/frontend/assets/microscope-BY57GHi1.js +6 -0
  1101. vibe_surf/backend/frontend/assets/microwave-KuJ1X2CX.js +6 -0
  1102. vibe_surf/backend/frontend/assets/milestone-D_ToDu31.js +6 -0
  1103. vibe_surf/backend/frontend/assets/milk-C4Nq829F.js +6 -0
  1104. vibe_surf/backend/frontend/assets/milk-off-BPCtdIks.js +6 -0
  1105. vibe_surf/backend/frontend/assets/minimize-2-DeAs1S78.js +6 -0
  1106. vibe_surf/backend/frontend/assets/minimize-DKOGyuzf.js +6 -0
  1107. vibe_surf/backend/frontend/assets/monitor-Cjm4ELo4.js +6 -0
  1108. vibe_surf/backend/frontend/assets/monitor-check-CrckmDk_.js +6 -0
  1109. vibe_surf/backend/frontend/assets/monitor-cog-DIPYXk5z.js +6 -0
  1110. vibe_surf/backend/frontend/assets/monitor-dot-Cl_ZGBvp.js +6 -0
  1111. vibe_surf/backend/frontend/assets/monitor-down-DCSynbhm.js +6 -0
  1112. vibe_surf/backend/frontend/assets/monitor-off-Bxqkes47.js +6 -0
  1113. vibe_surf/backend/frontend/assets/monitor-pause-B2ogwlXq.js +6 -0
  1114. vibe_surf/backend/frontend/assets/monitor-play-w2CTvWQx.js +6 -0
  1115. vibe_surf/backend/frontend/assets/monitor-smartphone-DYQb-VQa.js +6 -0
  1116. vibe_surf/backend/frontend/assets/monitor-speaker-CruyWIOw.js +6 -0
  1117. vibe_surf/backend/frontend/assets/monitor-stop-D2cot7wP.js +6 -0
  1118. vibe_surf/backend/frontend/assets/monitor-up-Bo4VFUGK.js +6 -0
  1119. vibe_surf/backend/frontend/assets/monitor-x-yhFSw0Zo.js +6 -0
  1120. vibe_surf/backend/frontend/assets/moon-CZFTmFVS.js +6 -0
  1121. vibe_surf/backend/frontend/assets/moon-star-X8Pb6SAO.js +6 -0
  1122. vibe_surf/backend/frontend/assets/mountain-_tKRhauQ.js +6 -0
  1123. vibe_surf/backend/frontend/assets/mountain-snow-COLjUpoc.js +6 -0
  1124. vibe_surf/backend/frontend/assets/mouse-C62B_4i7.js +6 -0
  1125. vibe_surf/backend/frontend/assets/mouse-off-NO65wsqy.js +6 -0
  1126. vibe_surf/backend/frontend/assets/mouse-pointer-2-vvokJ-v-.js +6 -0
  1127. vibe_surf/backend/frontend/assets/mouse-pointer-IHoLB1Ii.js +6 -0
  1128. vibe_surf/backend/frontend/assets/mouse-pointer-ban-BGxlXS_f.js +6 -0
  1129. vibe_surf/backend/frontend/assets/mouse-pointer-click-C7N7cKxT.js +6 -0
  1130. vibe_surf/backend/frontend/assets/move-3d-CQO0qR5b.js +6 -0
  1131. vibe_surf/backend/frontend/assets/move-Bp3oIgRK.js +6 -0
  1132. vibe_surf/backend/frontend/assets/move-diagonal-2-CQ3Gqa4B.js +6 -0
  1133. vibe_surf/backend/frontend/assets/move-diagonal-BkUx0iYA.js +6 -0
  1134. vibe_surf/backend/frontend/assets/move-down-B4dxMy_p.js +6 -0
  1135. vibe_surf/backend/frontend/assets/move-down-left-NxvLep64.js +6 -0
  1136. vibe_surf/backend/frontend/assets/move-down-right-CxcsF1yI.js +6 -0
  1137. vibe_surf/backend/frontend/assets/move-horizontal-or6vuyOq.js +6 -0
  1138. vibe_surf/backend/frontend/assets/move-left-Tcae9tGG.js +6 -0
  1139. vibe_surf/backend/frontend/assets/move-right-jY3F431H.js +6 -0
  1140. vibe_surf/backend/frontend/assets/move-up-Dk8sPbRD.js +6 -0
  1141. vibe_surf/backend/frontend/assets/move-up-left-CD7NRvhF.js +6 -0
  1142. vibe_surf/backend/frontend/assets/move-up-right-BAOhHbBw.js +6 -0
  1143. vibe_surf/backend/frontend/assets/move-vertical-BxWj9bDO.js +6 -0
  1144. vibe_surf/backend/frontend/assets/music-2-DQL5lOH_.js +6 -0
  1145. vibe_surf/backend/frontend/assets/music-3-wkxjpooD.js +6 -0
  1146. vibe_surf/backend/frontend/assets/music-4-CgUN2PUO.js +6 -0
  1147. vibe_surf/backend/frontend/assets/music-YxXwq9fN.js +6 -0
  1148. vibe_surf/backend/frontend/assets/navigation-2-Ba4Z-jSq.js +6 -0
  1149. vibe_surf/backend/frontend/assets/navigation-2-off-C_LfeWvW.js +6 -0
  1150. vibe_surf/backend/frontend/assets/navigation-BEChOEsi.js +6 -0
  1151. vibe_surf/backend/frontend/assets/navigation-off-BehyOyE3.js +6 -0
  1152. vibe_surf/backend/frontend/assets/network-CwJLOq3T.js +6 -0
  1153. vibe_surf/backend/frontend/assets/newspaper-ELrHeGRI.js +6 -0
  1154. vibe_surf/backend/frontend/assets/nfc-B_3XFb34.js +6 -0
  1155. vibe_surf/backend/frontend/assets/non-binary-BsgU9v43.js +6 -0
  1156. vibe_surf/backend/frontend/assets/notebook-j-nq3SkT.js +6 -0
  1157. vibe_surf/backend/frontend/assets/notebook-pen-D9-IPVfi.js +6 -0
  1158. vibe_surf/backend/frontend/assets/notebook-tabs-B8RN5vFZ.js +6 -0
  1159. vibe_surf/backend/frontend/assets/notebook-text-9VvE4wV2.js +6 -0
  1160. vibe_surf/backend/frontend/assets/notepad-text-CtRuOWM5.js +6 -0
  1161. vibe_surf/backend/frontend/assets/notepad-text-dashed-BKDJS1oq.js +6 -0
  1162. vibe_surf/backend/frontend/assets/nut-MLKrgO4r.js +6 -0
  1163. vibe_surf/backend/frontend/assets/nut-off-CX5f1ggv.js +6 -0
  1164. vibe_surf/backend/frontend/assets/octagon-Dm5tdLTK.js +6 -0
  1165. vibe_surf/backend/frontend/assets/octagon-alert-THvRb-wV.js +6 -0
  1166. vibe_surf/backend/frontend/assets/octagon-minus-BIN-9swI.js +6 -0
  1167. vibe_surf/backend/frontend/assets/octagon-pause-BvRAlpaV.js +6 -0
  1168. vibe_surf/backend/frontend/assets/octagon-x-DeRG_Ls0.js +6 -0
  1169. vibe_surf/backend/frontend/assets/omega-CVAxeKBK.js +6 -0
  1170. vibe_surf/backend/frontend/assets/option-14pftykg.js +6 -0
  1171. vibe_surf/backend/frontend/assets/orbit-CfewrZaI.js +6 -0
  1172. vibe_surf/backend/frontend/assets/origami-BT1VriUJ.js +6 -0
  1173. vibe_surf/backend/frontend/assets/package-2-D11kpXq5.js +6 -0
  1174. vibe_surf/backend/frontend/assets/package-BegS59es.js +6 -0
  1175. vibe_surf/backend/frontend/assets/package-check-DOLq4x6S.js +6 -0
  1176. vibe_surf/backend/frontend/assets/package-minus-BFgP752B.js +6 -0
  1177. vibe_surf/backend/frontend/assets/package-open-D2nk_ytU.js +6 -0
  1178. vibe_surf/backend/frontend/assets/package-plus-Va8EoLSt.js +6 -0
  1179. vibe_surf/backend/frontend/assets/package-search-cGv3F3Yi.js +6 -0
  1180. vibe_surf/backend/frontend/assets/package-x-BFCKCrAT.js +6 -0
  1181. vibe_surf/backend/frontend/assets/paint-bucket-C1nh-Go_.js +6 -0
  1182. vibe_surf/backend/frontend/assets/paint-roller-C9vy4fuD.js +6 -0
  1183. vibe_surf/backend/frontend/assets/paintbrush-Bo4L8Hqc.js +6 -0
  1184. vibe_surf/backend/frontend/assets/paintbrush-vertical-DqUyy2UU.js +6 -0
  1185. vibe_surf/backend/frontend/assets/palette-DddGrkXJ.js +6 -0
  1186. vibe_surf/backend/frontend/assets/panel-bottom-DPSx8I79.js +6 -0
  1187. vibe_surf/backend/frontend/assets/panel-bottom-close-D0SBNVCx.js +6 -0
  1188. vibe_surf/backend/frontend/assets/panel-bottom-dashed-CR6jKyB5.js +6 -0
  1189. vibe_surf/backend/frontend/assets/panel-bottom-open-BA8uHJ1f.js +6 -0
  1190. vibe_surf/backend/frontend/assets/panel-left-close-HWzVGhEN.js +6 -0
  1191. vibe_surf/backend/frontend/assets/panel-left-dashed-C8CvEMus.js +6 -0
  1192. vibe_surf/backend/frontend/assets/panel-left-open-DZtgeJky.js +6 -0
  1193. vibe_surf/backend/frontend/assets/panel-right-BIGpcNCD.js +6 -0
  1194. vibe_surf/backend/frontend/assets/panel-right-close-D6I6nB-8.js +6 -0
  1195. vibe_surf/backend/frontend/assets/panel-right-dashed-Dt-tZyfJ.js +6 -0
  1196. vibe_surf/backend/frontend/assets/panel-right-open-Cso_cmr4.js +6 -0
  1197. vibe_surf/backend/frontend/assets/panel-top-DxQozLLO.js +6 -0
  1198. vibe_surf/backend/frontend/assets/panel-top-close-21p_Iy4Q.js +6 -0
  1199. vibe_surf/backend/frontend/assets/panel-top-dashed-BLLvCUcW.js +6 -0
  1200. vibe_surf/backend/frontend/assets/panel-top-open-DOpjqeXN.js +6 -0
  1201. vibe_surf/backend/frontend/assets/panels-left-bottom-Dgc_Zml-.js +6 -0
  1202. vibe_surf/backend/frontend/assets/panels-right-bottom-DBl33v5J.js +6 -0
  1203. vibe_surf/backend/frontend/assets/panels-top-left-Bh9Km2t_.js +6 -0
  1204. vibe_surf/backend/frontend/assets/paperclip-DwNdWjNs.js +6 -0
  1205. vibe_surf/backend/frontend/assets/parentheses-Bv3x0v0d.js +6 -0
  1206. vibe_surf/backend/frontend/assets/parking-meter-CaAUYem8.js +6 -0
  1207. vibe_surf/backend/frontend/assets/party-popper-o676ndwa.js +6 -0
  1208. vibe_surf/backend/frontend/assets/pause-DofdcFyf.js +6 -0
  1209. vibe_surf/backend/frontend/assets/paw-print-CsCZTGwP.js +6 -0
  1210. vibe_surf/backend/frontend/assets/pc-case-ChHKP8Bs.js +6 -0
  1211. vibe_surf/backend/frontend/assets/pen-BJrA5W2j.js +6 -0
  1212. vibe_surf/backend/frontend/assets/pen-line-Cn_-SNuM.js +6 -0
  1213. vibe_surf/backend/frontend/assets/pen-off-vpS9creP.js +6 -0
  1214. vibe_surf/backend/frontend/assets/pen-tool-BHi1klDG.js +6 -0
  1215. vibe_surf/backend/frontend/assets/pencil-Wem_VEVg.js +6 -0
  1216. vibe_surf/backend/frontend/assets/pencil-line-CpG7egII.js +6 -0
  1217. vibe_surf/backend/frontend/assets/pencil-off-DNbfjOTs.js +6 -0
  1218. vibe_surf/backend/frontend/assets/pencil-ruler-BQdaeQqI.js +6 -0
  1219. vibe_surf/backend/frontend/assets/pentagon-BNe4mDhm.js +6 -0
  1220. vibe_surf/backend/frontend/assets/percent-CDhexNCT.js +6 -0
  1221. vibe_surf/backend/frontend/assets/person-standing-DxYpZiGV.js +6 -0
  1222. vibe_surf/backend/frontend/assets/philippine-peso-B7FAFSBd.js +6 -0
  1223. vibe_surf/backend/frontend/assets/phone-CTiWkAUx.js +6 -0
  1224. vibe_surf/backend/frontend/assets/phone-call-CWavZZ8W.js +6 -0
  1225. vibe_surf/backend/frontend/assets/phone-forwarded-CLaEebEE.js +6 -0
  1226. vibe_surf/backend/frontend/assets/phone-incoming-Cv2OCBfT.js +6 -0
  1227. vibe_surf/backend/frontend/assets/phone-missed-DNNjfxVz.js +6 -0
  1228. vibe_surf/backend/frontend/assets/phone-off-ClVQWi0g.js +6 -0
  1229. vibe_surf/backend/frontend/assets/phone-outgoing-CY2TxKXl.js +6 -0
  1230. vibe_surf/backend/frontend/assets/pi-DNqBWxfj.js +6 -0
  1231. vibe_surf/backend/frontend/assets/piano-MiPm47Ma.js +6 -0
  1232. vibe_surf/backend/frontend/assets/pickaxe-YqkOBnCJ.js +6 -0
  1233. vibe_surf/backend/frontend/assets/picture-in-picture-2-BIKggEXM.js +6 -0
  1234. vibe_surf/backend/frontend/assets/picture-in-picture-QAMxgJMO.js +6 -0
  1235. vibe_surf/backend/frontend/assets/piggy-bank-DVE6nzj5.js +6 -0
  1236. vibe_surf/backend/frontend/assets/pilcrow-CIhZWZVN.js +6 -0
  1237. vibe_surf/backend/frontend/assets/pilcrow-left-Ca9XTMpA.js +6 -0
  1238. vibe_surf/backend/frontend/assets/pilcrow-right-CLd68jMN.js +6 -0
  1239. vibe_surf/backend/frontend/assets/pill-CBiMEkPj.js +6 -0
  1240. vibe_surf/backend/frontend/assets/pill-bottle-CJ3pejac.js +6 -0
  1241. vibe_surf/backend/frontend/assets/pin-Oo2Sku7X.js +6 -0
  1242. vibe_surf/backend/frontend/assets/pin-off-DG48ZMV_.js +6 -0
  1243. vibe_surf/backend/frontend/assets/pipette-BzvHUOUt.js +6 -0
  1244. vibe_surf/backend/frontend/assets/pizza-B5z39oy-.js +6 -0
  1245. vibe_surf/backend/frontend/assets/plane-eU326jPg.js +6 -0
  1246. vibe_surf/backend/frontend/assets/plane-landing-gxcqSKOA.js +6 -0
  1247. vibe_surf/backend/frontend/assets/plane-takeoff-CFmuOAfX.js +6 -0
  1248. vibe_surf/backend/frontend/assets/play-CaCbaWdR.js +6 -0
  1249. vibe_surf/backend/frontend/assets/plug-2-CaihODHc.js +6 -0
  1250. vibe_surf/backend/frontend/assets/plug-DrN0weqI.js +6 -0
  1251. vibe_surf/backend/frontend/assets/plug-zap-BT2sgwQy.js +6 -0
  1252. vibe_surf/backend/frontend/assets/pocket-DNEPJJmg.js +6 -0
  1253. vibe_surf/backend/frontend/assets/pocket-knife-1CI1aqMD.js +6 -0
  1254. vibe_surf/backend/frontend/assets/podcast-BsGsWn3h.js +6 -0
  1255. vibe_surf/backend/frontend/assets/pointer-B8T5gv-x.js +6 -0
  1256. vibe_surf/backend/frontend/assets/pointer-off-C2DXzg5S.js +6 -0
  1257. vibe_surf/backend/frontend/assets/popcorn-Bi10K8Em.js +6 -0
  1258. vibe_surf/backend/frontend/assets/popsicle-CxLa9bz8.js +6 -0
  1259. vibe_surf/backend/frontend/assets/pound-sterling-BFXPyyYU.js +6 -0
  1260. vibe_surf/backend/frontend/assets/power-BmqAlXVz.js +6 -0
  1261. vibe_surf/backend/frontend/assets/power-off-CT70n2O0.js +6 -0
  1262. vibe_surf/backend/frontend/assets/presentation-DVhaCvt0.js +6 -0
  1263. vibe_surf/backend/frontend/assets/printer-D7NgKQZm.js +6 -0
  1264. vibe_surf/backend/frontend/assets/printer-check-BYDiSYD3.js +6 -0
  1265. vibe_surf/backend/frontend/assets/projector-BFMEAUGw.js +6 -0
  1266. vibe_surf/backend/frontend/assets/proportions-CUypjhWs.js +6 -0
  1267. vibe_surf/backend/frontend/assets/puzzle-lPcRsrCP.js +6 -0
  1268. vibe_surf/backend/frontend/assets/pyramid-bX_YtvHu.js +6 -0
  1269. vibe_surf/backend/frontend/assets/qr-code-CMBq06CH.js +6 -0
  1270. vibe_surf/backend/frontend/assets/quote-BkFwr2wo.js +6 -0
  1271. vibe_surf/backend/frontend/assets/rabbit-CEyfAR1t.js +6 -0
  1272. vibe_surf/backend/frontend/assets/radar-bMcLs_bP.js +6 -0
  1273. vibe_surf/backend/frontend/assets/radiation-NMlxufHZ.js +6 -0
  1274. vibe_surf/backend/frontend/assets/radical-C3CE5pot.js +6 -0
  1275. vibe_surf/backend/frontend/assets/radio-DQMhSWLz.js +6 -0
  1276. vibe_surf/backend/frontend/assets/radio-receiver-Cwtiayz1.js +6 -0
  1277. vibe_surf/backend/frontend/assets/radio-tower-ngCBBDuR.js +6 -0
  1278. vibe_surf/backend/frontend/assets/radius-CB1vpl4-.js +6 -0
  1279. vibe_surf/backend/frontend/assets/rail-symbol-CWT8jn79.js +6 -0
  1280. vibe_surf/backend/frontend/assets/rainbow-eG2Z6xdv.js +6 -0
  1281. vibe_surf/backend/frontend/assets/rat-CjjmSgkE.js +6 -0
  1282. vibe_surf/backend/frontend/assets/ratio-Ck9TZd6C.js +6 -0
  1283. vibe_surf/backend/frontend/assets/receipt-QzIALZKN.js +6 -0
  1284. vibe_surf/backend/frontend/assets/receipt-cent-wAd12yx1.js +6 -0
  1285. vibe_surf/backend/frontend/assets/receipt-euro-BG_rS29_.js +6 -0
  1286. vibe_surf/backend/frontend/assets/receipt-indian-rupee-DlF7wlqh.js +6 -0
  1287. vibe_surf/backend/frontend/assets/receipt-japanese-yen-GDNnE_Bl.js +6 -0
  1288. vibe_surf/backend/frontend/assets/receipt-pound-sterling-CczRTrHu.js +6 -0
  1289. vibe_surf/backend/frontend/assets/receipt-russian-ruble-CP8qhoZV.js +6 -0
  1290. vibe_surf/backend/frontend/assets/receipt-swiss-franc-B1FjnBVT.js +6 -0
  1291. vibe_surf/backend/frontend/assets/receipt-text-Df0EAqK2.js +6 -0
  1292. vibe_surf/backend/frontend/assets/rectangle-ellipsis-BeZ5b8q2.js +6 -0
  1293. vibe_surf/backend/frontend/assets/rectangle-goggles-B0pWs5f6.js +6 -0
  1294. vibe_surf/backend/frontend/assets/rectangle-horizontal-5D8nW5zN.js +6 -0
  1295. vibe_surf/backend/frontend/assets/rectangle-vertical-D6iXTP5O.js +6 -0
  1296. vibe_surf/backend/frontend/assets/recycle-cePWNqck.js +6 -0
  1297. vibe_surf/backend/frontend/assets/redo-2-DflPUgVL.js +6 -0
  1298. vibe_surf/backend/frontend/assets/redo-C8hJqzAq.js +6 -0
  1299. vibe_surf/backend/frontend/assets/redo-dot-JyZC910i.js +6 -0
  1300. vibe_surf/backend/frontend/assets/refresh-ccw-QGOuU93p.js +6 -0
  1301. vibe_surf/backend/frontend/assets/refresh-ccw-dot-BVfOSZg8.js +6 -0
  1302. vibe_surf/backend/frontend/assets/refresh-cw-DttAl3PC.js +6 -0
  1303. vibe_surf/backend/frontend/assets/refresh-cw-off-1m7CD9nm.js +6 -0
  1304. vibe_surf/backend/frontend/assets/refrigerator-BGk6q_hL.js +6 -0
  1305. vibe_surf/backend/frontend/assets/regex-C-txrNUs.js +6 -0
  1306. vibe_surf/backend/frontend/assets/remove-formatting-CVxREpGZ.js +6 -0
  1307. vibe_surf/backend/frontend/assets/repeat-1-ChFj2WK-.js +6 -0
  1308. vibe_surf/backend/frontend/assets/repeat-2-ViBvoa4W.js +6 -0
  1309. vibe_surf/backend/frontend/assets/repeat-GoYG4svo.js +6 -0
  1310. vibe_surf/backend/frontend/assets/replace-GFcv_X_V.js +6 -0
  1311. vibe_surf/backend/frontend/assets/replace-all-zAC7UUp9.js +6 -0
  1312. vibe_surf/backend/frontend/assets/reply-C2IH8Yvz.js +6 -0
  1313. vibe_surf/backend/frontend/assets/reply-all-CXYDFlBb.js +6 -0
  1314. vibe_surf/backend/frontend/assets/rewind-Bmv_DtI_.js +6 -0
  1315. vibe_surf/backend/frontend/assets/ribbon-B4MeTNUc.js +6 -0
  1316. vibe_surf/backend/frontend/assets/robot-BsccFpqT.png +0 -0
  1317. vibe_surf/backend/frontend/assets/rocket-Ch2Sc43k.js +6 -0
  1318. vibe_surf/backend/frontend/assets/rocking-chair-Pcx0Ex8j.js +6 -0
  1319. vibe_surf/backend/frontend/assets/roller-coaster-DpdZyHU4.js +6 -0
  1320. vibe_surf/backend/frontend/assets/rotate-3d-CAlCCDrS.js +6 -0
  1321. vibe_surf/backend/frontend/assets/rotate-ccw-Dl5IeMD0.js +6 -0
  1322. vibe_surf/backend/frontend/assets/rotate-ccw-key-CbcFcY_X.js +6 -0
  1323. vibe_surf/backend/frontend/assets/rotate-ccw-square-B6dXtMGF.js +6 -0
  1324. vibe_surf/backend/frontend/assets/rotate-cw-D9QBD3w1.js +6 -0
  1325. vibe_surf/backend/frontend/assets/rotate-cw-square-BTb_LCYt.js +6 -0
  1326. vibe_surf/backend/frontend/assets/route-BY8OMdE6.js +6 -0
  1327. vibe_surf/backend/frontend/assets/route-off-DBPZSjij.js +6 -0
  1328. vibe_surf/backend/frontend/assets/router-Cj5pK344.js +6 -0
  1329. vibe_surf/backend/frontend/assets/rows-2-DQikFZXW.js +6 -0
  1330. vibe_surf/backend/frontend/assets/rows-3-CgpwLjBs.js +6 -0
  1331. vibe_surf/backend/frontend/assets/rows-4-DHLpJgeW.js +6 -0
  1332. vibe_surf/backend/frontend/assets/rss-B2J7l-Sb.js +6 -0
  1333. vibe_surf/backend/frontend/assets/ruler-D-fe4o6e.js +6 -0
  1334. vibe_surf/backend/frontend/assets/ruler-dimension-line-COrwkuXi.js +6 -0
  1335. vibe_surf/backend/frontend/assets/russian-ruble-Bk9zdT2J.js +6 -0
  1336. vibe_surf/backend/frontend/assets/sailboat-DMPxVbdm.js +6 -0
  1337. vibe_surf/backend/frontend/assets/salad-D20azVGZ.js +6 -0
  1338. vibe_surf/backend/frontend/assets/sandwich-Z_d-MQ5t.js +6 -0
  1339. vibe_surf/backend/frontend/assets/satellite-7zgZRaOF.js +6 -0
  1340. vibe_surf/backend/frontend/assets/satellite-dish-Cy6FmD_T.js +6 -0
  1341. vibe_surf/backend/frontend/assets/saudi-riyal-C9ZvxnL2.js +6 -0
  1342. vibe_surf/backend/frontend/assets/save-LkAkHS7W.js +6 -0
  1343. vibe_surf/backend/frontend/assets/save-all-D_-zYl71.js +6 -0
  1344. vibe_surf/backend/frontend/assets/save-off-B0KWQYIj.js +6 -0
  1345. vibe_surf/backend/frontend/assets/scale-3d-FnesJ3yp.js +6 -0
  1346. vibe_surf/backend/frontend/assets/scale-CfDNIDpX.js +6 -0
  1347. vibe_surf/backend/frontend/assets/scaling-D7_wGXPp.js +6 -0
  1348. vibe_surf/backend/frontend/assets/scan-CXtftKWt.js +6 -0
  1349. vibe_surf/backend/frontend/assets/scan-barcode-DMzKInA0.js +6 -0
  1350. vibe_surf/backend/frontend/assets/scan-eye-BNOyXXj8.js +6 -0
  1351. vibe_surf/backend/frontend/assets/scan-face-wv0t4zeq.js +6 -0
  1352. vibe_surf/backend/frontend/assets/scan-heart-BeBWR3xV.js +6 -0
  1353. vibe_surf/backend/frontend/assets/scan-line-CvQpOukb.js +6 -0
  1354. vibe_surf/backend/frontend/assets/scan-qr-code-BQ-Oqt9e.js +6 -0
  1355. vibe_surf/backend/frontend/assets/scan-search-DeDxyjP7.js +6 -0
  1356. vibe_surf/backend/frontend/assets/scan-text-Du5B26Lp.js +6 -0
  1357. vibe_surf/backend/frontend/assets/school-XPbcFxvs.js +6 -0
  1358. vibe_surf/backend/frontend/assets/scissors-C82MxyXF.js +6 -0
  1359. vibe_surf/backend/frontend/assets/scissors-line-dashed-BiIj8ZEF.js +6 -0
  1360. vibe_surf/backend/frontend/assets/screen-share-4rpy_bSP.js +6 -0
  1361. vibe_surf/backend/frontend/assets/screen-share-off-DisAsCVo.js +6 -0
  1362. vibe_surf/backend/frontend/assets/scroll-D3FgdMu9.js +6 -0
  1363. vibe_surf/backend/frontend/assets/scroll-text-BolUgv8k.js +6 -0
  1364. vibe_surf/backend/frontend/assets/search-check-BqDsbYzT.js +6 -0
  1365. vibe_surf/backend/frontend/assets/search-code-BAngOAWT.js +6 -0
  1366. vibe_surf/backend/frontend/assets/search-slash-DGpGjVDh.js +6 -0
  1367. vibe_surf/backend/frontend/assets/search-x-hbEhC-Ks.js +6 -0
  1368. vibe_surf/backend/frontend/assets/section-CZdebDRa.js +6 -0
  1369. vibe_surf/backend/frontend/assets/send-BY6RRvoS.js +6 -0
  1370. vibe_surf/backend/frontend/assets/send-horizontal-ByJf1GwO.js +6 -0
  1371. vibe_surf/backend/frontend/assets/send-to-back-CqeJ0x7-.js +6 -0
  1372. vibe_surf/backend/frontend/assets/separator-horizontal-CyHVE869.js +6 -0
  1373. vibe_surf/backend/frontend/assets/separator-vertical-CHEXvAuG.js +6 -0
  1374. vibe_surf/backend/frontend/assets/server-DPj6-qpq.js +6 -0
  1375. vibe_surf/backend/frontend/assets/server-cog-Dc-mlMR8.js +6 -0
  1376. vibe_surf/backend/frontend/assets/server-crash-CXsISMNW.js +6 -0
  1377. vibe_surf/backend/frontend/assets/server-off-Y_lfL7-w.js +6 -0
  1378. vibe_surf/backend/frontend/assets/settings-2-DZ9wvd5i.js +6 -0
  1379. vibe_surf/backend/frontend/assets/settings-DO_W46zj.js +6 -0
  1380. vibe_surf/backend/frontend/assets/shapes-CIsUods8.js +6 -0
  1381. vibe_surf/backend/frontend/assets/share-0y8A7A5E.js +6 -0
  1382. vibe_surf/backend/frontend/assets/share-2-TSy7pnEx.js +6 -0
  1383. vibe_surf/backend/frontend/assets/sheet-DagiH4ve.js +6 -0
  1384. vibe_surf/backend/frontend/assets/shell-4uq5QK2w.js +6 -0
  1385. vibe_surf/backend/frontend/assets/shield-DSmxKeAX.js +6 -0
  1386. vibe_surf/backend/frontend/assets/shield-alert-2BHG6ofb.js +6 -0
  1387. vibe_surf/backend/frontend/assets/shield-ban-BcQOFFCO.js +6 -0
  1388. vibe_surf/backend/frontend/assets/shield-check-IssT1y70.js +6 -0
  1389. vibe_surf/backend/frontend/assets/shield-ellipsis-B_k2GJZe.js +6 -0
  1390. vibe_surf/backend/frontend/assets/shield-half-Ce9mZY66.js +6 -0
  1391. vibe_surf/backend/frontend/assets/shield-minus-Cm9SRYz3.js +6 -0
  1392. vibe_surf/backend/frontend/assets/shield-off-Di-Txcsi.js +6 -0
  1393. vibe_surf/backend/frontend/assets/shield-plus-Cbd8tnos.js +6 -0
  1394. vibe_surf/backend/frontend/assets/shield-question-5hf3zAb8.js +6 -0
  1395. vibe_surf/backend/frontend/assets/shield-user-D2XuthCx.js +6 -0
  1396. vibe_surf/backend/frontend/assets/shield-x-BTJiGLGc.js +6 -0
  1397. vibe_surf/backend/frontend/assets/ship-DkhgC4pB.js +6 -0
  1398. vibe_surf/backend/frontend/assets/ship-wheel-C-7_Y35l.js +6 -0
  1399. vibe_surf/backend/frontend/assets/shirt-vuhl9SGI.js +6 -0
  1400. vibe_surf/backend/frontend/assets/shopping-bag-DvQ2pPfQ.js +6 -0
  1401. vibe_surf/backend/frontend/assets/shopping-basket-D9s56Xw7.js +6 -0
  1402. vibe_surf/backend/frontend/assets/shopping-cart-ZmbJuTVy.js +6 -0
  1403. vibe_surf/backend/frontend/assets/shovel-L2fbM_rD.js +6 -0
  1404. vibe_surf/backend/frontend/assets/shower-head-DE9aHmtW.js +6 -0
  1405. vibe_surf/backend/frontend/assets/shredder-DadDP-UJ.js +6 -0
  1406. vibe_surf/backend/frontend/assets/shrimp-DycqoQZ3.js +6 -0
  1407. vibe_surf/backend/frontend/assets/shrink-B8aylxOx.js +6 -0
  1408. vibe_surf/backend/frontend/assets/shrub-DF1hbXW3.js +6 -0
  1409. vibe_surf/backend/frontend/assets/shuffle-BuIBx3Jr.js +6 -0
  1410. vibe_surf/backend/frontend/assets/sigma-Do2EOGrK.js +6 -0
  1411. vibe_surf/backend/frontend/assets/signal-D4HUxctG.js +6 -0
  1412. vibe_surf/backend/frontend/assets/signal-high-D4XjnPRT.js +6 -0
  1413. vibe_surf/backend/frontend/assets/signal-low-CbpCiGEn.js +6 -0
  1414. vibe_surf/backend/frontend/assets/signal-medium-DenP3lw7.js +6 -0
  1415. vibe_surf/backend/frontend/assets/signal-zero-CHgcs844.js +6 -0
  1416. vibe_surf/backend/frontend/assets/signature-DK8I0wlU.js +6 -0
  1417. vibe_surf/backend/frontend/assets/signpost-1ES-i9fp.js +6 -0
  1418. vibe_surf/backend/frontend/assets/signpost-big-BSozSaes.js +6 -0
  1419. vibe_surf/backend/frontend/assets/siren-wlABVP_H.js +6 -0
  1420. vibe_surf/backend/frontend/assets/skip-back-Bu_s_NAd.js +6 -0
  1421. vibe_surf/backend/frontend/assets/skip-forward-B_5w_2GT.js +6 -0
  1422. vibe_surf/backend/frontend/assets/skull-BEu1YCxD.js +6 -0
  1423. vibe_surf/backend/frontend/assets/slack-D9649ln8.js +6 -0
  1424. vibe_surf/backend/frontend/assets/slash-DojcavQ9.js +6 -0
  1425. vibe_surf/backend/frontend/assets/slice-CRmKxhnX.js +6 -0
  1426. vibe_surf/backend/frontend/assets/sliders-horizontal-B5g_t8uv.js +6 -0
  1427. vibe_surf/backend/frontend/assets/sliders-vertical-CLBL1buf.js +6 -0
  1428. vibe_surf/backend/frontend/assets/smartphone-D-ep_7qQ.js +6 -0
  1429. vibe_surf/backend/frontend/assets/smartphone-charging-CRPRIfJL.js +6 -0
  1430. vibe_surf/backend/frontend/assets/smartphone-nfc-CmXWPjB7.js +6 -0
  1431. vibe_surf/backend/frontend/assets/smile-C8NQBJ3w.js +6 -0
  1432. vibe_surf/backend/frontend/assets/smile-plus-BXiCkryt.js +6 -0
  1433. vibe_surf/backend/frontend/assets/snail-C4InLnJK.js +6 -0
  1434. vibe_surf/backend/frontend/assets/snowflake-CkOWmqpH.js +6 -0
  1435. vibe_surf/backend/frontend/assets/sofa-C5SFUETc.js +6 -0
  1436. vibe_surf/backend/frontend/assets/soup-BPK9i9Mq.js +6 -0
  1437. vibe_surf/backend/frontend/assets/space-B_AibqtW.js +6 -0
  1438. vibe_surf/backend/frontend/assets/spade-DOYQwKmE.js +6 -0
  1439. vibe_surf/backend/frontend/assets/sparkle-Bgy0TYRq.js +6 -0
  1440. vibe_surf/backend/frontend/assets/sparkles-COXnCZbi.js +6 -0
  1441. vibe_surf/backend/frontend/assets/speaker-CaUol58E.js +6 -0
  1442. vibe_surf/backend/frontend/assets/speech-SU2fqOX1.js +6 -0
  1443. vibe_surf/backend/frontend/assets/spell-check-2-C0X3GG0W.js +6 -0
  1444. vibe_surf/backend/frontend/assets/spell-check-BwnI8rNb.js +6 -0
  1445. vibe_surf/backend/frontend/assets/spline-ByNmiFVd.js +6 -0
  1446. vibe_surf/backend/frontend/assets/spline-pointer-B6jrA3VA.js +6 -0
  1447. vibe_surf/backend/frontend/assets/split-uo1Igb0N.js +6 -0
  1448. vibe_surf/backend/frontend/assets/spray-can-D37CFDNB.js +6 -0
  1449. vibe_surf/backend/frontend/assets/sprout-B25Lx6nK.js +6 -0
  1450. vibe_surf/backend/frontend/assets/square-KfK1ngG3.js +6 -0
  1451. vibe_surf/backend/frontend/assets/square-activity-BGQluYc5.js +6 -0
  1452. vibe_surf/backend/frontend/assets/square-arrow-down-CqlT37VO.js +6 -0
  1453. vibe_surf/backend/frontend/assets/square-arrow-down-left-CR2Go22d.js +6 -0
  1454. vibe_surf/backend/frontend/assets/square-arrow-down-right-rGAHLIaS.js +6 -0
  1455. vibe_surf/backend/frontend/assets/square-arrow-left-CvWu8_9d.js +6 -0
  1456. vibe_surf/backend/frontend/assets/square-arrow-out-down-left-K0v7hlb0.js +6 -0
  1457. vibe_surf/backend/frontend/assets/square-arrow-out-down-right-f74Yq8Hb.js +6 -0
  1458. vibe_surf/backend/frontend/assets/square-arrow-out-up-left-CdBSNScA.js +6 -0
  1459. vibe_surf/backend/frontend/assets/square-arrow-out-up-right-8PNP-37C.js +6 -0
  1460. vibe_surf/backend/frontend/assets/square-arrow-right-DZ3-0COG.js +6 -0
  1461. vibe_surf/backend/frontend/assets/square-arrow-up-CefwAldY.js +6 -0
  1462. vibe_surf/backend/frontend/assets/square-arrow-up-left-Dt6pY6y2.js +6 -0
  1463. vibe_surf/backend/frontend/assets/square-arrow-up-right-C-bPYXZE.js +6 -0
  1464. vibe_surf/backend/frontend/assets/square-asterisk-BIEu0Wq-.js +6 -0
  1465. vibe_surf/backend/frontend/assets/square-bottom-dashed-scissors-DFln2i7A.js +6 -0
  1466. vibe_surf/backend/frontend/assets/square-chart-gantt-VCoGr7j5.js +6 -0
  1467. vibe_surf/backend/frontend/assets/square-check-big-DdTm65g2.js +6 -0
  1468. vibe_surf/backend/frontend/assets/square-check-tJdFPLB4.js +6 -0
  1469. vibe_surf/backend/frontend/assets/square-chevron-down-DV0aFQxC.js +6 -0
  1470. vibe_surf/backend/frontend/assets/square-chevron-left-CdGd5MQB.js +6 -0
  1471. vibe_surf/backend/frontend/assets/square-chevron-right-D_aqBwe_.js +6 -0
  1472. vibe_surf/backend/frontend/assets/square-chevron-up-DBzeLhdp.js +6 -0
  1473. vibe_surf/backend/frontend/assets/square-code-DtSsDKtH.js +6 -0
  1474. vibe_surf/backend/frontend/assets/square-dashed-DSG0Ash0.js +6 -0
  1475. vibe_surf/backend/frontend/assets/square-dashed-bottom-BrkR2d57.js +6 -0
  1476. vibe_surf/backend/frontend/assets/square-dashed-bottom-code-CMTH1TbL.js +6 -0
  1477. vibe_surf/backend/frontend/assets/square-dashed-kanban-961FMGlN.js +6 -0
  1478. vibe_surf/backend/frontend/assets/square-dashed-mouse-pointer-BWcK5KqH.js +6 -0
  1479. vibe_surf/backend/frontend/assets/square-divide-B8EfzsLW.js +6 -0
  1480. vibe_surf/backend/frontend/assets/square-dot-CFXkGNxl.js +6 -0
  1481. vibe_surf/backend/frontend/assets/square-equal-DNzUS5Xu.js +6 -0
  1482. vibe_surf/backend/frontend/assets/square-function-mVVWlGqH.js +6 -0
  1483. vibe_surf/backend/frontend/assets/square-kanban-gbxgvYAs.js +6 -0
  1484. vibe_surf/backend/frontend/assets/square-library-LB-mLfoV.js +6 -0
  1485. vibe_surf/backend/frontend/assets/square-m-DR4vWmvF.js +6 -0
  1486. vibe_surf/backend/frontend/assets/square-menu-wrD_3b1X.js +6 -0
  1487. vibe_surf/backend/frontend/assets/square-minus-C8LvWB0i.js +6 -0
  1488. vibe_surf/backend/frontend/assets/square-mouse-pointer-BWIOG0ej.js +6 -0
  1489. vibe_surf/backend/frontend/assets/square-parking-Cwf1smWS.js +6 -0
  1490. vibe_surf/backend/frontend/assets/square-parking-off-B7fLGIII.js +6 -0
  1491. vibe_surf/backend/frontend/assets/square-pen-D-KRx-pf.js +6 -0
  1492. vibe_surf/backend/frontend/assets/square-percent-DEPHZN1U.js +6 -0
  1493. vibe_surf/backend/frontend/assets/square-pi-D3ZoGA8y.js +6 -0
  1494. vibe_surf/backend/frontend/assets/square-pilcrow-CU7h7mYC.js +6 -0
  1495. vibe_surf/backend/frontend/assets/square-play-BJID6hok.js +6 -0
  1496. vibe_surf/backend/frontend/assets/square-plus-B_MofyMZ.js +6 -0
  1497. vibe_surf/backend/frontend/assets/square-power-CnNfm3SK.js +6 -0
  1498. vibe_surf/backend/frontend/assets/square-radical-Bb91fkyO.js +6 -0
  1499. vibe_surf/backend/frontend/assets/square-round-corner-DSNwBkrZ.js +6 -0
  1500. vibe_surf/backend/frontend/assets/square-scissors-Q-Hew_gd.js +6 -0
  1501. vibe_surf/backend/frontend/assets/square-sigma-Dvqecf-2.js +6 -0
  1502. vibe_surf/backend/frontend/assets/square-slash-TFALqbOX.js +6 -0
  1503. vibe_surf/backend/frontend/assets/square-split-horizontal-CbPy5mPi.js +6 -0
  1504. vibe_surf/backend/frontend/assets/square-split-vertical-CwEHVK6t.js +6 -0
  1505. vibe_surf/backend/frontend/assets/square-square-BgBRe8Sy.js +6 -0
  1506. vibe_surf/backend/frontend/assets/square-stack-CQOObCB-.js +6 -0
  1507. vibe_surf/backend/frontend/assets/square-terminal-DTCYsALs.js +6 -0
  1508. vibe_surf/backend/frontend/assets/square-user-BtoHpGAf.js +6 -0
  1509. vibe_surf/backend/frontend/assets/square-user-round-DYhk3lBR.js +6 -0
  1510. vibe_surf/backend/frontend/assets/square-x-BxVfvmxy.js +6 -0
  1511. vibe_surf/backend/frontend/assets/squares-exclude-xFnGRjrW.js +6 -0
  1512. vibe_surf/backend/frontend/assets/squares-intersect-CJ3onkar.js +6 -0
  1513. vibe_surf/backend/frontend/assets/squares-subtract-DHkmEhbq.js +6 -0
  1514. vibe_surf/backend/frontend/assets/squares-unite-VTPchsN_.js +6 -0
  1515. vibe_surf/backend/frontend/assets/squircle-BeRgB4CX.js +6 -0
  1516. vibe_surf/backend/frontend/assets/squirrel-CXpCofHU.js +6 -0
  1517. vibe_surf/backend/frontend/assets/stamp-CBKYJLk-.js +6 -0
  1518. vibe_surf/backend/frontend/assets/star-g394tQMa.js +6 -0
  1519. vibe_surf/backend/frontend/assets/star-half-DMNuOefd.js +6 -0
  1520. vibe_surf/backend/frontend/assets/star-off-D_I13W97.js +6 -0
  1521. vibe_surf/backend/frontend/assets/step-back-Ba3vvS1b.js +6 -0
  1522. vibe_surf/backend/frontend/assets/step-forward-tf6_dmSk.js +6 -0
  1523. vibe_surf/backend/frontend/assets/stethoscope-kEGj4Hk2.js +6 -0
  1524. vibe_surf/backend/frontend/assets/sticker-BMrXBzQi.js +6 -0
  1525. vibe_surf/backend/frontend/assets/sticky-note-B6_-_Vk7.js +6 -0
  1526. vibe_surf/backend/frontend/assets/store-ClCC8VsS.js +6 -0
  1527. vibe_surf/backend/frontend/assets/stretch-horizontal-Dfdn4d_v.js +6 -0
  1528. vibe_surf/backend/frontend/assets/stretch-vertical-G91F9Wl8.js +6 -0
  1529. vibe_surf/backend/frontend/assets/strikethrough-DQ1eMtzE.js +6 -0
  1530. vibe_surf/backend/frontend/assets/subscript-B1v5cruw.js +6 -0
  1531. vibe_surf/backend/frontend/assets/sun-Drd6gJu4.js +6 -0
  1532. vibe_surf/backend/frontend/assets/sun-dim-CSbGIP11.js +6 -0
  1533. vibe_surf/backend/frontend/assets/sun-medium-Cownz0gJ.js +6 -0
  1534. vibe_surf/backend/frontend/assets/sun-moon-BgCDmhlw.js +6 -0
  1535. vibe_surf/backend/frontend/assets/sun-snow-B0xowfvd.js +6 -0
  1536. vibe_surf/backend/frontend/assets/sunrise-DkTO7zEY.js +6 -0
  1537. vibe_surf/backend/frontend/assets/sunset-DkKYK75e.js +6 -0
  1538. vibe_surf/backend/frontend/assets/superscript-CBfgJuGP.js +6 -0
  1539. vibe_surf/backend/frontend/assets/swatch-book-DrsAphD2.js +6 -0
  1540. vibe_surf/backend/frontend/assets/swiss-franc-DAYyAzPc.js +6 -0
  1541. vibe_surf/backend/frontend/assets/switch-camera-C7hTq-mz.js +6 -0
  1542. vibe_surf/backend/frontend/assets/sword-BDecpboX.js +6 -0
  1543. vibe_surf/backend/frontend/assets/swords-BjWa4kCQ.js +6 -0
  1544. vibe_surf/backend/frontend/assets/syringe-ClPPE8yd.js +6 -0
  1545. vibe_surf/backend/frontend/assets/table-2-DIGnaXY7.js +6 -0
  1546. vibe_surf/backend/frontend/assets/table-CHxmnA-B.js +6 -0
  1547. vibe_surf/backend/frontend/assets/table-cells-merge-D1zNRVrG.js +6 -0
  1548. vibe_surf/backend/frontend/assets/table-cells-split-CdEYW1Su.js +6 -0
  1549. vibe_surf/backend/frontend/assets/table-columns-split-JoiaUKz3.js +6 -0
  1550. vibe_surf/backend/frontend/assets/table-of-contents-BSpkdcFt.js +6 -0
  1551. vibe_surf/backend/frontend/assets/table-properties-CmoYqW5E.js +6 -0
  1552. vibe_surf/backend/frontend/assets/table-rows-split-B-06ZKqE.js +6 -0
  1553. vibe_surf/backend/frontend/assets/tablet-YvP4PBQR.js +6 -0
  1554. vibe_surf/backend/frontend/assets/tablet-smartphone-BG7aS4OL.js +6 -0
  1555. vibe_surf/backend/frontend/assets/tablets-BVvSHnaS.js +6 -0
  1556. vibe_surf/backend/frontend/assets/tag-Bs9C2NWs.js +6 -0
  1557. vibe_surf/backend/frontend/assets/tags-DEvGZIIh.js +6 -0
  1558. vibe_surf/backend/frontend/assets/tally-1-BjNjbWUj.js +6 -0
  1559. vibe_surf/backend/frontend/assets/tally-2-Bd0nQcFC.js +6 -0
  1560. vibe_surf/backend/frontend/assets/tally-3-DHrPKvJg.js +6 -0
  1561. vibe_surf/backend/frontend/assets/tally-4-DAUwA2aR.js +6 -0
  1562. vibe_surf/backend/frontend/assets/tally-5-CgAN8Y91.js +6 -0
  1563. vibe_surf/backend/frontend/assets/tangent-CRznV78Q.js +6 -0
  1564. vibe_surf/backend/frontend/assets/target-Bj2MJlO6.js +6 -0
  1565. vibe_surf/backend/frontend/assets/telescope-CyRzgTg4.js +6 -0
  1566. vibe_surf/backend/frontend/assets/temp-pat-1-BDqu2wpz.png +0 -0
  1567. vibe_surf/backend/frontend/assets/temp-pat-2-C_RVvOE_.png +0 -0
  1568. vibe_surf/backend/frontend/assets/temp-pat-3-Ci-rp5-q.png +0 -0
  1569. vibe_surf/backend/frontend/assets/temp-pat-m-1-D-qJT-j4.png +0 -0
  1570. vibe_surf/backend/frontend/assets/temp-pat-m-2-BFhrICvh.png +0 -0
  1571. vibe_surf/backend/frontend/assets/temp-pat-m-3-BJIIbDxb.png +0 -0
  1572. vibe_surf/backend/frontend/assets/tent-D1boPMJ_.js +6 -0
  1573. vibe_surf/backend/frontend/assets/tent-tree-DlMlV5UT.js +6 -0
  1574. vibe_surf/backend/frontend/assets/terminal-ByKLrVXr.js +6 -0
  1575. vibe_surf/backend/frontend/assets/test-tube-DjNpqEvy.js +6 -0
  1576. vibe_surf/backend/frontend/assets/test-tube-diagonal-kvKWvVpD.js +6 -0
  1577. vibe_surf/backend/frontend/assets/test-tubes-BUVuvPYq.js +6 -0
  1578. vibe_surf/backend/frontend/assets/text-BaPUPrRB.js +6 -0
  1579. vibe_surf/backend/frontend/assets/text-cursor-DjiJAhIO.js +6 -0
  1580. vibe_surf/backend/frontend/assets/text-cursor-input-DmFbkVcG.js +6 -0
  1581. vibe_surf/backend/frontend/assets/text-quote-DbZhBhba.js +6 -0
  1582. vibe_surf/backend/frontend/assets/text-search-D81mgubi.js +6 -0
  1583. vibe_surf/backend/frontend/assets/text-select-BCYAwryE.js +6 -0
  1584. vibe_surf/backend/frontend/assets/theater-BF8yCQZ3.js +6 -0
  1585. vibe_surf/backend/frontend/assets/thermometer-Dz0qc69z.js +6 -0
  1586. vibe_surf/backend/frontend/assets/thermometer-snowflake-BZ8Fol5x.js +6 -0
  1587. vibe_surf/backend/frontend/assets/thermometer-sun-DgmdNSSx.js +6 -0
  1588. vibe_surf/backend/frontend/assets/thumbs-down-6gCm1bFP.js +6 -0
  1589. vibe_surf/backend/frontend/assets/thumbs-up-BpkAnOkj.js +6 -0
  1590. vibe_surf/backend/frontend/assets/ticket-CZ6VZCic.js +6 -0
  1591. vibe_surf/backend/frontend/assets/ticket-check-CwERJSTS.js +6 -0
  1592. vibe_surf/backend/frontend/assets/ticket-minus-CJ8o42r1.js +6 -0
  1593. vibe_surf/backend/frontend/assets/ticket-percent-D9mgrzai.js +6 -0
  1594. vibe_surf/backend/frontend/assets/ticket-plus-Bf_MplVa.js +6 -0
  1595. vibe_surf/backend/frontend/assets/ticket-slash-CNukz3dP.js +6 -0
  1596. vibe_surf/backend/frontend/assets/ticket-x-DAGtm4Nf.js +6 -0
  1597. vibe_surf/backend/frontend/assets/tickets-Dlm-Pd3N.js +6 -0
  1598. vibe_surf/backend/frontend/assets/tickets-plane-C4lmqLQq.js +6 -0
  1599. vibe_surf/backend/frontend/assets/timer-0lTpmgXp.js +6 -0
  1600. vibe_surf/backend/frontend/assets/timer-off-BGqRyv1S.js +6 -0
  1601. vibe_surf/backend/frontend/assets/timer-reset-DdhKPXcy.js +6 -0
  1602. vibe_surf/backend/frontend/assets/toggle-left-De2ASTKW.js +6 -0
  1603. vibe_surf/backend/frontend/assets/toggle-right-NfpJqTaq.js +6 -0
  1604. vibe_surf/backend/frontend/assets/toilet-DcJuMKzv.js +6 -0
  1605. vibe_surf/backend/frontend/assets/tornado-BannseS-.js +6 -0
  1606. vibe_surf/backend/frontend/assets/torus-CxsKBH8D.js +6 -0
  1607. vibe_surf/backend/frontend/assets/touchpad-ENZl5mwQ.js +6 -0
  1608. vibe_surf/backend/frontend/assets/touchpad-off-Bs9XazIZ.js +6 -0
  1609. vibe_surf/backend/frontend/assets/tower-control-DOH63Gyd.js +6 -0
  1610. vibe_surf/backend/frontend/assets/toy-brick-CK9szegV.js +6 -0
  1611. vibe_surf/backend/frontend/assets/tractor-C4edkneR.js +6 -0
  1612. vibe_surf/backend/frontend/assets/traffic-cone-B7xJNOdC.js +6 -0
  1613. vibe_surf/backend/frontend/assets/train-front-DPkfW4fH.js +6 -0
  1614. vibe_surf/backend/frontend/assets/train-front-tunnel-Dc6i8ZmW.js +6 -0
  1615. vibe_surf/backend/frontend/assets/train-track-DFRUcPF4.js +6 -0
  1616. vibe_surf/backend/frontend/assets/tram-front-DnSEWr26.js +6 -0
  1617. vibe_surf/backend/frontend/assets/transgender-CwbUC-T0.js +6 -0
  1618. vibe_surf/backend/frontend/assets/trash-DSMPsj08.js +6 -0
  1619. vibe_surf/backend/frontend/assets/tree-deciduous-CMyD2rgs.js +6 -0
  1620. vibe_surf/backend/frontend/assets/tree-palm-ClbWCueR.js +6 -0
  1621. vibe_surf/backend/frontend/assets/tree-pine-CxCMH7RZ.js +6 -0
  1622. vibe_surf/backend/frontend/assets/trees-DeERVvec.js +6 -0
  1623. vibe_surf/backend/frontend/assets/trello-DwQeyG2C.js +6 -0
  1624. vibe_surf/backend/frontend/assets/trending-down-CuQxq0A3.js +6 -0
  1625. vibe_surf/backend/frontend/assets/trending-up-BDSGIJWY.js +6 -0
  1626. vibe_surf/backend/frontend/assets/trending-up-down-CSb_7X-_.js +6 -0
  1627. vibe_surf/backend/frontend/assets/triangle-Cc8gzj2X.js +6 -0
  1628. vibe_surf/backend/frontend/assets/triangle-alert-CzfSlrIp.js +6 -0
  1629. vibe_surf/backend/frontend/assets/triangle-dashed-CSlIdQSl.js +6 -0
  1630. vibe_surf/backend/frontend/assets/triangle-right-BIlbKFDC.js +6 -0
  1631. vibe_surf/backend/frontend/assets/trophy-CIFZUGnX.js +6 -0
  1632. vibe_surf/backend/frontend/assets/truck-Id_mHUOq.js +6 -0
  1633. vibe_surf/backend/frontend/assets/truck-electric-WgMKZnOH.js +6 -0
  1634. vibe_surf/backend/frontend/assets/turtle-0ek05Orw.js +6 -0
  1635. vibe_surf/backend/frontend/assets/tv-DLVWDmzW.js +6 -0
  1636. vibe_surf/backend/frontend/assets/tv-minimal-E0w-pb-R.js +6 -0
  1637. vibe_surf/backend/frontend/assets/tv-minimal-play-C8eivgTI.js +6 -0
  1638. vibe_surf/backend/frontend/assets/twitch-D6updjnG.js +6 -0
  1639. vibe_surf/backend/frontend/assets/twitter-Der_Ih7y.js +6 -0
  1640. vibe_surf/backend/frontend/assets/type-BZeEwGKH.js +6 -0
  1641. vibe_surf/backend/frontend/assets/type-outline-WvuVShMD.js +6 -0
  1642. vibe_surf/backend/frontend/assets/umbrella-BFiE5bFk.js +6 -0
  1643. vibe_surf/backend/frontend/assets/umbrella-off-CQKtt_HS.js +6 -0
  1644. vibe_surf/backend/frontend/assets/underline-eH-gfEgl.js +6 -0
  1645. vibe_surf/backend/frontend/assets/undo-2-CGpVoxxS.js +6 -0
  1646. vibe_surf/backend/frontend/assets/undo-BAkkNYmN.js +6 -0
  1647. vibe_surf/backend/frontend/assets/undo-dot-fxz9ZoUf.js +6 -0
  1648. vibe_surf/backend/frontend/assets/unfold-horizontal-Bz6GASed.js +6 -0
  1649. vibe_surf/backend/frontend/assets/unfold-vertical-DVuawiHD.js +6 -0
  1650. vibe_surf/backend/frontend/assets/ungroup-DZlCBfu8.js +6 -0
  1651. vibe_surf/backend/frontend/assets/university-DQQJPlHM.js +6 -0
  1652. vibe_surf/backend/frontend/assets/unlink-2-Bbf62oJC.js +6 -0
  1653. vibe_surf/backend/frontend/assets/unlink-rRnEYNBH.js +6 -0
  1654. vibe_surf/backend/frontend/assets/unplug-BE6bAKlE.js +6 -0
  1655. vibe_surf/backend/frontend/assets/upload-DgbNBlk6.js +6 -0
  1656. vibe_surf/backend/frontend/assets/usb-BsbOhQkP.js +6 -0
  1657. vibe_surf/backend/frontend/assets/use-post-add-user-s3pEdarP.js +1 -0
  1658. vibe_surf/backend/frontend/assets/user-C7_N9vjw.js +6 -0
  1659. vibe_surf/backend/frontend/assets/user-check-D85AcwGt.js +6 -0
  1660. vibe_surf/backend/frontend/assets/user-cog-BUSZoKWO.js +6 -0
  1661. vibe_surf/backend/frontend/assets/user-lock-DrG5znDk.js +6 -0
  1662. vibe_surf/backend/frontend/assets/user-minus-CjVZSxhC.js +6 -0
  1663. vibe_surf/backend/frontend/assets/user-pen-BllWYNRg.js +6 -0
  1664. vibe_surf/backend/frontend/assets/user-plus-Ct840ALN.js +6 -0
  1665. vibe_surf/backend/frontend/assets/user-round-D6DnOG0E.js +6 -0
  1666. vibe_surf/backend/frontend/assets/user-round-check-Ci15Wbid.js +6 -0
  1667. vibe_surf/backend/frontend/assets/user-round-cog-SrRmnnrG.js +6 -0
  1668. vibe_surf/backend/frontend/assets/user-round-minus-CZKo0fkN.js +6 -0
  1669. vibe_surf/backend/frontend/assets/user-round-pen-DQ88K1gY.js +6 -0
  1670. vibe_surf/backend/frontend/assets/user-round-plus-BtBHwnQH.js +6 -0
  1671. vibe_surf/backend/frontend/assets/user-round-search-mZx8k3ks.js +6 -0
  1672. vibe_surf/backend/frontend/assets/user-round-x-4MvMTCpy.js +6 -0
  1673. vibe_surf/backend/frontend/assets/user-search-CkEhATdm.js +6 -0
  1674. vibe_surf/backend/frontend/assets/user-x-DufZCLiX.js +6 -0
  1675. vibe_surf/backend/frontend/assets/users-DgOAHdb7.js +6 -0
  1676. vibe_surf/backend/frontend/assets/users-round-Bj4Zqvjj.js +6 -0
  1677. vibe_surf/backend/frontend/assets/utensils-CcfYVeqi.js +6 -0
  1678. vibe_surf/backend/frontend/assets/utensils-crossed-Daq7-gMB.js +6 -0
  1679. vibe_surf/backend/frontend/assets/utility-pole-BRYxk_9o.js +6 -0
  1680. vibe_surf/backend/frontend/assets/vanilla-picker-B6E6ObS_.js +8 -0
  1681. vibe_surf/backend/frontend/assets/variable-CQb_DxMu.js +6 -0
  1682. vibe_surf/backend/frontend/assets/vault-D7etPPcB.js +6 -0
  1683. vibe_surf/backend/frontend/assets/vegan-DhjhKnZM.js +6 -0
  1684. vibe_surf/backend/frontend/assets/venetian-mask-DGDNvUAT.js +6 -0
  1685. vibe_surf/backend/frontend/assets/venus-and-mars-BEW94wvT.js +6 -0
  1686. vibe_surf/backend/frontend/assets/venus-u9B-gdcz.js +6 -0
  1687. vibe_surf/backend/frontend/assets/vibrate-off-GMm1P59r.js +6 -0
  1688. vibe_surf/backend/frontend/assets/vibrate-ztsKQUo9.js +6 -0
  1689. vibe_surf/backend/frontend/assets/video-BRU-KCdj.js +6 -0
  1690. vibe_surf/backend/frontend/assets/video-off-UBhDkXSa.js +6 -0
  1691. vibe_surf/backend/frontend/assets/videotape-BnpqC2PU.js +6 -0
  1692. vibe_surf/backend/frontend/assets/view-SPlXqa2E.js +6 -0
  1693. vibe_surf/backend/frontend/assets/voicemail-CslFUibB.js +6 -0
  1694. vibe_surf/backend/frontend/assets/volleyball-YmSfEYj0.js +6 -0
  1695. vibe_surf/backend/frontend/assets/volume-1-DzSvYJXy.js +6 -0
  1696. vibe_surf/backend/frontend/assets/volume-2-CKYHuo73.js +6 -0
  1697. vibe_surf/backend/frontend/assets/volume-D2WpTg4b.js +6 -0
  1698. vibe_surf/backend/frontend/assets/volume-off-CXmQvaUO.js +6 -0
  1699. vibe_surf/backend/frontend/assets/volume-x-Dl4xNI1D.js +6 -0
  1700. vibe_surf/backend/frontend/assets/vote-DVUnQCxF.js +6 -0
  1701. vibe_surf/backend/frontend/assets/wallet-D9F1dFbt.js +6 -0
  1702. vibe_surf/backend/frontend/assets/wallet-cards-DkIuM2Gu.js +6 -0
  1703. vibe_surf/backend/frontend/assets/wallet-minimal-CUUsXAfP.js +6 -0
  1704. vibe_surf/backend/frontend/assets/wallpaper-BHliG6AQ.js +6 -0
  1705. vibe_surf/backend/frontend/assets/wand-sparkles-BA8i-2_I.js +6 -0
  1706. vibe_surf/backend/frontend/assets/wand-u2EI2dL2.js +6 -0
  1707. vibe_surf/backend/frontend/assets/warehouse-CxDEgPyp.js +6 -0
  1708. vibe_surf/backend/frontend/assets/washing-machine-CYoqAbT7.js +6 -0
  1709. vibe_surf/backend/frontend/assets/watch-eNq5oUsh.js +6 -0
  1710. vibe_surf/backend/frontend/assets/waves-Bs6o5G71.js +6 -0
  1711. vibe_surf/backend/frontend/assets/waves-ladder-0t2iIHt8.js +6 -0
  1712. vibe_surf/backend/frontend/assets/waypoints-DyScJk3j.js +6 -0
  1713. vibe_surf/backend/frontend/assets/webcam-BFZUWYUw.js +6 -0
  1714. vibe_surf/backend/frontend/assets/webhook-CMDaI4yk.js +6 -0
  1715. vibe_surf/backend/frontend/assets/webhook-off-DQzE1oMX.js +6 -0
  1716. vibe_surf/backend/frontend/assets/weight-g0EeSmAx.js +6 -0
  1717. vibe_surf/backend/frontend/assets/wheat-hvVtAPlc.js +6 -0
  1718. vibe_surf/backend/frontend/assets/wheat-off-6d_oRYIW.js +6 -0
  1719. vibe_surf/backend/frontend/assets/whole-word-CMHbYgQ-.js +6 -0
  1720. vibe_surf/backend/frontend/assets/wifi-CRHAo2Lb.js +6 -0
  1721. vibe_surf/backend/frontend/assets/wifi-high-BTElqamm.js +6 -0
  1722. vibe_surf/backend/frontend/assets/wifi-low-BFBJvE2C.js +6 -0
  1723. vibe_surf/backend/frontend/assets/wifi-off-DL1S7f79.js +6 -0
  1724. vibe_surf/backend/frontend/assets/wifi-pen-FkLT18-y.js +6 -0
  1725. vibe_surf/backend/frontend/assets/wifi-zero-koQAfMYN.js +6 -0
  1726. vibe_surf/backend/frontend/assets/wind-CgQDM8yC.js +6 -0
  1727. vibe_surf/backend/frontend/assets/wind-arrow-down-ByQJVZNf.js +6 -0
  1728. vibe_surf/backend/frontend/assets/wine-kngKIYWK.js +6 -0
  1729. vibe_surf/backend/frontend/assets/wine-off-DaVVtkyG.js +6 -0
  1730. vibe_surf/backend/frontend/assets/workflow-BBHA5vqf.js +6 -0
  1731. vibe_surf/backend/frontend/assets/worm-D8rJAL-s.js +6 -0
  1732. vibe_surf/backend/frontend/assets/wrap-text-s4fkGxHY.js +6 -0
  1733. vibe_surf/backend/frontend/assets/wrench-CYzg6B-q.js +6 -0
  1734. vibe_surf/backend/frontend/assets/youtube-BIzMVpJA.js +6 -0
  1735. vibe_surf/backend/frontend/assets/zap-nyAdqt4o.js +6 -0
  1736. vibe_surf/backend/frontend/assets/zap-off-Aii1CEgj.js +6 -0
  1737. vibe_surf/backend/frontend/assets/zoom-in-BNWeSenu.js +6 -0
  1738. vibe_surf/backend/frontend/assets/zoom-out-Bd2vIq2c.js +6 -0
  1739. vibe_surf/backend/frontend/favicon.ico +0 -0
  1740. vibe_surf/backend/frontend/index.html +24 -0
  1741. vibe_surf/backend/frontend/manifest.json +31 -0
  1742. vibe_surf/backend/llm_config.py +43 -0
  1743. vibe_surf/backend/main.py +707 -130
  1744. vibe_surf/backend/shared_state.py +482 -26
  1745. vibe_surf/backend/utils/encryption.py +40 -4
  1746. vibe_surf/backend/utils/llm_factory.py +27 -2
  1747. vibe_surf/backend/utils/utils.py +42 -0
  1748. vibe_surf/browser/agen_browser_profile.py +5 -0
  1749. vibe_surf/browser/agent_browser_session.py +226 -119
  1750. vibe_surf/browser/browser_manager.py +5 -4
  1751. vibe_surf/browser/find_page_element.py +1100 -0
  1752. vibe_surf/browser/page_operations.py +222 -0
  1753. vibe_surf/browser/watchdogs/action_watchdog.py +1 -83
  1754. vibe_surf/browser/watchdogs/dom_watchdog.py +17 -5
  1755. vibe_surf/chrome_extension/background.js +96 -55
  1756. vibe_surf/chrome_extension/config.js +10 -1
  1757. vibe_surf/chrome_extension/manifest.json +15 -9
  1758. vibe_surf/chrome_extension/scripts/api-client.js +171 -11
  1759. vibe_surf/chrome_extension/scripts/file-manager.js +53 -12
  1760. vibe_surf/chrome_extension/scripts/main.js +46 -11
  1761. vibe_surf/chrome_extension/scripts/session-manager.js +30 -4
  1762. vibe_surf/chrome_extension/scripts/settings-general.js +513 -0
  1763. vibe_surf/chrome_extension/scripts/settings-integrations.js +998 -0
  1764. vibe_surf/chrome_extension/scripts/settings-manager.js +72 -1730
  1765. vibe_surf/chrome_extension/scripts/settings-profiles.js +1330 -0
  1766. vibe_surf/chrome_extension/scripts/settings-workflow.js +2911 -0
  1767. vibe_surf/chrome_extension/scripts/ui-manager.js +1354 -503
  1768. vibe_surf/chrome_extension/scripts/version.js +3 -0
  1769. vibe_surf/chrome_extension/sidepanel.html +711 -18
  1770. vibe_surf/chrome_extension/styles/components.css +146 -0
  1771. vibe_surf/chrome_extension/styles/input.css +115 -0
  1772. vibe_surf/chrome_extension/styles/layout.css +2 -0
  1773. vibe_surf/chrome_extension/styles/settings-integrations.css +945 -0
  1774. vibe_surf/chrome_extension/styles/settings-modal.css +7 -3
  1775. vibe_surf/chrome_extension/styles/settings-responsive.css +37 -5
  1776. vibe_surf/chrome_extension/styles/settings-workflow.css +2347 -0
  1777. vibe_surf/cli.py +154 -11
  1778. vibe_surf/langflow/__init__.py +0 -0
  1779. vibe_surf/langflow/__main__.py +954 -0
  1780. vibe_surf/langflow/alembic/README +1 -0
  1781. vibe_surf/langflow/alembic/env.py +124 -0
  1782. vibe_surf/langflow/alembic/script.py.mako +31 -0
  1783. vibe_surf/langflow/alembic/versions/006b3990db50_add_unique_constraints.py +66 -0
  1784. vibe_surf/langflow/alembic/versions/012fb73ac359_add_folder_table.py +82 -0
  1785. vibe_surf/langflow/alembic/versions/0882f9657f22_encrypt_existing_mcp_auth_settings_.py +122 -0
  1786. vibe_surf/langflow/alembic/versions/0ae3a2674f32_update_the_columns_that_need_to_change_.py +71 -0
  1787. vibe_surf/langflow/alembic/versions/0b8757876a7c_.py +32 -0
  1788. vibe_surf/langflow/alembic/versions/0d60fcbd4e8e_create_vertex_builds_table.py +51 -0
  1789. vibe_surf/langflow/alembic/versions/1a110b568907_replace_credential_table_with_variable.py +66 -0
  1790. vibe_surf/langflow/alembic/versions/1b8b740a6fa3_remove_fk_constraint_in_message_.py +337 -0
  1791. vibe_surf/langflow/alembic/versions/1c79524817ed_add_unique_constraints_per_user_in_.py +43 -0
  1792. vibe_surf/langflow/alembic/versions/1cb603706752_modify_uniqueness_constraint_on_file_.py +279 -0
  1793. vibe_surf/langflow/alembic/versions/1d90f8a0efe1_update_description_columns_type.py +71 -0
  1794. vibe_surf/langflow/alembic/versions/1eab2c3eb45e_event_error.py +53 -0
  1795. vibe_surf/langflow/alembic/versions/1ef9c4f3765d_.py +54 -0
  1796. vibe_surf/langflow/alembic/versions/1f4d6df60295_add_default_fields_column.py +43 -0
  1797. vibe_surf/langflow/alembic/versions/260dbcc8b680_adds_tables.py +151 -0
  1798. vibe_surf/langflow/alembic/versions/29fe8f1f806b_add_missing_index.py +44 -0
  1799. vibe_surf/langflow/alembic/versions/2ac71eb9c3ae_adds_credential_table.py +55 -0
  1800. vibe_surf/langflow/alembic/versions/3162e83e485f_add_auth_settings_to_folder_and_merge.py +58 -0
  1801. vibe_surf/langflow/alembic/versions/3bb0ddf32dfb_add_unique_constraints_per_user_in_flow_.py +55 -0
  1802. vibe_surf/langflow/alembic/versions/4e5980a44eaa_fix_date_times_again.py +124 -0
  1803. vibe_surf/langflow/alembic/versions/58b28437a398_modify_nullable.py +66 -0
  1804. vibe_surf/langflow/alembic/versions/5ace73a7f223_new_remove_table_upgrade_op.py +39 -0
  1805. vibe_surf/langflow/alembic/versions/631faacf5da2_add_webhook_columns.py +45 -0
  1806. vibe_surf/langflow/alembic/versions/63b9c451fd30_add_icon_and_icon_bg_color_to_flow.py +50 -0
  1807. vibe_surf/langflow/alembic/versions/66f72f04a1de_add_mcp_support_with_project_settings_.py +54 -0
  1808. vibe_surf/langflow/alembic/versions/67cc006d50bf_add_profile_image_column.py +57 -0
  1809. vibe_surf/langflow/alembic/versions/6e7b581b5648_fix_nullable.py +59 -0
  1810. vibe_surf/langflow/alembic/versions/7843803a87b5_store_updates.py +55 -0
  1811. vibe_surf/langflow/alembic/versions/79e675cb6752_change_datetime_type.py +124 -0
  1812. vibe_surf/langflow/alembic/versions/7d2162acc8b2_adds_updated_at_and_folder_cols.py +74 -0
  1813. vibe_surf/langflow/alembic/versions/90be8e2ed91e_create_transactions_table.py +51 -0
  1814. vibe_surf/langflow/alembic/versions/93e2705fa8d6_add_column_save_path_to_flow.py +43 -0
  1815. vibe_surf/langflow/alembic/versions/a72f5cf9c2f9_add_endpoint_name_col.py +52 -0
  1816. vibe_surf/langflow/alembic/versions/b2fa308044b5_add_unique_constraints.py +101 -0
  1817. vibe_surf/langflow/alembic/versions/bc2f01c40e4a_new_fixes.py +73 -0
  1818. vibe_surf/langflow/alembic/versions/c153816fd85f_set_name_and_value_to_not_nullable.py +52 -0
  1819. vibe_surf/langflow/alembic/versions/d066bfd22890_add_message_table.py +52 -0
  1820. vibe_surf/langflow/alembic/versions/d2d475a1f7c0_add_tags_column_to_flow.py +41 -0
  1821. vibe_surf/langflow/alembic/versions/d37bc4322900_drop_single_constraint_on_files_name_.py +169 -0
  1822. vibe_surf/langflow/alembic/versions/d3dbf656a499_add_gradient_column_in_flow.py +41 -0
  1823. vibe_surf/langflow/alembic/versions/d9a6ea21edcd_rename_default_folder.py +75 -0
  1824. vibe_surf/langflow/alembic/versions/dd9e0804ebd1_add_v2_file_table.py +49 -0
  1825. vibe_surf/langflow/alembic/versions/e3162c1804e6_add_persistent_locked_state.py +43 -0
  1826. vibe_surf/langflow/alembic/versions/e3bc869fa272_fix_nullable.py +68 -0
  1827. vibe_surf/langflow/alembic/versions/e56d87f8994a_add_optins_column_to_user.py +38 -0
  1828. vibe_surf/langflow/alembic/versions/e5a65ecff2cd_nullable_in_vertex_build.py +49 -0
  1829. vibe_surf/langflow/alembic/versions/eb5866d51fd2_change_columns_to_be_nullable.py +31 -0
  1830. vibe_surf/langflow/alembic/versions/eb5e72293a8e_add_error_and_edit_flags_to_message.py +49 -0
  1831. vibe_surf/langflow/alembic/versions/f3b2d1f1002d_add_column_access_type_to_flow.py +37 -0
  1832. vibe_surf/langflow/alembic/versions/f5ee9749d1a6_user_id_can_be_null_in_flow.py +42 -0
  1833. vibe_surf/langflow/alembic/versions/fd531f8868b1_fix_credential_table.py +60 -0
  1834. vibe_surf/langflow/alembic.ini +113 -0
  1835. vibe_surf/langflow/api/__init__.py +5 -0
  1836. vibe_surf/langflow/api/build.py +557 -0
  1837. vibe_surf/langflow/api/disconnect.py +31 -0
  1838. vibe_surf/langflow/api/health_check_router.py +65 -0
  1839. vibe_surf/langflow/api/limited_background_tasks.py +29 -0
  1840. vibe_surf/langflow/api/log_router.py +103 -0
  1841. vibe_surf/langflow/api/router.py +63 -0
  1842. vibe_surf/langflow/api/schemas.py +14 -0
  1843. vibe_surf/langflow/api/utils.py +381 -0
  1844. vibe_surf/langflow/api/v1/__init__.py +41 -0
  1845. vibe_surf/langflow/api/v1/api_key.py +88 -0
  1846. vibe_surf/langflow/api/v1/auth_helpers.py +75 -0
  1847. vibe_surf/langflow/api/v1/base.py +50 -0
  1848. vibe_surf/langflow/api/v1/callback.py +136 -0
  1849. vibe_surf/langflow/api/v1/chat.py +675 -0
  1850. vibe_surf/langflow/api/v1/endpoints.py +800 -0
  1851. vibe_surf/langflow/api/v1/files.py +193 -0
  1852. vibe_surf/langflow/api/v1/flows.py +579 -0
  1853. vibe_surf/langflow/api/v1/folders.py +95 -0
  1854. vibe_surf/langflow/api/v1/knowledge_bases.py +452 -0
  1855. vibe_surf/langflow/api/v1/login.py +166 -0
  1856. vibe_surf/langflow/api/v1/mcp.py +137 -0
  1857. vibe_surf/langflow/api/v1/mcp_projects.py +1230 -0
  1858. vibe_surf/langflow/api/v1/mcp_utils.py +348 -0
  1859. vibe_surf/langflow/api/v1/monitor.py +203 -0
  1860. vibe_surf/langflow/api/v1/openai_responses.py +561 -0
  1861. vibe_surf/langflow/api/v1/projects.py +447 -0
  1862. vibe_surf/langflow/api/v1/schemas.py +488 -0
  1863. vibe_surf/langflow/api/v1/starter_projects.py +17 -0
  1864. vibe_surf/langflow/api/v1/store.py +182 -0
  1865. vibe_surf/langflow/api/v1/users.py +146 -0
  1866. vibe_surf/langflow/api/v1/validate.py +48 -0
  1867. vibe_surf/langflow/api/v1/variable.py +106 -0
  1868. vibe_surf/langflow/api/v1/voice_mode.py +1375 -0
  1869. vibe_surf/langflow/api/v2/__init__.py +7 -0
  1870. vibe_surf/langflow/api/v2/files.py +532 -0
  1871. vibe_surf/langflow/api/v2/mcp.py +330 -0
  1872. vibe_surf/langflow/base/__init__.py +0 -0
  1873. vibe_surf/langflow/base/agents/__init__.py +0 -0
  1874. vibe_surf/langflow/base/agents/agent.py +267 -0
  1875. vibe_surf/langflow/base/agents/callback.py +130 -0
  1876. vibe_surf/langflow/base/agents/context.py +109 -0
  1877. vibe_surf/langflow/base/agents/crewai/__init__.py +0 -0
  1878. vibe_surf/langflow/base/agents/crewai/crew.py +231 -0
  1879. vibe_surf/langflow/base/agents/crewai/tasks.py +12 -0
  1880. vibe_surf/langflow/base/agents/default_prompts.py +23 -0
  1881. vibe_surf/langflow/base/agents/errors.py +15 -0
  1882. vibe_surf/langflow/base/agents/events.py +346 -0
  1883. vibe_surf/langflow/base/agents/utils.py +205 -0
  1884. vibe_surf/langflow/base/astra_assistants/__init__.py +0 -0
  1885. vibe_surf/langflow/base/astra_assistants/util.py +171 -0
  1886. vibe_surf/langflow/base/chains/__init__.py +0 -0
  1887. vibe_surf/langflow/base/chains/model.py +19 -0
  1888. vibe_surf/langflow/base/composio/__init__.py +0 -0
  1889. vibe_surf/langflow/base/composio/composio_base.py +1301 -0
  1890. vibe_surf/langflow/base/compressors/__init__.py +0 -0
  1891. vibe_surf/langflow/base/compressors/model.py +60 -0
  1892. vibe_surf/langflow/base/constants.py +46 -0
  1893. vibe_surf/langflow/base/curl/__init__.py +0 -0
  1894. vibe_surf/langflow/base/curl/parse.py +188 -0
  1895. vibe_surf/langflow/base/data/__init__.py +5 -0
  1896. vibe_surf/langflow/base/data/base_file.py +698 -0
  1897. vibe_surf/langflow/base/data/docling_utils.py +280 -0
  1898. vibe_surf/langflow/base/data/utils.py +198 -0
  1899. vibe_surf/langflow/base/document_transformers/__init__.py +0 -0
  1900. vibe_surf/langflow/base/document_transformers/model.py +43 -0
  1901. vibe_surf/langflow/base/embeddings/__init__.py +0 -0
  1902. vibe_surf/langflow/base/embeddings/aiml_embeddings.py +62 -0
  1903. vibe_surf/langflow/base/embeddings/model.py +26 -0
  1904. vibe_surf/langflow/base/flow_processing/__init__.py +0 -0
  1905. vibe_surf/langflow/base/flow_processing/utils.py +86 -0
  1906. vibe_surf/langflow/base/huggingface/__init__.py +0 -0
  1907. vibe_surf/langflow/base/huggingface/model_bridge.py +133 -0
  1908. vibe_surf/langflow/base/io/__init__.py +0 -0
  1909. vibe_surf/langflow/base/io/chat.py +20 -0
  1910. vibe_surf/langflow/base/io/text.py +22 -0
  1911. vibe_surf/langflow/base/knowledge_bases/__init__.py +0 -0
  1912. vibe_surf/langflow/base/knowledge_bases/knowledge_base_utils.py +137 -0
  1913. vibe_surf/langflow/base/langchain_utilities/__init__.py +0 -0
  1914. vibe_surf/langflow/base/langchain_utilities/model.py +35 -0
  1915. vibe_surf/langflow/base/langchain_utilities/spider_constants.py +1 -0
  1916. vibe_surf/langflow/base/langwatch/__init__.py +0 -0
  1917. vibe_surf/langflow/base/langwatch/utils.py +18 -0
  1918. vibe_surf/langflow/base/mcp/__init__.py +0 -0
  1919. vibe_surf/langflow/base/mcp/constants.py +2 -0
  1920. vibe_surf/langflow/base/mcp/util.py +1544 -0
  1921. vibe_surf/langflow/base/memory/__init__.py +0 -0
  1922. vibe_surf/langflow/base/memory/memory.py +49 -0
  1923. vibe_surf/langflow/base/memory/model.py +38 -0
  1924. vibe_surf/langflow/base/models/__init__.py +3 -0
  1925. vibe_surf/langflow/base/models/aiml_constants.py +51 -0
  1926. vibe_surf/langflow/base/models/anthropic_constants.py +49 -0
  1927. vibe_surf/langflow/base/models/aws_constants.py +151 -0
  1928. vibe_surf/langflow/base/models/chat_result.py +76 -0
  1929. vibe_surf/langflow/base/models/google_generative_ai_constants.py +70 -0
  1930. vibe_surf/langflow/base/models/groq_constants.py +134 -0
  1931. vibe_surf/langflow/base/models/model.py +375 -0
  1932. vibe_surf/langflow/base/models/model_input_constants.py +299 -0
  1933. vibe_surf/langflow/base/models/model_metadata.py +41 -0
  1934. vibe_surf/langflow/base/models/model_utils.py +8 -0
  1935. vibe_surf/langflow/base/models/novita_constants.py +35 -0
  1936. vibe_surf/langflow/base/models/ollama_constants.py +49 -0
  1937. vibe_surf/langflow/base/models/openai_constants.py +121 -0
  1938. vibe_surf/langflow/base/models/sambanova_constants.py +18 -0
  1939. vibe_surf/langflow/base/processing/__init__.py +0 -0
  1940. vibe_surf/langflow/base/prompts/__init__.py +0 -0
  1941. vibe_surf/langflow/base/prompts/api_utils.py +224 -0
  1942. vibe_surf/langflow/base/prompts/utils.py +61 -0
  1943. vibe_surf/langflow/base/textsplitters/__init__.py +0 -0
  1944. vibe_surf/langflow/base/textsplitters/model.py +28 -0
  1945. vibe_surf/langflow/base/tools/__init__.py +0 -0
  1946. vibe_surf/langflow/base/tools/base.py +26 -0
  1947. vibe_surf/langflow/base/tools/component_tool.py +324 -0
  1948. vibe_surf/langflow/base/tools/constants.py +49 -0
  1949. vibe_surf/langflow/base/tools/flow_tool.py +131 -0
  1950. vibe_surf/langflow/base/tools/run_flow.py +227 -0
  1951. vibe_surf/langflow/base/vectorstores/__init__.py +0 -0
  1952. vibe_surf/langflow/base/vectorstores/model.py +193 -0
  1953. vibe_surf/langflow/base/vectorstores/utils.py +22 -0
  1954. vibe_surf/langflow/base/vectorstores/vector_store_connection_decorator.py +52 -0
  1955. vibe_surf/langflow/cli/__init__.py +0 -0
  1956. vibe_surf/langflow/cli/progress.py +233 -0
  1957. vibe_surf/langflow/components/FAISS/__init__.py +34 -0
  1958. vibe_surf/langflow/components/FAISS/faiss.py +111 -0
  1959. vibe_surf/langflow/components/Notion/__init__.py +19 -0
  1960. vibe_surf/langflow/components/Notion/add_content_to_page.py +269 -0
  1961. vibe_surf/langflow/components/Notion/create_page.py +94 -0
  1962. vibe_surf/langflow/components/Notion/list_database_properties.py +68 -0
  1963. vibe_surf/langflow/components/Notion/list_pages.py +122 -0
  1964. vibe_surf/langflow/components/Notion/list_users.py +77 -0
  1965. vibe_surf/langflow/components/Notion/page_content_viewer.py +93 -0
  1966. vibe_surf/langflow/components/Notion/search.py +111 -0
  1967. vibe_surf/langflow/components/Notion/update_page_property.py +114 -0
  1968. vibe_surf/langflow/components/__init__.py +270 -0
  1969. vibe_surf/langflow/components/_importing.py +37 -0
  1970. vibe_surf/langflow/components/agentql/__init__.py +3 -0
  1971. vibe_surf/langflow/components/agentql/agentql_api.py +151 -0
  1972. vibe_surf/langflow/components/agents/__init__.py +4 -0
  1973. vibe_surf/langflow/components/agents/agent.py +608 -0
  1974. vibe_surf/langflow/components/agents/mcp_component.py +511 -0
  1975. vibe_surf/langflow/components/aiml/__init__.py +37 -0
  1976. vibe_surf/langflow/components/aiml/aiml.py +115 -0
  1977. vibe_surf/langflow/components/aiml/aiml_embeddings.py +37 -0
  1978. vibe_surf/langflow/components/amazon/__init__.py +36 -0
  1979. vibe_surf/langflow/components/amazon/amazon_bedrock_embedding.py +109 -0
  1980. vibe_surf/langflow/components/amazon/amazon_bedrock_model.py +124 -0
  1981. vibe_surf/langflow/components/amazon/s3_bucket_uploader.py +211 -0
  1982. vibe_surf/langflow/components/anthropic/__init__.py +34 -0
  1983. vibe_surf/langflow/components/anthropic/anthropic.py +187 -0
  1984. vibe_surf/langflow/components/apify/__init__.py +5 -0
  1985. vibe_surf/langflow/components/apify/apify_actor.py +325 -0
  1986. vibe_surf/langflow/components/arxiv/__init__.py +3 -0
  1987. vibe_surf/langflow/components/arxiv/arxiv.py +163 -0
  1988. vibe_surf/langflow/components/assemblyai/__init__.py +46 -0
  1989. vibe_surf/langflow/components/assemblyai/assemblyai_get_subtitles.py +83 -0
  1990. vibe_surf/langflow/components/assemblyai/assemblyai_lemur.py +183 -0
  1991. vibe_surf/langflow/components/assemblyai/assemblyai_list_transcripts.py +95 -0
  1992. vibe_surf/langflow/components/assemblyai/assemblyai_poll_transcript.py +72 -0
  1993. vibe_surf/langflow/components/assemblyai/assemblyai_start_transcript.py +188 -0
  1994. vibe_surf/langflow/components/azure/__init__.py +37 -0
  1995. vibe_surf/langflow/components/azure/azure_openai.py +95 -0
  1996. vibe_surf/langflow/components/azure/azure_openai_embeddings.py +83 -0
  1997. vibe_surf/langflow/components/baidu/__init__.py +32 -0
  1998. vibe_surf/langflow/components/baidu/baidu_qianfan_chat.py +113 -0
  1999. vibe_surf/langflow/components/bing/__init__.py +3 -0
  2000. vibe_surf/langflow/components/bing/bing_search_api.py +61 -0
  2001. vibe_surf/langflow/components/cassandra/__init__.py +40 -0
  2002. vibe_surf/langflow/components/cassandra/cassandra.py +264 -0
  2003. vibe_surf/langflow/components/cassandra/cassandra_chat.py +92 -0
  2004. vibe_surf/langflow/components/cassandra/cassandra_graph.py +238 -0
  2005. vibe_surf/langflow/components/chains/__init__.py +0 -0
  2006. vibe_surf/langflow/components/chroma/__init__.py +34 -0
  2007. vibe_surf/langflow/components/chroma/chroma.py +169 -0
  2008. vibe_surf/langflow/components/cleanlab/__init__.py +40 -0
  2009. vibe_surf/langflow/components/cleanlab/cleanlab_evaluator.py +157 -0
  2010. vibe_surf/langflow/components/cleanlab/cleanlab_rag_evaluator.py +254 -0
  2011. vibe_surf/langflow/components/cleanlab/cleanlab_remediator.py +131 -0
  2012. vibe_surf/langflow/components/clickhouse/__init__.py +34 -0
  2013. vibe_surf/langflow/components/clickhouse/clickhouse.py +135 -0
  2014. vibe_surf/langflow/components/cloudflare/__init__.py +32 -0
  2015. vibe_surf/langflow/components/cloudflare/cloudflare.py +81 -0
  2016. vibe_surf/langflow/components/cohere/__init__.py +40 -0
  2017. vibe_surf/langflow/components/cohere/cohere_embeddings.py +81 -0
  2018. vibe_surf/langflow/components/cohere/cohere_models.py +46 -0
  2019. vibe_surf/langflow/components/cohere/cohere_rerank.py +51 -0
  2020. vibe_surf/langflow/components/composio/__init__.py +73 -0
  2021. vibe_surf/langflow/components/composio/composio_api.py +279 -0
  2022. vibe_surf/langflow/components/composio/dropbox_compnent.py +11 -0
  2023. vibe_surf/langflow/components/composio/github_composio.py +11 -0
  2024. vibe_surf/langflow/components/composio/gmail_composio.py +38 -0
  2025. vibe_surf/langflow/components/composio/googlecalendar_composio.py +11 -0
  2026. vibe_surf/langflow/components/composio/googlemeet_composio.py +11 -0
  2027. vibe_surf/langflow/components/composio/googletasks_composio.py +8 -0
  2028. vibe_surf/langflow/components/composio/linear_composio.py +11 -0
  2029. vibe_surf/langflow/components/composio/outlook_composio.py +11 -0
  2030. vibe_surf/langflow/components/composio/reddit_composio.py +11 -0
  2031. vibe_surf/langflow/components/composio/slack_composio.py +11 -0
  2032. vibe_surf/langflow/components/composio/slackbot_composio.py +11 -0
  2033. vibe_surf/langflow/components/composio/supabase_composio.py +11 -0
  2034. vibe_surf/langflow/components/composio/todoist_composio.py +11 -0
  2035. vibe_surf/langflow/components/composio/youtube_composio.py +11 -0
  2036. vibe_surf/langflow/components/confluence/__init__.py +3 -0
  2037. vibe_surf/langflow/components/confluence/confluence.py +84 -0
  2038. vibe_surf/langflow/components/couchbase/__init__.py +34 -0
  2039. vibe_surf/langflow/components/couchbase/couchbase.py +102 -0
  2040. vibe_surf/langflow/components/crewai/__init__.py +49 -0
  2041. vibe_surf/langflow/components/crewai/crewai.py +108 -0
  2042. vibe_surf/langflow/components/crewai/hierarchical_crew.py +47 -0
  2043. vibe_surf/langflow/components/crewai/hierarchical_task.py +45 -0
  2044. vibe_surf/langflow/components/crewai/sequential_crew.py +53 -0
  2045. vibe_surf/langflow/components/crewai/sequential_task.py +74 -0
  2046. vibe_surf/langflow/components/crewai/sequential_task_agent.py +144 -0
  2047. vibe_surf/langflow/components/custom_component/__init__.py +34 -0
  2048. vibe_surf/langflow/components/custom_component/custom_component.py +31 -0
  2049. vibe_surf/langflow/components/data/__init__.py +25 -0
  2050. vibe_surf/langflow/components/data/api_request.py +555 -0
  2051. vibe_surf/langflow/components/data/csv_to_data.py +96 -0
  2052. vibe_surf/langflow/components/data/directory.py +113 -0
  2053. vibe_surf/langflow/components/data/file.py +632 -0
  2054. vibe_surf/langflow/components/data/json_to_data.py +99 -0
  2055. vibe_surf/langflow/components/data/news_search.py +164 -0
  2056. vibe_surf/langflow/components/data/rss.py +69 -0
  2057. vibe_surf/langflow/components/data/sql_executor.py +99 -0
  2058. vibe_surf/langflow/components/data/url.py +299 -0
  2059. vibe_surf/langflow/components/data/web_search.py +112 -0
  2060. vibe_surf/langflow/components/data/webhook.py +56 -0
  2061. vibe_surf/langflow/components/datastax/__init__.py +70 -0
  2062. vibe_surf/langflow/components/datastax/astra_assistant_manager.py +306 -0
  2063. vibe_surf/langflow/components/datastax/astra_db.py +68 -0
  2064. vibe_surf/langflow/components/datastax/astra_vectorize.py +122 -0
  2065. vibe_surf/langflow/components/datastax/astradb_cql.py +314 -0
  2066. vibe_surf/langflow/components/datastax/astradb_graph.py +326 -0
  2067. vibe_surf/langflow/components/datastax/astradb_tool.py +418 -0
  2068. vibe_surf/langflow/components/datastax/astradb_vectorstore.py +1292 -0
  2069. vibe_surf/langflow/components/datastax/create_assistant.py +58 -0
  2070. vibe_surf/langflow/components/datastax/create_thread.py +32 -0
  2071. vibe_surf/langflow/components/datastax/dotenv.py +35 -0
  2072. vibe_surf/langflow/components/datastax/get_assistant.py +37 -0
  2073. vibe_surf/langflow/components/datastax/getenvvar.py +30 -0
  2074. vibe_surf/langflow/components/datastax/graph_rag.py +141 -0
  2075. vibe_surf/langflow/components/datastax/hcd.py +314 -0
  2076. vibe_surf/langflow/components/datastax/list_assistants.py +25 -0
  2077. vibe_surf/langflow/components/datastax/run.py +89 -0
  2078. vibe_surf/langflow/components/deactivated/__init__.py +19 -0
  2079. vibe_surf/langflow/components/deactivated/amazon_kendra.py +66 -0
  2080. vibe_surf/langflow/components/deactivated/chat_litellm_model.py +158 -0
  2081. vibe_surf/langflow/components/deactivated/code_block_extractor.py +26 -0
  2082. vibe_surf/langflow/components/deactivated/documents_to_data.py +22 -0
  2083. vibe_surf/langflow/components/deactivated/embed.py +16 -0
  2084. vibe_surf/langflow/components/deactivated/extract_key_from_data.py +46 -0
  2085. vibe_surf/langflow/components/deactivated/json_document_builder.py +59 -0
  2086. vibe_surf/langflow/components/deactivated/list_flows.py +20 -0
  2087. vibe_surf/langflow/components/deactivated/merge_data.py +93 -0
  2088. vibe_surf/langflow/components/deactivated/message.py +37 -0
  2089. vibe_surf/langflow/components/deactivated/metal.py +54 -0
  2090. vibe_surf/langflow/components/deactivated/multi_query.py +59 -0
  2091. vibe_surf/langflow/components/deactivated/retriever.py +43 -0
  2092. vibe_surf/langflow/components/deactivated/selective_passthrough.py +77 -0
  2093. vibe_surf/langflow/components/deactivated/should_run_next.py +40 -0
  2094. vibe_surf/langflow/components/deactivated/split_text.py +63 -0
  2095. vibe_surf/langflow/components/deactivated/store_message.py +24 -0
  2096. vibe_surf/langflow/components/deactivated/sub_flow.py +124 -0
  2097. vibe_surf/langflow/components/deactivated/vectara_self_query.py +76 -0
  2098. vibe_surf/langflow/components/deactivated/vector_store.py +24 -0
  2099. vibe_surf/langflow/components/deepseek/__init__.py +34 -0
  2100. vibe_surf/langflow/components/deepseek/deepseek.py +136 -0
  2101. vibe_surf/langflow/components/docling/__init__.py +43 -0
  2102. vibe_surf/langflow/components/docling/chunk_docling_document.py +186 -0
  2103. vibe_surf/langflow/components/docling/docling_inline.py +249 -0
  2104. vibe_surf/langflow/components/docling/docling_remote.py +192 -0
  2105. vibe_surf/langflow/components/docling/export_docling_document.py +117 -0
  2106. vibe_surf/langflow/components/documentloaders/__init__.py +0 -0
  2107. vibe_surf/langflow/components/duckduckgo/__init__.py +3 -0
  2108. vibe_surf/langflow/components/duckduckgo/duck_duck_go_search_run.py +92 -0
  2109. vibe_surf/langflow/components/elastic/__init__.py +37 -0
  2110. vibe_surf/langflow/components/elastic/elasticsearch.py +267 -0
  2111. vibe_surf/langflow/components/elastic/opensearch.py +243 -0
  2112. vibe_surf/langflow/components/embeddings/__init__.py +37 -0
  2113. vibe_surf/langflow/components/embeddings/similarity.py +77 -0
  2114. vibe_surf/langflow/components/embeddings/text_embedder.py +65 -0
  2115. vibe_surf/langflow/components/exa/__init__.py +3 -0
  2116. vibe_surf/langflow/components/exa/exa_search.py +68 -0
  2117. vibe_surf/langflow/components/firecrawl/__init__.py +43 -0
  2118. vibe_surf/langflow/components/firecrawl/firecrawl_crawl_api.py +88 -0
  2119. vibe_surf/langflow/components/firecrawl/firecrawl_extract_api.py +136 -0
  2120. vibe_surf/langflow/components/firecrawl/firecrawl_map_api.py +89 -0
  2121. vibe_surf/langflow/components/firecrawl/firecrawl_scrape_api.py +73 -0
  2122. vibe_surf/langflow/components/git/__init__.py +4 -0
  2123. vibe_surf/langflow/components/git/git.py +262 -0
  2124. vibe_surf/langflow/components/git/gitextractor.py +196 -0
  2125. vibe_surf/langflow/components/glean/__init__.py +3 -0
  2126. vibe_surf/langflow/components/glean/glean_search_api.py +173 -0
  2127. vibe_surf/langflow/components/google/__init__.py +17 -0
  2128. vibe_surf/langflow/components/google/gmail.py +193 -0
  2129. vibe_surf/langflow/components/google/google_bq_sql_executor.py +157 -0
  2130. vibe_surf/langflow/components/google/google_drive.py +92 -0
  2131. vibe_surf/langflow/components/google/google_drive_search.py +152 -0
  2132. vibe_surf/langflow/components/google/google_generative_ai.py +147 -0
  2133. vibe_surf/langflow/components/google/google_generative_ai_embeddings.py +141 -0
  2134. vibe_surf/langflow/components/google/google_oauth_token.py +89 -0
  2135. vibe_surf/langflow/components/google/google_search_api_core.py +68 -0
  2136. vibe_surf/langflow/components/groq/__init__.py +34 -0
  2137. vibe_surf/langflow/components/groq/groq.py +140 -0
  2138. vibe_surf/langflow/components/helpers/__init__.py +52 -0
  2139. vibe_surf/langflow/components/helpers/calculator_core.py +89 -0
  2140. vibe_surf/langflow/components/helpers/create_list.py +40 -0
  2141. vibe_surf/langflow/components/helpers/current_date.py +42 -0
  2142. vibe_surf/langflow/components/helpers/id_generator.py +42 -0
  2143. vibe_surf/langflow/components/helpers/memory.py +253 -0
  2144. vibe_surf/langflow/components/helpers/output_parser.py +46 -0
  2145. vibe_surf/langflow/components/helpers/store_message.py +91 -0
  2146. vibe_surf/langflow/components/homeassistant/__init__.py +7 -0
  2147. vibe_surf/langflow/components/homeassistant/home_assistant_control.py +152 -0
  2148. vibe_surf/langflow/components/homeassistant/list_home_assistant_states.py +137 -0
  2149. vibe_surf/langflow/components/huggingface/__init__.py +37 -0
  2150. vibe_surf/langflow/components/huggingface/huggingface.py +199 -0
  2151. vibe_surf/langflow/components/huggingface/huggingface_inference_api.py +106 -0
  2152. vibe_surf/langflow/components/ibm/__init__.py +34 -0
  2153. vibe_surf/langflow/components/ibm/watsonx.py +203 -0
  2154. vibe_surf/langflow/components/ibm/watsonx_embeddings.py +135 -0
  2155. vibe_surf/langflow/components/icosacomputing/__init__.py +5 -0
  2156. vibe_surf/langflow/components/icosacomputing/combinatorial_reasoner.py +84 -0
  2157. vibe_surf/langflow/components/input_output/__init__.py +38 -0
  2158. vibe_surf/langflow/components/input_output/chat.py +99 -0
  2159. vibe_surf/langflow/components/input_output/chat_output.py +169 -0
  2160. vibe_surf/langflow/components/input_output/text.py +27 -0
  2161. vibe_surf/langflow/components/input_output/text_output.py +29 -0
  2162. vibe_surf/langflow/components/jigsawstack/__init__.py +23 -0
  2163. vibe_surf/langflow/components/jigsawstack/ai_scrape.py +126 -0
  2164. vibe_surf/langflow/components/jigsawstack/ai_web_search.py +136 -0
  2165. vibe_surf/langflow/components/jigsawstack/file_read.py +115 -0
  2166. vibe_surf/langflow/components/jigsawstack/file_upload.py +94 -0
  2167. vibe_surf/langflow/components/jigsawstack/image_generation.py +205 -0
  2168. vibe_surf/langflow/components/jigsawstack/nsfw.py +60 -0
  2169. vibe_surf/langflow/components/jigsawstack/object_detection.py +124 -0
  2170. vibe_surf/langflow/components/jigsawstack/sentiment.py +112 -0
  2171. vibe_surf/langflow/components/jigsawstack/text_to_sql.py +90 -0
  2172. vibe_surf/langflow/components/jigsawstack/text_translate.py +77 -0
  2173. vibe_surf/langflow/components/jigsawstack/vocr.py +107 -0
  2174. vibe_surf/langflow/components/knowledge_bases/__init__.py +34 -0
  2175. vibe_surf/langflow/components/knowledge_bases/ingestion.py +697 -0
  2176. vibe_surf/langflow/components/knowledge_bases/retrieval.py +264 -0
  2177. vibe_surf/langflow/components/langchain_utilities/__init__.py +109 -0
  2178. vibe_surf/langflow/components/langchain_utilities/character.py +53 -0
  2179. vibe_surf/langflow/components/langchain_utilities/conversation.py +52 -0
  2180. vibe_surf/langflow/components/langchain_utilities/csv_agent.py +107 -0
  2181. vibe_surf/langflow/components/langchain_utilities/fake_embeddings.py +26 -0
  2182. vibe_surf/langflow/components/langchain_utilities/html_link_extractor.py +35 -0
  2183. vibe_surf/langflow/components/langchain_utilities/json_agent.py +45 -0
  2184. vibe_surf/langflow/components/langchain_utilities/langchain_hub.py +126 -0
  2185. vibe_surf/langflow/components/langchain_utilities/language_recursive.py +49 -0
  2186. vibe_surf/langflow/components/langchain_utilities/language_semantic.py +138 -0
  2187. vibe_surf/langflow/components/langchain_utilities/llm_checker.py +39 -0
  2188. vibe_surf/langflow/components/langchain_utilities/llm_math.py +42 -0
  2189. vibe_surf/langflow/components/langchain_utilities/natural_language.py +61 -0
  2190. vibe_surf/langflow/components/langchain_utilities/openai_tools.py +53 -0
  2191. vibe_surf/langflow/components/langchain_utilities/openapi.py +48 -0
  2192. vibe_surf/langflow/components/langchain_utilities/recursive_character.py +60 -0
  2193. vibe_surf/langflow/components/langchain_utilities/retrieval_qa.py +83 -0
  2194. vibe_surf/langflow/components/langchain_utilities/runnable_executor.py +137 -0
  2195. vibe_surf/langflow/components/langchain_utilities/self_query.py +80 -0
  2196. vibe_surf/langflow/components/langchain_utilities/spider.py +142 -0
  2197. vibe_surf/langflow/components/langchain_utilities/sql.py +40 -0
  2198. vibe_surf/langflow/components/langchain_utilities/sql_database.py +35 -0
  2199. vibe_surf/langflow/components/langchain_utilities/sql_generator.py +78 -0
  2200. vibe_surf/langflow/components/langchain_utilities/tool_calling.py +59 -0
  2201. vibe_surf/langflow/components/langchain_utilities/vector_store_info.py +49 -0
  2202. vibe_surf/langflow/components/langchain_utilities/vector_store_router.py +33 -0
  2203. vibe_surf/langflow/components/langchain_utilities/xml_agent.py +71 -0
  2204. vibe_surf/langflow/components/langwatch/__init__.py +3 -0
  2205. vibe_surf/langflow/components/langwatch/langwatch.py +278 -0
  2206. vibe_surf/langflow/components/link_extractors/__init__.py +0 -0
  2207. vibe_surf/langflow/components/lmstudio/__init__.py +34 -0
  2208. vibe_surf/langflow/components/lmstudio/lmstudioembeddings.py +89 -0
  2209. vibe_surf/langflow/components/lmstudio/lmstudiomodel.py +129 -0
  2210. vibe_surf/langflow/components/logic/__init__.py +52 -0
  2211. vibe_surf/langflow/components/logic/conditional_router.py +208 -0
  2212. vibe_surf/langflow/components/logic/data_conditional_router.py +126 -0
  2213. vibe_surf/langflow/components/logic/flow_tool.py +111 -0
  2214. vibe_surf/langflow/components/logic/listen.py +29 -0
  2215. vibe_surf/langflow/components/logic/loop.py +125 -0
  2216. vibe_surf/langflow/components/logic/notify.py +88 -0
  2217. vibe_surf/langflow/components/logic/pass_message.py +36 -0
  2218. vibe_surf/langflow/components/logic/run_flow.py +71 -0
  2219. vibe_surf/langflow/components/logic/sub_flow.py +115 -0
  2220. vibe_surf/langflow/components/maritalk/__init__.py +32 -0
  2221. vibe_surf/langflow/components/maritalk/maritalk.py +52 -0
  2222. vibe_surf/langflow/components/mem0/__init__.py +3 -0
  2223. vibe_surf/langflow/components/mem0/mem0_chat_memory.py +136 -0
  2224. vibe_surf/langflow/components/milvus/__init__.py +34 -0
  2225. vibe_surf/langflow/components/milvus/milvus.py +115 -0
  2226. vibe_surf/langflow/components/mistral/__init__.py +37 -0
  2227. vibe_surf/langflow/components/mistral/mistral.py +114 -0
  2228. vibe_surf/langflow/components/mistral/mistral_embeddings.py +58 -0
  2229. vibe_surf/langflow/components/models/__init__.py +34 -0
  2230. vibe_surf/langflow/components/models/embedding_model.py +114 -0
  2231. vibe_surf/langflow/components/models/language_model.py +144 -0
  2232. vibe_surf/langflow/components/mongodb/__init__.py +34 -0
  2233. vibe_surf/langflow/components/mongodb/mongodb_atlas.py +213 -0
  2234. vibe_surf/langflow/components/needle/__init__.py +3 -0
  2235. vibe_surf/langflow/components/needle/needle.py +104 -0
  2236. vibe_surf/langflow/components/notdiamond/__init__.py +36 -0
  2237. vibe_surf/langflow/components/notdiamond/notdiamond.py +228 -0
  2238. vibe_surf/langflow/components/novita/__init__.py +32 -0
  2239. vibe_surf/langflow/components/novita/novita.py +130 -0
  2240. vibe_surf/langflow/components/nvidia/__init__.py +57 -0
  2241. vibe_surf/langflow/components/nvidia/nvidia.py +151 -0
  2242. vibe_surf/langflow/components/nvidia/nvidia_embedding.py +77 -0
  2243. vibe_surf/langflow/components/nvidia/nvidia_ingest.py +317 -0
  2244. vibe_surf/langflow/components/nvidia/nvidia_rerank.py +63 -0
  2245. vibe_surf/langflow/components/nvidia/system_assist.py +65 -0
  2246. vibe_surf/langflow/components/olivya/__init__.py +3 -0
  2247. vibe_surf/langflow/components/olivya/olivya.py +116 -0
  2248. vibe_surf/langflow/components/ollama/__init__.py +37 -0
  2249. vibe_surf/langflow/components/ollama/ollama.py +330 -0
  2250. vibe_surf/langflow/components/ollama/ollama_embeddings.py +106 -0
  2251. vibe_surf/langflow/components/openai/__init__.py +37 -0
  2252. vibe_surf/langflow/components/openai/openai.py +100 -0
  2253. vibe_surf/langflow/components/openai/openai_chat_model.py +158 -0
  2254. vibe_surf/langflow/components/openrouter/__init__.py +32 -0
  2255. vibe_surf/langflow/components/openrouter/openrouter.py +202 -0
  2256. vibe_surf/langflow/components/output_parsers/__init__.py +0 -0
  2257. vibe_surf/langflow/components/perplexity/__init__.py +34 -0
  2258. vibe_surf/langflow/components/perplexity/perplexity.py +75 -0
  2259. vibe_surf/langflow/components/pgvector/__init__.py +34 -0
  2260. vibe_surf/langflow/components/pgvector/pgvector.py +72 -0
  2261. vibe_surf/langflow/components/pinecone/__init__.py +34 -0
  2262. vibe_surf/langflow/components/pinecone/pinecone.py +134 -0
  2263. vibe_surf/langflow/components/processing/__init__.py +117 -0
  2264. vibe_surf/langflow/components/processing/alter_metadata.py +109 -0
  2265. vibe_surf/langflow/components/processing/batch_run.py +205 -0
  2266. vibe_surf/langflow/components/processing/combine_text.py +40 -0
  2267. vibe_surf/langflow/components/processing/converter.py +150 -0
  2268. vibe_surf/langflow/components/processing/create_data.py +111 -0
  2269. vibe_surf/langflow/components/processing/data_operations.py +438 -0
  2270. vibe_surf/langflow/components/processing/data_to_dataframe.py +71 -0
  2271. vibe_surf/langflow/components/processing/dataframe_operations.py +310 -0
  2272. vibe_surf/langflow/components/processing/extract_key.py +54 -0
  2273. vibe_surf/langflow/components/processing/filter_data.py +43 -0
  2274. vibe_surf/langflow/components/processing/filter_data_values.py +89 -0
  2275. vibe_surf/langflow/components/processing/json_cleaner.py +104 -0
  2276. vibe_surf/langflow/components/processing/lambda_filter.py +154 -0
  2277. vibe_surf/langflow/components/processing/llm_router.py +499 -0
  2278. vibe_surf/langflow/components/processing/merge_data.py +91 -0
  2279. vibe_surf/langflow/components/processing/message_to_data.py +37 -0
  2280. vibe_surf/langflow/components/processing/parse_data.py +71 -0
  2281. vibe_surf/langflow/components/processing/parse_dataframe.py +69 -0
  2282. vibe_surf/langflow/components/processing/parse_json_data.py +91 -0
  2283. vibe_surf/langflow/components/processing/parser.py +143 -0
  2284. vibe_surf/langflow/components/processing/prompt.py +67 -0
  2285. vibe_surf/langflow/components/processing/python_repl_core.py +98 -0
  2286. vibe_surf/langflow/components/processing/regex.py +83 -0
  2287. vibe_surf/langflow/components/processing/save_file.py +208 -0
  2288. vibe_surf/langflow/components/processing/select_data.py +49 -0
  2289. vibe_surf/langflow/components/processing/split_text.py +141 -0
  2290. vibe_surf/langflow/components/processing/structured_output.py +206 -0
  2291. vibe_surf/langflow/components/processing/update_data.py +161 -0
  2292. vibe_surf/langflow/components/qdrant/__init__.py +34 -0
  2293. vibe_surf/langflow/components/qdrant/qdrant.py +109 -0
  2294. vibe_surf/langflow/components/redis/__init__.py +37 -0
  2295. vibe_surf/langflow/components/redis/redis.py +89 -0
  2296. vibe_surf/langflow/components/redis/redis_chat.py +43 -0
  2297. vibe_surf/langflow/components/sambanova/__init__.py +32 -0
  2298. vibe_surf/langflow/components/sambanova/sambanova.py +84 -0
  2299. vibe_surf/langflow/components/scrapegraph/__init__.py +40 -0
  2300. vibe_surf/langflow/components/scrapegraph/scrapegraph_markdownify_api.py +64 -0
  2301. vibe_surf/langflow/components/scrapegraph/scrapegraph_search_api.py +64 -0
  2302. vibe_surf/langflow/components/scrapegraph/scrapegraph_smart_scraper_api.py +71 -0
  2303. vibe_surf/langflow/components/searchapi/__init__.py +36 -0
  2304. vibe_surf/langflow/components/searchapi/search.py +79 -0
  2305. vibe_surf/langflow/components/serpapi/__init__.py +3 -0
  2306. vibe_surf/langflow/components/serpapi/serp.py +115 -0
  2307. vibe_surf/langflow/components/serper/__init__.py +3 -0
  2308. vibe_surf/langflow/components/serper/google_serper_api_core.py +74 -0
  2309. vibe_surf/langflow/components/supabase/__init__.py +37 -0
  2310. vibe_surf/langflow/components/supabase/supabase.py +76 -0
  2311. vibe_surf/langflow/components/tavily/__init__.py +4 -0
  2312. vibe_surf/langflow/components/tavily/tavily_extract.py +117 -0
  2313. vibe_surf/langflow/components/tavily/tavily_search.py +212 -0
  2314. vibe_surf/langflow/components/textsplitters/__init__.py +0 -0
  2315. vibe_surf/langflow/components/toolkits/__init__.py +0 -0
  2316. vibe_surf/langflow/components/tools/__init__.py +66 -0
  2317. vibe_surf/langflow/components/tools/calculator.py +104 -0
  2318. vibe_surf/langflow/components/tools/python_code_structured_tool.py +328 -0
  2319. vibe_surf/langflow/components/tools/python_repl.py +98 -0
  2320. vibe_surf/langflow/components/tools/search_api.py +88 -0
  2321. vibe_surf/langflow/components/tools/searxng.py +145 -0
  2322. vibe_surf/langflow/components/tools/serp_api.py +120 -0
  2323. vibe_surf/langflow/components/tools/tavily_search_tool.py +345 -0
  2324. vibe_surf/langflow/components/tools/wikidata_api.py +103 -0
  2325. vibe_surf/langflow/components/tools/wikipedia_api.py +50 -0
  2326. vibe_surf/langflow/components/tools/yahoo_finance.py +125 -0
  2327. vibe_surf/langflow/components/twelvelabs/__init__.py +52 -0
  2328. vibe_surf/langflow/components/twelvelabs/convert_astra_results.py +84 -0
  2329. vibe_surf/langflow/components/twelvelabs/pegasus_index.py +311 -0
  2330. vibe_surf/langflow/components/twelvelabs/split_video.py +291 -0
  2331. vibe_surf/langflow/components/twelvelabs/text_embeddings.py +57 -0
  2332. vibe_surf/langflow/components/twelvelabs/twelvelabs_pegasus.py +408 -0
  2333. vibe_surf/langflow/components/twelvelabs/video_embeddings.py +100 -0
  2334. vibe_surf/langflow/components/twelvelabs/video_file.py +179 -0
  2335. vibe_surf/langflow/components/unstructured/__init__.py +3 -0
  2336. vibe_surf/langflow/components/unstructured/unstructured.py +121 -0
  2337. vibe_surf/langflow/components/upstash/__init__.py +34 -0
  2338. vibe_surf/langflow/components/upstash/upstash.py +124 -0
  2339. vibe_surf/langflow/components/vectara/__init__.py +37 -0
  2340. vibe_surf/langflow/components/vectara/vectara.py +97 -0
  2341. vibe_surf/langflow/components/vectara/vectara_rag.py +164 -0
  2342. vibe_surf/langflow/components/vectorstores/__init__.py +34 -0
  2343. vibe_surf/langflow/components/vectorstores/local_db.py +262 -0
  2344. vibe_surf/langflow/components/vertexai/__init__.py +37 -0
  2345. vibe_surf/langflow/components/vertexai/vertexai.py +71 -0
  2346. vibe_surf/langflow/components/vertexai/vertexai_embeddings.py +67 -0
  2347. vibe_surf/langflow/components/weaviate/__init__.py +34 -0
  2348. vibe_surf/langflow/components/weaviate/weaviate.py +89 -0
  2349. vibe_surf/langflow/components/wikipedia/__init__.py +4 -0
  2350. vibe_surf/langflow/components/wikipedia/wikidata.py +86 -0
  2351. vibe_surf/langflow/components/wikipedia/wikipedia.py +53 -0
  2352. vibe_surf/langflow/components/wolframalpha/__init__.py +3 -0
  2353. vibe_surf/langflow/components/wolframalpha/wolfram_alpha_api.py +54 -0
  2354. vibe_surf/langflow/components/xai/__init__.py +32 -0
  2355. vibe_surf/langflow/components/xai/xai.py +167 -0
  2356. vibe_surf/langflow/components/youtube/__init__.py +52 -0
  2357. vibe_surf/langflow/components/youtube/channel.py +227 -0
  2358. vibe_surf/langflow/components/youtube/comments.py +231 -0
  2359. vibe_surf/langflow/components/youtube/playlist.py +33 -0
  2360. vibe_surf/langflow/components/youtube/search.py +120 -0
  2361. vibe_surf/langflow/components/youtube/trending.py +285 -0
  2362. vibe_surf/langflow/components/youtube/video_details.py +263 -0
  2363. vibe_surf/langflow/components/youtube/youtube_transcripts.py +118 -0
  2364. vibe_surf/langflow/components/zep/__init__.py +3 -0
  2365. vibe_surf/langflow/components/zep/zep.py +45 -0
  2366. vibe_surf/langflow/core/__init__.py +0 -0
  2367. vibe_surf/langflow/core/celery_app.py +11 -0
  2368. vibe_surf/langflow/core/celeryconfig.py +18 -0
  2369. vibe_surf/langflow/custom/__init__.py +4 -0
  2370. vibe_surf/langflow/custom/attributes.py +87 -0
  2371. vibe_surf/langflow/custom/code_parser/__init__.py +3 -0
  2372. vibe_surf/langflow/custom/code_parser/code_parser.py +361 -0
  2373. vibe_surf/langflow/custom/custom_component/__init__.py +0 -0
  2374. vibe_surf/langflow/custom/custom_component/base_component.py +118 -0
  2375. vibe_surf/langflow/custom/custom_component/component.py +1742 -0
  2376. vibe_surf/langflow/custom/custom_component/component_with_cache.py +8 -0
  2377. vibe_surf/langflow/custom/custom_component/custom_component.py +552 -0
  2378. vibe_surf/langflow/custom/dependency_analyzer.py +165 -0
  2379. vibe_surf/langflow/custom/directory_reader/__init__.py +3 -0
  2380. vibe_surf/langflow/custom/directory_reader/directory_reader.py +359 -0
  2381. vibe_surf/langflow/custom/directory_reader/utils.py +171 -0
  2382. vibe_surf/langflow/custom/eval.py +12 -0
  2383. vibe_surf/langflow/custom/schema.py +32 -0
  2384. vibe_surf/langflow/custom/tree_visitor.py +21 -0
  2385. vibe_surf/langflow/custom/utils.py +868 -0
  2386. vibe_surf/langflow/events/__init__.py +0 -0
  2387. vibe_surf/langflow/events/event_manager.py +108 -0
  2388. vibe_surf/langflow/exceptions/__init__.py +0 -0
  2389. vibe_surf/langflow/exceptions/api.py +34 -0
  2390. vibe_surf/langflow/exceptions/component.py +17 -0
  2391. vibe_surf/langflow/exceptions/serialization.py +56 -0
  2392. vibe_surf/langflow/field_typing/__init__.py +91 -0
  2393. vibe_surf/langflow/field_typing/constants.py +137 -0
  2394. vibe_surf/langflow/field_typing/range_spec.py +33 -0
  2395. vibe_surf/langflow/graph/__init__.py +6 -0
  2396. vibe_surf/langflow/graph/edge/__init__.py +0 -0
  2397. vibe_surf/langflow/graph/edge/base.py +277 -0
  2398. vibe_surf/langflow/graph/edge/schema.py +119 -0
  2399. vibe_surf/langflow/graph/edge/utils.py +0 -0
  2400. vibe_surf/langflow/graph/graph/__init__.py +0 -0
  2401. vibe_surf/langflow/graph/graph/ascii.py +202 -0
  2402. vibe_surf/langflow/graph/graph/base.py +2242 -0
  2403. vibe_surf/langflow/graph/graph/constants.py +58 -0
  2404. vibe_surf/langflow/graph/graph/runnable_vertices_manager.py +133 -0
  2405. vibe_surf/langflow/graph/graph/schema.py +53 -0
  2406. vibe_surf/langflow/graph/graph/state_model.py +66 -0
  2407. vibe_surf/langflow/graph/graph/utils.py +1024 -0
  2408. vibe_surf/langflow/graph/schema.py +75 -0
  2409. vibe_surf/langflow/graph/state/__init__.py +0 -0
  2410. vibe_surf/langflow/graph/state/model.py +237 -0
  2411. vibe_surf/langflow/graph/utils.py +229 -0
  2412. vibe_surf/langflow/graph/vertex/__init__.py +0 -0
  2413. vibe_surf/langflow/graph/vertex/base.py +811 -0
  2414. vibe_surf/langflow/graph/vertex/constants.py +0 -0
  2415. vibe_surf/langflow/graph/vertex/exceptions.py +4 -0
  2416. vibe_surf/langflow/graph/vertex/param_handler.py +255 -0
  2417. vibe_surf/langflow/graph/vertex/schema.py +26 -0
  2418. vibe_surf/langflow/graph/vertex/utils.py +19 -0
  2419. vibe_surf/langflow/graph/vertex/vertex_types.py +489 -0
  2420. vibe_surf/langflow/helpers/__init__.py +3 -0
  2421. vibe_surf/langflow/helpers/base_model.py +71 -0
  2422. vibe_surf/langflow/helpers/custom.py +13 -0
  2423. vibe_surf/langflow/helpers/data.py +206 -0
  2424. vibe_surf/langflow/helpers/flow.py +359 -0
  2425. vibe_surf/langflow/helpers/folders.py +26 -0
  2426. vibe_surf/langflow/helpers/user.py +27 -0
  2427. vibe_surf/langflow/initial_setup/__init__.py +0 -0
  2428. vibe_surf/langflow/initial_setup/constants.py +2 -0
  2429. vibe_surf/langflow/initial_setup/load.py +21 -0
  2430. vibe_surf/langflow/initial_setup/profile_pictures/People/People Avatar-01-01.svg +102 -0
  2431. vibe_surf/langflow/initial_setup/profile_pictures/People/People Avatar-01-02.svg +135 -0
  2432. vibe_surf/langflow/initial_setup/profile_pictures/People/People Avatar-01-03.svg +126 -0
  2433. vibe_surf/langflow/initial_setup/profile_pictures/People/People Avatar-01-04.svg +132 -0
  2434. vibe_surf/langflow/initial_setup/profile_pictures/People/People Avatar-01-05.svg +151 -0
  2435. vibe_surf/langflow/initial_setup/profile_pictures/People/People Avatar-01-06.svg +132 -0
  2436. vibe_surf/langflow/initial_setup/profile_pictures/People/People Avatar-01-07.svg +138 -0
  2437. vibe_surf/langflow/initial_setup/profile_pictures/People/People Avatar-01-08.svg +125 -0
  2438. vibe_surf/langflow/initial_setup/profile_pictures/People/People Avatar-01-09.svg +137 -0
  2439. vibe_surf/langflow/initial_setup/profile_pictures/People/People Avatar-01-10.svg +109 -0
  2440. vibe_surf/langflow/initial_setup/profile_pictures/People/People Avatar-01-11.svg +140 -0
  2441. vibe_surf/langflow/initial_setup/profile_pictures/People/People Avatar-01-12.svg +99 -0
  2442. vibe_surf/langflow/initial_setup/profile_pictures/People/People Avatar-01-13.svg +118 -0
  2443. vibe_surf/langflow/initial_setup/profile_pictures/People/People Avatar-01-14.svg +99 -0
  2444. vibe_surf/langflow/initial_setup/profile_pictures/People/People Avatar-01-15.svg +90 -0
  2445. vibe_surf/langflow/initial_setup/profile_pictures/People/People Avatar-01-16.svg +106 -0
  2446. vibe_surf/langflow/initial_setup/profile_pictures/People/People Avatar-01-17.svg +97 -0
  2447. vibe_surf/langflow/initial_setup/profile_pictures/People/People Avatar-01-18.svg +128 -0
  2448. vibe_surf/langflow/initial_setup/profile_pictures/People/People Avatar-01-19.svg +100 -0
  2449. vibe_surf/langflow/initial_setup/profile_pictures/People/People Avatar-01-20.svg +101 -0
  2450. vibe_surf/langflow/initial_setup/profile_pictures/People/People Avatar-01-21.svg +134 -0
  2451. vibe_surf/langflow/initial_setup/profile_pictures/People/People Avatar-01-22.svg +127 -0
  2452. vibe_surf/langflow/initial_setup/profile_pictures/People/People Avatar-01-23.svg +120 -0
  2453. vibe_surf/langflow/initial_setup/profile_pictures/People/People Avatar-01-24.svg +110 -0
  2454. vibe_surf/langflow/initial_setup/profile_pictures/People/People Avatar-01-25.svg +79 -0
  2455. vibe_surf/langflow/initial_setup/profile_pictures/People/People Avatar-01-26.svg +98 -0
  2456. vibe_surf/langflow/initial_setup/profile_pictures/People/People Avatar-01-27.svg +113 -0
  2457. vibe_surf/langflow/initial_setup/profile_pictures/People/People Avatar-02-01.svg +113 -0
  2458. vibe_surf/langflow/initial_setup/profile_pictures/People/People Avatar-02-02.svg +167 -0
  2459. vibe_surf/langflow/initial_setup/profile_pictures/People/People Avatar-02-03.svg +91 -0
  2460. vibe_surf/langflow/initial_setup/profile_pictures/People/People Avatar-02-04.svg +114 -0
  2461. vibe_surf/langflow/initial_setup/profile_pictures/People/People Avatar-02-05.svg +71 -0
  2462. vibe_surf/langflow/initial_setup/profile_pictures/People/People Avatar-02-06.svg +105 -0
  2463. vibe_surf/langflow/initial_setup/profile_pictures/People/People Avatar-02-07.svg +101 -0
  2464. vibe_surf/langflow/initial_setup/profile_pictures/People/People Avatar-02-08.svg +92 -0
  2465. vibe_surf/langflow/initial_setup/profile_pictures/People/People Avatar-02-09.svg +91 -0
  2466. vibe_surf/langflow/initial_setup/profile_pictures/People/People Avatar-02-10.svg +110 -0
  2467. vibe_surf/langflow/initial_setup/profile_pictures/People/People Avatar-02-11.svg +102 -0
  2468. vibe_surf/langflow/initial_setup/profile_pictures/People/People Avatar-02-12.svg +92 -0
  2469. vibe_surf/langflow/initial_setup/profile_pictures/People/People Avatar-02-13.svg +77 -0
  2470. vibe_surf/langflow/initial_setup/profile_pictures/People/People Avatar-02-14.svg +99 -0
  2471. vibe_surf/langflow/initial_setup/profile_pictures/People/People Avatar-02-15.svg +81 -0
  2472. vibe_surf/langflow/initial_setup/profile_pictures/People/People Avatar-02-16.svg +91 -0
  2473. vibe_surf/langflow/initial_setup/profile_pictures/People/People Avatar-02-17.svg +100 -0
  2474. vibe_surf/langflow/initial_setup/profile_pictures/People/People Avatar-02-18.svg +99 -0
  2475. vibe_surf/langflow/initial_setup/profile_pictures/People/People Avatar-02-19.svg +155 -0
  2476. vibe_surf/langflow/initial_setup/profile_pictures/People/People Avatar-02-20.svg +110 -0
  2477. vibe_surf/langflow/initial_setup/profile_pictures/People/People Avatar-02-21.svg +128 -0
  2478. vibe_surf/langflow/initial_setup/profile_pictures/People/People Avatar-02-22.svg +90 -0
  2479. vibe_surf/langflow/initial_setup/profile_pictures/People/People Avatar-02-23.svg +117 -0
  2480. vibe_surf/langflow/initial_setup/profile_pictures/People/People Avatar-02-24.svg +100 -0
  2481. vibe_surf/langflow/initial_setup/profile_pictures/People/People Avatar-02-25.svg +97 -0
  2482. vibe_surf/langflow/initial_setup/profile_pictures/People/People Avatar-02-26.svg +105 -0
  2483. vibe_surf/langflow/initial_setup/profile_pictures/People/People Avatar-02-27.svg +82 -0
  2484. vibe_surf/langflow/initial_setup/profile_pictures/Space/026-alien.svg +1 -0
  2485. vibe_surf/langflow/initial_setup/profile_pictures/Space/027-satellite.svg +1 -0
  2486. vibe_surf/langflow/initial_setup/profile_pictures/Space/028-alien.svg +1 -0
  2487. vibe_surf/langflow/initial_setup/profile_pictures/Space/029-telescope.svg +1 -0
  2488. vibe_surf/langflow/initial_setup/profile_pictures/Space/030-books.svg +1 -0
  2489. vibe_surf/langflow/initial_setup/profile_pictures/Space/031-planet.svg +1 -0
  2490. vibe_surf/langflow/initial_setup/profile_pictures/Space/032-constellation.svg +1 -0
  2491. vibe_surf/langflow/initial_setup/profile_pictures/Space/033-planet.svg +1 -0
  2492. vibe_surf/langflow/initial_setup/profile_pictures/Space/034-alien.svg +1 -0
  2493. vibe_surf/langflow/initial_setup/profile_pictures/Space/035-globe.svg +1 -0
  2494. vibe_surf/langflow/initial_setup/profile_pictures/Space/036-eclipse.svg +1 -0
  2495. vibe_surf/langflow/initial_setup/profile_pictures/Space/037-meteor.svg +1 -0
  2496. vibe_surf/langflow/initial_setup/profile_pictures/Space/038-eclipse.svg +1 -0
  2497. vibe_surf/langflow/initial_setup/profile_pictures/Space/039-Asteroid.svg +1 -0
  2498. vibe_surf/langflow/initial_setup/profile_pictures/Space/040-mission.svg +1 -0
  2499. vibe_surf/langflow/initial_setup/profile_pictures/Space/041-spaceship.svg +1 -0
  2500. vibe_surf/langflow/initial_setup/profile_pictures/Space/042-space shuttle.svg +1 -0
  2501. vibe_surf/langflow/initial_setup/profile_pictures/Space/043-space shuttle.svg +1 -0
  2502. vibe_surf/langflow/initial_setup/profile_pictures/Space/044-rocket.svg +1 -0
  2503. vibe_surf/langflow/initial_setup/profile_pictures/Space/045-astronaut.svg +1 -0
  2504. vibe_surf/langflow/initial_setup/profile_pictures/Space/046-rocket.svg +1 -0
  2505. vibe_surf/langflow/initial_setup/profile_pictures/Space/047-computer.svg +1 -0
  2506. vibe_surf/langflow/initial_setup/profile_pictures/Space/048-satellite.svg +1 -0
  2507. vibe_surf/langflow/initial_setup/profile_pictures/Space/049-astronaut.svg +1 -0
  2508. vibe_surf/langflow/initial_setup/profile_pictures/Space/050-space robot.svg +1 -0
  2509. vibe_surf/langflow/initial_setup/setup.py +1108 -0
  2510. vibe_surf/langflow/initial_setup/starter_projects/Basic Prompt Chaining.json +1976 -0
  2511. vibe_surf/langflow/initial_setup/starter_projects/Basic Prompting.json +1051 -0
  2512. vibe_surf/langflow/initial_setup/starter_projects/Blog Writer.json +1529 -0
  2513. vibe_surf/langflow/initial_setup/starter_projects/Custom Component Generator.json +2671 -0
  2514. vibe_surf/langflow/initial_setup/starter_projects/Document Q&A.json +1522 -0
  2515. vibe_surf/langflow/initial_setup/starter_projects/Financial Report Parser.json +1418 -0
  2516. vibe_surf/langflow/initial_setup/starter_projects/Hybrid Search RAG.json +2718 -0
  2517. vibe_surf/langflow/initial_setup/starter_projects/Image Sentiment Analysis.json +1884 -0
  2518. vibe_surf/langflow/initial_setup/starter_projects/Instagram Copywriter.json +3069 -0
  2519. vibe_surf/langflow/initial_setup/starter_projects/Invoice Summarizer.json +1666 -0
  2520. vibe_surf/langflow/initial_setup/starter_projects/Knowledge Ingestion.json +1042 -0
  2521. vibe_surf/langflow/initial_setup/starter_projects/Knowledge Retrieval.json +630 -0
  2522. vibe_surf/langflow/initial_setup/starter_projects/Market Research.json +2532 -0
  2523. vibe_surf/langflow/initial_setup/starter_projects/Meeting Summary.json +3263 -0
  2524. vibe_surf/langflow/initial_setup/starter_projects/Memory Chatbot.json +1419 -0
  2525. vibe_surf/langflow/initial_setup/starter_projects/News Aggregator.json +1835 -0
  2526. vibe_surf/langflow/initial_setup/starter_projects/Nvidia Remix.json +4866 -0
  2527. vibe_surf/langflow/initial_setup/starter_projects/Pok/303/251dex Agent.json" +1739 -0
  2528. vibe_surf/langflow/initial_setup/starter_projects/Portfolio Website Code Generator.json +2243 -0
  2529. vibe_surf/langflow/initial_setup/starter_projects/Price Deal Finder.json +2099 -0
  2530. vibe_surf/langflow/initial_setup/starter_projects/Research Agent.json +3032 -0
  2531. vibe_surf/langflow/initial_setup/starter_projects/Research Translation Loop.json +1580 -0
  2532. vibe_surf/langflow/initial_setup/starter_projects/SEO Keyword Generator.json +1091 -0
  2533. vibe_surf/langflow/initial_setup/starter_projects/SaaS Pricing.json +1416 -0
  2534. vibe_surf/langflow/initial_setup/starter_projects/Search agent.json +1455 -0
  2535. vibe_surf/langflow/initial_setup/starter_projects/Sequential Tasks Agents.json +4101 -0
  2536. vibe_surf/langflow/initial_setup/starter_projects/Simple Agent.json +1841 -0
  2537. vibe_surf/langflow/initial_setup/starter_projects/Social Media Agent.json +1759 -0
  2538. vibe_surf/langflow/initial_setup/starter_projects/Text Sentiment Analysis.json +2557 -0
  2539. vibe_surf/langflow/initial_setup/starter_projects/Travel Planning Agents.json +3448 -0
  2540. vibe_surf/langflow/initial_setup/starter_projects/Twitter Thread Generator.json +1978 -0
  2541. vibe_surf/langflow/initial_setup/starter_projects/Vector Store RAG.json +4850 -0
  2542. vibe_surf/langflow/initial_setup/starter_projects/Youtube Analysis.json +2734 -0
  2543. vibe_surf/langflow/initial_setup/starter_projects/__init__.py +19 -0
  2544. vibe_surf/langflow/initial_setup/starter_projects/basic_prompting.py +28 -0
  2545. vibe_surf/langflow/initial_setup/starter_projects/blog_writer.py +46 -0
  2546. vibe_surf/langflow/initial_setup/starter_projects/complex_agent.py +96 -0
  2547. vibe_surf/langflow/initial_setup/starter_projects/document_qa.py +39 -0
  2548. vibe_surf/langflow/initial_setup/starter_projects/hierarchical_tasks_agent.py +69 -0
  2549. vibe_surf/langflow/initial_setup/starter_projects/memory_chatbot.py +31 -0
  2550. vibe_surf/langflow/initial_setup/starter_projects/sequential_tasks_agent.py +97 -0
  2551. vibe_surf/langflow/initial_setup/starter_projects/vector_store_rag.py +61 -0
  2552. vibe_surf/langflow/inputs/__init__.py +68 -0
  2553. vibe_surf/langflow/inputs/constants.py +2 -0
  2554. vibe_surf/langflow/inputs/input_mixin.py +312 -0
  2555. vibe_surf/langflow/inputs/inputs.py +706 -0
  2556. vibe_surf/langflow/inputs/utils.py +32 -0
  2557. vibe_surf/langflow/inputs/validators.py +19 -0
  2558. vibe_surf/langflow/interface/__init__.py +0 -0
  2559. vibe_surf/langflow/interface/components.py +496 -0
  2560. vibe_surf/langflow/interface/importing/__init__.py +5 -0
  2561. vibe_surf/langflow/interface/importing/utils.py +39 -0
  2562. vibe_surf/langflow/interface/initialize/__init__.py +3 -0
  2563. vibe_surf/langflow/interface/initialize/loading.py +200 -0
  2564. vibe_surf/langflow/interface/listing.py +26 -0
  2565. vibe_surf/langflow/interface/run.py +45 -0
  2566. vibe_surf/langflow/interface/utils.py +112 -0
  2567. vibe_surf/langflow/io/__init__.py +63 -0
  2568. vibe_surf/langflow/io/schema.py +304 -0
  2569. vibe_surf/langflow/langflow_launcher.py +51 -0
  2570. vibe_surf/langflow/legacy_custom/__init__.py +0 -0
  2571. vibe_surf/langflow/legacy_custom/customs.py +16 -0
  2572. vibe_surf/langflow/load/__init__.py +12 -0
  2573. vibe_surf/langflow/load/load.py +250 -0
  2574. vibe_surf/langflow/load/utils.py +126 -0
  2575. vibe_surf/langflow/logging/__init__.py +4 -0
  2576. vibe_surf/langflow/logging/logger.py +407 -0
  2577. vibe_surf/langflow/logging/setup.py +16 -0
  2578. vibe_surf/langflow/main.py +550 -0
  2579. vibe_surf/langflow/memory.py +326 -0
  2580. vibe_surf/langflow/middleware.py +59 -0
  2581. vibe_surf/langflow/processing/__init__.py +0 -0
  2582. vibe_surf/langflow/processing/process.py +216 -0
  2583. vibe_surf/langflow/processing/utils.py +25 -0
  2584. vibe_surf/langflow/py.typed +0 -0
  2585. vibe_surf/langflow/schema/__init__.py +6 -0
  2586. vibe_surf/langflow/schema/artifact.py +82 -0
  2587. vibe_surf/langflow/schema/content_block.py +62 -0
  2588. vibe_surf/langflow/schema/content_types.py +91 -0
  2589. vibe_surf/langflow/schema/data.py +306 -0
  2590. vibe_surf/langflow/schema/dataframe.py +206 -0
  2591. vibe_surf/langflow/schema/dotdict.py +71 -0
  2592. vibe_surf/langflow/schema/encoders.py +13 -0
  2593. vibe_surf/langflow/schema/graph.py +47 -0
  2594. vibe_surf/langflow/schema/image.py +128 -0
  2595. vibe_surf/langflow/schema/log.py +33 -0
  2596. vibe_surf/langflow/schema/message.py +483 -0
  2597. vibe_surf/langflow/schema/openai_responses_schemas.py +74 -0
  2598. vibe_surf/langflow/schema/playground_events.py +182 -0
  2599. vibe_surf/langflow/schema/properties.py +39 -0
  2600. vibe_surf/langflow/schema/schema.py +121 -0
  2601. vibe_surf/langflow/schema/serialize.py +14 -0
  2602. vibe_surf/langflow/schema/table.py +140 -0
  2603. vibe_surf/langflow/schema/validators.py +114 -0
  2604. vibe_surf/langflow/serialization/__init__.py +3 -0
  2605. vibe_surf/langflow/serialization/constants.py +2 -0
  2606. vibe_surf/langflow/serialization/serialization.py +320 -0
  2607. vibe_surf/langflow/server.py +70 -0
  2608. vibe_surf/langflow/services/__init__.py +4 -0
  2609. vibe_surf/langflow/services/auth/__init__.py +0 -0
  2610. vibe_surf/langflow/services/auth/factory.py +15 -0
  2611. vibe_surf/langflow/services/auth/mcp_encryption.py +120 -0
  2612. vibe_surf/langflow/services/auth/service.py +15 -0
  2613. vibe_surf/langflow/services/auth/utils.py +583 -0
  2614. vibe_surf/langflow/services/base.py +28 -0
  2615. vibe_surf/langflow/services/cache/__init__.py +12 -0
  2616. vibe_surf/langflow/services/cache/base.py +183 -0
  2617. vibe_surf/langflow/services/cache/disk.py +95 -0
  2618. vibe_surf/langflow/services/cache/factory.py +44 -0
  2619. vibe_surf/langflow/services/cache/service.py +355 -0
  2620. vibe_surf/langflow/services/cache/utils.py +169 -0
  2621. vibe_surf/langflow/services/chat/__init__.py +0 -0
  2622. vibe_surf/langflow/services/chat/cache.py +150 -0
  2623. vibe_surf/langflow/services/chat/config.py +2 -0
  2624. vibe_surf/langflow/services/chat/factory.py +11 -0
  2625. vibe_surf/langflow/services/chat/schema.py +10 -0
  2626. vibe_surf/langflow/services/chat/service.py +67 -0
  2627. vibe_surf/langflow/services/database/__init__.py +0 -0
  2628. vibe_surf/langflow/services/database/factory.py +21 -0
  2629. vibe_surf/langflow/services/database/models/__init__.py +19 -0
  2630. vibe_surf/langflow/services/database/models/api_key/__init__.py +3 -0
  2631. vibe_surf/langflow/services/database/models/api_key/crud.py +74 -0
  2632. vibe_surf/langflow/services/database/models/api_key/model.py +66 -0
  2633. vibe_surf/langflow/services/database/models/base.py +17 -0
  2634. vibe_surf/langflow/services/database/models/file/__init__.py +5 -0
  2635. vibe_surf/langflow/services/database/models/file/crud.py +14 -0
  2636. vibe_surf/langflow/services/database/models/file/model.py +19 -0
  2637. vibe_surf/langflow/services/database/models/flow/__init__.py +3 -0
  2638. vibe_surf/langflow/services/database/models/flow/model.py +283 -0
  2639. vibe_surf/langflow/services/database/models/flow/schema.py +6 -0
  2640. vibe_surf/langflow/services/database/models/flow/utils.py +42 -0
  2641. vibe_surf/langflow/services/database/models/folder/__init__.py +3 -0
  2642. vibe_surf/langflow/services/database/models/folder/constants.py +2 -0
  2643. vibe_surf/langflow/services/database/models/folder/model.py +61 -0
  2644. vibe_surf/langflow/services/database/models/folder/pagination_model.py +10 -0
  2645. vibe_surf/langflow/services/database/models/folder/utils.py +45 -0
  2646. vibe_surf/langflow/services/database/models/message/__init__.py +3 -0
  2647. vibe_surf/langflow/services/database/models/message/crud.py +26 -0
  2648. vibe_surf/langflow/services/database/models/message/model.py +182 -0
  2649. vibe_surf/langflow/services/database/models/transactions/__init__.py +3 -0
  2650. vibe_surf/langflow/services/database/models/transactions/crud.py +82 -0
  2651. vibe_surf/langflow/services/database/models/transactions/model.py +65 -0
  2652. vibe_surf/langflow/services/database/models/user/__init__.py +8 -0
  2653. vibe_surf/langflow/services/database/models/user/crud.py +69 -0
  2654. vibe_surf/langflow/services/database/models/user/model.py +82 -0
  2655. vibe_surf/langflow/services/database/models/variable/__init__.py +3 -0
  2656. vibe_surf/langflow/services/database/models/variable/model.py +73 -0
  2657. vibe_surf/langflow/services/database/models/vertex_builds/__init__.py +3 -0
  2658. vibe_surf/langflow/services/database/models/vertex_builds/crud.py +145 -0
  2659. vibe_surf/langflow/services/database/models/vertex_builds/model.py +83 -0
  2660. vibe_surf/langflow/services/database/service.py +485 -0
  2661. vibe_surf/langflow/services/database/session.py +62 -0
  2662. vibe_surf/langflow/services/database/utils.py +88 -0
  2663. vibe_surf/langflow/services/deps.py +259 -0
  2664. vibe_surf/langflow/services/factory.py +88 -0
  2665. vibe_surf/langflow/services/flow/__init__.py +0 -0
  2666. vibe_surf/langflow/services/flow/flow_runner.py +265 -0
  2667. vibe_surf/langflow/services/job_queue/__init__.py +0 -0
  2668. vibe_surf/langflow/services/job_queue/factory.py +11 -0
  2669. vibe_surf/langflow/services/job_queue/service.py +328 -0
  2670. vibe_surf/langflow/services/manager.py +149 -0
  2671. vibe_surf/langflow/services/mcp_composer/__init__.py +6 -0
  2672. vibe_surf/langflow/services/mcp_composer/factory.py +15 -0
  2673. vibe_surf/langflow/services/mcp_composer/service.py +591 -0
  2674. vibe_surf/langflow/services/schema.py +23 -0
  2675. vibe_surf/langflow/services/session/__init__.py +0 -0
  2676. vibe_surf/langflow/services/session/factory.py +18 -0
  2677. vibe_surf/langflow/services/session/service.py +63 -0
  2678. vibe_surf/langflow/services/session/utils.py +18 -0
  2679. vibe_surf/langflow/services/settings/__init__.py +3 -0
  2680. vibe_surf/langflow/services/settings/auth.py +147 -0
  2681. vibe_surf/langflow/services/settings/base.py +587 -0
  2682. vibe_surf/langflow/services/settings/constants.py +34 -0
  2683. vibe_surf/langflow/services/settings/factory.py +22 -0
  2684. vibe_surf/langflow/services/settings/feature_flags.py +11 -0
  2685. vibe_surf/langflow/services/settings/manager.py +49 -0
  2686. vibe_surf/langflow/services/settings/service.py +32 -0
  2687. vibe_surf/langflow/services/settings/utils.py +40 -0
  2688. vibe_surf/langflow/services/shared_component_cache/__init__.py +0 -0
  2689. vibe_surf/langflow/services/shared_component_cache/factory.py +18 -0
  2690. vibe_surf/langflow/services/shared_component_cache/service.py +7 -0
  2691. vibe_surf/langflow/services/socket/__init__.py +0 -0
  2692. vibe_surf/langflow/services/socket/factory.py +20 -0
  2693. vibe_surf/langflow/services/socket/service.py +84 -0
  2694. vibe_surf/langflow/services/socket/utils.py +112 -0
  2695. vibe_surf/langflow/services/state/__init__.py +0 -0
  2696. vibe_surf/langflow/services/state/factory.py +16 -0
  2697. vibe_surf/langflow/services/state/service.py +82 -0
  2698. vibe_surf/langflow/services/storage/__init__.py +0 -0
  2699. vibe_surf/langflow/services/storage/constants.py +28 -0
  2700. vibe_surf/langflow/services/storage/factory.py +30 -0
  2701. vibe_surf/langflow/services/storage/local.py +127 -0
  2702. vibe_surf/langflow/services/storage/s3.py +105 -0
  2703. vibe_surf/langflow/services/storage/service.py +51 -0
  2704. vibe_surf/langflow/services/storage/utils.py +5 -0
  2705. vibe_surf/langflow/services/store/__init__.py +0 -0
  2706. vibe_surf/langflow/services/store/exceptions.py +25 -0
  2707. vibe_surf/langflow/services/store/factory.py +20 -0
  2708. vibe_surf/langflow/services/store/schema.py +74 -0
  2709. vibe_surf/langflow/services/store/service.py +600 -0
  2710. vibe_surf/langflow/services/store/utils.py +67 -0
  2711. vibe_surf/langflow/services/task/__init__.py +0 -0
  2712. vibe_surf/langflow/services/task/backends/__init__.py +0 -0
  2713. vibe_surf/langflow/services/task/backends/anyio.py +117 -0
  2714. vibe_surf/langflow/services/task/backends/base.py +15 -0
  2715. vibe_surf/langflow/services/task/backends/celery.py +29 -0
  2716. vibe_surf/langflow/services/task/factory.py +14 -0
  2717. vibe_surf/langflow/services/task/service.py +40 -0
  2718. vibe_surf/langflow/services/task/temp_flow_cleanup.py +136 -0
  2719. vibe_surf/langflow/services/task/utils.py +23 -0
  2720. vibe_surf/langflow/services/telemetry/__init__.py +0 -0
  2721. vibe_surf/langflow/services/telemetry/factory.py +20 -0
  2722. vibe_surf/langflow/services/telemetry/opentelemetry.py +253 -0
  2723. vibe_surf/langflow/services/telemetry/schema.py +45 -0
  2724. vibe_surf/langflow/services/telemetry/service.py +281 -0
  2725. vibe_surf/langflow/services/tracing/__init__.py +0 -0
  2726. vibe_surf/langflow/services/tracing/arize_phoenix.py +375 -0
  2727. vibe_surf/langflow/services/tracing/base.py +71 -0
  2728. vibe_surf/langflow/services/tracing/factory.py +20 -0
  2729. vibe_surf/langflow/services/tracing/langfuse.py +170 -0
  2730. vibe_surf/langflow/services/tracing/langsmith.py +208 -0
  2731. vibe_surf/langflow/services/tracing/langwatch.py +185 -0
  2732. vibe_surf/langflow/services/tracing/opik.py +235 -0
  2733. vibe_surf/langflow/services/tracing/schema.py +20 -0
  2734. vibe_surf/langflow/services/tracing/service.py +460 -0
  2735. vibe_surf/langflow/services/tracing/traceloop.py +244 -0
  2736. vibe_surf/langflow/services/tracing/utils.py +29 -0
  2737. vibe_surf/langflow/services/utils.py +246 -0
  2738. vibe_surf/langflow/services/variable/__init__.py +0 -0
  2739. vibe_surf/langflow/services/variable/base.py +119 -0
  2740. vibe_surf/langflow/services/variable/constants.py +2 -0
  2741. vibe_surf/langflow/services/variable/factory.py +28 -0
  2742. vibe_surf/langflow/services/variable/kubernetes.py +204 -0
  2743. vibe_surf/langflow/services/variable/kubernetes_secrets.py +193 -0
  2744. vibe_surf/langflow/services/variable/service.py +195 -0
  2745. vibe_surf/langflow/settings.py +12 -0
  2746. vibe_surf/langflow/template/__init__.py +10 -0
  2747. vibe_surf/langflow/template/field/__init__.py +0 -0
  2748. vibe_surf/langflow/template/field/base.py +257 -0
  2749. vibe_surf/langflow/template/field/prompt.py +2 -0
  2750. vibe_surf/langflow/template/frontend_node/__init__.py +6 -0
  2751. vibe_surf/langflow/template/frontend_node/base.py +214 -0
  2752. vibe_surf/langflow/template/frontend_node/constants.py +65 -0
  2753. vibe_surf/langflow/template/frontend_node/custom_components.py +97 -0
  2754. vibe_surf/langflow/template/template/__init__.py +0 -0
  2755. vibe_surf/langflow/template/template/base.py +99 -0
  2756. vibe_surf/langflow/template/utils.py +217 -0
  2757. vibe_surf/langflow/type_extraction/__init__.py +0 -0
  2758. vibe_surf/langflow/type_extraction/type_extraction.py +78 -0
  2759. vibe_surf/langflow/utils/__init__.py +0 -0
  2760. vibe_surf/langflow/utils/async_helpers.py +42 -0
  2761. vibe_surf/langflow/utils/component_utils.py +147 -0
  2762. vibe_surf/langflow/utils/compression.py +19 -0
  2763. vibe_surf/langflow/utils/concurrency.py +60 -0
  2764. vibe_surf/langflow/utils/connection_string_parser.py +8 -0
  2765. vibe_surf/langflow/utils/constants.py +205 -0
  2766. vibe_surf/langflow/utils/data_structure.py +212 -0
  2767. vibe_surf/langflow/utils/image.py +102 -0
  2768. vibe_surf/langflow/utils/lazy_load.py +15 -0
  2769. vibe_surf/langflow/utils/migration.py +61 -0
  2770. vibe_surf/langflow/utils/payload.py +84 -0
  2771. vibe_surf/langflow/utils/schemas.py +117 -0
  2772. vibe_surf/langflow/utils/template_validation.py +284 -0
  2773. vibe_surf/langflow/utils/util.py +479 -0
  2774. vibe_surf/langflow/utils/util_strings.py +56 -0
  2775. vibe_surf/langflow/utils/validate.py +489 -0
  2776. vibe_surf/langflow/utils/version.py +72 -0
  2777. vibe_surf/langflow/utils/voice_utils.py +92 -0
  2778. vibe_surf/langflow/worker.py +37 -0
  2779. vibe_surf/llm/openai_compatible.py +36 -19
  2780. vibe_surf/logger.py +3 -3
  2781. vibe_surf/telemetry/__init__.py +60 -0
  2782. vibe_surf/telemetry/service.py +113 -0
  2783. vibe_surf/telemetry/views.py +188 -0
  2784. vibe_surf/tools/browser_use_tools.py +206 -134
  2785. vibe_surf/tools/composio_client.py +458 -0
  2786. vibe_surf/tools/file_system.py +9 -5
  2787. vibe_surf/tools/finance_tools.py +629 -0
  2788. vibe_surf/tools/mcp_client.py +21 -2
  2789. vibe_surf/tools/report_writer_tools.py +2 -1
  2790. vibe_surf/tools/utils.py +1540 -0
  2791. vibe_surf/tools/vibesurf_registry.py +52 -0
  2792. vibe_surf/tools/vibesurf_tools.py +1376 -83
  2793. vibe_surf/tools/views.py +215 -4
  2794. vibe_surf/tools/website_api/__init__.py +0 -0
  2795. vibe_surf/tools/website_api/douyin/__init__.py +0 -0
  2796. vibe_surf/tools/website_api/douyin/client.py +861 -0
  2797. vibe_surf/tools/website_api/douyin/helpers.py +239 -0
  2798. vibe_surf/tools/website_api/weibo/__init__.py +0 -0
  2799. vibe_surf/tools/website_api/weibo/client.py +777 -0
  2800. vibe_surf/tools/website_api/weibo/helpers.py +997 -0
  2801. vibe_surf/tools/website_api/xhs/__init__.py +0 -0
  2802. vibe_surf/tools/website_api/xhs/client.py +814 -0
  2803. vibe_surf/tools/website_api/xhs/helpers.py +302 -0
  2804. vibe_surf/tools/website_api/youtube/__init__.py +32 -0
  2805. vibe_surf/tools/website_api/youtube/client.py +1267 -0
  2806. vibe_surf/tools/website_api/youtube/helpers.py +420 -0
  2807. vibe_surf/utils.py +34 -0
  2808. vibe_surf/workflows/Browser/browser_click_element.py +189 -0
  2809. vibe_surf/workflows/Browser/browser_drag_drop.py +81 -0
  2810. vibe_surf/workflows/Browser/browser_evaluate_js.py +178 -0
  2811. vibe_surf/workflows/Browser/browser_extract_content.py +197 -0
  2812. vibe_surf/workflows/Browser/browser_focus_element.py +153 -0
  2813. vibe_surf/workflows/Browser/browser_generate_js.py +85 -0
  2814. vibe_surf/workflows/Browser/browser_go_back.py +45 -0
  2815. vibe_surf/workflows/Browser/browser_go_forward.py +44 -0
  2816. vibe_surf/workflows/Browser/browser_hover_element.py +154 -0
  2817. vibe_surf/workflows/Browser/browser_html_content.py +73 -0
  2818. vibe_surf/workflows/Browser/browser_input_text.py +169 -0
  2819. vibe_surf/workflows/Browser/browser_navigate.py +50 -0
  2820. vibe_surf/workflows/Browser/browser_new_tab.py +50 -0
  2821. vibe_surf/workflows/Browser/browser_page_info.py +67 -0
  2822. vibe_surf/workflows/Browser/browser_press_key.py +51 -0
  2823. vibe_surf/workflows/Browser/browser_reload.py +44 -0
  2824. vibe_surf/workflows/Browser/browser_scroll.py +99 -0
  2825. vibe_surf/workflows/Browser/browser_search.py +88 -0
  2826. vibe_surf/workflows/Browser/browser_select_options.py +94 -0
  2827. vibe_surf/workflows/Browser/browser_session.py +54 -0
  2828. vibe_surf/workflows/Browser/browser_take_screenshot.py +76 -0
  2829. vibe_surf/workflows/Browser/browser_upload_file.py +178 -0
  2830. vibe_surf/workflows/Browser/browser_wait.py +46 -0
  2831. vibe_surf/workflows/Browser/close_browser_session.py +51 -0
  2832. vibe_surf/workflows/FileSystem/extract_content_from_file.py +112 -0
  2833. vibe_surf/workflows/FileSystem/load_json.py +136 -0
  2834. vibe_surf/workflows/Integrations/composio_api.py +279 -0
  2835. vibe_surf/workflows/Integrations/douyin.py +232 -0
  2836. vibe_surf/workflows/Integrations/dropbox_compnent.py +11 -0
  2837. vibe_surf/workflows/Integrations/github_composio.py +11 -0
  2838. vibe_surf/workflows/Integrations/gmail_composio.py +38 -0
  2839. vibe_surf/workflows/Integrations/googlecalendar_composio.py +11 -0
  2840. vibe_surf/workflows/Integrations/googlemeet_composio.py +11 -0
  2841. vibe_surf/workflows/Integrations/googletasks_composio.py +8 -0
  2842. vibe_surf/workflows/Integrations/linear_composio.py +11 -0
  2843. vibe_surf/workflows/Integrations/outlook_composio.py +11 -0
  2844. vibe_surf/workflows/Integrations/reddit_composio.py +11 -0
  2845. vibe_surf/workflows/Integrations/slack_composio.py +11 -0
  2846. vibe_surf/workflows/Integrations/slackbot_composio.py +11 -0
  2847. vibe_surf/workflows/Integrations/supabase_composio.py +11 -0
  2848. vibe_surf/workflows/Integrations/todoist_composio.py +11 -0
  2849. vibe_surf/workflows/Integrations/weibo.py +244 -0
  2850. vibe_surf/workflows/Integrations/xiaohongshu.py +229 -0
  2851. vibe_surf/workflows/Integrations/yahoo.py +103 -0
  2852. vibe_surf/workflows/Integrations/youtube.py +251 -0
  2853. vibe_surf/workflows/Integrations/youtube_composio.py +11 -0
  2854. vibe_surf/workflows/VibeSurf/advanced_search.py +166 -0
  2855. vibe_surf/workflows/VibeSurf/browser_use_agent.py +150 -0
  2856. vibe_surf/workflows/VibeSurf/llm_profiles.py +103 -0
  2857. vibe_surf/workflows/VibeSurf/select_dataframe.py +44 -0
  2858. vibe_surf/workflows/VibeSurf/variable_manager.py +140 -0
  2859. vibe_surf/workflows/VibeSurf/vibesurf_agent.py +113 -0
  2860. vibesurf-0.2.6.dist-info/METADATA +406 -0
  2861. vibesurf-0.2.6.dist-info/RECORD +2916 -0
  2862. vibesurf-0.2.6.dist-info/licenses/LICENSE +22 -0
  2863. vibesurf-0.1.21.dist-info/METADATA +0 -125
  2864. vibesurf-0.1.21.dist-info/RECORD +0 -101
  2865. vibesurf-0.1.21.dist-info/licenses/LICENSE +0 -201
  2866. {vibesurf-0.1.21.dist-info → vibesurf-0.2.6.dist-info}/WHEEL +0 -0
  2867. {vibesurf-0.1.21.dist-info → vibesurf-0.2.6.dist-info}/entry_points.txt +0 -0
  2868. {vibesurf-0.1.21.dist-info → vibesurf-0.2.6.dist-info}/top_level.txt +0 -0
@@ -0,0 +1,3448 @@
1
+ {
2
+ "data": {
3
+ "edges": [
4
+ {
5
+ "animated": false,
6
+ "className": "",
7
+ "data": {
8
+ "sourceHandle": {
9
+ "dataType": "SearchComponent",
10
+ "id": "SearchComponent-mY1Fv",
11
+ "name": "component_as_tool",
12
+ "output_types": [
13
+ "Tool"
14
+ ]
15
+ },
16
+ "targetHandle": {
17
+ "fieldName": "tools",
18
+ "id": "Agent-RTpIN",
19
+ "inputTypes": [
20
+ "Tool"
21
+ ],
22
+ "type": "other"
23
+ }
24
+ },
25
+ "id": "reactflow__edge-SearchComponent-mY1Fv{œdataTypeœ:œSearchComponentœ,œidœ:œSearchComponent-mY1Fvœ,œnameœ:œcomponent_as_toolœ,œoutput_typesœ:[œToolœ]}-Agent-RTpIN{œfieldNameœ:œtoolsœ,œidœ:œAgent-RTpINœ,œinputTypesœ:[œToolœ],œtypeœ:œotherœ}",
26
+ "selected": false,
27
+ "source": "SearchComponent-mY1Fv",
28
+ "sourceHandle": "{œdataTypeœ: œSearchComponentœ, œidœ: œSearchComponent-mY1Fvœ, œnameœ: œcomponent_as_toolœ, œoutput_typesœ: [œToolœ]}",
29
+ "target": "Agent-RTpIN",
30
+ "targetHandle": "{œfieldNameœ: œtoolsœ, œidœ: œAgent-RTpINœ, œinputTypesœ: [œToolœ], œtypeœ: œotherœ}"
31
+ },
32
+ {
33
+ "animated": false,
34
+ "className": "",
35
+ "data": {
36
+ "sourceHandle": {
37
+ "dataType": "ChatInput",
38
+ "id": "ChatInput-hRyEJ",
39
+ "name": "message",
40
+ "output_types": [
41
+ "Message"
42
+ ]
43
+ },
44
+ "targetHandle": {
45
+ "fieldName": "input_value",
46
+ "id": "Agent-RTpIN",
47
+ "inputTypes": [
48
+ "Message"
49
+ ],
50
+ "type": "str"
51
+ }
52
+ },
53
+ "id": "reactflow__edge-ChatInput-hRyEJ{œdataTypeœ:œChatInputœ,œidœ:œChatInput-hRyEJœ,œnameœ:œmessageœ,œoutput_typesœ:[œMessageœ]}-Agent-RTpIN{œfieldNameœ:œinput_valueœ,œidœ:œAgent-RTpINœ,œinputTypesœ:[œMessageœ],œtypeœ:œstrœ}",
54
+ "selected": false,
55
+ "source": "ChatInput-hRyEJ",
56
+ "sourceHandle": "{œdataTypeœ: œChatInputœ, œidœ: œChatInput-hRyEJœ, œnameœ: œmessageœ, œoutput_typesœ: [œMessageœ]}",
57
+ "target": "Agent-RTpIN",
58
+ "targetHandle": "{œfieldNameœ: œinput_valueœ, œidœ: œAgent-RTpINœ, œinputTypesœ: [œMessageœ], œtypeœ: œstrœ}"
59
+ },
60
+ {
61
+ "animated": false,
62
+ "className": "",
63
+ "data": {
64
+ "sourceHandle": {
65
+ "dataType": "Agent",
66
+ "id": "Agent-RTpIN",
67
+ "name": "response",
68
+ "output_types": [
69
+ "Message"
70
+ ]
71
+ },
72
+ "targetHandle": {
73
+ "fieldName": "input_value",
74
+ "id": "Agent-9tDeE",
75
+ "inputTypes": [
76
+ "Message"
77
+ ],
78
+ "type": "str"
79
+ }
80
+ },
81
+ "id": "reactflow__edge-Agent-RTpIN{œdataTypeœ:œAgentœ,œidœ:œAgent-RTpINœ,œnameœ:œresponseœ,œoutput_typesœ:[œMessageœ]}-Agent-9tDeE{œfieldNameœ:œinput_valueœ,œidœ:œAgent-9tDeEœ,œinputTypesœ:[œMessageœ],œtypeœ:œstrœ}",
82
+ "selected": false,
83
+ "source": "Agent-RTpIN",
84
+ "sourceHandle": "{œdataTypeœ: œAgentœ, œidœ: œAgent-RTpINœ, œnameœ: œresponseœ, œoutput_typesœ: [œMessageœ]}",
85
+ "target": "Agent-9tDeE",
86
+ "targetHandle": "{œfieldNameœ: œinput_valueœ, œidœ: œAgent-9tDeEœ, œinputTypesœ: [œMessageœ], œtypeœ: œstrœ}"
87
+ },
88
+ {
89
+ "animated": false,
90
+ "className": "",
91
+ "data": {
92
+ "sourceHandle": {
93
+ "dataType": "Agent",
94
+ "id": "Agent-9tDeE",
95
+ "name": "response",
96
+ "output_types": [
97
+ "Message"
98
+ ]
99
+ },
100
+ "targetHandle": {
101
+ "fieldName": "input_value",
102
+ "id": "Agent-C8zRS",
103
+ "inputTypes": [
104
+ "Message"
105
+ ],
106
+ "type": "str"
107
+ }
108
+ },
109
+ "id": "reactflow__edge-Agent-9tDeE{œdataTypeœ:œAgentœ,œidœ:œAgent-9tDeEœ,œnameœ:œresponseœ,œoutput_typesœ:[œMessageœ]}-Agent-C8zRS{œfieldNameœ:œinput_valueœ,œidœ:œAgent-C8zRSœ,œinputTypesœ:[œMessageœ],œtypeœ:œstrœ}",
110
+ "selected": false,
111
+ "source": "Agent-9tDeE",
112
+ "sourceHandle": "{œdataTypeœ: œAgentœ, œidœ: œAgent-9tDeEœ, œnameœ: œresponseœ, œoutput_typesœ: [œMessageœ]}",
113
+ "target": "Agent-C8zRS",
114
+ "targetHandle": "{œfieldNameœ: œinput_valueœ, œidœ: œAgent-C8zRSœ, œinputTypesœ: [œMessageœ], œtypeœ: œstrœ}"
115
+ },
116
+ {
117
+ "animated": false,
118
+ "className": "",
119
+ "data": {
120
+ "sourceHandle": {
121
+ "dataType": "Agent",
122
+ "id": "Agent-C8zRS",
123
+ "name": "response",
124
+ "output_types": [
125
+ "Message"
126
+ ]
127
+ },
128
+ "targetHandle": {
129
+ "fieldName": "input_value",
130
+ "id": "ChatOutput-TzFZY",
131
+ "inputTypes": [
132
+ "Data",
133
+ "DataFrame",
134
+ "Message"
135
+ ],
136
+ "type": "str"
137
+ }
138
+ },
139
+ "id": "reactflow__edge-Agent-C8zRS{œdataTypeœ:œAgentœ,œidœ:œAgent-C8zRSœ,œnameœ:œresponseœ,œoutput_typesœ:[œMessageœ]}-ChatOutput-TzFZY{œfieldNameœ:œinput_valueœ,œidœ:œChatOutput-TzFZYœ,œinputTypesœ:[œDataœ,œDataFrameœ,œMessageœ],œtypeœ:œstrœ}",
140
+ "selected": false,
141
+ "source": "Agent-C8zRS",
142
+ "sourceHandle": "{œdataTypeœ: œAgentœ, œidœ: œAgent-C8zRSœ, œnameœ: œresponseœ, œoutput_typesœ: [œMessageœ]}",
143
+ "target": "ChatOutput-TzFZY",
144
+ "targetHandle": "{œfieldNameœ: œinput_valueœ, œidœ: œChatOutput-TzFZYœ, œinputTypesœ: [œDataœ, œDataFrameœ, œMessageœ], œtypeœ: œstrœ}"
145
+ },
146
+ {
147
+ "animated": false,
148
+ "className": "",
149
+ "data": {
150
+ "sourceHandle": {
151
+ "dataType": "URL",
152
+ "id": "URL-zTFcy",
153
+ "name": "component_as_tool",
154
+ "output_types": [
155
+ "Tool"
156
+ ]
157
+ },
158
+ "targetHandle": {
159
+ "fieldName": "tools",
160
+ "id": "Agent-9tDeE",
161
+ "inputTypes": [
162
+ "Tool"
163
+ ],
164
+ "type": "other"
165
+ }
166
+ },
167
+ "id": "reactflow__edge-URL-zTFcy{œdataTypeœ:œURLœ,œidœ:œURL-zTFcyœ,œnameœ:œcomponent_as_toolœ,œoutput_typesœ:[œToolœ]}-Agent-9tDeE{œfieldNameœ:œtoolsœ,œidœ:œAgent-9tDeEœ,œinputTypesœ:[œToolœ],œtypeœ:œotherœ}",
168
+ "selected": false,
169
+ "source": "URL-zTFcy",
170
+ "sourceHandle": "{œdataTypeœ: œURLœ, œidœ: œURL-zTFcyœ, œnameœ: œcomponent_as_toolœ, œoutput_typesœ: [œToolœ]}",
171
+ "target": "Agent-9tDeE",
172
+ "targetHandle": "{œfieldNameœ: œtoolsœ, œidœ: œAgent-9tDeEœ, œinputTypesœ: [œToolœ], œtypeœ: œotherœ}"
173
+ },
174
+ {
175
+ "animated": false,
176
+ "className": "",
177
+ "data": {
178
+ "sourceHandle": {
179
+ "dataType": "CalculatorComponent",
180
+ "id": "CalculatorComponent-FyfwW",
181
+ "name": "component_as_tool",
182
+ "output_types": [
183
+ "Tool"
184
+ ]
185
+ },
186
+ "targetHandle": {
187
+ "fieldName": "tools",
188
+ "id": "Agent-C8zRS",
189
+ "inputTypes": [
190
+ "Tool"
191
+ ],
192
+ "type": "other"
193
+ }
194
+ },
195
+ "id": "reactflow__edge-CalculatorComponent-FyfwW{œdataTypeœ:œCalculatorComponentœ,œidœ:œCalculatorComponent-FyfwWœ,œnameœ:œcomponent_as_toolœ,œoutput_typesœ:[œToolœ]}-Agent-C8zRS{œfieldNameœ:œtoolsœ,œidœ:œAgent-C8zRSœ,œinputTypesœ:[œToolœ],œtypeœ:œotherœ}",
196
+ "selected": false,
197
+ "source": "CalculatorComponent-FyfwW",
198
+ "sourceHandle": "{œdataTypeœ: œCalculatorComponentœ, œidœ: œCalculatorComponent-FyfwWœ, œnameœ: œcomponent_as_toolœ, œoutput_typesœ: [œToolœ]}",
199
+ "target": "Agent-C8zRS",
200
+ "targetHandle": "{œfieldNameœ: œtoolsœ, œidœ: œAgent-C8zRSœ, œinputTypesœ: [œToolœ], œtypeœ: œotherœ}"
201
+ }
202
+ ],
203
+ "nodes": [
204
+ {
205
+ "data": {
206
+ "id": "ChatInput-hRyEJ",
207
+ "node": {
208
+ "base_classes": [
209
+ "Message"
210
+ ],
211
+ "beta": false,
212
+ "conditional_paths": [],
213
+ "custom_fields": {},
214
+ "description": "Get chat inputs from the Playground.",
215
+ "display_name": "Chat Input",
216
+ "documentation": "",
217
+ "edited": false,
218
+ "field_order": [
219
+ "input_value",
220
+ "should_store_message",
221
+ "sender",
222
+ "sender_name",
223
+ "session_id",
224
+ "files"
225
+ ],
226
+ "frozen": false,
227
+ "icon": "MessagesSquare",
228
+ "legacy": false,
229
+ "lf_version": "1.2.0",
230
+ "metadata": {},
231
+ "output_types": [],
232
+ "outputs": [
233
+ {
234
+ "allows_loop": false,
235
+ "cache": true,
236
+ "display_name": "Chat Message",
237
+ "group_outputs": false,
238
+ "method": "message_response",
239
+ "name": "message",
240
+ "selected": "Message",
241
+ "tool_mode": true,
242
+ "types": [
243
+ "Message"
244
+ ],
245
+ "value": "__UNDEFINED__"
246
+ }
247
+ ],
248
+ "pinned": false,
249
+ "template": {
250
+ "_type": "Component",
251
+ "code": {
252
+ "advanced": true,
253
+ "dynamic": true,
254
+ "fileTypes": [],
255
+ "file_path": "",
256
+ "info": "",
257
+ "list": false,
258
+ "load_from_db": false,
259
+ "multiline": true,
260
+ "name": "code",
261
+ "password": false,
262
+ "placeholder": "",
263
+ "required": true,
264
+ "show": true,
265
+ "title_case": false,
266
+ "type": "code",
267
+ "value": "from vibe_surf.langflow.base.data.utils import IMG_FILE_TYPES, TEXT_FILE_TYPES\nfrom vibe_surf.langflow.base.io.chat import ChatComponent\nfrom vibe_surf.langflow.inputs.inputs import BoolInput\nfrom vibe_surf.langflow.io import (\n DropdownInput,\n FileInput,\n MessageTextInput,\n MultilineInput,\n Output,\n)\nfrom vibe_surf.langflow.schema.message import Message\nfrom vibe_surf.langflow.utils.constants import (\n MESSAGE_SENDER_AI,\n MESSAGE_SENDER_NAME_USER,\n MESSAGE_SENDER_USER,\n)\n\n\nclass ChatInput(ChatComponent):\n display_name = \"Chat Input\"\n description = \"Get chat inputs from the Playground.\"\n documentation: str = \"https://docs.vibe_surf.langflow.org/components-io#chat-input\"\n icon = \"MessagesSquare\"\n name = \"ChatInput\"\n minimized = True\n\n inputs = [\n MultilineInput(\n name=\"input_value\",\n display_name=\"Input Text\",\n value=\"\",\n info=\"Message to be passed as input.\",\n input_types=[],\n ),\n BoolInput(\n name=\"should_store_message\",\n display_name=\"Store Messages\",\n info=\"Store the message in the history.\",\n value=True,\n advanced=True,\n ),\n DropdownInput(\n name=\"sender\",\n display_name=\"Sender Type\",\n options=[MESSAGE_SENDER_AI, MESSAGE_SENDER_USER],\n value=MESSAGE_SENDER_USER,\n info=\"Type of sender.\",\n advanced=True,\n ),\n MessageTextInput(\n name=\"sender_name\",\n display_name=\"Sender Name\",\n info=\"Name of the sender.\",\n value=MESSAGE_SENDER_NAME_USER,\n advanced=True,\n ),\n MessageTextInput(\n name=\"session_id\",\n display_name=\"Session ID\",\n info=\"The session ID of the chat. If empty, the current session ID parameter will be used.\",\n advanced=True,\n ),\n FileInput(\n name=\"files\",\n display_name=\"Files\",\n file_types=TEXT_FILE_TYPES + IMG_FILE_TYPES,\n info=\"Files to be sent with the message.\",\n advanced=True,\n is_list=True,\n temp_file=True,\n ),\n ]\n outputs = [\n Output(display_name=\"Chat Message\", name=\"message\", method=\"message_response\"),\n ]\n\n async def message_response(self) -> Message:\n # Ensure files is a list and filter out empty/None values\n files = self.files if self.files else []\n if files and not isinstance(files, list):\n files = [files]\n files = [f for f in files if f is not None and f != \"\"]\n\n message = await Message.create(\n text=self.input_value,\n sender=self.sender,\n sender_name=self.sender_name,\n session_id=self.session_id,\n files=files,\n )\n if self.session_id and isinstance(message, Message) and self.should_store_message:\n stored_message = await self.send_message(\n message,\n )\n self.message.value = stored_message\n message = stored_message\n\n self.status = message\n return message\n"
268
+ },
269
+ "files": {
270
+ "_input_type": "FileInput",
271
+ "advanced": true,
272
+ "display_name": "Files",
273
+ "dynamic": false,
274
+ "fileTypes": [
275
+ "csv",
276
+ "json",
277
+ "pdf",
278
+ "txt",
279
+ "md",
280
+ "mdx",
281
+ "yaml",
282
+ "yml",
283
+ "xml",
284
+ "html",
285
+ "htm",
286
+ "docx",
287
+ "py",
288
+ "sh",
289
+ "sql",
290
+ "js",
291
+ "ts",
292
+ "tsx",
293
+ "jpg",
294
+ "jpeg",
295
+ "png",
296
+ "bmp",
297
+ "image"
298
+ ],
299
+ "file_path": "",
300
+ "info": "Files to be sent with the message.",
301
+ "list": true,
302
+ "name": "files",
303
+ "placeholder": "",
304
+ "required": false,
305
+ "show": true,
306
+ "temp_file": true,
307
+ "title_case": false,
308
+ "trace_as_metadata": true,
309
+ "type": "file",
310
+ "value": ""
311
+ },
312
+ "input_value": {
313
+ "_input_type": "MultilineInput",
314
+ "advanced": false,
315
+ "display_name": "Input Text",
316
+ "dynamic": false,
317
+ "info": "Message to be passed as input.",
318
+ "input_types": [],
319
+ "list": false,
320
+ "load_from_db": false,
321
+ "multiline": true,
322
+ "name": "input_value",
323
+ "placeholder": "",
324
+ "required": false,
325
+ "show": true,
326
+ "title_case": false,
327
+ "trace_as_input": true,
328
+ "trace_as_metadata": true,
329
+ "type": "str",
330
+ "value": "Create a travel itinerary for a trip from São Paulo to Uberlândia, MG on August 23, 2024. The traveler enjoys drinking beer, eating pão de queijo, and drinking special coffee."
331
+ },
332
+ "sender": {
333
+ "_input_type": "DropdownInput",
334
+ "advanced": true,
335
+ "combobox": false,
336
+ "display_name": "Sender Type",
337
+ "dynamic": false,
338
+ "info": "Type of sender.",
339
+ "name": "sender",
340
+ "options": [
341
+ "Machine",
342
+ "User"
343
+ ],
344
+ "placeholder": "",
345
+ "required": false,
346
+ "show": true,
347
+ "title_case": false,
348
+ "trace_as_metadata": true,
349
+ "type": "str",
350
+ "value": "User"
351
+ },
352
+ "sender_name": {
353
+ "_input_type": "MessageTextInput",
354
+ "advanced": true,
355
+ "display_name": "Sender Name",
356
+ "dynamic": false,
357
+ "info": "Name of the sender.",
358
+ "input_types": [
359
+ "Message"
360
+ ],
361
+ "list": false,
362
+ "load_from_db": false,
363
+ "name": "sender_name",
364
+ "placeholder": "",
365
+ "required": false,
366
+ "show": true,
367
+ "title_case": false,
368
+ "trace_as_input": true,
369
+ "trace_as_metadata": true,
370
+ "type": "str",
371
+ "value": "User"
372
+ },
373
+ "session_id": {
374
+ "_input_type": "MessageTextInput",
375
+ "advanced": true,
376
+ "display_name": "Session ID",
377
+ "dynamic": false,
378
+ "info": "The session ID of the chat. If empty, the current session ID parameter will be used.",
379
+ "input_types": [
380
+ "Message"
381
+ ],
382
+ "list": false,
383
+ "load_from_db": false,
384
+ "name": "session_id",
385
+ "placeholder": "",
386
+ "required": false,
387
+ "show": true,
388
+ "title_case": false,
389
+ "trace_as_input": true,
390
+ "trace_as_metadata": true,
391
+ "type": "str",
392
+ "value": ""
393
+ },
394
+ "should_store_message": {
395
+ "_input_type": "BoolInput",
396
+ "advanced": true,
397
+ "display_name": "Store Messages",
398
+ "dynamic": false,
399
+ "info": "Store the message in the history.",
400
+ "list": false,
401
+ "name": "should_store_message",
402
+ "placeholder": "",
403
+ "required": false,
404
+ "show": true,
405
+ "title_case": false,
406
+ "trace_as_metadata": true,
407
+ "type": "bool",
408
+ "value": true
409
+ }
410
+ }
411
+ },
412
+ "selected_output": "message",
413
+ "type": "ChatInput"
414
+ },
415
+ "dragging": false,
416
+ "height": 262,
417
+ "id": "ChatInput-hRyEJ",
418
+ "measured": {
419
+ "height": 262,
420
+ "width": 360
421
+ },
422
+ "position": {
423
+ "x": 1731.3224944651397,
424
+ "y": 595.5715252590742
425
+ },
426
+ "positionAbsolute": {
427
+ "x": 1756.77096149088,
428
+ "y": 292.73476765276695
429
+ },
430
+ "selected": false,
431
+ "type": "genericNode",
432
+ "width": 360
433
+ },
434
+ {
435
+ "data": {
436
+ "description": "Display a chat message in the Playground.",
437
+ "display_name": "Chat Output",
438
+ "id": "ChatOutput-TzFZY",
439
+ "node": {
440
+ "base_classes": [
441
+ "Message"
442
+ ],
443
+ "beta": false,
444
+ "conditional_paths": [],
445
+ "custom_fields": {},
446
+ "description": "Display a chat message in the Playground.",
447
+ "display_name": "Chat Output",
448
+ "documentation": "",
449
+ "edited": false,
450
+ "field_order": [
451
+ "input_value",
452
+ "should_store_message",
453
+ "sender",
454
+ "sender_name",
455
+ "session_id",
456
+ "data_template",
457
+ "background_color",
458
+ "chat_icon",
459
+ "text_color"
460
+ ],
461
+ "frozen": false,
462
+ "icon": "MessagesSquare",
463
+ "legacy": false,
464
+ "lf_version": "1.2.0",
465
+ "metadata": {},
466
+ "output_types": [],
467
+ "outputs": [
468
+ {
469
+ "allows_loop": false,
470
+ "cache": true,
471
+ "display_name": "Output Message",
472
+ "group_outputs": false,
473
+ "method": "message_response",
474
+ "name": "message",
475
+ "selected": "Message",
476
+ "tool_mode": true,
477
+ "types": [
478
+ "Message"
479
+ ],
480
+ "value": "__UNDEFINED__"
481
+ }
482
+ ],
483
+ "pinned": false,
484
+ "template": {
485
+ "_type": "Component",
486
+ "code": {
487
+ "advanced": true,
488
+ "dynamic": true,
489
+ "fileTypes": [],
490
+ "file_path": "",
491
+ "info": "",
492
+ "list": false,
493
+ "load_from_db": false,
494
+ "multiline": true,
495
+ "name": "code",
496
+ "password": false,
497
+ "placeholder": "",
498
+ "required": true,
499
+ "show": true,
500
+ "title_case": false,
501
+ "type": "code",
502
+ "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"
503
+ },
504
+ "data_template": {
505
+ "_input_type": "MessageTextInput",
506
+ "advanced": true,
507
+ "display_name": "Data Template",
508
+ "dynamic": false,
509
+ "info": "Template to convert Data to Text. If left empty, it will be dynamically set to the Data's text key.",
510
+ "input_types": [
511
+ "Message"
512
+ ],
513
+ "list": false,
514
+ "load_from_db": false,
515
+ "name": "data_template",
516
+ "placeholder": "",
517
+ "required": false,
518
+ "show": true,
519
+ "title_case": false,
520
+ "tool_mode": false,
521
+ "trace_as_input": true,
522
+ "trace_as_metadata": true,
523
+ "type": "str",
524
+ "value": "{text}"
525
+ },
526
+ "input_value": {
527
+ "_input_type": "MessageInput",
528
+ "advanced": false,
529
+ "display_name": "Inputs",
530
+ "dynamic": false,
531
+ "info": "Message to be passed as output.",
532
+ "input_types": [
533
+ "Data",
534
+ "DataFrame",
535
+ "Message"
536
+ ],
537
+ "list": false,
538
+ "load_from_db": false,
539
+ "name": "input_value",
540
+ "placeholder": "",
541
+ "required": true,
542
+ "show": true,
543
+ "title_case": false,
544
+ "trace_as_input": true,
545
+ "trace_as_metadata": true,
546
+ "type": "str",
547
+ "value": ""
548
+ },
549
+ "sender": {
550
+ "_input_type": "DropdownInput",
551
+ "advanced": true,
552
+ "combobox": false,
553
+ "display_name": "Sender Type",
554
+ "dynamic": false,
555
+ "info": "Type of sender.",
556
+ "name": "sender",
557
+ "options": [
558
+ "Machine",
559
+ "User"
560
+ ],
561
+ "placeholder": "",
562
+ "required": false,
563
+ "show": true,
564
+ "title_case": false,
565
+ "tool_mode": false,
566
+ "trace_as_metadata": true,
567
+ "type": "str",
568
+ "value": "Machine"
569
+ },
570
+ "sender_name": {
571
+ "_input_type": "MessageTextInput",
572
+ "advanced": true,
573
+ "display_name": "Sender Name",
574
+ "dynamic": false,
575
+ "info": "Name of the sender.",
576
+ "input_types": [
577
+ "Message"
578
+ ],
579
+ "list": false,
580
+ "load_from_db": false,
581
+ "name": "sender_name",
582
+ "placeholder": "",
583
+ "required": false,
584
+ "show": true,
585
+ "title_case": false,
586
+ "tool_mode": false,
587
+ "trace_as_input": true,
588
+ "trace_as_metadata": true,
589
+ "type": "str",
590
+ "value": "AI"
591
+ },
592
+ "session_id": {
593
+ "_input_type": "MessageTextInput",
594
+ "advanced": true,
595
+ "display_name": "Session ID",
596
+ "dynamic": false,
597
+ "info": "The session ID of the chat. If empty, the current session ID parameter will be used.",
598
+ "input_types": [
599
+ "Message"
600
+ ],
601
+ "list": false,
602
+ "load_from_db": false,
603
+ "name": "session_id",
604
+ "placeholder": "",
605
+ "required": false,
606
+ "show": true,
607
+ "title_case": false,
608
+ "tool_mode": false,
609
+ "trace_as_input": true,
610
+ "trace_as_metadata": true,
611
+ "type": "str",
612
+ "value": ""
613
+ },
614
+ "should_store_message": {
615
+ "_input_type": "BoolInput",
616
+ "advanced": true,
617
+ "display_name": "Store Messages",
618
+ "dynamic": false,
619
+ "info": "Store the message in the history.",
620
+ "list": false,
621
+ "name": "should_store_message",
622
+ "placeholder": "",
623
+ "required": false,
624
+ "show": true,
625
+ "title_case": false,
626
+ "trace_as_metadata": true,
627
+ "type": "bool",
628
+ "value": true
629
+ }
630
+ },
631
+ "tool_mode": false
632
+ },
633
+ "type": "ChatOutput"
634
+ },
635
+ "dragging": false,
636
+ "height": 262,
637
+ "id": "ChatOutput-TzFZY",
638
+ "measured": {
639
+ "height": 262,
640
+ "width": 360
641
+ },
642
+ "position": {
643
+ "x": 4349.229697347143,
644
+ "y": 620.5490494265098
645
+ },
646
+ "positionAbsolute": {
647
+ "x": 4349.229697347143,
648
+ "y": 620.5490494265098
649
+ },
650
+ "selected": false,
651
+ "type": "genericNode",
652
+ "width": 360
653
+ },
654
+ {
655
+ "data": {
656
+ "id": "note-j1Nu2",
657
+ "node": {
658
+ "description": "# 📖 README\n\nThe travel planning system is a smart setup that uses several specialized Agent components to help plan incredible trips. Imagine each agent as a travel expert focusing on a part of your journey. Here's how it works:\nEach agent has a role defined in the **Agent Instructions** and relevant **Tools** attached. The user submits a query through the **Chat Input**, and the three agents create a complete travel plan based on the user's query.\n\n## Quickstart\n1. Add your **OpenAI API Key** to each Agent.\n2. Add your **Search API** key to the Search API component.\n2. Run the flow in the **Playground**.",
659
+ "display_name": "",
660
+ "documentation": "",
661
+ "template": {}
662
+ },
663
+ "type": "note"
664
+ },
665
+ "dragging": false,
666
+ "height": 453,
667
+ "id": "note-j1Nu2",
668
+ "measured": {
669
+ "height": 453,
670
+ "width": 371
671
+ },
672
+ "position": {
673
+ "x": 1708.5674196681368,
674
+ "y": 75.74701473340798
675
+ },
676
+ "positionAbsolute": {
677
+ "x": 1076.3710803600266,
678
+ "y": 92.06058855045646
679
+ },
680
+ "resizing": false,
681
+ "selected": false,
682
+ "style": {
683
+ "height": 636,
684
+ "width": 324
685
+ },
686
+ "type": "noteNode",
687
+ "width": 371
688
+ },
689
+ {
690
+ "data": {
691
+ "description": "Load and retrieve data from specified URLs. Supports output in plain text, raw HTML, or JSON, with options for cleaning and separating multiple outputs.",
692
+ "display_name": "URL",
693
+ "id": "URL-zTFcy",
694
+ "node": {
695
+ "base_classes": [
696
+ "Data",
697
+ "DataFrame",
698
+ "Message"
699
+ ],
700
+ "beta": false,
701
+ "conditional_paths": [],
702
+ "custom_fields": {},
703
+ "description": "Fetch content from one or more web pages, following links recursively.",
704
+ "display_name": "URL",
705
+ "documentation": "",
706
+ "edited": false,
707
+ "field_order": [
708
+ "urls",
709
+ "format",
710
+ "separator",
711
+ "clean_extra_whitespace"
712
+ ],
713
+ "frozen": false,
714
+ "icon": "layout-template",
715
+ "legacy": false,
716
+ "lf_version": "1.2.0",
717
+ "metadata": {},
718
+ "minimized": false,
719
+ "output_types": [],
720
+ "outputs": [
721
+ {
722
+ "allows_loop": false,
723
+ "cache": true,
724
+ "display_name": "Toolset",
725
+ "group_outputs": false,
726
+ "hidden": false,
727
+ "method": "to_toolkit",
728
+ "name": "component_as_tool",
729
+ "options": null,
730
+ "required_inputs": null,
731
+ "selected": "Tool",
732
+ "tool_mode": true,
733
+ "types": [
734
+ "Tool"
735
+ ],
736
+ "value": "__UNDEFINED__"
737
+ }
738
+ ],
739
+ "pinned": false,
740
+ "template": {
741
+ "_type": "Component",
742
+ "autoset_encoding": {
743
+ "_input_type": "BoolInput",
744
+ "advanced": true,
745
+ "display_name": "Autoset Encoding",
746
+ "dynamic": false,
747
+ "info": "If enabled, automatically sets the encoding of the request.",
748
+ "list": false,
749
+ "list_add_label": "Add More",
750
+ "name": "autoset_encoding",
751
+ "placeholder": "",
752
+ "required": false,
753
+ "show": true,
754
+ "title_case": false,
755
+ "tool_mode": false,
756
+ "trace_as_metadata": true,
757
+ "type": "bool",
758
+ "value": true
759
+ },
760
+ "check_response_status": {
761
+ "_input_type": "BoolInput",
762
+ "advanced": true,
763
+ "display_name": "Check Response Status",
764
+ "dynamic": false,
765
+ "info": "If enabled, checks the response status of the request.",
766
+ "list": false,
767
+ "list_add_label": "Add More",
768
+ "name": "check_response_status",
769
+ "placeholder": "",
770
+ "required": false,
771
+ "show": true,
772
+ "title_case": false,
773
+ "tool_mode": false,
774
+ "trace_as_metadata": true,
775
+ "type": "bool",
776
+ "value": false
777
+ },
778
+ "code": {
779
+ "advanced": true,
780
+ "dynamic": true,
781
+ "fileTypes": [],
782
+ "file_path": "",
783
+ "info": "",
784
+ "list": false,
785
+ "load_from_db": false,
786
+ "multiline": true,
787
+ "name": "code",
788
+ "password": false,
789
+ "placeholder": "",
790
+ "required": true,
791
+ "show": true,
792
+ "title_case": false,
793
+ "type": "code",
794
+ "value": "import re\n\nimport requests\nfrom bs4 import BeautifulSoup\nfrom langchain_community.document_loaders import RecursiveUrlLoader\nfrom loguru import logger\n\nfrom vibe_surf.langflow.custom import Component\nfrom vibe_surf.langflow.field_typing.range_spec import RangeSpec\nfrom vibe_surf.langflow.helpers.data import safe_convert\nfrom vibe_surf.langflow.io import BoolInput, DropdownInput, IntInput, MessageTextInput, Output, SliderInput, TableInput\nfrom vibe_surf.langflow.schema import DataFrame, Message\nfrom vibe_surf.langflow.services.deps import get_settings_service\n\n# Constants\nDEFAULT_TIMEOUT = 30\nDEFAULT_MAX_DEPTH = 1\nDEFAULT_FORMAT = \"Text\"\nURL_REGEX = re.compile(\n r\"^(https?:\\/\\/)?\" r\"(www\\.)?\" r\"([a-zA-Z0-9.-]+)\" r\"(\\.[a-zA-Z]{2,})?\" r\"(:\\d+)?\" r\"(\\/[^\\s]*)?$\",\n re.IGNORECASE,\n)\n\n\nclass URLComponent(Component):\n \"\"\"A component that loads and parses content from web pages recursively.\n\n This component allows fetching content from one or more URLs, with options to:\n - Control crawl depth\n - Prevent crawling outside the root domain\n - Use async loading for better performance\n - Extract either raw HTML or clean text\n - Configure request headers and timeouts\n \"\"\"\n\n display_name = \"URL\"\n description = \"Fetch content from one or more web pages, following links recursively.\"\n icon = \"layout-template\"\n name = \"URLComponent\"\n\n inputs = [\n MessageTextInput(\n name=\"urls\",\n display_name=\"URLs\",\n info=\"Enter one or more URLs to crawl recursively, by clicking the '+' button.\",\n is_list=True,\n tool_mode=True,\n placeholder=\"Enter a URL...\",\n list_add_label=\"Add URL\",\n input_types=[],\n ),\n SliderInput(\n name=\"max_depth\",\n display_name=\"Depth\",\n info=(\n \"Controls how many 'clicks' away from the initial page the crawler will go:\\n\"\n \"- depth 1: only the initial page\\n\"\n \"- depth 2: initial page + all pages linked directly from it\\n\"\n \"- depth 3: initial page + direct links + links found on those direct link pages\\n\"\n \"Note: This is about link traversal, not URL path depth.\"\n ),\n value=DEFAULT_MAX_DEPTH,\n range_spec=RangeSpec(min=1, max=5, step=1),\n required=False,\n min_label=\" \",\n max_label=\" \",\n min_label_icon=\"None\",\n max_label_icon=\"None\",\n # slider_input=True\n ),\n BoolInput(\n name=\"prevent_outside\",\n display_name=\"Prevent Outside\",\n info=(\n \"If enabled, only crawls URLs within the same domain as the root URL. \"\n \"This helps prevent the crawler from going to external websites.\"\n ),\n value=True,\n required=False,\n advanced=True,\n ),\n BoolInput(\n name=\"use_async\",\n display_name=\"Use Async\",\n info=(\n \"If enabled, uses asynchronous loading which can be significantly faster \"\n \"but might use more system resources.\"\n ),\n value=True,\n required=False,\n advanced=True,\n ),\n DropdownInput(\n name=\"format\",\n display_name=\"Output Format\",\n info=\"Output Format. Use 'Text' to extract the text from the HTML or 'HTML' for the raw HTML content.\",\n options=[\"Text\", \"HTML\"],\n value=DEFAULT_FORMAT,\n advanced=True,\n ),\n IntInput(\n name=\"timeout\",\n display_name=\"Timeout\",\n info=\"Timeout for the request in seconds.\",\n value=DEFAULT_TIMEOUT,\n required=False,\n advanced=True,\n ),\n TableInput(\n name=\"headers\",\n display_name=\"Headers\",\n info=\"The headers to send with the request\",\n table_schema=[\n {\n \"name\": \"key\",\n \"display_name\": \"Header\",\n \"type\": \"str\",\n \"description\": \"Header name\",\n },\n {\n \"name\": \"value\",\n \"display_name\": \"Value\",\n \"type\": \"str\",\n \"description\": \"Header value\",\n },\n ],\n value=[{\"key\": \"User-Agent\", \"value\": get_settings_service().settings.user_agent}],\n advanced=True,\n input_types=[\"DataFrame\"],\n ),\n BoolInput(\n name=\"filter_text_html\",\n display_name=\"Filter Text/HTML\",\n info=\"If enabled, filters out text/css content type from the results.\",\n value=True,\n required=False,\n advanced=True,\n ),\n BoolInput(\n name=\"continue_on_failure\",\n display_name=\"Continue on Failure\",\n info=\"If enabled, continues crawling even if some requests fail.\",\n value=True,\n required=False,\n advanced=True,\n ),\n BoolInput(\n name=\"check_response_status\",\n display_name=\"Check Response Status\",\n info=\"If enabled, checks the response status of the request.\",\n value=False,\n required=False,\n advanced=True,\n ),\n BoolInput(\n name=\"autoset_encoding\",\n display_name=\"Autoset Encoding\",\n info=\"If enabled, automatically sets the encoding of the request.\",\n value=True,\n required=False,\n advanced=True,\n ),\n ]\n\n outputs = [\n Output(display_name=\"Result\", name=\"page_results\", method=\"fetch_content\"),\n Output(display_name=\"Raw Result\", name=\"raw_results\", method=\"as_message\"),\n ]\n\n @staticmethod\n def validate_url(url: str) -> bool:\n \"\"\"Validates if the given string matches URL pattern.\n\n Args:\n url: The URL string to validate\n\n Returns:\n bool: True if the URL is valid, False otherwise\n \"\"\"\n return bool(URL_REGEX.match(url))\n\n def ensure_url(self, url: str) -> str:\n \"\"\"Ensures the given string is a valid URL.\n\n Args:\n url: The URL string to validate and normalize\n\n Returns:\n str: The normalized URL\n\n Raises:\n ValueError: If the URL is invalid\n \"\"\"\n url = url.strip()\n if not url.startswith((\"http://\", \"https://\")):\n url = \"https://\" + url\n\n if not self.validate_url(url):\n msg = f\"Invalid URL: {url}\"\n raise ValueError(msg)\n\n return url\n\n def _create_loader(self, url: str) -> RecursiveUrlLoader:\n \"\"\"Creates a RecursiveUrlLoader instance with the configured settings.\n\n Args:\n url: The URL to load\n\n Returns:\n RecursiveUrlLoader: Configured loader instance\n \"\"\"\n headers_dict = {header[\"key\"]: header[\"value\"] for header in self.headers}\n extractor = (lambda x: x) if self.format == \"HTML\" else (lambda x: BeautifulSoup(x, \"lxml\").get_text())\n\n return RecursiveUrlLoader(\n url=url,\n max_depth=self.max_depth,\n prevent_outside=self.prevent_outside,\n use_async=self.use_async,\n extractor=extractor,\n timeout=self.timeout,\n headers=headers_dict,\n check_response_status=self.check_response_status,\n continue_on_failure=self.continue_on_failure,\n base_url=url, # Add base_url to ensure consistent domain crawling\n autoset_encoding=self.autoset_encoding, # Enable automatic encoding detection\n exclude_dirs=[], # Allow customization of excluded directories\n link_regex=None, # Allow customization of link filtering\n )\n\n def fetch_url_contents(self) -> list[dict]:\n \"\"\"Load documents from the configured URLs.\n\n Returns:\n List[Data]: List of Data objects containing the fetched content\n\n Raises:\n ValueError: If no valid URLs are provided or if there's an error loading documents\n \"\"\"\n try:\n urls = list({self.ensure_url(url) for url in self.urls if url.strip()})\n logger.info(f\"URLs: {urls}\")\n if not urls:\n msg = \"No valid URLs provided.\"\n raise ValueError(msg)\n\n all_docs = []\n for url in urls:\n logger.info(f\"Loading documents from {url}\")\n\n try:\n loader = self._create_loader(url)\n docs = loader.load()\n\n if not docs:\n logger.warning(f\"No documents found for {url}\")\n continue\n\n logger.info(f\"Found {len(docs)} documents from {url}\")\n all_docs.extend(docs)\n\n except requests.exceptions.RequestException as e:\n logger.exception(f\"Error loading documents from {url}: {e}\")\n continue\n\n if not all_docs:\n msg = \"No documents were successfully loaded from any URL\"\n raise ValueError(msg)\n\n # data = [Data(text=doc.page_content, **doc.metadata) for doc in all_docs]\n data = [\n {\n \"text\": safe_convert(doc.page_content, clean_data=True),\n \"url\": doc.metadata.get(\"source\", \"\"),\n \"title\": doc.metadata.get(\"title\", \"\"),\n \"description\": doc.metadata.get(\"description\", \"\"),\n \"content_type\": doc.metadata.get(\"content_type\", \"\"),\n \"language\": doc.metadata.get(\"language\", \"\"),\n }\n for doc in all_docs\n ]\n except Exception as e:\n error_msg = e.message if hasattr(e, \"message\") else e\n msg = f\"Error loading documents: {error_msg!s}\"\n logger.exception(msg)\n raise ValueError(msg) from e\n return data\n\n def fetch_content(self) -> DataFrame:\n \"\"\"Convert the documents to a DataFrame.\"\"\"\n return DataFrame(data=self.fetch_url_contents())\n\n def as_message(self) -> Message:\n \"\"\"Convert the documents to a Message.\"\"\"\n url_contents = self.fetch_url_contents()\n return Message(text=\"\\n\\n\".join([x[\"text\"] for x in url_contents]), data={\"data\": url_contents})\n"
795
+ },
796
+ "continue_on_failure": {
797
+ "_input_type": "BoolInput",
798
+ "advanced": true,
799
+ "display_name": "Continue on Failure",
800
+ "dynamic": false,
801
+ "info": "If enabled, continues crawling even if some requests fail.",
802
+ "list": false,
803
+ "list_add_label": "Add More",
804
+ "name": "continue_on_failure",
805
+ "placeholder": "",
806
+ "required": false,
807
+ "show": true,
808
+ "title_case": false,
809
+ "tool_mode": false,
810
+ "trace_as_metadata": true,
811
+ "type": "bool",
812
+ "value": true
813
+ },
814
+ "filter_text_html": {
815
+ "_input_type": "BoolInput",
816
+ "advanced": true,
817
+ "display_name": "Filter Text/HTML",
818
+ "dynamic": false,
819
+ "info": "If enabled, filters out text/css content type from the results.",
820
+ "list": false,
821
+ "list_add_label": "Add More",
822
+ "name": "filter_text_html",
823
+ "placeholder": "",
824
+ "required": false,
825
+ "show": true,
826
+ "title_case": false,
827
+ "tool_mode": false,
828
+ "trace_as_metadata": true,
829
+ "type": "bool",
830
+ "value": true
831
+ },
832
+ "format": {
833
+ "_input_type": "DropdownInput",
834
+ "advanced": true,
835
+ "combobox": false,
836
+ "dialog_inputs": {},
837
+ "display_name": "Output Format",
838
+ "dynamic": false,
839
+ "info": "Output Format. Use 'Text' to extract the text from the HTML or 'HTML' for the raw HTML content.",
840
+ "name": "format",
841
+ "options": [
842
+ "Text",
843
+ "HTML"
844
+ ],
845
+ "options_metadata": [],
846
+ "placeholder": "",
847
+ "real_time_refresh": true,
848
+ "required": false,
849
+ "show": true,
850
+ "title_case": false,
851
+ "tool_mode": false,
852
+ "trace_as_metadata": true,
853
+ "type": "str",
854
+ "value": "Text"
855
+ },
856
+ "headers": {
857
+ "_input_type": "TableInput",
858
+ "advanced": true,
859
+ "display_name": "Headers",
860
+ "dynamic": false,
861
+ "info": "The headers to send with the request",
862
+ "input_types": [
863
+ "DataFrame"
864
+ ],
865
+ "is_list": true,
866
+ "list_add_label": "Add More",
867
+ "name": "headers",
868
+ "placeholder": "",
869
+ "required": false,
870
+ "show": true,
871
+ "table_icon": "Table",
872
+ "table_schema": {
873
+ "columns": [
874
+ {
875
+ "default": "None",
876
+ "description": "Header name",
877
+ "disable_edit": false,
878
+ "display_name": "Header",
879
+ "edit_mode": "popover",
880
+ "filterable": true,
881
+ "formatter": "text",
882
+ "hidden": false,
883
+ "name": "key",
884
+ "sortable": true,
885
+ "type": "str"
886
+ },
887
+ {
888
+ "default": "None",
889
+ "description": "Header value",
890
+ "disable_edit": false,
891
+ "display_name": "Value",
892
+ "edit_mode": "popover",
893
+ "filterable": true,
894
+ "formatter": "text",
895
+ "hidden": false,
896
+ "name": "value",
897
+ "sortable": true,
898
+ "type": "str"
899
+ }
900
+ ]
901
+ },
902
+ "title_case": false,
903
+ "tool_mode": false,
904
+ "trace_as_metadata": true,
905
+ "trigger_icon": "Table",
906
+ "trigger_text": "Open table",
907
+ "type": "table",
908
+ "value": [
909
+ {
910
+ "key": "User-Agent",
911
+ "value": "langflow"
912
+ }
913
+ ]
914
+ },
915
+ "max_depth": {
916
+ "_input_type": "SliderInput",
917
+ "advanced": false,
918
+ "display_name": "Depth",
919
+ "dynamic": false,
920
+ "info": "Controls how many 'clicks' away from the initial page the crawler will go:\n- depth 1: only the initial page\n- depth 2: initial page + all pages linked directly from it\n- depth 3: initial page + direct links + links found on those direct link pages\nNote: This is about link traversal, not URL path depth.",
921
+ "max_label": " ",
922
+ "max_label_icon": "None",
923
+ "min_label": " ",
924
+ "min_label_icon": "None",
925
+ "name": "max_depth",
926
+ "placeholder": "",
927
+ "range_spec": {
928
+ "max": 5,
929
+ "min": 1,
930
+ "step": 1,
931
+ "step_type": "float"
932
+ },
933
+ "required": false,
934
+ "show": true,
935
+ "slider_buttons": false,
936
+ "slider_buttons_options": [],
937
+ "slider_input": false,
938
+ "title_case": false,
939
+ "tool_mode": false,
940
+ "type": "slider",
941
+ "value": 1
942
+ },
943
+ "prevent_outside": {
944
+ "_input_type": "BoolInput",
945
+ "advanced": true,
946
+ "display_name": "Prevent Outside",
947
+ "dynamic": false,
948
+ "info": "If enabled, only crawls URLs within the same domain as the root URL. This helps prevent the crawler from going to external websites.",
949
+ "list": false,
950
+ "list_add_label": "Add More",
951
+ "name": "prevent_outside",
952
+ "placeholder": "",
953
+ "required": false,
954
+ "show": true,
955
+ "title_case": false,
956
+ "tool_mode": false,
957
+ "trace_as_metadata": true,
958
+ "type": "bool",
959
+ "value": true
960
+ },
961
+ "timeout": {
962
+ "_input_type": "IntInput",
963
+ "advanced": true,
964
+ "display_name": "Timeout",
965
+ "dynamic": false,
966
+ "info": "Timeout for the request in seconds.",
967
+ "list": false,
968
+ "list_add_label": "Add More",
969
+ "name": "timeout",
970
+ "placeholder": "",
971
+ "required": false,
972
+ "show": true,
973
+ "title_case": false,
974
+ "tool_mode": false,
975
+ "trace_as_metadata": true,
976
+ "type": "int",
977
+ "value": 30
978
+ },
979
+ "tools_metadata": {
980
+ "_input_type": "ToolsInput",
981
+ "advanced": false,
982
+ "display_name": "Actions",
983
+ "dynamic": false,
984
+ "info": "Modify tool names and descriptions to help agents understand when to use each tool.",
985
+ "is_list": true,
986
+ "list_add_label": "Add More",
987
+ "name": "tools_metadata",
988
+ "placeholder": "",
989
+ "real_time_refresh": true,
990
+ "required": false,
991
+ "show": true,
992
+ "title_case": false,
993
+ "tool_mode": false,
994
+ "trace_as_metadata": true,
995
+ "type": "tools",
996
+ "value": [
997
+ {
998
+ "args": {
999
+ "urls": {
1000
+ "default": "",
1001
+ "description": "Enter one or more URLs to crawl recursively, by clicking the '+' button.",
1002
+ "items": {
1003
+ "type": "string"
1004
+ },
1005
+ "title": "Urls",
1006
+ "type": "array"
1007
+ }
1008
+ },
1009
+ "description": "Fetch content from one or more web pages, following links recursively.",
1010
+ "display_description": "Fetch content from one or more web pages, following links recursively.",
1011
+ "display_name": "fetch_content",
1012
+ "name": "fetch_content",
1013
+ "readonly": false,
1014
+ "status": true,
1015
+ "tags": [
1016
+ "fetch_content"
1017
+ ]
1018
+ },
1019
+ {
1020
+ "args": {
1021
+ "urls": {
1022
+ "default": "",
1023
+ "description": "Enter one or more URLs to crawl recursively, by clicking the '+' button.",
1024
+ "items": {
1025
+ "type": "string"
1026
+ },
1027
+ "title": "Urls",
1028
+ "type": "array"
1029
+ }
1030
+ },
1031
+ "description": "Fetch content from one or more web pages, following links recursively.",
1032
+ "display_description": "Fetch content from one or more web pages, following links recursively.",
1033
+ "display_name": "as_message",
1034
+ "name": "as_message",
1035
+ "readonly": false,
1036
+ "status": true,
1037
+ "tags": [
1038
+ "as_message"
1039
+ ]
1040
+ }
1041
+ ]
1042
+ },
1043
+ "urls": {
1044
+ "_input_type": "MessageTextInput",
1045
+ "advanced": false,
1046
+ "display_name": "URLs",
1047
+ "dynamic": false,
1048
+ "info": "Enter one or more URLs to crawl recursively, by clicking the '+' button.",
1049
+ "input_types": [],
1050
+ "list": true,
1051
+ "list_add_label": "Add URL",
1052
+ "load_from_db": false,
1053
+ "name": "urls",
1054
+ "placeholder": "Enter a URL...",
1055
+ "required": false,
1056
+ "show": true,
1057
+ "title_case": false,
1058
+ "tool_mode": true,
1059
+ "trace_as_input": true,
1060
+ "trace_as_metadata": true,
1061
+ "type": "str",
1062
+ "value": ""
1063
+ },
1064
+ "use_async": {
1065
+ "_input_type": "BoolInput",
1066
+ "advanced": true,
1067
+ "display_name": "Use Async",
1068
+ "dynamic": false,
1069
+ "info": "If enabled, uses asynchronous loading which can be significantly faster but might use more system resources.",
1070
+ "list": false,
1071
+ "list_add_label": "Add More",
1072
+ "name": "use_async",
1073
+ "placeholder": "",
1074
+ "required": false,
1075
+ "show": true,
1076
+ "title_case": false,
1077
+ "tool_mode": false,
1078
+ "trace_as_metadata": true,
1079
+ "type": "bool",
1080
+ "value": true
1081
+ }
1082
+ },
1083
+ "tool_mode": true
1084
+ },
1085
+ "selected_output": "component_as_tool",
1086
+ "showNode": true,
1087
+ "type": "URL"
1088
+ },
1089
+ "dragging": false,
1090
+ "id": "URL-zTFcy",
1091
+ "measured": {
1092
+ "height": 290,
1093
+ "width": 320
1094
+ },
1095
+ "position": {
1096
+ "x": 2815.5187953791974,
1097
+ "y": 949.802524756467
1098
+ },
1099
+ "selected": false,
1100
+ "type": "genericNode"
1101
+ },
1102
+ {
1103
+ "data": {
1104
+ "id": "CalculatorComponent-FyfwW",
1105
+ "node": {
1106
+ "base_classes": [
1107
+ "Data"
1108
+ ],
1109
+ "beta": false,
1110
+ "category": "tools",
1111
+ "conditional_paths": [],
1112
+ "custom_fields": {},
1113
+ "description": "Perform basic arithmetic operations on a given expression.",
1114
+ "display_name": "Calculator",
1115
+ "documentation": "",
1116
+ "edited": false,
1117
+ "field_order": [
1118
+ "expression"
1119
+ ],
1120
+ "frozen": false,
1121
+ "icon": "calculator",
1122
+ "key": "CalculatorComponent",
1123
+ "legacy": false,
1124
+ "lf_version": "1.2.0",
1125
+ "metadata": {},
1126
+ "minimized": false,
1127
+ "output_types": [],
1128
+ "outputs": [
1129
+ {
1130
+ "allows_loop": false,
1131
+ "cache": true,
1132
+ "display_name": "Toolset",
1133
+ "group_outputs": false,
1134
+ "hidden": false,
1135
+ "method": "to_toolkit",
1136
+ "name": "component_as_tool",
1137
+ "options": null,
1138
+ "required_inputs": null,
1139
+ "selected": "Tool",
1140
+ "tool_mode": true,
1141
+ "types": [
1142
+ "Tool"
1143
+ ],
1144
+ "value": "__UNDEFINED__"
1145
+ }
1146
+ ],
1147
+ "pinned": false,
1148
+ "score": 0.001,
1149
+ "template": {
1150
+ "_type": "Component",
1151
+ "code": {
1152
+ "advanced": true,
1153
+ "dynamic": true,
1154
+ "fileTypes": [],
1155
+ "file_path": "",
1156
+ "info": "",
1157
+ "list": false,
1158
+ "load_from_db": false,
1159
+ "multiline": true,
1160
+ "name": "code",
1161
+ "password": false,
1162
+ "placeholder": "",
1163
+ "required": true,
1164
+ "show": true,
1165
+ "title_case": false,
1166
+ "type": "code",
1167
+ "value": "import ast\nimport operator\nfrom collections.abc import Callable\n\nfrom vibe_surf.langflow.custom.custom_component.component import Component\nfrom vibe_surf.langflow.inputs.inputs import MessageTextInput\nfrom vibe_surf.langflow.io import Output\nfrom vibe_surf.langflow.schema.data import Data\n\n\nclass CalculatorComponent(Component):\n display_name = \"Calculator\"\n description = \"Perform basic arithmetic operations on a given expression.\"\n documentation: str = \"https://docs.vibe_surf.langflow.org/components-helpers#calculator\"\n icon = \"calculator\"\n\n # Cache operators dictionary as a class variable\n OPERATORS: dict[type[ast.operator], Callable] = {\n ast.Add: operator.add,\n ast.Sub: operator.sub,\n ast.Mult: operator.mul,\n ast.Div: operator.truediv,\n ast.Pow: operator.pow,\n }\n\n inputs = [\n MessageTextInput(\n name=\"expression\",\n display_name=\"Expression\",\n info=\"The arithmetic expression to evaluate (e.g., '4*4*(33/22)+12-20').\",\n tool_mode=True,\n ),\n ]\n\n outputs = [\n Output(display_name=\"Data\", name=\"result\", type_=Data, method=\"evaluate_expression\"),\n ]\n\n def _eval_expr(self, node: ast.AST) -> float:\n \"\"\"Evaluate an AST node recursively.\"\"\"\n if isinstance(node, ast.Constant):\n if isinstance(node.value, int | float):\n return float(node.value)\n error_msg = f\"Unsupported constant type: {type(node.value).__name__}\"\n raise TypeError(error_msg)\n if isinstance(node, ast.Num): # For backwards compatibility\n if isinstance(node.n, int | float):\n return float(node.n)\n error_msg = f\"Unsupported number type: {type(node.n).__name__}\"\n raise TypeError(error_msg)\n\n if isinstance(node, ast.BinOp):\n op_type = type(node.op)\n if op_type not in self.OPERATORS:\n error_msg = f\"Unsupported binary operator: {op_type.__name__}\"\n raise TypeError(error_msg)\n\n left = self._eval_expr(node.left)\n right = self._eval_expr(node.right)\n return self.OPERATORS[op_type](left, right)\n\n error_msg = f\"Unsupported operation or expression type: {type(node).__name__}\"\n raise TypeError(error_msg)\n\n def evaluate_expression(self) -> Data:\n \"\"\"Evaluate the mathematical expression and return the result.\"\"\"\n try:\n tree = ast.parse(self.expression, mode=\"eval\")\n result = self._eval_expr(tree.body)\n\n formatted_result = f\"{float(result):.6f}\".rstrip(\"0\").rstrip(\".\")\n self.log(f\"Calculation result: {formatted_result}\")\n\n self.status = formatted_result\n return Data(data={\"result\": formatted_result})\n\n except ZeroDivisionError:\n error_message = \"Error: Division by zero\"\n self.status = error_message\n return Data(data={\"error\": error_message, \"input\": self.expression})\n\n except (SyntaxError, TypeError, KeyError, ValueError, AttributeError, OverflowError) as e:\n error_message = f\"Invalid expression: {e!s}\"\n self.status = error_message\n return Data(data={\"error\": error_message, \"input\": self.expression})\n\n def build(self):\n \"\"\"Return the main evaluation function.\"\"\"\n return self.evaluate_expression\n"
1168
+ },
1169
+ "expression": {
1170
+ "_input_type": "MessageTextInput",
1171
+ "advanced": false,
1172
+ "display_name": "Expression",
1173
+ "dynamic": false,
1174
+ "info": "The arithmetic expression to evaluate (e.g., '4*4*(33/22)+12-20').",
1175
+ "input_types": [
1176
+ "Message"
1177
+ ],
1178
+ "list": false,
1179
+ "list_add_label": "Add More",
1180
+ "load_from_db": false,
1181
+ "name": "expression",
1182
+ "placeholder": "",
1183
+ "required": false,
1184
+ "show": true,
1185
+ "title_case": false,
1186
+ "tool_mode": true,
1187
+ "trace_as_input": true,
1188
+ "trace_as_metadata": true,
1189
+ "type": "str",
1190
+ "value": ""
1191
+ },
1192
+ "tools_metadata": {
1193
+ "_input_type": "ToolsInput",
1194
+ "advanced": false,
1195
+ "display_name": "Actions",
1196
+ "dynamic": false,
1197
+ "info": "Modify tool names and descriptions to help agents understand when to use each tool.",
1198
+ "is_list": true,
1199
+ "list_add_label": "Add More",
1200
+ "name": "tools_metadata",
1201
+ "placeholder": "",
1202
+ "real_time_refresh": true,
1203
+ "required": false,
1204
+ "show": true,
1205
+ "title_case": false,
1206
+ "tool_mode": false,
1207
+ "trace_as_metadata": true,
1208
+ "type": "tools",
1209
+ "value": [
1210
+ {
1211
+ "args": {
1212
+ "expression": {
1213
+ "default": "",
1214
+ "description": "The arithmetic expression to evaluate (e.g., '4*4*(33/22)+12-20').",
1215
+ "title": "Expression",
1216
+ "type": "string"
1217
+ }
1218
+ },
1219
+ "description": "CalculatorComponent. evaluate_expression() - Perform basic arithmetic operations on a given expression.",
1220
+ "display_description": "CalculatorComponent. evaluate_expression() - Perform basic arithmetic operations on a given expression.",
1221
+ "display_name": "evaluate_expression",
1222
+ "name": "evaluate_expression",
1223
+ "status": true,
1224
+ "tags": [
1225
+ "evaluate_expression"
1226
+ ]
1227
+ }
1228
+ ]
1229
+ }
1230
+ },
1231
+ "tool_mode": true
1232
+ },
1233
+ "selected_output": "component_as_tool",
1234
+ "showNode": true,
1235
+ "type": "CalculatorComponent"
1236
+ },
1237
+ "dragging": false,
1238
+ "id": "CalculatorComponent-FyfwW",
1239
+ "measured": {
1240
+ "height": 218,
1241
+ "width": 320
1242
+ },
1243
+ "position": {
1244
+ "x": 3540.356346381247,
1245
+ "y": 989.3563951826354
1246
+ },
1247
+ "selected": false,
1248
+ "type": "genericNode"
1249
+ },
1250
+ {
1251
+ "data": {
1252
+ "description": "Call the searchapi.io API with result limiting",
1253
+ "display_name": "Search API",
1254
+ "id": "SearchComponent-mY1Fv",
1255
+ "node": {
1256
+ "base_classes": [
1257
+ "Data",
1258
+ "DataFrame",
1259
+ "Message"
1260
+ ],
1261
+ "beta": false,
1262
+ "conditional_paths": [],
1263
+ "custom_fields": {},
1264
+ "description": "Calls the SearchApi API with result limiting. Supports Google, Bing and DuckDuckGo.",
1265
+ "display_name": "Search API",
1266
+ "documentation": "https://www.searchapi.io/docs/google",
1267
+ "edited": false,
1268
+ "field_order": [
1269
+ "engine",
1270
+ "api_key",
1271
+ "input_value",
1272
+ "search_params",
1273
+ "max_results",
1274
+ "max_snippet_length"
1275
+ ],
1276
+ "frozen": false,
1277
+ "icon": "SearchAPI",
1278
+ "legacy": false,
1279
+ "lf_version": "1.2.0",
1280
+ "metadata": {},
1281
+ "minimized": false,
1282
+ "output_types": [],
1283
+ "outputs": [
1284
+ {
1285
+ "allows_loop": false,
1286
+ "cache": true,
1287
+ "display_name": "Toolset",
1288
+ "group_outputs": false,
1289
+ "hidden": null,
1290
+ "method": "to_toolkit",
1291
+ "name": "component_as_tool",
1292
+ "options": null,
1293
+ "required_inputs": null,
1294
+ "selected": "Tool",
1295
+ "tool_mode": true,
1296
+ "types": [
1297
+ "Tool"
1298
+ ],
1299
+ "value": "__UNDEFINED__"
1300
+ }
1301
+ ],
1302
+ "pinned": false,
1303
+ "template": {
1304
+ "_type": "Component",
1305
+ "api_key": {
1306
+ "_input_type": "SecretStrInput",
1307
+ "advanced": false,
1308
+ "display_name": "SearchAPI API Key",
1309
+ "dynamic": false,
1310
+ "info": "",
1311
+ "input_types": [],
1312
+ "load_from_db": false,
1313
+ "name": "api_key",
1314
+ "password": true,
1315
+ "placeholder": "",
1316
+ "required": true,
1317
+ "show": true,
1318
+ "title_case": false,
1319
+ "type": "str",
1320
+ "value": null
1321
+ },
1322
+ "code": {
1323
+ "advanced": true,
1324
+ "dynamic": true,
1325
+ "fileTypes": [],
1326
+ "file_path": "",
1327
+ "info": "",
1328
+ "list": false,
1329
+ "load_from_db": false,
1330
+ "multiline": true,
1331
+ "name": "code",
1332
+ "password": false,
1333
+ "placeholder": "",
1334
+ "required": true,
1335
+ "show": true,
1336
+ "title_case": false,
1337
+ "type": "code",
1338
+ "value": "from typing import Any\n\nfrom langchain_community.utilities.searchapi import SearchApiAPIWrapper\n\nfrom vibe_surf.langflow.custom.custom_component.component import Component\nfrom vibe_surf.langflow.inputs.inputs import DictInput, DropdownInput, IntInput, MultilineInput, SecretStrInput\nfrom vibe_surf.langflow.io import Output\nfrom vibe_surf.langflow.schema.data import Data\nfrom vibe_surf.langflow.schema.dataframe import DataFrame\n\n\nclass SearchComponent(Component):\n display_name: str = \"SearchApi\"\n description: str = \"Calls the SearchApi API with result limiting. Supports Google, Bing and DuckDuckGo.\"\n documentation: str = \"https://www.searchapi.io/docs/google\"\n icon = \"SearchAPI\"\n\n inputs = [\n DropdownInput(name=\"engine\", display_name=\"Engine\", value=\"google\", options=[\"google\", \"bing\", \"duckduckgo\"]),\n SecretStrInput(name=\"api_key\", display_name=\"SearchAPI API Key\", required=True),\n MultilineInput(\n name=\"input_value\",\n display_name=\"Input\",\n tool_mode=True,\n ),\n DictInput(name=\"search_params\", display_name=\"Search parameters\", advanced=True, is_list=True),\n IntInput(name=\"max_results\", display_name=\"Max Results\", value=5, advanced=True),\n IntInput(name=\"max_snippet_length\", display_name=\"Max Snippet Length\", value=100, advanced=True),\n ]\n\n outputs = [\n Output(display_name=\"DataFrame\", name=\"dataframe\", method=\"fetch_content_dataframe\"),\n ]\n\n def _build_wrapper(self):\n return SearchApiAPIWrapper(engine=self.engine, searchapi_api_key=self.api_key)\n\n def run_model(self) -> DataFrame:\n return self.fetch_content_dataframe()\n\n def fetch_content(self) -> list[Data]:\n wrapper = self._build_wrapper()\n\n def search_func(\n query: str, params: dict[str, Any] | None = None, max_results: int = 5, max_snippet_length: int = 100\n ) -> list[Data]:\n params = params or {}\n full_results = wrapper.results(query=query, **params)\n organic_results = full_results.get(\"organic_results\", [])[:max_results]\n\n return [\n Data(\n text=result.get(\"snippet\", \"\"),\n data={\n \"title\": result.get(\"title\", \"\")[:max_snippet_length],\n \"link\": result.get(\"link\", \"\"),\n \"snippet\": result.get(\"snippet\", \"\")[:max_snippet_length],\n },\n )\n for result in organic_results\n ]\n\n results = search_func(\n self.input_value,\n self.search_params or {},\n self.max_results,\n self.max_snippet_length,\n )\n self.status = results\n return results\n\n def fetch_content_dataframe(self) -> DataFrame:\n \"\"\"Convert the search results to a DataFrame.\n\n Returns:\n DataFrame: A DataFrame containing the search results.\n \"\"\"\n data = self.fetch_content()\n return DataFrame(data)\n"
1339
+ },
1340
+ "engine": {
1341
+ "_input_type": "DropdownInput",
1342
+ "advanced": false,
1343
+ "combobox": false,
1344
+ "dialog_inputs": {},
1345
+ "display_name": "Engine",
1346
+ "dynamic": false,
1347
+ "info": "",
1348
+ "name": "engine",
1349
+ "options": [
1350
+ "google",
1351
+ "bing",
1352
+ "duckduckgo"
1353
+ ],
1354
+ "options_metadata": [],
1355
+ "placeholder": "",
1356
+ "required": false,
1357
+ "show": true,
1358
+ "title_case": false,
1359
+ "tool_mode": false,
1360
+ "trace_as_metadata": true,
1361
+ "type": "str",
1362
+ "value": "google"
1363
+ },
1364
+ "input_value": {
1365
+ "_input_type": "MultilineInput",
1366
+ "advanced": false,
1367
+ "copy_field": false,
1368
+ "display_name": "Input",
1369
+ "dynamic": false,
1370
+ "info": "",
1371
+ "input_types": [
1372
+ "Message"
1373
+ ],
1374
+ "list": false,
1375
+ "list_add_label": "Add More",
1376
+ "load_from_db": false,
1377
+ "multiline": true,
1378
+ "name": "input_value",
1379
+ "placeholder": "",
1380
+ "required": false,
1381
+ "show": true,
1382
+ "title_case": false,
1383
+ "tool_mode": true,
1384
+ "trace_as_input": true,
1385
+ "trace_as_metadata": true,
1386
+ "type": "str",
1387
+ "value": ""
1388
+ },
1389
+ "max_results": {
1390
+ "_input_type": "IntInput",
1391
+ "advanced": true,
1392
+ "display_name": "Max Results",
1393
+ "dynamic": false,
1394
+ "info": "",
1395
+ "list": false,
1396
+ "list_add_label": "Add More",
1397
+ "name": "max_results",
1398
+ "placeholder": "",
1399
+ "required": false,
1400
+ "show": true,
1401
+ "title_case": false,
1402
+ "tool_mode": false,
1403
+ "trace_as_metadata": true,
1404
+ "type": "int",
1405
+ "value": 5
1406
+ },
1407
+ "max_snippet_length": {
1408
+ "_input_type": "IntInput",
1409
+ "advanced": true,
1410
+ "display_name": "Max Snippet Length",
1411
+ "dynamic": false,
1412
+ "info": "",
1413
+ "list": false,
1414
+ "list_add_label": "Add More",
1415
+ "name": "max_snippet_length",
1416
+ "placeholder": "",
1417
+ "required": false,
1418
+ "show": true,
1419
+ "title_case": false,
1420
+ "tool_mode": false,
1421
+ "trace_as_metadata": true,
1422
+ "type": "int",
1423
+ "value": 100
1424
+ },
1425
+ "search_params": {
1426
+ "_input_type": "DictInput",
1427
+ "advanced": true,
1428
+ "display_name": "Search parameters",
1429
+ "dynamic": false,
1430
+ "info": "",
1431
+ "list": true,
1432
+ "list_add_label": "Add More",
1433
+ "name": "search_params",
1434
+ "placeholder": "",
1435
+ "required": false,
1436
+ "show": true,
1437
+ "title_case": false,
1438
+ "tool_mode": false,
1439
+ "trace_as_input": true,
1440
+ "type": "dict",
1441
+ "value": {}
1442
+ },
1443
+ "tools_metadata": {
1444
+ "_input_type": "ToolsInput",
1445
+ "advanced": false,
1446
+ "display_name": "Actions",
1447
+ "dynamic": false,
1448
+ "info": "Modify tool names and descriptions to help agents understand when to use each tool.",
1449
+ "is_list": true,
1450
+ "list_add_label": "Add More",
1451
+ "name": "tools_metadata",
1452
+ "placeholder": "",
1453
+ "real_time_refresh": true,
1454
+ "required": false,
1455
+ "show": true,
1456
+ "title_case": false,
1457
+ "tool_mode": false,
1458
+ "trace_as_metadata": true,
1459
+ "type": "tools",
1460
+ "value": [
1461
+ {
1462
+ "args": {
1463
+ "input_value": {
1464
+ "default": "",
1465
+ "description": "",
1466
+ "title": "Input Value",
1467
+ "type": "string"
1468
+ }
1469
+ },
1470
+ "description": "Call the searchapi.io API with result limiting",
1471
+ "display_description": "Call the searchapi.io API with result limiting",
1472
+ "display_name": "fetch_content_dataframe",
1473
+ "name": "fetch_content_dataframe",
1474
+ "readonly": false,
1475
+ "status": true,
1476
+ "tags": [
1477
+ "fetch_content_dataframe"
1478
+ ]
1479
+ }
1480
+ ]
1481
+ }
1482
+ },
1483
+ "tool_mode": true
1484
+ },
1485
+ "selected_output": "component_as_tool",
1486
+ "showNode": true,
1487
+ "type": "SearchComponent"
1488
+ },
1489
+ "dragging": false,
1490
+ "id": "SearchComponent-mY1Fv",
1491
+ "measured": {
1492
+ "height": 367,
1493
+ "width": 320
1494
+ },
1495
+ "position": {
1496
+ "x": 2089.0393126914205,
1497
+ "y": 894.9349094163676
1498
+ },
1499
+ "selected": false,
1500
+ "type": "genericNode"
1501
+ },
1502
+ {
1503
+ "data": {
1504
+ "id": "Agent-RTpIN",
1505
+ "node": {
1506
+ "base_classes": [
1507
+ "Message"
1508
+ ],
1509
+ "beta": false,
1510
+ "conditional_paths": [],
1511
+ "custom_fields": {},
1512
+ "description": "Define the agent's instructions, then enter a task to complete using tools.",
1513
+ "display_name": "City Selection Agent",
1514
+ "documentation": "",
1515
+ "edited": false,
1516
+ "field_order": [
1517
+ "agent_llm",
1518
+ "max_tokens",
1519
+ "model_kwargs",
1520
+ "json_mode",
1521
+ "model_name",
1522
+ "openai_api_base",
1523
+ "api_key",
1524
+ "temperature",
1525
+ "seed",
1526
+ "max_retries",
1527
+ "timeout",
1528
+ "system_prompt",
1529
+ "n_messages",
1530
+ "tools",
1531
+ "input_value",
1532
+ "handle_parsing_errors",
1533
+ "verbose",
1534
+ "max_iterations",
1535
+ "agent_description",
1536
+ "add_current_date_tool"
1537
+ ],
1538
+ "frozen": false,
1539
+ "icon": "bot",
1540
+ "legacy": false,
1541
+ "metadata": {},
1542
+ "minimized": false,
1543
+ "output_types": [],
1544
+ "outputs": [
1545
+ {
1546
+ "allows_loop": false,
1547
+ "cache": true,
1548
+ "display_name": "Response",
1549
+ "group_outputs": false,
1550
+ "method": "message_response",
1551
+ "name": "response",
1552
+ "selected": "Message",
1553
+ "tool_mode": true,
1554
+ "types": [
1555
+ "Message"
1556
+ ],
1557
+ "value": "__UNDEFINED__"
1558
+ }
1559
+ ],
1560
+ "pinned": false,
1561
+ "template": {
1562
+ "_type": "Component",
1563
+ "add_current_date_tool": {
1564
+ "_input_type": "BoolInput",
1565
+ "advanced": true,
1566
+ "display_name": "Current Date",
1567
+ "dynamic": false,
1568
+ "info": "If true, will add a tool to the agent that returns the current date.",
1569
+ "list": false,
1570
+ "list_add_label": "Add More",
1571
+ "name": "add_current_date_tool",
1572
+ "placeholder": "",
1573
+ "required": false,
1574
+ "show": true,
1575
+ "title_case": false,
1576
+ "tool_mode": false,
1577
+ "trace_as_metadata": true,
1578
+ "type": "bool",
1579
+ "value": true
1580
+ },
1581
+ "agent_description": {
1582
+ "_input_type": "MultilineInput",
1583
+ "advanced": true,
1584
+ "copy_field": false,
1585
+ "display_name": "Agent Description [Deprecated]",
1586
+ "dynamic": false,
1587
+ "info": "The description of the agent. This is only used when in Tool Mode. Defaults to 'A helpful assistant with access to the following tools:' and tools are added dynamically. This feature is deprecated and will be removed in future versions.",
1588
+ "input_types": [
1589
+ "Message"
1590
+ ],
1591
+ "list": false,
1592
+ "list_add_label": "Add More",
1593
+ "load_from_db": false,
1594
+ "multiline": true,
1595
+ "name": "agent_description",
1596
+ "placeholder": "",
1597
+ "required": false,
1598
+ "show": true,
1599
+ "title_case": false,
1600
+ "tool_mode": false,
1601
+ "trace_as_input": true,
1602
+ "trace_as_metadata": true,
1603
+ "type": "str",
1604
+ "value": "A helpful assistant with access to the following tools:"
1605
+ },
1606
+ "agent_llm": {
1607
+ "_input_type": "DropdownInput",
1608
+ "advanced": false,
1609
+ "combobox": false,
1610
+ "dialog_inputs": {},
1611
+ "display_name": "Model Provider",
1612
+ "dynamic": false,
1613
+ "external_options": {
1614
+ "fields": {
1615
+ "data": {
1616
+ "node": {
1617
+ "display_name": "Connect other models",
1618
+ "icon": "CornerDownLeft",
1619
+ "name": "connect_other_models"
1620
+ }
1621
+ }
1622
+ }
1623
+ },
1624
+ "info": "The provider of the language model that the agent will use to generate responses.",
1625
+ "input_types": [],
1626
+ "name": "agent_llm",
1627
+ "options": [
1628
+ "Anthropic",
1629
+ "Google Generative AI",
1630
+ "OpenAI"
1631
+ ],
1632
+ "options_metadata": [
1633
+ {
1634
+ "icon": "Anthropic"
1635
+ },
1636
+ {
1637
+ "icon": "GoogleGenerativeAI"
1638
+ },
1639
+ {
1640
+ "icon": "OpenAI"
1641
+ }
1642
+ ],
1643
+ "placeholder": "",
1644
+ "real_time_refresh": true,
1645
+ "required": false,
1646
+ "show": true,
1647
+ "title_case": false,
1648
+ "toggle": false,
1649
+ "tool_mode": false,
1650
+ "trace_as_metadata": true,
1651
+ "type": "str",
1652
+ "value": "OpenAI"
1653
+ },
1654
+ "api_key": {
1655
+ "_input_type": "SecretStrInput",
1656
+ "advanced": false,
1657
+ "display_name": "OpenAI API Key",
1658
+ "dynamic": false,
1659
+ "info": "The OpenAI API Key to use for the OpenAI model.",
1660
+ "input_types": [],
1661
+ "load_from_db": true,
1662
+ "name": "api_key",
1663
+ "password": true,
1664
+ "placeholder": "",
1665
+ "real_time_refresh": true,
1666
+ "required": false,
1667
+ "show": true,
1668
+ "title_case": false,
1669
+ "type": "str",
1670
+ "value": "OPENAI_API_KEY"
1671
+ },
1672
+ "code": {
1673
+ "advanced": true,
1674
+ "dynamic": true,
1675
+ "fileTypes": [],
1676
+ "file_path": "",
1677
+ "info": "",
1678
+ "list": false,
1679
+ "load_from_db": false,
1680
+ "multiline": true,
1681
+ "name": "code",
1682
+ "password": false,
1683
+ "placeholder": "",
1684
+ "required": true,
1685
+ "show": true,
1686
+ "title_case": false,
1687
+ "type": "code",
1688
+ "value": "import json\nimport re\n\nfrom langchain_core.tools import StructuredTool\nfrom pydantic import ValidationError\n\nfrom vibe_surf.langflow.base.agents.agent import LCToolsAgentComponent\nfrom vibe_surf.langflow.base.agents.events import ExceptionWithMessageError\nfrom vibe_surf.langflow.base.models.model_input_constants import (\n ALL_PROVIDER_FIELDS,\n MODEL_DYNAMIC_UPDATE_FIELDS,\n MODEL_PROVIDERS_DICT,\n MODELS_METADATA,\n)\nfrom vibe_surf.langflow.base.models.model_utils import get_model_name\nfrom vibe_surf.langflow.components.helpers.current_date import CurrentDateComponent\nfrom vibe_surf.langflow.components.helpers.memory import MemoryComponent\nfrom vibe_surf.langflow.components.langchain_utilities.tool_calling import (\n ToolCallingAgentComponent,\n)\nfrom vibe_surf.langflow.custom.custom_component.component import _get_component_toolkit\nfrom vibe_surf.langflow.custom.utils import update_component_build_config\nfrom vibe_surf.langflow.field_typing import Tool\nfrom vibe_surf.langflow.helpers.base_model import build_model_from_schema\nfrom vibe_surf.langflow.io import (\n BoolInput,\n DropdownInput,\n IntInput,\n MultilineInput,\n Output,\n TableInput,\n)\nfrom vibe_surf.langflow.logging import logger\nfrom vibe_surf.langflow.schema.data import Data\nfrom vibe_surf.langflow.schema.dotdict import dotdict\nfrom vibe_surf.langflow.schema.message import Message\nfrom vibe_surf.langflow.schema.table import EditMode\n\n\ndef set_advanced_true(component_input):\n component_input.advanced = True\n return component_input\n\n\nMODEL_PROVIDERS_LIST = [\"Anthropic\", \"Google Generative AI\", \"OpenAI\"]\n\n\nclass AgentComponent(ToolCallingAgentComponent):\n display_name: str = \"Agent\"\n description: str = \"Define the agent's instructions, then enter a task to complete using tools.\"\n documentation: str = \"https://docs.vibe_surf.langflow.org/agents\"\n icon = \"bot\"\n beta = False\n name = \"Agent\"\n\n memory_inputs = [set_advanced_true(component_input) for component_input in MemoryComponent().inputs]\n\n # Filter out json_mode from OpenAI inputs since we handle structured output differently\n openai_inputs_filtered = [\n input_field\n for input_field in MODEL_PROVIDERS_DICT[\"OpenAI\"][\"inputs\"]\n if not (hasattr(input_field, \"name\") and input_field.name == \"json_mode\")\n ]\n\n inputs = [\n DropdownInput(\n name=\"agent_llm\",\n display_name=\"Model Provider\",\n info=\"The provider of the language model that the agent will use to generate responses.\",\n options=[*MODEL_PROVIDERS_LIST],\n value=\"OpenAI\",\n real_time_refresh=True,\n refresh_button=False,\n input_types=[],\n options_metadata=[MODELS_METADATA[key] for key in MODEL_PROVIDERS_LIST],\n external_options={\n \"fields\": {\n \"data\": {\n \"node\": {\n \"name\": \"connect_other_models\",\n \"display_name\": \"Connect other models\",\n \"icon\": \"CornerDownLeft\",\n }\n }\n },\n },\n ),\n *openai_inputs_filtered,\n MultilineInput(\n name=\"system_prompt\",\n display_name=\"Agent Instructions\",\n info=\"System Prompt: Initial instructions and context provided to guide the agent's behavior.\",\n value=\"You are a helpful assistant that can use tools to answer questions and perform tasks.\",\n advanced=False,\n ),\n IntInput(\n name=\"n_messages\",\n display_name=\"Number of Chat History Messages\",\n value=100,\n info=\"Number of chat history messages to retrieve.\",\n advanced=True,\n show=True,\n ),\n MultilineInput(\n name=\"format_instructions\",\n display_name=\"Output Format Instructions\",\n info=\"Generic Template for structured output formatting. Valid only with Structured response.\",\n value=(\n \"You are an AI that extracts structured JSON objects from unstructured text. \"\n \"Use a predefined schema with expected types (str, int, float, bool, dict). \"\n \"Extract ALL relevant instances that match the schema - if multiple patterns exist, capture them all. \"\n \"Fill missing or ambiguous values with defaults: null for missing values. \"\n \"Remove exact duplicates but keep variations that have different field values. \"\n \"Always return valid JSON in the expected format, never throw errors. \"\n \"If multiple objects can be extracted, return them all in the structured format.\"\n ),\n advanced=True,\n ),\n TableInput(\n name=\"output_schema\",\n display_name=\"Output Schema\",\n info=(\n \"Schema Validation: Define the structure and data types for structured output. \"\n \"No validation if no output schema.\"\n ),\n advanced=True,\n required=False,\n value=[],\n table_schema=[\n {\n \"name\": \"name\",\n \"display_name\": \"Name\",\n \"type\": \"str\",\n \"description\": \"Specify the name of the output field.\",\n \"default\": \"field\",\n \"edit_mode\": EditMode.INLINE,\n },\n {\n \"name\": \"description\",\n \"display_name\": \"Description\",\n \"type\": \"str\",\n \"description\": \"Describe the purpose of the output field.\",\n \"default\": \"description of field\",\n \"edit_mode\": EditMode.POPOVER,\n },\n {\n \"name\": \"type\",\n \"display_name\": \"Type\",\n \"type\": \"str\",\n \"edit_mode\": EditMode.INLINE,\n \"description\": (\"Indicate the data type of the output field (e.g., str, int, float, bool, dict).\"),\n \"options\": [\"str\", \"int\", \"float\", \"bool\", \"dict\"],\n \"default\": \"str\",\n },\n {\n \"name\": \"multiple\",\n \"display_name\": \"As List\",\n \"type\": \"boolean\",\n \"description\": \"Set to True if this output field should be a list of the specified type.\",\n \"default\": \"False\",\n \"edit_mode\": EditMode.INLINE,\n },\n ],\n ),\n *LCToolsAgentComponent._base_inputs,\n # removed memory inputs from agent component\n # *memory_inputs,\n BoolInput(\n name=\"add_current_date_tool\",\n display_name=\"Current Date\",\n advanced=True,\n info=\"If true, will add a tool to the agent that returns the current date.\",\n value=True,\n ),\n ]\n outputs = [\n Output(name=\"response\", display_name=\"Response\", method=\"message_response\"),\n ]\n\n async def get_agent_requirements(self):\n \"\"\"Get the agent requirements for the agent.\"\"\"\n llm_model, display_name = await self.get_llm()\n if llm_model is None:\n msg = \"No language model selected. Please choose a model to proceed.\"\n raise ValueError(msg)\n self.model_name = get_model_name(llm_model, display_name=display_name)\n\n # Get memory data\n self.chat_history = await self.get_memory_data()\n if isinstance(self.chat_history, Message):\n self.chat_history = [self.chat_history]\n\n # Add current date tool if enabled\n if self.add_current_date_tool:\n if not isinstance(self.tools, list): # type: ignore[has-type]\n self.tools = []\n current_date_tool = (await CurrentDateComponent(**self.get_base_args()).to_toolkit()).pop(0)\n if not isinstance(current_date_tool, StructuredTool):\n msg = \"CurrentDateComponent must be converted to a StructuredTool\"\n raise TypeError(msg)\n self.tools.append(current_date_tool)\n return llm_model, self.chat_history, self.tools\n\n async def message_response(self) -> Message:\n try:\n llm_model, self.chat_history, self.tools = await self.get_agent_requirements()\n # Set up and run agent\n self.set(\n llm=llm_model,\n tools=self.tools or [],\n chat_history=self.chat_history,\n input_value=self.input_value,\n system_prompt=self.system_prompt,\n )\n agent = self.create_agent_runnable()\n result = await self.run_agent(agent)\n\n # Store result for potential JSON output\n self._agent_result = result\n\n except (ValueError, TypeError, KeyError) as e:\n await logger.aerror(f\"{type(e).__name__}: {e!s}\")\n raise\n except ExceptionWithMessageError as e:\n await logger.aerror(f\"ExceptionWithMessageError occurred: {e}\")\n raise\n # Avoid catching blind Exception; let truly unexpected exceptions propagate\n except Exception as e:\n await logger.aerror(f\"Unexpected error: {e!s}\")\n raise\n else:\n return result\n\n def _preprocess_schema(self, schema):\n \"\"\"Preprocess schema to ensure correct data types for build_model_from_schema.\"\"\"\n processed_schema = []\n for field in schema:\n processed_field = {\n \"name\": str(field.get(\"name\", \"field\")),\n \"type\": str(field.get(\"type\", \"str\")),\n \"description\": str(field.get(\"description\", \"\")),\n \"multiple\": field.get(\"multiple\", False),\n }\n # Ensure multiple is handled correctly\n if isinstance(processed_field[\"multiple\"], str):\n processed_field[\"multiple\"] = processed_field[\"multiple\"].lower() in [\n \"true\",\n \"1\",\n \"t\",\n \"y\",\n \"yes\",\n ]\n processed_schema.append(processed_field)\n return processed_schema\n\n async def build_structured_output_base(self, content: str):\n \"\"\"Build structured output with optional BaseModel validation.\"\"\"\n json_pattern = r\"\\{.*\\}\"\n schema_error_msg = \"Try setting an output schema\"\n\n # Try to parse content as JSON first\n json_data = None\n try:\n json_data = json.loads(content)\n except json.JSONDecodeError:\n json_match = re.search(json_pattern, content, re.DOTALL)\n if json_match:\n try:\n json_data = json.loads(json_match.group())\n except json.JSONDecodeError:\n return {\"content\": content, \"error\": schema_error_msg}\n else:\n return {\"content\": content, \"error\": schema_error_msg}\n\n # If no output schema provided, return parsed JSON without validation\n if not hasattr(self, \"output_schema\") or not self.output_schema or len(self.output_schema) == 0:\n return json_data\n\n # Use BaseModel validation with schema\n try:\n processed_schema = self._preprocess_schema(self.output_schema)\n output_model = build_model_from_schema(processed_schema)\n\n # Validate against the schema\n if isinstance(json_data, list):\n # Multiple objects\n validated_objects = []\n for item in json_data:\n try:\n validated_obj = output_model.model_validate(item)\n validated_objects.append(validated_obj.model_dump())\n except ValidationError as e:\n await logger.aerror(f\"Validation error for item: {e}\")\n # Include invalid items with error info\n validated_objects.append({\"data\": item, \"validation_error\": str(e)})\n return validated_objects\n\n # Single object\n try:\n validated_obj = output_model.model_validate(json_data)\n return [validated_obj.model_dump()] # Return as list for consistency\n except ValidationError as e:\n await logger.aerror(f\"Validation error: {e}\")\n return [{\"data\": json_data, \"validation_error\": str(e)}]\n\n except (TypeError, ValueError) as e:\n await logger.aerror(f\"Error building structured output: {e}\")\n # Fallback to parsed JSON without validation\n return json_data\n\n async def json_response(self) -> Data:\n \"\"\"Convert agent response to structured JSON Data output with schema validation.\"\"\"\n # Always use structured chat agent for JSON response mode for better JSON formatting\n try:\n system_components = []\n\n # 1. Agent Instructions (system_prompt)\n agent_instructions = getattr(self, \"system_prompt\", \"\") or \"\"\n if agent_instructions:\n system_components.append(f\"{agent_instructions}\")\n\n # 2. Format Instructions\n format_instructions = getattr(self, \"format_instructions\", \"\") or \"\"\n if format_instructions:\n system_components.append(f\"Format instructions: {format_instructions}\")\n\n # 3. Schema Information from BaseModel\n if hasattr(self, \"output_schema\") and self.output_schema and len(self.output_schema) > 0:\n try:\n processed_schema = self._preprocess_schema(self.output_schema)\n output_model = build_model_from_schema(processed_schema)\n schema_dict = output_model.model_json_schema()\n schema_info = (\n \"You are given some text that may include format instructions, \"\n \"explanations, or other content alongside a JSON schema.\\n\\n\"\n \"Your task:\\n\"\n \"- Extract only the JSON schema.\\n\"\n \"- Return it as valid JSON.\\n\"\n \"- Do not include format instructions, explanations, or extra text.\\n\\n\"\n \"Input:\\n\"\n f\"{json.dumps(schema_dict, indent=2)}\\n\\n\"\n \"Output (only JSON schema):\"\n )\n system_components.append(schema_info)\n except (ValidationError, ValueError, TypeError, KeyError) as e:\n await logger.aerror(f\"Could not build schema for prompt: {e}\", exc_info=True)\n\n # Combine all components\n combined_instructions = \"\\n\\n\".join(system_components) if system_components else \"\"\n llm_model, self.chat_history, self.tools = await self.get_agent_requirements()\n self.set(\n llm=llm_model,\n tools=self.tools or [],\n chat_history=self.chat_history,\n input_value=self.input_value,\n system_prompt=combined_instructions,\n )\n\n # Create and run structured chat agent\n try:\n structured_agent = self.create_agent_runnable()\n except (NotImplementedError, ValueError, TypeError) as e:\n await logger.aerror(f\"Error with structured chat agent: {e}\")\n raise\n try:\n result = await self.run_agent(structured_agent)\n except (\n ExceptionWithMessageError,\n ValueError,\n TypeError,\n RuntimeError,\n ) as e:\n await logger.aerror(f\"Error with structured agent result: {e}\")\n raise\n # Extract content from structured agent result\n if hasattr(result, \"content\"):\n content = result.content\n elif hasattr(result, \"text\"):\n content = result.text\n else:\n content = str(result)\n\n except (\n ExceptionWithMessageError,\n ValueError,\n TypeError,\n NotImplementedError,\n AttributeError,\n ) as e:\n await logger.aerror(f\"Error with structured chat agent: {e}\")\n # Fallback to regular agent\n content_str = \"No content returned from agent\"\n return Data(data={\"content\": content_str, \"error\": str(e)})\n\n # Process with structured output validation\n try:\n structured_output = await self.build_structured_output_base(content)\n\n # Handle different output formats\n if isinstance(structured_output, list) and structured_output:\n if len(structured_output) == 1:\n return Data(data=structured_output[0])\n return Data(data={\"results\": structured_output})\n if isinstance(structured_output, dict):\n return Data(data=structured_output)\n return Data(data={\"content\": content})\n\n except (ValueError, TypeError) as e:\n await logger.aerror(f\"Error in structured output processing: {e}\")\n return Data(data={\"content\": content, \"error\": str(e)})\n\n async def get_memory_data(self):\n # TODO: This is a temporary fix to avoid message duplication. We should develop a function for this.\n messages = (\n await MemoryComponent(**self.get_base_args())\n .set(\n session_id=self.graph.session_id,\n order=\"Ascending\",\n n_messages=self.n_messages,\n )\n .retrieve_messages()\n )\n return [\n message for message in messages if getattr(message, \"id\", None) != getattr(self.input_value, \"id\", None)\n ]\n\n async def get_llm(self):\n if not isinstance(self.agent_llm, str):\n return self.agent_llm, None\n\n try:\n provider_info = MODEL_PROVIDERS_DICT.get(self.agent_llm)\n if not provider_info:\n msg = f\"Invalid model provider: {self.agent_llm}\"\n raise ValueError(msg)\n\n component_class = provider_info.get(\"component_class\")\n display_name = component_class.display_name\n inputs = provider_info.get(\"inputs\")\n prefix = provider_info.get(\"prefix\", \"\")\n\n return self._build_llm_model(component_class, inputs, prefix), display_name\n\n except (AttributeError, ValueError, TypeError, RuntimeError) as e:\n await logger.aerror(f\"Error building {self.agent_llm} language model: {e!s}\")\n msg = f\"Failed to initialize language model: {e!s}\"\n raise ValueError(msg) from e\n\n def _build_llm_model(self, component, inputs, prefix=\"\"):\n model_kwargs = {}\n for input_ in inputs:\n if hasattr(self, f\"{prefix}{input_.name}\"):\n model_kwargs[input_.name] = getattr(self, f\"{prefix}{input_.name}\")\n return component.set(**model_kwargs).build_model()\n\n def set_component_params(self, component):\n provider_info = MODEL_PROVIDERS_DICT.get(self.agent_llm)\n if provider_info:\n inputs = provider_info.get(\"inputs\")\n prefix = provider_info.get(\"prefix\")\n # Filter out json_mode and only use attributes that exist on this component\n model_kwargs = {}\n for input_ in inputs:\n if hasattr(self, f\"{prefix}{input_.name}\"):\n model_kwargs[input_.name] = getattr(self, f\"{prefix}{input_.name}\")\n\n return component.set(**model_kwargs)\n return component\n\n def delete_fields(self, build_config: dotdict, fields: dict | list[str]) -> None:\n \"\"\"Delete specified fields from build_config.\"\"\"\n for field in fields:\n build_config.pop(field, None)\n\n def update_input_types(self, build_config: dotdict) -> dotdict:\n \"\"\"Update input types for all fields in build_config.\"\"\"\n for key, value in build_config.items():\n if isinstance(value, dict):\n if value.get(\"input_types\") is None:\n build_config[key][\"input_types\"] = []\n elif hasattr(value, \"input_types\") and value.input_types is None:\n value.input_types = []\n return build_config\n\n async def update_build_config(\n self, build_config: dotdict, field_value: str, field_name: str | None = None\n ) -> dotdict:\n # Iterate over all providers in the MODEL_PROVIDERS_DICT\n # Existing logic for updating build_config\n if field_name in (\"agent_llm\",):\n build_config[\"agent_llm\"][\"value\"] = field_value\n provider_info = MODEL_PROVIDERS_DICT.get(field_value)\n if provider_info:\n component_class = provider_info.get(\"component_class\")\n if component_class and hasattr(component_class, \"update_build_config\"):\n # Call the component class's update_build_config method\n build_config = await update_component_build_config(\n component_class, build_config, field_value, \"model_name\"\n )\n\n provider_configs: dict[str, tuple[dict, list[dict]]] = {\n provider: (\n MODEL_PROVIDERS_DICT[provider][\"fields\"],\n [\n MODEL_PROVIDERS_DICT[other_provider][\"fields\"]\n for other_provider in MODEL_PROVIDERS_DICT\n if other_provider != provider\n ],\n )\n for provider in MODEL_PROVIDERS_DICT\n }\n if field_value in provider_configs:\n fields_to_add, fields_to_delete = provider_configs[field_value]\n\n # Delete fields from other providers\n for fields in fields_to_delete:\n self.delete_fields(build_config, fields)\n\n # Add provider-specific fields\n if field_value == \"OpenAI\" and not any(field in build_config for field in fields_to_add):\n build_config.update(fields_to_add)\n else:\n build_config.update(fields_to_add)\n # Reset input types for agent_llm\n build_config[\"agent_llm\"][\"input_types\"] = []\n build_config[\"agent_llm\"][\"display_name\"] = \"Model Provider\"\n elif field_value == \"connect_other_models\":\n # Delete all provider fields\n self.delete_fields(build_config, ALL_PROVIDER_FIELDS)\n # # Update with custom component\n custom_component = DropdownInput(\n name=\"agent_llm\",\n display_name=\"Language Model\",\n info=\"The provider of the language model that the agent will use to generate responses.\",\n options=[*MODEL_PROVIDERS_LIST],\n real_time_refresh=True,\n refresh_button=False,\n input_types=[\"LanguageModel\"],\n placeholder=\"Awaiting model input.\",\n options_metadata=[MODELS_METADATA[key] for key in MODEL_PROVIDERS_LIST],\n external_options={\n \"fields\": {\n \"data\": {\n \"node\": {\n \"name\": \"connect_other_models\",\n \"display_name\": \"Connect other models\",\n \"icon\": \"CornerDownLeft\",\n },\n }\n },\n },\n )\n build_config.update({\"agent_llm\": custom_component.to_dict()})\n # Update input types for all fields\n build_config = self.update_input_types(build_config)\n\n # Validate required keys\n default_keys = [\n \"code\",\n \"_type\",\n \"agent_llm\",\n \"tools\",\n \"input_value\",\n \"add_current_date_tool\",\n \"system_prompt\",\n \"agent_description\",\n \"max_iterations\",\n \"handle_parsing_errors\",\n \"verbose\",\n ]\n missing_keys = [key for key in default_keys if key not in build_config]\n if missing_keys:\n msg = f\"Missing required keys in build_config: {missing_keys}\"\n raise ValueError(msg)\n if (\n isinstance(self.agent_llm, str)\n and self.agent_llm in MODEL_PROVIDERS_DICT\n and field_name in MODEL_DYNAMIC_UPDATE_FIELDS\n ):\n provider_info = MODEL_PROVIDERS_DICT.get(self.agent_llm)\n if provider_info:\n component_class = provider_info.get(\"component_class\")\n component_class = self.set_component_params(component_class)\n prefix = provider_info.get(\"prefix\")\n if component_class and hasattr(component_class, \"update_build_config\"):\n # Call each component class's update_build_config method\n # remove the prefix from the field_name\n if isinstance(field_name, str) and isinstance(prefix, str):\n field_name = field_name.replace(prefix, \"\")\n build_config = await update_component_build_config(\n component_class, build_config, field_value, \"model_name\"\n )\n return dotdict({k: v.to_dict() if hasattr(v, \"to_dict\") else v for k, v in build_config.items()})\n\n async def _get_tools(self) -> list[Tool]:\n component_toolkit = _get_component_toolkit()\n tools_names = self._build_tools_names()\n agent_description = self.get_tool_description()\n # TODO: Agent Description Depreciated Feature to be removed\n description = f\"{agent_description}{tools_names}\"\n tools = component_toolkit(component=self).get_tools(\n tool_name=\"Call_Agent\",\n tool_description=description,\n callbacks=self.get_langchain_callbacks(),\n )\n if hasattr(self, \"tools_metadata\"):\n tools = component_toolkit(component=self, metadata=self.tools_metadata).update_tools_metadata(tools=tools)\n return tools\n"
1689
+ },
1690
+ "format_instructions": {
1691
+ "_input_type": "MultilineInput",
1692
+ "advanced": true,
1693
+ "copy_field": false,
1694
+ "display_name": "Output Format Instructions",
1695
+ "dynamic": false,
1696
+ "info": "Generic Template for structured output formatting. Valid only with Structured response.",
1697
+ "input_types": [
1698
+ "Message"
1699
+ ],
1700
+ "list": false,
1701
+ "list_add_label": "Add More",
1702
+ "load_from_db": false,
1703
+ "multiline": true,
1704
+ "name": "format_instructions",
1705
+ "placeholder": "",
1706
+ "required": false,
1707
+ "show": true,
1708
+ "title_case": false,
1709
+ "tool_mode": false,
1710
+ "trace_as_input": true,
1711
+ "trace_as_metadata": true,
1712
+ "type": "str",
1713
+ "value": "You are an AI that extracts structured JSON objects from unstructured text. Use a predefined schema with expected types (str, int, float, bool, dict). Extract ALL relevant instances that match the schema - if multiple patterns exist, capture them all. Fill missing or ambiguous values with defaults: null for missing values. Remove exact duplicates but keep variations that have different field values. Always return valid JSON in the expected format, never throw errors. If multiple objects can be extracted, return them all in the structured format."
1714
+ },
1715
+ "handle_parsing_errors": {
1716
+ "_input_type": "BoolInput",
1717
+ "advanced": true,
1718
+ "display_name": "Handle Parse Errors",
1719
+ "dynamic": false,
1720
+ "info": "Should the Agent fix errors when reading user input for better processing?",
1721
+ "list": false,
1722
+ "list_add_label": "Add More",
1723
+ "name": "handle_parsing_errors",
1724
+ "placeholder": "",
1725
+ "required": false,
1726
+ "show": true,
1727
+ "title_case": false,
1728
+ "tool_mode": false,
1729
+ "trace_as_metadata": true,
1730
+ "type": "bool",
1731
+ "value": true
1732
+ },
1733
+ "input_value": {
1734
+ "_input_type": "MessageTextInput",
1735
+ "advanced": false,
1736
+ "display_name": "Input",
1737
+ "dynamic": false,
1738
+ "info": "The input provided by the user for the agent to process.",
1739
+ "input_types": [
1740
+ "Message"
1741
+ ],
1742
+ "list": false,
1743
+ "list_add_label": "Add More",
1744
+ "load_from_db": false,
1745
+ "name": "input_value",
1746
+ "placeholder": "",
1747
+ "required": false,
1748
+ "show": true,
1749
+ "title_case": false,
1750
+ "tool_mode": true,
1751
+ "trace_as_input": true,
1752
+ "trace_as_metadata": true,
1753
+ "type": "str",
1754
+ "value": ""
1755
+ },
1756
+ "max_iterations": {
1757
+ "_input_type": "IntInput",
1758
+ "advanced": true,
1759
+ "display_name": "Max Iterations",
1760
+ "dynamic": false,
1761
+ "info": "The maximum number of attempts the agent can make to complete its task before it stops.",
1762
+ "list": false,
1763
+ "list_add_label": "Add More",
1764
+ "name": "max_iterations",
1765
+ "placeholder": "",
1766
+ "required": false,
1767
+ "show": true,
1768
+ "title_case": false,
1769
+ "tool_mode": false,
1770
+ "trace_as_metadata": true,
1771
+ "type": "int",
1772
+ "value": 15
1773
+ },
1774
+ "max_retries": {
1775
+ "_input_type": "IntInput",
1776
+ "advanced": true,
1777
+ "display_name": "Max Retries",
1778
+ "dynamic": false,
1779
+ "info": "The maximum number of retries to make when generating.",
1780
+ "list": false,
1781
+ "list_add_label": "Add More",
1782
+ "name": "max_retries",
1783
+ "placeholder": "",
1784
+ "required": false,
1785
+ "show": true,
1786
+ "title_case": false,
1787
+ "tool_mode": false,
1788
+ "trace_as_metadata": true,
1789
+ "type": "int",
1790
+ "value": 5
1791
+ },
1792
+ "max_tokens": {
1793
+ "_input_type": "IntInput",
1794
+ "advanced": true,
1795
+ "display_name": "Max Tokens",
1796
+ "dynamic": false,
1797
+ "info": "The maximum number of tokens to generate. Set to 0 for unlimited tokens.",
1798
+ "list": false,
1799
+ "list_add_label": "Add More",
1800
+ "name": "max_tokens",
1801
+ "placeholder": "",
1802
+ "range_spec": {
1803
+ "max": 128000,
1804
+ "min": 0,
1805
+ "step": 0.1,
1806
+ "step_type": "float"
1807
+ },
1808
+ "required": false,
1809
+ "show": true,
1810
+ "title_case": false,
1811
+ "tool_mode": false,
1812
+ "trace_as_metadata": true,
1813
+ "type": "int",
1814
+ "value": ""
1815
+ },
1816
+ "model_kwargs": {
1817
+ "_input_type": "DictInput",
1818
+ "advanced": true,
1819
+ "display_name": "Model Kwargs",
1820
+ "dynamic": false,
1821
+ "info": "Additional keyword arguments to pass to the model.",
1822
+ "list": false,
1823
+ "list_add_label": "Add More",
1824
+ "name": "model_kwargs",
1825
+ "placeholder": "",
1826
+ "required": false,
1827
+ "show": true,
1828
+ "title_case": false,
1829
+ "tool_mode": false,
1830
+ "trace_as_input": true,
1831
+ "type": "dict",
1832
+ "value": {}
1833
+ },
1834
+ "model_name": {
1835
+ "_input_type": "DropdownInput",
1836
+ "advanced": false,
1837
+ "combobox": true,
1838
+ "dialog_inputs": {},
1839
+ "display_name": "Model Name",
1840
+ "dynamic": false,
1841
+ "info": "To see the model names, first choose a provider. Then, enter your API key and click the refresh button next to the model name.",
1842
+ "load_from_db": false,
1843
+ "name": "model_name",
1844
+ "options": [
1845
+ "gpt-4o-mini",
1846
+ "gpt-4o",
1847
+ "gpt-4.1",
1848
+ "gpt-4.1-mini",
1849
+ "gpt-4.1-nano",
1850
+ "gpt-4-turbo",
1851
+ "gpt-4-turbo-preview",
1852
+ "gpt-4",
1853
+ "gpt-3.5-turbo",
1854
+ "gpt-5",
1855
+ "gpt-5-mini",
1856
+ "gpt-5-nano",
1857
+ "gpt-5-chat-latest",
1858
+ "o1",
1859
+ "o3-mini",
1860
+ "o3",
1861
+ "o3-pro",
1862
+ "o4-mini",
1863
+ "o4-mini-high"
1864
+ ],
1865
+ "options_metadata": [],
1866
+ "placeholder": "",
1867
+ "real_time_refresh": false,
1868
+ "required": false,
1869
+ "show": true,
1870
+ "title_case": false,
1871
+ "toggle": false,
1872
+ "tool_mode": false,
1873
+ "trace_as_metadata": true,
1874
+ "type": "str",
1875
+ "value": "gpt-4.1"
1876
+ },
1877
+ "n_messages": {
1878
+ "_input_type": "IntInput",
1879
+ "advanced": true,
1880
+ "display_name": "Number of Chat History Messages",
1881
+ "dynamic": false,
1882
+ "info": "Number of chat history messages to retrieve.",
1883
+ "list": false,
1884
+ "list_add_label": "Add More",
1885
+ "name": "n_messages",
1886
+ "placeholder": "",
1887
+ "required": false,
1888
+ "show": true,
1889
+ "title_case": false,
1890
+ "tool_mode": false,
1891
+ "trace_as_metadata": true,
1892
+ "type": "int",
1893
+ "value": 100
1894
+ },
1895
+ "openai_api_base": {
1896
+ "_input_type": "StrInput",
1897
+ "advanced": true,
1898
+ "display_name": "OpenAI API Base",
1899
+ "dynamic": false,
1900
+ "info": "The base URL of the OpenAI API. Defaults to https://api.openai.com/v1. You can change this to use other APIs like JinaChat, LocalAI and Prem.",
1901
+ "list": false,
1902
+ "list_add_label": "Add More",
1903
+ "load_from_db": false,
1904
+ "name": "openai_api_base",
1905
+ "placeholder": "",
1906
+ "required": false,
1907
+ "show": true,
1908
+ "title_case": false,
1909
+ "tool_mode": false,
1910
+ "trace_as_metadata": true,
1911
+ "type": "str",
1912
+ "value": ""
1913
+ },
1914
+ "output_schema": {
1915
+ "_input_type": "TableInput",
1916
+ "advanced": true,
1917
+ "display_name": "Output Schema",
1918
+ "dynamic": false,
1919
+ "info": "Schema Validation: Define the structure and data types for structured output. No validation if no output schema.",
1920
+ "is_list": true,
1921
+ "list_add_label": "Add More",
1922
+ "name": "output_schema",
1923
+ "placeholder": "",
1924
+ "required": false,
1925
+ "show": true,
1926
+ "table_icon": "Table",
1927
+ "table_schema": {
1928
+ "columns": [
1929
+ {
1930
+ "default": "field",
1931
+ "description": "Specify the name of the output field.",
1932
+ "disable_edit": false,
1933
+ "display_name": "Name",
1934
+ "edit_mode": "inline",
1935
+ "filterable": true,
1936
+ "formatter": "text",
1937
+ "hidden": false,
1938
+ "name": "name",
1939
+ "sortable": true,
1940
+ "type": "str"
1941
+ },
1942
+ {
1943
+ "default": "description of field",
1944
+ "description": "Describe the purpose of the output field.",
1945
+ "disable_edit": false,
1946
+ "display_name": "Description",
1947
+ "edit_mode": "popover",
1948
+ "filterable": true,
1949
+ "formatter": "text",
1950
+ "hidden": false,
1951
+ "name": "description",
1952
+ "sortable": true,
1953
+ "type": "str"
1954
+ },
1955
+ {
1956
+ "default": "str",
1957
+ "description": "Indicate the data type of the output field (e.g., str, int, float, bool, dict).",
1958
+ "disable_edit": false,
1959
+ "display_name": "Type",
1960
+ "edit_mode": "inline",
1961
+ "filterable": true,
1962
+ "formatter": "text",
1963
+ "hidden": false,
1964
+ "name": "type",
1965
+ "options": [
1966
+ "str",
1967
+ "int",
1968
+ "float",
1969
+ "bool",
1970
+ "dict"
1971
+ ],
1972
+ "sortable": true,
1973
+ "type": "str"
1974
+ },
1975
+ {
1976
+ "default": false,
1977
+ "description": "Set to True if this output field should be a list of the specified type.",
1978
+ "disable_edit": false,
1979
+ "display_name": "As List",
1980
+ "edit_mode": "inline",
1981
+ "filterable": true,
1982
+ "formatter": "boolean",
1983
+ "hidden": false,
1984
+ "name": "multiple",
1985
+ "sortable": true,
1986
+ "type": "boolean"
1987
+ }
1988
+ ]
1989
+ },
1990
+ "title_case": false,
1991
+ "tool_mode": false,
1992
+ "trace_as_metadata": true,
1993
+ "trigger_icon": "Table",
1994
+ "trigger_text": "Open table",
1995
+ "type": "table",
1996
+ "value": []
1997
+ },
1998
+ "seed": {
1999
+ "_input_type": "IntInput",
2000
+ "advanced": true,
2001
+ "display_name": "Seed",
2002
+ "dynamic": false,
2003
+ "info": "The seed controls the reproducibility of the job.",
2004
+ "list": false,
2005
+ "list_add_label": "Add More",
2006
+ "name": "seed",
2007
+ "placeholder": "",
2008
+ "required": false,
2009
+ "show": true,
2010
+ "title_case": false,
2011
+ "tool_mode": false,
2012
+ "trace_as_metadata": true,
2013
+ "type": "int",
2014
+ "value": 1
2015
+ },
2016
+ "system_prompt": {
2017
+ "_input_type": "MultilineInput",
2018
+ "advanced": false,
2019
+ "copy_field": false,
2020
+ "display_name": "Agent Instructions",
2021
+ "dynamic": false,
2022
+ "info": "System Prompt: Initial instructions and context provided to guide the agent's behavior.",
2023
+ "input_types": [
2024
+ "Message"
2025
+ ],
2026
+ "list": false,
2027
+ "list_add_label": "Add More",
2028
+ "load_from_db": false,
2029
+ "multiline": true,
2030
+ "name": "system_prompt",
2031
+ "placeholder": "",
2032
+ "required": false,
2033
+ "show": true,
2034
+ "title_case": false,
2035
+ "tool_mode": false,
2036
+ "trace_as_input": true,
2037
+ "trace_as_metadata": true,
2038
+ "type": "str",
2039
+ "value": "You are a helpful assistant that can use tools to answer questions and perform tasks."
2040
+ },
2041
+ "temperature": {
2042
+ "_input_type": "SliderInput",
2043
+ "advanced": true,
2044
+ "display_name": "Temperature",
2045
+ "dynamic": false,
2046
+ "info": "",
2047
+ "max_label": "",
2048
+ "max_label_icon": "",
2049
+ "min_label": "",
2050
+ "min_label_icon": "",
2051
+ "name": "temperature",
2052
+ "placeholder": "",
2053
+ "range_spec": {
2054
+ "max": 1,
2055
+ "min": 0,
2056
+ "step": 0.01,
2057
+ "step_type": "float"
2058
+ },
2059
+ "required": false,
2060
+ "show": true,
2061
+ "slider_buttons": false,
2062
+ "slider_buttons_options": [],
2063
+ "slider_input": false,
2064
+ "title_case": false,
2065
+ "tool_mode": false,
2066
+ "type": "slider",
2067
+ "value": 0.1
2068
+ },
2069
+ "timeout": {
2070
+ "_input_type": "IntInput",
2071
+ "advanced": true,
2072
+ "display_name": "Timeout",
2073
+ "dynamic": false,
2074
+ "info": "The timeout for requests to OpenAI completion API.",
2075
+ "list": false,
2076
+ "list_add_label": "Add More",
2077
+ "name": "timeout",
2078
+ "placeholder": "",
2079
+ "required": false,
2080
+ "show": true,
2081
+ "title_case": false,
2082
+ "tool_mode": false,
2083
+ "trace_as_metadata": true,
2084
+ "type": "int",
2085
+ "value": 700
2086
+ },
2087
+ "tools": {
2088
+ "_input_type": "HandleInput",
2089
+ "advanced": false,
2090
+ "display_name": "Tools",
2091
+ "dynamic": false,
2092
+ "info": "These are the tools that the agent can use to help with tasks.",
2093
+ "input_types": [
2094
+ "Tool"
2095
+ ],
2096
+ "list": true,
2097
+ "list_add_label": "Add More",
2098
+ "name": "tools",
2099
+ "placeholder": "",
2100
+ "required": false,
2101
+ "show": true,
2102
+ "title_case": false,
2103
+ "trace_as_metadata": true,
2104
+ "type": "other",
2105
+ "value": ""
2106
+ },
2107
+ "verbose": {
2108
+ "_input_type": "BoolInput",
2109
+ "advanced": true,
2110
+ "display_name": "Verbose",
2111
+ "dynamic": false,
2112
+ "info": "",
2113
+ "list": false,
2114
+ "list_add_label": "Add More",
2115
+ "name": "verbose",
2116
+ "placeholder": "",
2117
+ "required": false,
2118
+ "show": true,
2119
+ "title_case": false,
2120
+ "tool_mode": false,
2121
+ "trace_as_metadata": true,
2122
+ "type": "bool",
2123
+ "value": true
2124
+ }
2125
+ },
2126
+ "tool_mode": false
2127
+ },
2128
+ "selected_output": "response",
2129
+ "showNode": true,
2130
+ "type": "Agent"
2131
+ },
2132
+ "dragging": false,
2133
+ "id": "Agent-RTpIN",
2134
+ "measured": {
2135
+ "height": 594,
2136
+ "width": 320
2137
+ },
2138
+ "position": {
2139
+ "x": 2462.5131863965653,
2140
+ "y": 338.2948031203553
2141
+ },
2142
+ "selected": false,
2143
+ "type": "genericNode"
2144
+ },
2145
+ {
2146
+ "data": {
2147
+ "id": "Agent-9tDeE",
2148
+ "node": {
2149
+ "base_classes": [
2150
+ "Message"
2151
+ ],
2152
+ "beta": false,
2153
+ "conditional_paths": [],
2154
+ "custom_fields": {},
2155
+ "description": "Define the agent's instructions, then enter a task to complete using tools.",
2156
+ "display_name": "Local Expert Agent",
2157
+ "documentation": "",
2158
+ "edited": false,
2159
+ "field_order": [
2160
+ "agent_llm",
2161
+ "max_tokens",
2162
+ "model_kwargs",
2163
+ "json_mode",
2164
+ "model_name",
2165
+ "openai_api_base",
2166
+ "api_key",
2167
+ "temperature",
2168
+ "seed",
2169
+ "max_retries",
2170
+ "timeout",
2171
+ "system_prompt",
2172
+ "n_messages",
2173
+ "tools",
2174
+ "input_value",
2175
+ "handle_parsing_errors",
2176
+ "verbose",
2177
+ "max_iterations",
2178
+ "agent_description",
2179
+ "add_current_date_tool"
2180
+ ],
2181
+ "frozen": false,
2182
+ "icon": "bot",
2183
+ "legacy": false,
2184
+ "metadata": {},
2185
+ "minimized": false,
2186
+ "output_types": [],
2187
+ "outputs": [
2188
+ {
2189
+ "allows_loop": false,
2190
+ "cache": true,
2191
+ "display_name": "Response",
2192
+ "group_outputs": false,
2193
+ "method": "message_response",
2194
+ "name": "response",
2195
+ "selected": "Message",
2196
+ "tool_mode": true,
2197
+ "types": [
2198
+ "Message"
2199
+ ],
2200
+ "value": "__UNDEFINED__"
2201
+ }
2202
+ ],
2203
+ "pinned": false,
2204
+ "template": {
2205
+ "_type": "Component",
2206
+ "add_current_date_tool": {
2207
+ "_input_type": "BoolInput",
2208
+ "advanced": true,
2209
+ "display_name": "Current Date",
2210
+ "dynamic": false,
2211
+ "info": "If true, will add a tool to the agent that returns the current date.",
2212
+ "list": false,
2213
+ "list_add_label": "Add More",
2214
+ "name": "add_current_date_tool",
2215
+ "placeholder": "",
2216
+ "required": false,
2217
+ "show": true,
2218
+ "title_case": false,
2219
+ "tool_mode": false,
2220
+ "trace_as_metadata": true,
2221
+ "type": "bool",
2222
+ "value": true
2223
+ },
2224
+ "agent_description": {
2225
+ "_input_type": "MultilineInput",
2226
+ "advanced": true,
2227
+ "copy_field": false,
2228
+ "display_name": "Agent Description [Deprecated]",
2229
+ "dynamic": false,
2230
+ "info": "The description of the agent. This is only used when in Tool Mode. Defaults to 'A helpful assistant with access to the following tools:' and tools are added dynamically. This feature is deprecated and will be removed in future versions.",
2231
+ "input_types": [
2232
+ "Message"
2233
+ ],
2234
+ "list": false,
2235
+ "list_add_label": "Add More",
2236
+ "load_from_db": false,
2237
+ "multiline": true,
2238
+ "name": "agent_description",
2239
+ "placeholder": "",
2240
+ "required": false,
2241
+ "show": true,
2242
+ "title_case": false,
2243
+ "tool_mode": false,
2244
+ "trace_as_input": true,
2245
+ "trace_as_metadata": true,
2246
+ "type": "str",
2247
+ "value": "A helpful assistant with access to the following tools:"
2248
+ },
2249
+ "agent_llm": {
2250
+ "_input_type": "DropdownInput",
2251
+ "advanced": false,
2252
+ "combobox": false,
2253
+ "dialog_inputs": {},
2254
+ "display_name": "Model Provider",
2255
+ "dynamic": false,
2256
+ "external_options": {
2257
+ "fields": {
2258
+ "data": {
2259
+ "node": {
2260
+ "display_name": "Connect other models",
2261
+ "icon": "CornerDownLeft",
2262
+ "name": "connect_other_models"
2263
+ }
2264
+ }
2265
+ }
2266
+ },
2267
+ "info": "The provider of the language model that the agent will use to generate responses.",
2268
+ "input_types": [],
2269
+ "name": "agent_llm",
2270
+ "options": [
2271
+ "Anthropic",
2272
+ "Google Generative AI",
2273
+ "OpenAI"
2274
+ ],
2275
+ "options_metadata": [
2276
+ {
2277
+ "icon": "Anthropic"
2278
+ },
2279
+ {
2280
+ "icon": "GoogleGenerativeAI"
2281
+ },
2282
+ {
2283
+ "icon": "OpenAI"
2284
+ }
2285
+ ],
2286
+ "placeholder": "",
2287
+ "real_time_refresh": true,
2288
+ "required": false,
2289
+ "show": true,
2290
+ "title_case": false,
2291
+ "toggle": false,
2292
+ "tool_mode": false,
2293
+ "trace_as_metadata": true,
2294
+ "type": "str",
2295
+ "value": "OpenAI"
2296
+ },
2297
+ "api_key": {
2298
+ "_input_type": "SecretStrInput",
2299
+ "advanced": false,
2300
+ "display_name": "OpenAI API Key",
2301
+ "dynamic": false,
2302
+ "info": "The OpenAI API Key to use for the OpenAI model.",
2303
+ "input_types": [],
2304
+ "load_from_db": true,
2305
+ "name": "api_key",
2306
+ "password": true,
2307
+ "placeholder": "",
2308
+ "real_time_refresh": true,
2309
+ "required": false,
2310
+ "show": true,
2311
+ "title_case": false,
2312
+ "type": "str",
2313
+ "value": "OPENAI_API_KEY"
2314
+ },
2315
+ "code": {
2316
+ "advanced": true,
2317
+ "dynamic": true,
2318
+ "fileTypes": [],
2319
+ "file_path": "",
2320
+ "info": "",
2321
+ "list": false,
2322
+ "load_from_db": false,
2323
+ "multiline": true,
2324
+ "name": "code",
2325
+ "password": false,
2326
+ "placeholder": "",
2327
+ "required": true,
2328
+ "show": true,
2329
+ "title_case": false,
2330
+ "type": "code",
2331
+ "value": "import json\nimport re\n\nfrom langchain_core.tools import StructuredTool\nfrom pydantic import ValidationError\n\nfrom vibe_surf.langflow.base.agents.agent import LCToolsAgentComponent\nfrom vibe_surf.langflow.base.agents.events import ExceptionWithMessageError\nfrom vibe_surf.langflow.base.models.model_input_constants import (\n ALL_PROVIDER_FIELDS,\n MODEL_DYNAMIC_UPDATE_FIELDS,\n MODEL_PROVIDERS_DICT,\n MODELS_METADATA,\n)\nfrom vibe_surf.langflow.base.models.model_utils import get_model_name\nfrom vibe_surf.langflow.components.helpers.current_date import CurrentDateComponent\nfrom vibe_surf.langflow.components.helpers.memory import MemoryComponent\nfrom vibe_surf.langflow.components.langchain_utilities.tool_calling import (\n ToolCallingAgentComponent,\n)\nfrom vibe_surf.langflow.custom.custom_component.component import _get_component_toolkit\nfrom vibe_surf.langflow.custom.utils import update_component_build_config\nfrom vibe_surf.langflow.field_typing import Tool\nfrom vibe_surf.langflow.helpers.base_model import build_model_from_schema\nfrom vibe_surf.langflow.io import (\n BoolInput,\n DropdownInput,\n IntInput,\n MultilineInput,\n Output,\n TableInput,\n)\nfrom vibe_surf.langflow.logging import logger\nfrom vibe_surf.langflow.schema.data import Data\nfrom vibe_surf.langflow.schema.dotdict import dotdict\nfrom vibe_surf.langflow.schema.message import Message\nfrom vibe_surf.langflow.schema.table import EditMode\n\n\ndef set_advanced_true(component_input):\n component_input.advanced = True\n return component_input\n\n\nMODEL_PROVIDERS_LIST = [\"Anthropic\", \"Google Generative AI\", \"OpenAI\"]\n\n\nclass AgentComponent(ToolCallingAgentComponent):\n display_name: str = \"Agent\"\n description: str = \"Define the agent's instructions, then enter a task to complete using tools.\"\n documentation: str = \"https://docs.vibe_surf.langflow.org/agents\"\n icon = \"bot\"\n beta = False\n name = \"Agent\"\n\n memory_inputs = [set_advanced_true(component_input) for component_input in MemoryComponent().inputs]\n\n # Filter out json_mode from OpenAI inputs since we handle structured output differently\n openai_inputs_filtered = [\n input_field\n for input_field in MODEL_PROVIDERS_DICT[\"OpenAI\"][\"inputs\"]\n if not (hasattr(input_field, \"name\") and input_field.name == \"json_mode\")\n ]\n\n inputs = [\n DropdownInput(\n name=\"agent_llm\",\n display_name=\"Model Provider\",\n info=\"The provider of the language model that the agent will use to generate responses.\",\n options=[*MODEL_PROVIDERS_LIST],\n value=\"OpenAI\",\n real_time_refresh=True,\n refresh_button=False,\n input_types=[],\n options_metadata=[MODELS_METADATA[key] for key in MODEL_PROVIDERS_LIST],\n external_options={\n \"fields\": {\n \"data\": {\n \"node\": {\n \"name\": \"connect_other_models\",\n \"display_name\": \"Connect other models\",\n \"icon\": \"CornerDownLeft\",\n }\n }\n },\n },\n ),\n *openai_inputs_filtered,\n MultilineInput(\n name=\"system_prompt\",\n display_name=\"Agent Instructions\",\n info=\"System Prompt: Initial instructions and context provided to guide the agent's behavior.\",\n value=\"You are a helpful assistant that can use tools to answer questions and perform tasks.\",\n advanced=False,\n ),\n IntInput(\n name=\"n_messages\",\n display_name=\"Number of Chat History Messages\",\n value=100,\n info=\"Number of chat history messages to retrieve.\",\n advanced=True,\n show=True,\n ),\n MultilineInput(\n name=\"format_instructions\",\n display_name=\"Output Format Instructions\",\n info=\"Generic Template for structured output formatting. Valid only with Structured response.\",\n value=(\n \"You are an AI that extracts structured JSON objects from unstructured text. \"\n \"Use a predefined schema with expected types (str, int, float, bool, dict). \"\n \"Extract ALL relevant instances that match the schema - if multiple patterns exist, capture them all. \"\n \"Fill missing or ambiguous values with defaults: null for missing values. \"\n \"Remove exact duplicates but keep variations that have different field values. \"\n \"Always return valid JSON in the expected format, never throw errors. \"\n \"If multiple objects can be extracted, return them all in the structured format.\"\n ),\n advanced=True,\n ),\n TableInput(\n name=\"output_schema\",\n display_name=\"Output Schema\",\n info=(\n \"Schema Validation: Define the structure and data types for structured output. \"\n \"No validation if no output schema.\"\n ),\n advanced=True,\n required=False,\n value=[],\n table_schema=[\n {\n \"name\": \"name\",\n \"display_name\": \"Name\",\n \"type\": \"str\",\n \"description\": \"Specify the name of the output field.\",\n \"default\": \"field\",\n \"edit_mode\": EditMode.INLINE,\n },\n {\n \"name\": \"description\",\n \"display_name\": \"Description\",\n \"type\": \"str\",\n \"description\": \"Describe the purpose of the output field.\",\n \"default\": \"description of field\",\n \"edit_mode\": EditMode.POPOVER,\n },\n {\n \"name\": \"type\",\n \"display_name\": \"Type\",\n \"type\": \"str\",\n \"edit_mode\": EditMode.INLINE,\n \"description\": (\"Indicate the data type of the output field (e.g., str, int, float, bool, dict).\"),\n \"options\": [\"str\", \"int\", \"float\", \"bool\", \"dict\"],\n \"default\": \"str\",\n },\n {\n \"name\": \"multiple\",\n \"display_name\": \"As List\",\n \"type\": \"boolean\",\n \"description\": \"Set to True if this output field should be a list of the specified type.\",\n \"default\": \"False\",\n \"edit_mode\": EditMode.INLINE,\n },\n ],\n ),\n *LCToolsAgentComponent._base_inputs,\n # removed memory inputs from agent component\n # *memory_inputs,\n BoolInput(\n name=\"add_current_date_tool\",\n display_name=\"Current Date\",\n advanced=True,\n info=\"If true, will add a tool to the agent that returns the current date.\",\n value=True,\n ),\n ]\n outputs = [\n Output(name=\"response\", display_name=\"Response\", method=\"message_response\"),\n ]\n\n async def get_agent_requirements(self):\n \"\"\"Get the agent requirements for the agent.\"\"\"\n llm_model, display_name = await self.get_llm()\n if llm_model is None:\n msg = \"No language model selected. Please choose a model to proceed.\"\n raise ValueError(msg)\n self.model_name = get_model_name(llm_model, display_name=display_name)\n\n # Get memory data\n self.chat_history = await self.get_memory_data()\n if isinstance(self.chat_history, Message):\n self.chat_history = [self.chat_history]\n\n # Add current date tool if enabled\n if self.add_current_date_tool:\n if not isinstance(self.tools, list): # type: ignore[has-type]\n self.tools = []\n current_date_tool = (await CurrentDateComponent(**self.get_base_args()).to_toolkit()).pop(0)\n if not isinstance(current_date_tool, StructuredTool):\n msg = \"CurrentDateComponent must be converted to a StructuredTool\"\n raise TypeError(msg)\n self.tools.append(current_date_tool)\n return llm_model, self.chat_history, self.tools\n\n async def message_response(self) -> Message:\n try:\n llm_model, self.chat_history, self.tools = await self.get_agent_requirements()\n # Set up and run agent\n self.set(\n llm=llm_model,\n tools=self.tools or [],\n chat_history=self.chat_history,\n input_value=self.input_value,\n system_prompt=self.system_prompt,\n )\n agent = self.create_agent_runnable()\n result = await self.run_agent(agent)\n\n # Store result for potential JSON output\n self._agent_result = result\n\n except (ValueError, TypeError, KeyError) as e:\n await logger.aerror(f\"{type(e).__name__}: {e!s}\")\n raise\n except ExceptionWithMessageError as e:\n await logger.aerror(f\"ExceptionWithMessageError occurred: {e}\")\n raise\n # Avoid catching blind Exception; let truly unexpected exceptions propagate\n except Exception as e:\n await logger.aerror(f\"Unexpected error: {e!s}\")\n raise\n else:\n return result\n\n def _preprocess_schema(self, schema):\n \"\"\"Preprocess schema to ensure correct data types for build_model_from_schema.\"\"\"\n processed_schema = []\n for field in schema:\n processed_field = {\n \"name\": str(field.get(\"name\", \"field\")),\n \"type\": str(field.get(\"type\", \"str\")),\n \"description\": str(field.get(\"description\", \"\")),\n \"multiple\": field.get(\"multiple\", False),\n }\n # Ensure multiple is handled correctly\n if isinstance(processed_field[\"multiple\"], str):\n processed_field[\"multiple\"] = processed_field[\"multiple\"].lower() in [\n \"true\",\n \"1\",\n \"t\",\n \"y\",\n \"yes\",\n ]\n processed_schema.append(processed_field)\n return processed_schema\n\n async def build_structured_output_base(self, content: str):\n \"\"\"Build structured output with optional BaseModel validation.\"\"\"\n json_pattern = r\"\\{.*\\}\"\n schema_error_msg = \"Try setting an output schema\"\n\n # Try to parse content as JSON first\n json_data = None\n try:\n json_data = json.loads(content)\n except json.JSONDecodeError:\n json_match = re.search(json_pattern, content, re.DOTALL)\n if json_match:\n try:\n json_data = json.loads(json_match.group())\n except json.JSONDecodeError:\n return {\"content\": content, \"error\": schema_error_msg}\n else:\n return {\"content\": content, \"error\": schema_error_msg}\n\n # If no output schema provided, return parsed JSON without validation\n if not hasattr(self, \"output_schema\") or not self.output_schema or len(self.output_schema) == 0:\n return json_data\n\n # Use BaseModel validation with schema\n try:\n processed_schema = self._preprocess_schema(self.output_schema)\n output_model = build_model_from_schema(processed_schema)\n\n # Validate against the schema\n if isinstance(json_data, list):\n # Multiple objects\n validated_objects = []\n for item in json_data:\n try:\n validated_obj = output_model.model_validate(item)\n validated_objects.append(validated_obj.model_dump())\n except ValidationError as e:\n await logger.aerror(f\"Validation error for item: {e}\")\n # Include invalid items with error info\n validated_objects.append({\"data\": item, \"validation_error\": str(e)})\n return validated_objects\n\n # Single object\n try:\n validated_obj = output_model.model_validate(json_data)\n return [validated_obj.model_dump()] # Return as list for consistency\n except ValidationError as e:\n await logger.aerror(f\"Validation error: {e}\")\n return [{\"data\": json_data, \"validation_error\": str(e)}]\n\n except (TypeError, ValueError) as e:\n await logger.aerror(f\"Error building structured output: {e}\")\n # Fallback to parsed JSON without validation\n return json_data\n\n async def json_response(self) -> Data:\n \"\"\"Convert agent response to structured JSON Data output with schema validation.\"\"\"\n # Always use structured chat agent for JSON response mode for better JSON formatting\n try:\n system_components = []\n\n # 1. Agent Instructions (system_prompt)\n agent_instructions = getattr(self, \"system_prompt\", \"\") or \"\"\n if agent_instructions:\n system_components.append(f\"{agent_instructions}\")\n\n # 2. Format Instructions\n format_instructions = getattr(self, \"format_instructions\", \"\") or \"\"\n if format_instructions:\n system_components.append(f\"Format instructions: {format_instructions}\")\n\n # 3. Schema Information from BaseModel\n if hasattr(self, \"output_schema\") and self.output_schema and len(self.output_schema) > 0:\n try:\n processed_schema = self._preprocess_schema(self.output_schema)\n output_model = build_model_from_schema(processed_schema)\n schema_dict = output_model.model_json_schema()\n schema_info = (\n \"You are given some text that may include format instructions, \"\n \"explanations, or other content alongside a JSON schema.\\n\\n\"\n \"Your task:\\n\"\n \"- Extract only the JSON schema.\\n\"\n \"- Return it as valid JSON.\\n\"\n \"- Do not include format instructions, explanations, or extra text.\\n\\n\"\n \"Input:\\n\"\n f\"{json.dumps(schema_dict, indent=2)}\\n\\n\"\n \"Output (only JSON schema):\"\n )\n system_components.append(schema_info)\n except (ValidationError, ValueError, TypeError, KeyError) as e:\n await logger.aerror(f\"Could not build schema for prompt: {e}\", exc_info=True)\n\n # Combine all components\n combined_instructions = \"\\n\\n\".join(system_components) if system_components else \"\"\n llm_model, self.chat_history, self.tools = await self.get_agent_requirements()\n self.set(\n llm=llm_model,\n tools=self.tools or [],\n chat_history=self.chat_history,\n input_value=self.input_value,\n system_prompt=combined_instructions,\n )\n\n # Create and run structured chat agent\n try:\n structured_agent = self.create_agent_runnable()\n except (NotImplementedError, ValueError, TypeError) as e:\n await logger.aerror(f\"Error with structured chat agent: {e}\")\n raise\n try:\n result = await self.run_agent(structured_agent)\n except (\n ExceptionWithMessageError,\n ValueError,\n TypeError,\n RuntimeError,\n ) as e:\n await logger.aerror(f\"Error with structured agent result: {e}\")\n raise\n # Extract content from structured agent result\n if hasattr(result, \"content\"):\n content = result.content\n elif hasattr(result, \"text\"):\n content = result.text\n else:\n content = str(result)\n\n except (\n ExceptionWithMessageError,\n ValueError,\n TypeError,\n NotImplementedError,\n AttributeError,\n ) as e:\n await logger.aerror(f\"Error with structured chat agent: {e}\")\n # Fallback to regular agent\n content_str = \"No content returned from agent\"\n return Data(data={\"content\": content_str, \"error\": str(e)})\n\n # Process with structured output validation\n try:\n structured_output = await self.build_structured_output_base(content)\n\n # Handle different output formats\n if isinstance(structured_output, list) and structured_output:\n if len(structured_output) == 1:\n return Data(data=structured_output[0])\n return Data(data={\"results\": structured_output})\n if isinstance(structured_output, dict):\n return Data(data=structured_output)\n return Data(data={\"content\": content})\n\n except (ValueError, TypeError) as e:\n await logger.aerror(f\"Error in structured output processing: {e}\")\n return Data(data={\"content\": content, \"error\": str(e)})\n\n async def get_memory_data(self):\n # TODO: This is a temporary fix to avoid message duplication. We should develop a function for this.\n messages = (\n await MemoryComponent(**self.get_base_args())\n .set(\n session_id=self.graph.session_id,\n order=\"Ascending\",\n n_messages=self.n_messages,\n )\n .retrieve_messages()\n )\n return [\n message for message in messages if getattr(message, \"id\", None) != getattr(self.input_value, \"id\", None)\n ]\n\n async def get_llm(self):\n if not isinstance(self.agent_llm, str):\n return self.agent_llm, None\n\n try:\n provider_info = MODEL_PROVIDERS_DICT.get(self.agent_llm)\n if not provider_info:\n msg = f\"Invalid model provider: {self.agent_llm}\"\n raise ValueError(msg)\n\n component_class = provider_info.get(\"component_class\")\n display_name = component_class.display_name\n inputs = provider_info.get(\"inputs\")\n prefix = provider_info.get(\"prefix\", \"\")\n\n return self._build_llm_model(component_class, inputs, prefix), display_name\n\n except (AttributeError, ValueError, TypeError, RuntimeError) as e:\n await logger.aerror(f\"Error building {self.agent_llm} language model: {e!s}\")\n msg = f\"Failed to initialize language model: {e!s}\"\n raise ValueError(msg) from e\n\n def _build_llm_model(self, component, inputs, prefix=\"\"):\n model_kwargs = {}\n for input_ in inputs:\n if hasattr(self, f\"{prefix}{input_.name}\"):\n model_kwargs[input_.name] = getattr(self, f\"{prefix}{input_.name}\")\n return component.set(**model_kwargs).build_model()\n\n def set_component_params(self, component):\n provider_info = MODEL_PROVIDERS_DICT.get(self.agent_llm)\n if provider_info:\n inputs = provider_info.get(\"inputs\")\n prefix = provider_info.get(\"prefix\")\n # Filter out json_mode and only use attributes that exist on this component\n model_kwargs = {}\n for input_ in inputs:\n if hasattr(self, f\"{prefix}{input_.name}\"):\n model_kwargs[input_.name] = getattr(self, f\"{prefix}{input_.name}\")\n\n return component.set(**model_kwargs)\n return component\n\n def delete_fields(self, build_config: dotdict, fields: dict | list[str]) -> None:\n \"\"\"Delete specified fields from build_config.\"\"\"\n for field in fields:\n build_config.pop(field, None)\n\n def update_input_types(self, build_config: dotdict) -> dotdict:\n \"\"\"Update input types for all fields in build_config.\"\"\"\n for key, value in build_config.items():\n if isinstance(value, dict):\n if value.get(\"input_types\") is None:\n build_config[key][\"input_types\"] = []\n elif hasattr(value, \"input_types\") and value.input_types is None:\n value.input_types = []\n return build_config\n\n async def update_build_config(\n self, build_config: dotdict, field_value: str, field_name: str | None = None\n ) -> dotdict:\n # Iterate over all providers in the MODEL_PROVIDERS_DICT\n # Existing logic for updating build_config\n if field_name in (\"agent_llm\",):\n build_config[\"agent_llm\"][\"value\"] = field_value\n provider_info = MODEL_PROVIDERS_DICT.get(field_value)\n if provider_info:\n component_class = provider_info.get(\"component_class\")\n if component_class and hasattr(component_class, \"update_build_config\"):\n # Call the component class's update_build_config method\n build_config = await update_component_build_config(\n component_class, build_config, field_value, \"model_name\"\n )\n\n provider_configs: dict[str, tuple[dict, list[dict]]] = {\n provider: (\n MODEL_PROVIDERS_DICT[provider][\"fields\"],\n [\n MODEL_PROVIDERS_DICT[other_provider][\"fields\"]\n for other_provider in MODEL_PROVIDERS_DICT\n if other_provider != provider\n ],\n )\n for provider in MODEL_PROVIDERS_DICT\n }\n if field_value in provider_configs:\n fields_to_add, fields_to_delete = provider_configs[field_value]\n\n # Delete fields from other providers\n for fields in fields_to_delete:\n self.delete_fields(build_config, fields)\n\n # Add provider-specific fields\n if field_value == \"OpenAI\" and not any(field in build_config for field in fields_to_add):\n build_config.update(fields_to_add)\n else:\n build_config.update(fields_to_add)\n # Reset input types for agent_llm\n build_config[\"agent_llm\"][\"input_types\"] = []\n build_config[\"agent_llm\"][\"display_name\"] = \"Model Provider\"\n elif field_value == \"connect_other_models\":\n # Delete all provider fields\n self.delete_fields(build_config, ALL_PROVIDER_FIELDS)\n # # Update with custom component\n custom_component = DropdownInput(\n name=\"agent_llm\",\n display_name=\"Language Model\",\n info=\"The provider of the language model that the agent will use to generate responses.\",\n options=[*MODEL_PROVIDERS_LIST],\n real_time_refresh=True,\n refresh_button=False,\n input_types=[\"LanguageModel\"],\n placeholder=\"Awaiting model input.\",\n options_metadata=[MODELS_METADATA[key] for key in MODEL_PROVIDERS_LIST],\n external_options={\n \"fields\": {\n \"data\": {\n \"node\": {\n \"name\": \"connect_other_models\",\n \"display_name\": \"Connect other models\",\n \"icon\": \"CornerDownLeft\",\n },\n }\n },\n },\n )\n build_config.update({\"agent_llm\": custom_component.to_dict()})\n # Update input types for all fields\n build_config = self.update_input_types(build_config)\n\n # Validate required keys\n default_keys = [\n \"code\",\n \"_type\",\n \"agent_llm\",\n \"tools\",\n \"input_value\",\n \"add_current_date_tool\",\n \"system_prompt\",\n \"agent_description\",\n \"max_iterations\",\n \"handle_parsing_errors\",\n \"verbose\",\n ]\n missing_keys = [key for key in default_keys if key not in build_config]\n if missing_keys:\n msg = f\"Missing required keys in build_config: {missing_keys}\"\n raise ValueError(msg)\n if (\n isinstance(self.agent_llm, str)\n and self.agent_llm in MODEL_PROVIDERS_DICT\n and field_name in MODEL_DYNAMIC_UPDATE_FIELDS\n ):\n provider_info = MODEL_PROVIDERS_DICT.get(self.agent_llm)\n if provider_info:\n component_class = provider_info.get(\"component_class\")\n component_class = self.set_component_params(component_class)\n prefix = provider_info.get(\"prefix\")\n if component_class and hasattr(component_class, \"update_build_config\"):\n # Call each component class's update_build_config method\n # remove the prefix from the field_name\n if isinstance(field_name, str) and isinstance(prefix, str):\n field_name = field_name.replace(prefix, \"\")\n build_config = await update_component_build_config(\n component_class, build_config, field_value, \"model_name\"\n )\n return dotdict({k: v.to_dict() if hasattr(v, \"to_dict\") else v for k, v in build_config.items()})\n\n async def _get_tools(self) -> list[Tool]:\n component_toolkit = _get_component_toolkit()\n tools_names = self._build_tools_names()\n agent_description = self.get_tool_description()\n # TODO: Agent Description Depreciated Feature to be removed\n description = f\"{agent_description}{tools_names}\"\n tools = component_toolkit(component=self).get_tools(\n tool_name=\"Call_Agent\",\n tool_description=description,\n callbacks=self.get_langchain_callbacks(),\n )\n if hasattr(self, \"tools_metadata\"):\n tools = component_toolkit(component=self, metadata=self.tools_metadata).update_tools_metadata(tools=tools)\n return tools\n"
2332
+ },
2333
+ "format_instructions": {
2334
+ "_input_type": "MultilineInput",
2335
+ "advanced": true,
2336
+ "copy_field": false,
2337
+ "display_name": "Output Format Instructions",
2338
+ "dynamic": false,
2339
+ "info": "Generic Template for structured output formatting. Valid only with Structured response.",
2340
+ "input_types": [
2341
+ "Message"
2342
+ ],
2343
+ "list": false,
2344
+ "list_add_label": "Add More",
2345
+ "load_from_db": false,
2346
+ "multiline": true,
2347
+ "name": "format_instructions",
2348
+ "placeholder": "",
2349
+ "required": false,
2350
+ "show": true,
2351
+ "title_case": false,
2352
+ "tool_mode": false,
2353
+ "trace_as_input": true,
2354
+ "trace_as_metadata": true,
2355
+ "type": "str",
2356
+ "value": "You are an AI that extracts structured JSON objects from unstructured text. Use a predefined schema with expected types (str, int, float, bool, dict). Extract ALL relevant instances that match the schema - if multiple patterns exist, capture them all. Fill missing or ambiguous values with defaults: null for missing values. Remove exact duplicates but keep variations that have different field values. Always return valid JSON in the expected format, never throw errors. If multiple objects can be extracted, return them all in the structured format."
2357
+ },
2358
+ "handle_parsing_errors": {
2359
+ "_input_type": "BoolInput",
2360
+ "advanced": true,
2361
+ "display_name": "Handle Parse Errors",
2362
+ "dynamic": false,
2363
+ "info": "Should the Agent fix errors when reading user input for better processing?",
2364
+ "list": false,
2365
+ "list_add_label": "Add More",
2366
+ "name": "handle_parsing_errors",
2367
+ "placeholder": "",
2368
+ "required": false,
2369
+ "show": true,
2370
+ "title_case": false,
2371
+ "tool_mode": false,
2372
+ "trace_as_metadata": true,
2373
+ "type": "bool",
2374
+ "value": true
2375
+ },
2376
+ "input_value": {
2377
+ "_input_type": "MessageTextInput",
2378
+ "advanced": false,
2379
+ "display_name": "Input",
2380
+ "dynamic": false,
2381
+ "info": "The input provided by the user for the agent to process.",
2382
+ "input_types": [
2383
+ "Message"
2384
+ ],
2385
+ "list": false,
2386
+ "list_add_label": "Add More",
2387
+ "load_from_db": false,
2388
+ "name": "input_value",
2389
+ "placeholder": "",
2390
+ "required": false,
2391
+ "show": true,
2392
+ "title_case": false,
2393
+ "tool_mode": true,
2394
+ "trace_as_input": true,
2395
+ "trace_as_metadata": true,
2396
+ "type": "str",
2397
+ "value": ""
2398
+ },
2399
+ "max_iterations": {
2400
+ "_input_type": "IntInput",
2401
+ "advanced": true,
2402
+ "display_name": "Max Iterations",
2403
+ "dynamic": false,
2404
+ "info": "The maximum number of attempts the agent can make to complete its task before it stops.",
2405
+ "list": false,
2406
+ "list_add_label": "Add More",
2407
+ "name": "max_iterations",
2408
+ "placeholder": "",
2409
+ "required": false,
2410
+ "show": true,
2411
+ "title_case": false,
2412
+ "tool_mode": false,
2413
+ "trace_as_metadata": true,
2414
+ "type": "int",
2415
+ "value": 15
2416
+ },
2417
+ "max_retries": {
2418
+ "_input_type": "IntInput",
2419
+ "advanced": true,
2420
+ "display_name": "Max Retries",
2421
+ "dynamic": false,
2422
+ "info": "The maximum number of retries to make when generating.",
2423
+ "list": false,
2424
+ "list_add_label": "Add More",
2425
+ "name": "max_retries",
2426
+ "placeholder": "",
2427
+ "required": false,
2428
+ "show": true,
2429
+ "title_case": false,
2430
+ "tool_mode": false,
2431
+ "trace_as_metadata": true,
2432
+ "type": "int",
2433
+ "value": 5
2434
+ },
2435
+ "max_tokens": {
2436
+ "_input_type": "IntInput",
2437
+ "advanced": true,
2438
+ "display_name": "Max Tokens",
2439
+ "dynamic": false,
2440
+ "info": "The maximum number of tokens to generate. Set to 0 for unlimited tokens.",
2441
+ "list": false,
2442
+ "list_add_label": "Add More",
2443
+ "name": "max_tokens",
2444
+ "placeholder": "",
2445
+ "range_spec": {
2446
+ "max": 128000,
2447
+ "min": 0,
2448
+ "step": 0.1,
2449
+ "step_type": "float"
2450
+ },
2451
+ "required": false,
2452
+ "show": true,
2453
+ "title_case": false,
2454
+ "tool_mode": false,
2455
+ "trace_as_metadata": true,
2456
+ "type": "int",
2457
+ "value": ""
2458
+ },
2459
+ "model_kwargs": {
2460
+ "_input_type": "DictInput",
2461
+ "advanced": true,
2462
+ "display_name": "Model Kwargs",
2463
+ "dynamic": false,
2464
+ "info": "Additional keyword arguments to pass to the model.",
2465
+ "list": false,
2466
+ "list_add_label": "Add More",
2467
+ "name": "model_kwargs",
2468
+ "placeholder": "",
2469
+ "required": false,
2470
+ "show": true,
2471
+ "title_case": false,
2472
+ "tool_mode": false,
2473
+ "trace_as_input": true,
2474
+ "type": "dict",
2475
+ "value": {}
2476
+ },
2477
+ "model_name": {
2478
+ "_input_type": "DropdownInput",
2479
+ "advanced": false,
2480
+ "combobox": true,
2481
+ "dialog_inputs": {},
2482
+ "display_name": "Model Name",
2483
+ "dynamic": false,
2484
+ "info": "To see the model names, first choose a provider. Then, enter your API key and click the refresh button next to the model name.",
2485
+ "load_from_db": false,
2486
+ "name": "model_name",
2487
+ "options": [
2488
+ "gpt-4o-mini",
2489
+ "gpt-4o",
2490
+ "gpt-4.1",
2491
+ "gpt-4.1-mini",
2492
+ "gpt-4.1-nano",
2493
+ "gpt-4-turbo",
2494
+ "gpt-4-turbo-preview",
2495
+ "gpt-4",
2496
+ "gpt-3.5-turbo",
2497
+ "gpt-5",
2498
+ "gpt-5-mini",
2499
+ "gpt-5-nano",
2500
+ "gpt-5-chat-latest",
2501
+ "o1",
2502
+ "o3-mini",
2503
+ "o3",
2504
+ "o3-pro",
2505
+ "o4-mini",
2506
+ "o4-mini-high"
2507
+ ],
2508
+ "options_metadata": [],
2509
+ "placeholder": "",
2510
+ "real_time_refresh": false,
2511
+ "required": false,
2512
+ "show": true,
2513
+ "title_case": false,
2514
+ "toggle": false,
2515
+ "tool_mode": false,
2516
+ "trace_as_metadata": true,
2517
+ "type": "str",
2518
+ "value": "gpt-4.1"
2519
+ },
2520
+ "n_messages": {
2521
+ "_input_type": "IntInput",
2522
+ "advanced": true,
2523
+ "display_name": "Number of Chat History Messages",
2524
+ "dynamic": false,
2525
+ "info": "Number of chat history messages to retrieve.",
2526
+ "list": false,
2527
+ "list_add_label": "Add More",
2528
+ "name": "n_messages",
2529
+ "placeholder": "",
2530
+ "required": false,
2531
+ "show": true,
2532
+ "title_case": false,
2533
+ "tool_mode": false,
2534
+ "trace_as_metadata": true,
2535
+ "type": "int",
2536
+ "value": 100
2537
+ },
2538
+ "openai_api_base": {
2539
+ "_input_type": "StrInput",
2540
+ "advanced": true,
2541
+ "display_name": "OpenAI API Base",
2542
+ "dynamic": false,
2543
+ "info": "The base URL of the OpenAI API. Defaults to https://api.openai.com/v1. You can change this to use other APIs like JinaChat, LocalAI and Prem.",
2544
+ "list": false,
2545
+ "list_add_label": "Add More",
2546
+ "load_from_db": false,
2547
+ "name": "openai_api_base",
2548
+ "placeholder": "",
2549
+ "required": false,
2550
+ "show": true,
2551
+ "title_case": false,
2552
+ "tool_mode": false,
2553
+ "trace_as_metadata": true,
2554
+ "type": "str",
2555
+ "value": ""
2556
+ },
2557
+ "output_schema": {
2558
+ "_input_type": "TableInput",
2559
+ "advanced": true,
2560
+ "display_name": "Output Schema",
2561
+ "dynamic": false,
2562
+ "info": "Schema Validation: Define the structure and data types for structured output. No validation if no output schema.",
2563
+ "is_list": true,
2564
+ "list_add_label": "Add More",
2565
+ "name": "output_schema",
2566
+ "placeholder": "",
2567
+ "required": false,
2568
+ "show": true,
2569
+ "table_icon": "Table",
2570
+ "table_schema": {
2571
+ "columns": [
2572
+ {
2573
+ "default": "field",
2574
+ "description": "Specify the name of the output field.",
2575
+ "disable_edit": false,
2576
+ "display_name": "Name",
2577
+ "edit_mode": "inline",
2578
+ "filterable": true,
2579
+ "formatter": "text",
2580
+ "hidden": false,
2581
+ "name": "name",
2582
+ "sortable": true,
2583
+ "type": "str"
2584
+ },
2585
+ {
2586
+ "default": "description of field",
2587
+ "description": "Describe the purpose of the output field.",
2588
+ "disable_edit": false,
2589
+ "display_name": "Description",
2590
+ "edit_mode": "popover",
2591
+ "filterable": true,
2592
+ "formatter": "text",
2593
+ "hidden": false,
2594
+ "name": "description",
2595
+ "sortable": true,
2596
+ "type": "str"
2597
+ },
2598
+ {
2599
+ "default": "str",
2600
+ "description": "Indicate the data type of the output field (e.g., str, int, float, bool, dict).",
2601
+ "disable_edit": false,
2602
+ "display_name": "Type",
2603
+ "edit_mode": "inline",
2604
+ "filterable": true,
2605
+ "formatter": "text",
2606
+ "hidden": false,
2607
+ "name": "type",
2608
+ "options": [
2609
+ "str",
2610
+ "int",
2611
+ "float",
2612
+ "bool",
2613
+ "dict"
2614
+ ],
2615
+ "sortable": true,
2616
+ "type": "str"
2617
+ },
2618
+ {
2619
+ "default": false,
2620
+ "description": "Set to True if this output field should be a list of the specified type.",
2621
+ "disable_edit": false,
2622
+ "display_name": "As List",
2623
+ "edit_mode": "inline",
2624
+ "filterable": true,
2625
+ "formatter": "boolean",
2626
+ "hidden": false,
2627
+ "name": "multiple",
2628
+ "sortable": true,
2629
+ "type": "boolean"
2630
+ }
2631
+ ]
2632
+ },
2633
+ "title_case": false,
2634
+ "tool_mode": false,
2635
+ "trace_as_metadata": true,
2636
+ "trigger_icon": "Table",
2637
+ "trigger_text": "Open table",
2638
+ "type": "table",
2639
+ "value": []
2640
+ },
2641
+ "seed": {
2642
+ "_input_type": "IntInput",
2643
+ "advanced": true,
2644
+ "display_name": "Seed",
2645
+ "dynamic": false,
2646
+ "info": "The seed controls the reproducibility of the job.",
2647
+ "list": false,
2648
+ "list_add_label": "Add More",
2649
+ "name": "seed",
2650
+ "placeholder": "",
2651
+ "required": false,
2652
+ "show": true,
2653
+ "title_case": false,
2654
+ "tool_mode": false,
2655
+ "trace_as_metadata": true,
2656
+ "type": "int",
2657
+ "value": 1
2658
+ },
2659
+ "system_prompt": {
2660
+ "_input_type": "MultilineInput",
2661
+ "advanced": false,
2662
+ "copy_field": false,
2663
+ "display_name": "Agent Instructions",
2664
+ "dynamic": false,
2665
+ "info": "System Prompt: Initial instructions and context provided to guide the agent's behavior.",
2666
+ "input_types": [
2667
+ "Message"
2668
+ ],
2669
+ "list": false,
2670
+ "list_add_label": "Add More",
2671
+ "load_from_db": false,
2672
+ "multiline": true,
2673
+ "name": "system_prompt",
2674
+ "placeholder": "",
2675
+ "required": false,
2676
+ "show": true,
2677
+ "title_case": false,
2678
+ "tool_mode": false,
2679
+ "trace_as_input": true,
2680
+ "trace_as_metadata": true,
2681
+ "type": "str",
2682
+ "value": "You are a knowledgeable Local Expert with extensive information about the selected city, its attractions, and customs. Your goal is to provide the BEST insights about the city. Compile an in-depth guide for travelers, including key attractions, local customs, special events, and daily activity recommendations. Focus on hidden gems and local hotspots. Your final output should be a comprehensive city guide, rich in cultural insights and practical tips."
2683
+ },
2684
+ "temperature": {
2685
+ "_input_type": "SliderInput",
2686
+ "advanced": true,
2687
+ "display_name": "Temperature",
2688
+ "dynamic": false,
2689
+ "info": "",
2690
+ "max_label": "",
2691
+ "max_label_icon": "",
2692
+ "min_label": "",
2693
+ "min_label_icon": "",
2694
+ "name": "temperature",
2695
+ "placeholder": "",
2696
+ "range_spec": {
2697
+ "max": 1,
2698
+ "min": 0,
2699
+ "step": 0.01,
2700
+ "step_type": "float"
2701
+ },
2702
+ "required": false,
2703
+ "show": true,
2704
+ "slider_buttons": false,
2705
+ "slider_buttons_options": [],
2706
+ "slider_input": false,
2707
+ "title_case": false,
2708
+ "tool_mode": false,
2709
+ "type": "slider",
2710
+ "value": 0.1
2711
+ },
2712
+ "timeout": {
2713
+ "_input_type": "IntInput",
2714
+ "advanced": true,
2715
+ "display_name": "Timeout",
2716
+ "dynamic": false,
2717
+ "info": "The timeout for requests to OpenAI completion API.",
2718
+ "list": false,
2719
+ "list_add_label": "Add More",
2720
+ "name": "timeout",
2721
+ "placeholder": "",
2722
+ "required": false,
2723
+ "show": true,
2724
+ "title_case": false,
2725
+ "tool_mode": false,
2726
+ "trace_as_metadata": true,
2727
+ "type": "int",
2728
+ "value": 700
2729
+ },
2730
+ "tools": {
2731
+ "_input_type": "HandleInput",
2732
+ "advanced": false,
2733
+ "display_name": "Tools",
2734
+ "dynamic": false,
2735
+ "info": "These are the tools that the agent can use to help with tasks.",
2736
+ "input_types": [
2737
+ "Tool"
2738
+ ],
2739
+ "list": true,
2740
+ "list_add_label": "Add More",
2741
+ "name": "tools",
2742
+ "placeholder": "",
2743
+ "required": false,
2744
+ "show": true,
2745
+ "title_case": false,
2746
+ "trace_as_metadata": true,
2747
+ "type": "other",
2748
+ "value": ""
2749
+ },
2750
+ "verbose": {
2751
+ "_input_type": "BoolInput",
2752
+ "advanced": true,
2753
+ "display_name": "Verbose",
2754
+ "dynamic": false,
2755
+ "info": "",
2756
+ "list": false,
2757
+ "list_add_label": "Add More",
2758
+ "name": "verbose",
2759
+ "placeholder": "",
2760
+ "required": false,
2761
+ "show": true,
2762
+ "title_case": false,
2763
+ "tool_mode": false,
2764
+ "trace_as_metadata": true,
2765
+ "type": "bool",
2766
+ "value": true
2767
+ }
2768
+ },
2769
+ "tool_mode": false
2770
+ },
2771
+ "selected_output": "response",
2772
+ "showNode": true,
2773
+ "type": "Agent"
2774
+ },
2775
+ "dragging": false,
2776
+ "id": "Agent-9tDeE",
2777
+ "measured": {
2778
+ "height": 594,
2779
+ "width": 320
2780
+ },
2781
+ "position": {
2782
+ "x": 3168.5639981397626,
2783
+ "y": 342.7862450828752
2784
+ },
2785
+ "selected": false,
2786
+ "type": "genericNode"
2787
+ },
2788
+ {
2789
+ "data": {
2790
+ "id": "Agent-C8zRS",
2791
+ "node": {
2792
+ "base_classes": [
2793
+ "Message"
2794
+ ],
2795
+ "beta": false,
2796
+ "conditional_paths": [],
2797
+ "custom_fields": {},
2798
+ "description": "Define the agent's instructions, then enter a task to complete using tools.",
2799
+ "display_name": "Travel Concierge Agent",
2800
+ "documentation": "",
2801
+ "edited": false,
2802
+ "field_order": [
2803
+ "agent_llm",
2804
+ "max_tokens",
2805
+ "model_kwargs",
2806
+ "json_mode",
2807
+ "model_name",
2808
+ "openai_api_base",
2809
+ "api_key",
2810
+ "temperature",
2811
+ "seed",
2812
+ "max_retries",
2813
+ "timeout",
2814
+ "system_prompt",
2815
+ "n_messages",
2816
+ "tools",
2817
+ "input_value",
2818
+ "handle_parsing_errors",
2819
+ "verbose",
2820
+ "max_iterations",
2821
+ "agent_description",
2822
+ "add_current_date_tool"
2823
+ ],
2824
+ "frozen": false,
2825
+ "icon": "bot",
2826
+ "legacy": false,
2827
+ "metadata": {},
2828
+ "minimized": false,
2829
+ "output_types": [],
2830
+ "outputs": [
2831
+ {
2832
+ "allows_loop": false,
2833
+ "cache": true,
2834
+ "display_name": "Response",
2835
+ "group_outputs": false,
2836
+ "method": "message_response",
2837
+ "name": "response",
2838
+ "selected": "Message",
2839
+ "tool_mode": true,
2840
+ "types": [
2841
+ "Message"
2842
+ ],
2843
+ "value": "__UNDEFINED__"
2844
+ }
2845
+ ],
2846
+ "pinned": false,
2847
+ "template": {
2848
+ "_type": "Component",
2849
+ "add_current_date_tool": {
2850
+ "_input_type": "BoolInput",
2851
+ "advanced": true,
2852
+ "display_name": "Current Date",
2853
+ "dynamic": false,
2854
+ "info": "If true, will add a tool to the agent that returns the current date.",
2855
+ "list": false,
2856
+ "list_add_label": "Add More",
2857
+ "name": "add_current_date_tool",
2858
+ "placeholder": "",
2859
+ "required": false,
2860
+ "show": true,
2861
+ "title_case": false,
2862
+ "tool_mode": false,
2863
+ "trace_as_metadata": true,
2864
+ "type": "bool",
2865
+ "value": true
2866
+ },
2867
+ "agent_description": {
2868
+ "_input_type": "MultilineInput",
2869
+ "advanced": true,
2870
+ "copy_field": false,
2871
+ "display_name": "Agent Description [Deprecated]",
2872
+ "dynamic": false,
2873
+ "info": "The description of the agent. This is only used when in Tool Mode. Defaults to 'A helpful assistant with access to the following tools:' and tools are added dynamically. This feature is deprecated and will be removed in future versions.",
2874
+ "input_types": [
2875
+ "Message"
2876
+ ],
2877
+ "list": false,
2878
+ "list_add_label": "Add More",
2879
+ "load_from_db": false,
2880
+ "multiline": true,
2881
+ "name": "agent_description",
2882
+ "placeholder": "",
2883
+ "required": false,
2884
+ "show": true,
2885
+ "title_case": false,
2886
+ "tool_mode": false,
2887
+ "trace_as_input": true,
2888
+ "trace_as_metadata": true,
2889
+ "type": "str",
2890
+ "value": "A helpful assistant with access to the following tools:"
2891
+ },
2892
+ "agent_llm": {
2893
+ "_input_type": "DropdownInput",
2894
+ "advanced": false,
2895
+ "combobox": false,
2896
+ "dialog_inputs": {},
2897
+ "display_name": "Model Provider",
2898
+ "dynamic": false,
2899
+ "external_options": {
2900
+ "fields": {
2901
+ "data": {
2902
+ "node": {
2903
+ "display_name": "Connect other models",
2904
+ "icon": "CornerDownLeft",
2905
+ "name": "connect_other_models"
2906
+ }
2907
+ }
2908
+ }
2909
+ },
2910
+ "info": "The provider of the language model that the agent will use to generate responses.",
2911
+ "input_types": [],
2912
+ "name": "agent_llm",
2913
+ "options": [
2914
+ "Anthropic",
2915
+ "Google Generative AI",
2916
+ "OpenAI"
2917
+ ],
2918
+ "options_metadata": [
2919
+ {
2920
+ "icon": "Anthropic"
2921
+ },
2922
+ {
2923
+ "icon": "GoogleGenerativeAI"
2924
+ },
2925
+ {
2926
+ "icon": "OpenAI"
2927
+ }
2928
+ ],
2929
+ "placeholder": "",
2930
+ "real_time_refresh": true,
2931
+ "required": false,
2932
+ "show": true,
2933
+ "title_case": false,
2934
+ "toggle": false,
2935
+ "tool_mode": false,
2936
+ "trace_as_metadata": true,
2937
+ "type": "str",
2938
+ "value": "OpenAI"
2939
+ },
2940
+ "api_key": {
2941
+ "_input_type": "SecretStrInput",
2942
+ "advanced": false,
2943
+ "display_name": "OpenAI API Key",
2944
+ "dynamic": false,
2945
+ "info": "The OpenAI API Key to use for the OpenAI model.",
2946
+ "input_types": [],
2947
+ "load_from_db": true,
2948
+ "name": "api_key",
2949
+ "password": true,
2950
+ "placeholder": "",
2951
+ "real_time_refresh": true,
2952
+ "required": false,
2953
+ "show": true,
2954
+ "title_case": false,
2955
+ "type": "str",
2956
+ "value": "OPENAI_API_KEY"
2957
+ },
2958
+ "code": {
2959
+ "advanced": true,
2960
+ "dynamic": true,
2961
+ "fileTypes": [],
2962
+ "file_path": "",
2963
+ "info": "",
2964
+ "list": false,
2965
+ "load_from_db": false,
2966
+ "multiline": true,
2967
+ "name": "code",
2968
+ "password": false,
2969
+ "placeholder": "",
2970
+ "required": true,
2971
+ "show": true,
2972
+ "title_case": false,
2973
+ "type": "code",
2974
+ "value": "import json\nimport re\n\nfrom langchain_core.tools import StructuredTool\nfrom pydantic import ValidationError\n\nfrom vibe_surf.langflow.base.agents.agent import LCToolsAgentComponent\nfrom vibe_surf.langflow.base.agents.events import ExceptionWithMessageError\nfrom vibe_surf.langflow.base.models.model_input_constants import (\n ALL_PROVIDER_FIELDS,\n MODEL_DYNAMIC_UPDATE_FIELDS,\n MODEL_PROVIDERS_DICT,\n MODELS_METADATA,\n)\nfrom vibe_surf.langflow.base.models.model_utils import get_model_name\nfrom vibe_surf.langflow.components.helpers.current_date import CurrentDateComponent\nfrom vibe_surf.langflow.components.helpers.memory import MemoryComponent\nfrom vibe_surf.langflow.components.langchain_utilities.tool_calling import (\n ToolCallingAgentComponent,\n)\nfrom vibe_surf.langflow.custom.custom_component.component import _get_component_toolkit\nfrom vibe_surf.langflow.custom.utils import update_component_build_config\nfrom vibe_surf.langflow.field_typing import Tool\nfrom vibe_surf.langflow.helpers.base_model import build_model_from_schema\nfrom vibe_surf.langflow.io import (\n BoolInput,\n DropdownInput,\n IntInput,\n MultilineInput,\n Output,\n TableInput,\n)\nfrom vibe_surf.langflow.logging import logger\nfrom vibe_surf.langflow.schema.data import Data\nfrom vibe_surf.langflow.schema.dotdict import dotdict\nfrom vibe_surf.langflow.schema.message import Message\nfrom vibe_surf.langflow.schema.table import EditMode\n\n\ndef set_advanced_true(component_input):\n component_input.advanced = True\n return component_input\n\n\nMODEL_PROVIDERS_LIST = [\"Anthropic\", \"Google Generative AI\", \"OpenAI\"]\n\n\nclass AgentComponent(ToolCallingAgentComponent):\n display_name: str = \"Agent\"\n description: str = \"Define the agent's instructions, then enter a task to complete using tools.\"\n documentation: str = \"https://docs.vibe_surf.langflow.org/agents\"\n icon = \"bot\"\n beta = False\n name = \"Agent\"\n\n memory_inputs = [set_advanced_true(component_input) for component_input in MemoryComponent().inputs]\n\n # Filter out json_mode from OpenAI inputs since we handle structured output differently\n openai_inputs_filtered = [\n input_field\n for input_field in MODEL_PROVIDERS_DICT[\"OpenAI\"][\"inputs\"]\n if not (hasattr(input_field, \"name\") and input_field.name == \"json_mode\")\n ]\n\n inputs = [\n DropdownInput(\n name=\"agent_llm\",\n display_name=\"Model Provider\",\n info=\"The provider of the language model that the agent will use to generate responses.\",\n options=[*MODEL_PROVIDERS_LIST],\n value=\"OpenAI\",\n real_time_refresh=True,\n refresh_button=False,\n input_types=[],\n options_metadata=[MODELS_METADATA[key] for key in MODEL_PROVIDERS_LIST],\n external_options={\n \"fields\": {\n \"data\": {\n \"node\": {\n \"name\": \"connect_other_models\",\n \"display_name\": \"Connect other models\",\n \"icon\": \"CornerDownLeft\",\n }\n }\n },\n },\n ),\n *openai_inputs_filtered,\n MultilineInput(\n name=\"system_prompt\",\n display_name=\"Agent Instructions\",\n info=\"System Prompt: Initial instructions and context provided to guide the agent's behavior.\",\n value=\"You are a helpful assistant that can use tools to answer questions and perform tasks.\",\n advanced=False,\n ),\n IntInput(\n name=\"n_messages\",\n display_name=\"Number of Chat History Messages\",\n value=100,\n info=\"Number of chat history messages to retrieve.\",\n advanced=True,\n show=True,\n ),\n MultilineInput(\n name=\"format_instructions\",\n display_name=\"Output Format Instructions\",\n info=\"Generic Template for structured output formatting. Valid only with Structured response.\",\n value=(\n \"You are an AI that extracts structured JSON objects from unstructured text. \"\n \"Use a predefined schema with expected types (str, int, float, bool, dict). \"\n \"Extract ALL relevant instances that match the schema - if multiple patterns exist, capture them all. \"\n \"Fill missing or ambiguous values with defaults: null for missing values. \"\n \"Remove exact duplicates but keep variations that have different field values. \"\n \"Always return valid JSON in the expected format, never throw errors. \"\n \"If multiple objects can be extracted, return them all in the structured format.\"\n ),\n advanced=True,\n ),\n TableInput(\n name=\"output_schema\",\n display_name=\"Output Schema\",\n info=(\n \"Schema Validation: Define the structure and data types for structured output. \"\n \"No validation if no output schema.\"\n ),\n advanced=True,\n required=False,\n value=[],\n table_schema=[\n {\n \"name\": \"name\",\n \"display_name\": \"Name\",\n \"type\": \"str\",\n \"description\": \"Specify the name of the output field.\",\n \"default\": \"field\",\n \"edit_mode\": EditMode.INLINE,\n },\n {\n \"name\": \"description\",\n \"display_name\": \"Description\",\n \"type\": \"str\",\n \"description\": \"Describe the purpose of the output field.\",\n \"default\": \"description of field\",\n \"edit_mode\": EditMode.POPOVER,\n },\n {\n \"name\": \"type\",\n \"display_name\": \"Type\",\n \"type\": \"str\",\n \"edit_mode\": EditMode.INLINE,\n \"description\": (\"Indicate the data type of the output field (e.g., str, int, float, bool, dict).\"),\n \"options\": [\"str\", \"int\", \"float\", \"bool\", \"dict\"],\n \"default\": \"str\",\n },\n {\n \"name\": \"multiple\",\n \"display_name\": \"As List\",\n \"type\": \"boolean\",\n \"description\": \"Set to True if this output field should be a list of the specified type.\",\n \"default\": \"False\",\n \"edit_mode\": EditMode.INLINE,\n },\n ],\n ),\n *LCToolsAgentComponent._base_inputs,\n # removed memory inputs from agent component\n # *memory_inputs,\n BoolInput(\n name=\"add_current_date_tool\",\n display_name=\"Current Date\",\n advanced=True,\n info=\"If true, will add a tool to the agent that returns the current date.\",\n value=True,\n ),\n ]\n outputs = [\n Output(name=\"response\", display_name=\"Response\", method=\"message_response\"),\n ]\n\n async def get_agent_requirements(self):\n \"\"\"Get the agent requirements for the agent.\"\"\"\n llm_model, display_name = await self.get_llm()\n if llm_model is None:\n msg = \"No language model selected. Please choose a model to proceed.\"\n raise ValueError(msg)\n self.model_name = get_model_name(llm_model, display_name=display_name)\n\n # Get memory data\n self.chat_history = await self.get_memory_data()\n if isinstance(self.chat_history, Message):\n self.chat_history = [self.chat_history]\n\n # Add current date tool if enabled\n if self.add_current_date_tool:\n if not isinstance(self.tools, list): # type: ignore[has-type]\n self.tools = []\n current_date_tool = (await CurrentDateComponent(**self.get_base_args()).to_toolkit()).pop(0)\n if not isinstance(current_date_tool, StructuredTool):\n msg = \"CurrentDateComponent must be converted to a StructuredTool\"\n raise TypeError(msg)\n self.tools.append(current_date_tool)\n return llm_model, self.chat_history, self.tools\n\n async def message_response(self) -> Message:\n try:\n llm_model, self.chat_history, self.tools = await self.get_agent_requirements()\n # Set up and run agent\n self.set(\n llm=llm_model,\n tools=self.tools or [],\n chat_history=self.chat_history,\n input_value=self.input_value,\n system_prompt=self.system_prompt,\n )\n agent = self.create_agent_runnable()\n result = await self.run_agent(agent)\n\n # Store result for potential JSON output\n self._agent_result = result\n\n except (ValueError, TypeError, KeyError) as e:\n await logger.aerror(f\"{type(e).__name__}: {e!s}\")\n raise\n except ExceptionWithMessageError as e:\n await logger.aerror(f\"ExceptionWithMessageError occurred: {e}\")\n raise\n # Avoid catching blind Exception; let truly unexpected exceptions propagate\n except Exception as e:\n await logger.aerror(f\"Unexpected error: {e!s}\")\n raise\n else:\n return result\n\n def _preprocess_schema(self, schema):\n \"\"\"Preprocess schema to ensure correct data types for build_model_from_schema.\"\"\"\n processed_schema = []\n for field in schema:\n processed_field = {\n \"name\": str(field.get(\"name\", \"field\")),\n \"type\": str(field.get(\"type\", \"str\")),\n \"description\": str(field.get(\"description\", \"\")),\n \"multiple\": field.get(\"multiple\", False),\n }\n # Ensure multiple is handled correctly\n if isinstance(processed_field[\"multiple\"], str):\n processed_field[\"multiple\"] = processed_field[\"multiple\"].lower() in [\n \"true\",\n \"1\",\n \"t\",\n \"y\",\n \"yes\",\n ]\n processed_schema.append(processed_field)\n return processed_schema\n\n async def build_structured_output_base(self, content: str):\n \"\"\"Build structured output with optional BaseModel validation.\"\"\"\n json_pattern = r\"\\{.*\\}\"\n schema_error_msg = \"Try setting an output schema\"\n\n # Try to parse content as JSON first\n json_data = None\n try:\n json_data = json.loads(content)\n except json.JSONDecodeError:\n json_match = re.search(json_pattern, content, re.DOTALL)\n if json_match:\n try:\n json_data = json.loads(json_match.group())\n except json.JSONDecodeError:\n return {\"content\": content, \"error\": schema_error_msg}\n else:\n return {\"content\": content, \"error\": schema_error_msg}\n\n # If no output schema provided, return parsed JSON without validation\n if not hasattr(self, \"output_schema\") or not self.output_schema or len(self.output_schema) == 0:\n return json_data\n\n # Use BaseModel validation with schema\n try:\n processed_schema = self._preprocess_schema(self.output_schema)\n output_model = build_model_from_schema(processed_schema)\n\n # Validate against the schema\n if isinstance(json_data, list):\n # Multiple objects\n validated_objects = []\n for item in json_data:\n try:\n validated_obj = output_model.model_validate(item)\n validated_objects.append(validated_obj.model_dump())\n except ValidationError as e:\n await logger.aerror(f\"Validation error for item: {e}\")\n # Include invalid items with error info\n validated_objects.append({\"data\": item, \"validation_error\": str(e)})\n return validated_objects\n\n # Single object\n try:\n validated_obj = output_model.model_validate(json_data)\n return [validated_obj.model_dump()] # Return as list for consistency\n except ValidationError as e:\n await logger.aerror(f\"Validation error: {e}\")\n return [{\"data\": json_data, \"validation_error\": str(e)}]\n\n except (TypeError, ValueError) as e:\n await logger.aerror(f\"Error building structured output: {e}\")\n # Fallback to parsed JSON without validation\n return json_data\n\n async def json_response(self) -> Data:\n \"\"\"Convert agent response to structured JSON Data output with schema validation.\"\"\"\n # Always use structured chat agent for JSON response mode for better JSON formatting\n try:\n system_components = []\n\n # 1. Agent Instructions (system_prompt)\n agent_instructions = getattr(self, \"system_prompt\", \"\") or \"\"\n if agent_instructions:\n system_components.append(f\"{agent_instructions}\")\n\n # 2. Format Instructions\n format_instructions = getattr(self, \"format_instructions\", \"\") or \"\"\n if format_instructions:\n system_components.append(f\"Format instructions: {format_instructions}\")\n\n # 3. Schema Information from BaseModel\n if hasattr(self, \"output_schema\") and self.output_schema and len(self.output_schema) > 0:\n try:\n processed_schema = self._preprocess_schema(self.output_schema)\n output_model = build_model_from_schema(processed_schema)\n schema_dict = output_model.model_json_schema()\n schema_info = (\n \"You are given some text that may include format instructions, \"\n \"explanations, or other content alongside a JSON schema.\\n\\n\"\n \"Your task:\\n\"\n \"- Extract only the JSON schema.\\n\"\n \"- Return it as valid JSON.\\n\"\n \"- Do not include format instructions, explanations, or extra text.\\n\\n\"\n \"Input:\\n\"\n f\"{json.dumps(schema_dict, indent=2)}\\n\\n\"\n \"Output (only JSON schema):\"\n )\n system_components.append(schema_info)\n except (ValidationError, ValueError, TypeError, KeyError) as e:\n await logger.aerror(f\"Could not build schema for prompt: {e}\", exc_info=True)\n\n # Combine all components\n combined_instructions = \"\\n\\n\".join(system_components) if system_components else \"\"\n llm_model, self.chat_history, self.tools = await self.get_agent_requirements()\n self.set(\n llm=llm_model,\n tools=self.tools or [],\n chat_history=self.chat_history,\n input_value=self.input_value,\n system_prompt=combined_instructions,\n )\n\n # Create and run structured chat agent\n try:\n structured_agent = self.create_agent_runnable()\n except (NotImplementedError, ValueError, TypeError) as e:\n await logger.aerror(f\"Error with structured chat agent: {e}\")\n raise\n try:\n result = await self.run_agent(structured_agent)\n except (\n ExceptionWithMessageError,\n ValueError,\n TypeError,\n RuntimeError,\n ) as e:\n await logger.aerror(f\"Error with structured agent result: {e}\")\n raise\n # Extract content from structured agent result\n if hasattr(result, \"content\"):\n content = result.content\n elif hasattr(result, \"text\"):\n content = result.text\n else:\n content = str(result)\n\n except (\n ExceptionWithMessageError,\n ValueError,\n TypeError,\n NotImplementedError,\n AttributeError,\n ) as e:\n await logger.aerror(f\"Error with structured chat agent: {e}\")\n # Fallback to regular agent\n content_str = \"No content returned from agent\"\n return Data(data={\"content\": content_str, \"error\": str(e)})\n\n # Process with structured output validation\n try:\n structured_output = await self.build_structured_output_base(content)\n\n # Handle different output formats\n if isinstance(structured_output, list) and structured_output:\n if len(structured_output) == 1:\n return Data(data=structured_output[0])\n return Data(data={\"results\": structured_output})\n if isinstance(structured_output, dict):\n return Data(data=structured_output)\n return Data(data={\"content\": content})\n\n except (ValueError, TypeError) as e:\n await logger.aerror(f\"Error in structured output processing: {e}\")\n return Data(data={\"content\": content, \"error\": str(e)})\n\n async def get_memory_data(self):\n # TODO: This is a temporary fix to avoid message duplication. We should develop a function for this.\n messages = (\n await MemoryComponent(**self.get_base_args())\n .set(\n session_id=self.graph.session_id,\n order=\"Ascending\",\n n_messages=self.n_messages,\n )\n .retrieve_messages()\n )\n return [\n message for message in messages if getattr(message, \"id\", None) != getattr(self.input_value, \"id\", None)\n ]\n\n async def get_llm(self):\n if not isinstance(self.agent_llm, str):\n return self.agent_llm, None\n\n try:\n provider_info = MODEL_PROVIDERS_DICT.get(self.agent_llm)\n if not provider_info:\n msg = f\"Invalid model provider: {self.agent_llm}\"\n raise ValueError(msg)\n\n component_class = provider_info.get(\"component_class\")\n display_name = component_class.display_name\n inputs = provider_info.get(\"inputs\")\n prefix = provider_info.get(\"prefix\", \"\")\n\n return self._build_llm_model(component_class, inputs, prefix), display_name\n\n except (AttributeError, ValueError, TypeError, RuntimeError) as e:\n await logger.aerror(f\"Error building {self.agent_llm} language model: {e!s}\")\n msg = f\"Failed to initialize language model: {e!s}\"\n raise ValueError(msg) from e\n\n def _build_llm_model(self, component, inputs, prefix=\"\"):\n model_kwargs = {}\n for input_ in inputs:\n if hasattr(self, f\"{prefix}{input_.name}\"):\n model_kwargs[input_.name] = getattr(self, f\"{prefix}{input_.name}\")\n return component.set(**model_kwargs).build_model()\n\n def set_component_params(self, component):\n provider_info = MODEL_PROVIDERS_DICT.get(self.agent_llm)\n if provider_info:\n inputs = provider_info.get(\"inputs\")\n prefix = provider_info.get(\"prefix\")\n # Filter out json_mode and only use attributes that exist on this component\n model_kwargs = {}\n for input_ in inputs:\n if hasattr(self, f\"{prefix}{input_.name}\"):\n model_kwargs[input_.name] = getattr(self, f\"{prefix}{input_.name}\")\n\n return component.set(**model_kwargs)\n return component\n\n def delete_fields(self, build_config: dotdict, fields: dict | list[str]) -> None:\n \"\"\"Delete specified fields from build_config.\"\"\"\n for field in fields:\n build_config.pop(field, None)\n\n def update_input_types(self, build_config: dotdict) -> dotdict:\n \"\"\"Update input types for all fields in build_config.\"\"\"\n for key, value in build_config.items():\n if isinstance(value, dict):\n if value.get(\"input_types\") is None:\n build_config[key][\"input_types\"] = []\n elif hasattr(value, \"input_types\") and value.input_types is None:\n value.input_types = []\n return build_config\n\n async def update_build_config(\n self, build_config: dotdict, field_value: str, field_name: str | None = None\n ) -> dotdict:\n # Iterate over all providers in the MODEL_PROVIDERS_DICT\n # Existing logic for updating build_config\n if field_name in (\"agent_llm\",):\n build_config[\"agent_llm\"][\"value\"] = field_value\n provider_info = MODEL_PROVIDERS_DICT.get(field_value)\n if provider_info:\n component_class = provider_info.get(\"component_class\")\n if component_class and hasattr(component_class, \"update_build_config\"):\n # Call the component class's update_build_config method\n build_config = await update_component_build_config(\n component_class, build_config, field_value, \"model_name\"\n )\n\n provider_configs: dict[str, tuple[dict, list[dict]]] = {\n provider: (\n MODEL_PROVIDERS_DICT[provider][\"fields\"],\n [\n MODEL_PROVIDERS_DICT[other_provider][\"fields\"]\n for other_provider in MODEL_PROVIDERS_DICT\n if other_provider != provider\n ],\n )\n for provider in MODEL_PROVIDERS_DICT\n }\n if field_value in provider_configs:\n fields_to_add, fields_to_delete = provider_configs[field_value]\n\n # Delete fields from other providers\n for fields in fields_to_delete:\n self.delete_fields(build_config, fields)\n\n # Add provider-specific fields\n if field_value == \"OpenAI\" and not any(field in build_config for field in fields_to_add):\n build_config.update(fields_to_add)\n else:\n build_config.update(fields_to_add)\n # Reset input types for agent_llm\n build_config[\"agent_llm\"][\"input_types\"] = []\n build_config[\"agent_llm\"][\"display_name\"] = \"Model Provider\"\n elif field_value == \"connect_other_models\":\n # Delete all provider fields\n self.delete_fields(build_config, ALL_PROVIDER_FIELDS)\n # # Update with custom component\n custom_component = DropdownInput(\n name=\"agent_llm\",\n display_name=\"Language Model\",\n info=\"The provider of the language model that the agent will use to generate responses.\",\n options=[*MODEL_PROVIDERS_LIST],\n real_time_refresh=True,\n refresh_button=False,\n input_types=[\"LanguageModel\"],\n placeholder=\"Awaiting model input.\",\n options_metadata=[MODELS_METADATA[key] for key in MODEL_PROVIDERS_LIST],\n external_options={\n \"fields\": {\n \"data\": {\n \"node\": {\n \"name\": \"connect_other_models\",\n \"display_name\": \"Connect other models\",\n \"icon\": \"CornerDownLeft\",\n },\n }\n },\n },\n )\n build_config.update({\"agent_llm\": custom_component.to_dict()})\n # Update input types for all fields\n build_config = self.update_input_types(build_config)\n\n # Validate required keys\n default_keys = [\n \"code\",\n \"_type\",\n \"agent_llm\",\n \"tools\",\n \"input_value\",\n \"add_current_date_tool\",\n \"system_prompt\",\n \"agent_description\",\n \"max_iterations\",\n \"handle_parsing_errors\",\n \"verbose\",\n ]\n missing_keys = [key for key in default_keys if key not in build_config]\n if missing_keys:\n msg = f\"Missing required keys in build_config: {missing_keys}\"\n raise ValueError(msg)\n if (\n isinstance(self.agent_llm, str)\n and self.agent_llm in MODEL_PROVIDERS_DICT\n and field_name in MODEL_DYNAMIC_UPDATE_FIELDS\n ):\n provider_info = MODEL_PROVIDERS_DICT.get(self.agent_llm)\n if provider_info:\n component_class = provider_info.get(\"component_class\")\n component_class = self.set_component_params(component_class)\n prefix = provider_info.get(\"prefix\")\n if component_class and hasattr(component_class, \"update_build_config\"):\n # Call each component class's update_build_config method\n # remove the prefix from the field_name\n if isinstance(field_name, str) and isinstance(prefix, str):\n field_name = field_name.replace(prefix, \"\")\n build_config = await update_component_build_config(\n component_class, build_config, field_value, \"model_name\"\n )\n return dotdict({k: v.to_dict() if hasattr(v, \"to_dict\") else v for k, v in build_config.items()})\n\n async def _get_tools(self) -> list[Tool]:\n component_toolkit = _get_component_toolkit()\n tools_names = self._build_tools_names()\n agent_description = self.get_tool_description()\n # TODO: Agent Description Depreciated Feature to be removed\n description = f\"{agent_description}{tools_names}\"\n tools = component_toolkit(component=self).get_tools(\n tool_name=\"Call_Agent\",\n tool_description=description,\n callbacks=self.get_langchain_callbacks(),\n )\n if hasattr(self, \"tools_metadata\"):\n tools = component_toolkit(component=self, metadata=self.tools_metadata).update_tools_metadata(tools=tools)\n return tools\n"
2975
+ },
2976
+ "format_instructions": {
2977
+ "_input_type": "MultilineInput",
2978
+ "advanced": true,
2979
+ "copy_field": false,
2980
+ "display_name": "Output Format Instructions",
2981
+ "dynamic": false,
2982
+ "info": "Generic Template for structured output formatting. Valid only with Structured response.",
2983
+ "input_types": [
2984
+ "Message"
2985
+ ],
2986
+ "list": false,
2987
+ "list_add_label": "Add More",
2988
+ "load_from_db": false,
2989
+ "multiline": true,
2990
+ "name": "format_instructions",
2991
+ "placeholder": "",
2992
+ "required": false,
2993
+ "show": true,
2994
+ "title_case": false,
2995
+ "tool_mode": false,
2996
+ "trace_as_input": true,
2997
+ "trace_as_metadata": true,
2998
+ "type": "str",
2999
+ "value": "You are an AI that extracts structured JSON objects from unstructured text. Use a predefined schema with expected types (str, int, float, bool, dict). Extract ALL relevant instances that match the schema - if multiple patterns exist, capture them all. Fill missing or ambiguous values with defaults: null for missing values. Remove exact duplicates but keep variations that have different field values. Always return valid JSON in the expected format, never throw errors. If multiple objects can be extracted, return them all in the structured format."
3000
+ },
3001
+ "handle_parsing_errors": {
3002
+ "_input_type": "BoolInput",
3003
+ "advanced": true,
3004
+ "display_name": "Handle Parse Errors",
3005
+ "dynamic": false,
3006
+ "info": "Should the Agent fix errors when reading user input for better processing?",
3007
+ "list": false,
3008
+ "list_add_label": "Add More",
3009
+ "name": "handle_parsing_errors",
3010
+ "placeholder": "",
3011
+ "required": false,
3012
+ "show": true,
3013
+ "title_case": false,
3014
+ "tool_mode": false,
3015
+ "trace_as_metadata": true,
3016
+ "type": "bool",
3017
+ "value": true
3018
+ },
3019
+ "input_value": {
3020
+ "_input_type": "MessageTextInput",
3021
+ "advanced": false,
3022
+ "display_name": "Input",
3023
+ "dynamic": false,
3024
+ "info": "The input provided by the user for the agent to process.",
3025
+ "input_types": [
3026
+ "Message"
3027
+ ],
3028
+ "list": false,
3029
+ "list_add_label": "Add More",
3030
+ "load_from_db": false,
3031
+ "name": "input_value",
3032
+ "placeholder": "",
3033
+ "required": false,
3034
+ "show": true,
3035
+ "title_case": false,
3036
+ "tool_mode": true,
3037
+ "trace_as_input": true,
3038
+ "trace_as_metadata": true,
3039
+ "type": "str",
3040
+ "value": ""
3041
+ },
3042
+ "max_iterations": {
3043
+ "_input_type": "IntInput",
3044
+ "advanced": true,
3045
+ "display_name": "Max Iterations",
3046
+ "dynamic": false,
3047
+ "info": "The maximum number of attempts the agent can make to complete its task before it stops.",
3048
+ "list": false,
3049
+ "list_add_label": "Add More",
3050
+ "name": "max_iterations",
3051
+ "placeholder": "",
3052
+ "required": false,
3053
+ "show": true,
3054
+ "title_case": false,
3055
+ "tool_mode": false,
3056
+ "trace_as_metadata": true,
3057
+ "type": "int",
3058
+ "value": 15
3059
+ },
3060
+ "max_retries": {
3061
+ "_input_type": "IntInput",
3062
+ "advanced": true,
3063
+ "display_name": "Max Retries",
3064
+ "dynamic": false,
3065
+ "info": "The maximum number of retries to make when generating.",
3066
+ "list": false,
3067
+ "list_add_label": "Add More",
3068
+ "name": "max_retries",
3069
+ "placeholder": "",
3070
+ "required": false,
3071
+ "show": true,
3072
+ "title_case": false,
3073
+ "tool_mode": false,
3074
+ "trace_as_metadata": true,
3075
+ "type": "int",
3076
+ "value": 5
3077
+ },
3078
+ "max_tokens": {
3079
+ "_input_type": "IntInput",
3080
+ "advanced": true,
3081
+ "display_name": "Max Tokens",
3082
+ "dynamic": false,
3083
+ "info": "The maximum number of tokens to generate. Set to 0 for unlimited tokens.",
3084
+ "list": false,
3085
+ "list_add_label": "Add More",
3086
+ "name": "max_tokens",
3087
+ "placeholder": "",
3088
+ "range_spec": {
3089
+ "max": 128000,
3090
+ "min": 0,
3091
+ "step": 0.1,
3092
+ "step_type": "float"
3093
+ },
3094
+ "required": false,
3095
+ "show": true,
3096
+ "title_case": false,
3097
+ "tool_mode": false,
3098
+ "trace_as_metadata": true,
3099
+ "type": "int",
3100
+ "value": ""
3101
+ },
3102
+ "model_kwargs": {
3103
+ "_input_type": "DictInput",
3104
+ "advanced": true,
3105
+ "display_name": "Model Kwargs",
3106
+ "dynamic": false,
3107
+ "info": "Additional keyword arguments to pass to the model.",
3108
+ "list": false,
3109
+ "list_add_label": "Add More",
3110
+ "name": "model_kwargs",
3111
+ "placeholder": "",
3112
+ "required": false,
3113
+ "show": true,
3114
+ "title_case": false,
3115
+ "tool_mode": false,
3116
+ "trace_as_input": true,
3117
+ "type": "dict",
3118
+ "value": {}
3119
+ },
3120
+ "model_name": {
3121
+ "_input_type": "DropdownInput",
3122
+ "advanced": false,
3123
+ "combobox": true,
3124
+ "dialog_inputs": {},
3125
+ "display_name": "Model Name",
3126
+ "dynamic": false,
3127
+ "info": "To see the model names, first choose a provider. Then, enter your API key and click the refresh button next to the model name.",
3128
+ "load_from_db": false,
3129
+ "name": "model_name",
3130
+ "options": [
3131
+ "gpt-4o-mini",
3132
+ "gpt-4o",
3133
+ "gpt-4.1",
3134
+ "gpt-4.1-mini",
3135
+ "gpt-4.1-nano",
3136
+ "gpt-4-turbo",
3137
+ "gpt-4-turbo-preview",
3138
+ "gpt-4",
3139
+ "gpt-3.5-turbo",
3140
+ "gpt-5",
3141
+ "gpt-5-mini",
3142
+ "gpt-5-nano",
3143
+ "gpt-5-chat-latest",
3144
+ "o1",
3145
+ "o3-mini",
3146
+ "o3",
3147
+ "o3-pro",
3148
+ "o4-mini",
3149
+ "o4-mini-high"
3150
+ ],
3151
+ "options_metadata": [],
3152
+ "placeholder": "",
3153
+ "real_time_refresh": false,
3154
+ "required": false,
3155
+ "show": true,
3156
+ "title_case": false,
3157
+ "toggle": false,
3158
+ "tool_mode": false,
3159
+ "trace_as_metadata": true,
3160
+ "type": "str",
3161
+ "value": "gpt-4.1"
3162
+ },
3163
+ "n_messages": {
3164
+ "_input_type": "IntInput",
3165
+ "advanced": true,
3166
+ "display_name": "Number of Chat History Messages",
3167
+ "dynamic": false,
3168
+ "info": "Number of chat history messages to retrieve.",
3169
+ "list": false,
3170
+ "list_add_label": "Add More",
3171
+ "name": "n_messages",
3172
+ "placeholder": "",
3173
+ "required": false,
3174
+ "show": true,
3175
+ "title_case": false,
3176
+ "tool_mode": false,
3177
+ "trace_as_metadata": true,
3178
+ "type": "int",
3179
+ "value": 100
3180
+ },
3181
+ "openai_api_base": {
3182
+ "_input_type": "StrInput",
3183
+ "advanced": true,
3184
+ "display_name": "OpenAI API Base",
3185
+ "dynamic": false,
3186
+ "info": "The base URL of the OpenAI API. Defaults to https://api.openai.com/v1. You can change this to use other APIs like JinaChat, LocalAI and Prem.",
3187
+ "list": false,
3188
+ "list_add_label": "Add More",
3189
+ "load_from_db": false,
3190
+ "name": "openai_api_base",
3191
+ "placeholder": "",
3192
+ "required": false,
3193
+ "show": true,
3194
+ "title_case": false,
3195
+ "tool_mode": false,
3196
+ "trace_as_metadata": true,
3197
+ "type": "str",
3198
+ "value": ""
3199
+ },
3200
+ "output_schema": {
3201
+ "_input_type": "TableInput",
3202
+ "advanced": true,
3203
+ "display_name": "Output Schema",
3204
+ "dynamic": false,
3205
+ "info": "Schema Validation: Define the structure and data types for structured output. No validation if no output schema.",
3206
+ "is_list": true,
3207
+ "list_add_label": "Add More",
3208
+ "name": "output_schema",
3209
+ "placeholder": "",
3210
+ "required": false,
3211
+ "show": true,
3212
+ "table_icon": "Table",
3213
+ "table_schema": {
3214
+ "columns": [
3215
+ {
3216
+ "default": "field",
3217
+ "description": "Specify the name of the output field.",
3218
+ "disable_edit": false,
3219
+ "display_name": "Name",
3220
+ "edit_mode": "inline",
3221
+ "filterable": true,
3222
+ "formatter": "text",
3223
+ "hidden": false,
3224
+ "name": "name",
3225
+ "sortable": true,
3226
+ "type": "str"
3227
+ },
3228
+ {
3229
+ "default": "description of field",
3230
+ "description": "Describe the purpose of the output field.",
3231
+ "disable_edit": false,
3232
+ "display_name": "Description",
3233
+ "edit_mode": "popover",
3234
+ "filterable": true,
3235
+ "formatter": "text",
3236
+ "hidden": false,
3237
+ "name": "description",
3238
+ "sortable": true,
3239
+ "type": "str"
3240
+ },
3241
+ {
3242
+ "default": "str",
3243
+ "description": "Indicate the data type of the output field (e.g., str, int, float, bool, dict).",
3244
+ "disable_edit": false,
3245
+ "display_name": "Type",
3246
+ "edit_mode": "inline",
3247
+ "filterable": true,
3248
+ "formatter": "text",
3249
+ "hidden": false,
3250
+ "name": "type",
3251
+ "options": [
3252
+ "str",
3253
+ "int",
3254
+ "float",
3255
+ "bool",
3256
+ "dict"
3257
+ ],
3258
+ "sortable": true,
3259
+ "type": "str"
3260
+ },
3261
+ {
3262
+ "default": false,
3263
+ "description": "Set to True if this output field should be a list of the specified type.",
3264
+ "disable_edit": false,
3265
+ "display_name": "As List",
3266
+ "edit_mode": "inline",
3267
+ "filterable": true,
3268
+ "formatter": "boolean",
3269
+ "hidden": false,
3270
+ "name": "multiple",
3271
+ "sortable": true,
3272
+ "type": "boolean"
3273
+ }
3274
+ ]
3275
+ },
3276
+ "title_case": false,
3277
+ "tool_mode": false,
3278
+ "trace_as_metadata": true,
3279
+ "trigger_icon": "Table",
3280
+ "trigger_text": "Open table",
3281
+ "type": "table",
3282
+ "value": []
3283
+ },
3284
+ "seed": {
3285
+ "_input_type": "IntInput",
3286
+ "advanced": true,
3287
+ "display_name": "Seed",
3288
+ "dynamic": false,
3289
+ "info": "The seed controls the reproducibility of the job.",
3290
+ "list": false,
3291
+ "list_add_label": "Add More",
3292
+ "name": "seed",
3293
+ "placeholder": "",
3294
+ "required": false,
3295
+ "show": true,
3296
+ "title_case": false,
3297
+ "tool_mode": false,
3298
+ "trace_as_metadata": true,
3299
+ "type": "int",
3300
+ "value": 1
3301
+ },
3302
+ "system_prompt": {
3303
+ "_input_type": "MultilineInput",
3304
+ "advanced": false,
3305
+ "copy_field": false,
3306
+ "display_name": "Agent Instructions",
3307
+ "dynamic": false,
3308
+ "info": "System Prompt: Initial instructions and context provided to guide the agent's behavior.",
3309
+ "input_types": [
3310
+ "Message"
3311
+ ],
3312
+ "list": false,
3313
+ "list_add_label": "Add More",
3314
+ "load_from_db": false,
3315
+ "multiline": true,
3316
+ "name": "system_prompt",
3317
+ "placeholder": "",
3318
+ "required": false,
3319
+ "show": true,
3320
+ "title_case": false,
3321
+ "tool_mode": false,
3322
+ "trace_as_input": true,
3323
+ "trace_as_metadata": true,
3324
+ "type": "str",
3325
+ "value": "You are an Amazing Travel Concierge, a specialist in travel planning and logistics with decades of experience. Your goal is to create the most amazing travel itineraries with budget and packing suggestions for the city. Expand the city guide into a full 7-day travel itinerary with detailed per-day plans. Include weather forecasts, places to eat, packing suggestions, and a budget breakdown. Suggest actual places to visit, hotels to stay, and restaurants to go to. Your final output should be a complete expanded travel plan, formatted as markdown, encompassing a daily schedule, anticipated weather conditions, recommended clothing and items to pack, and a detailed budget."
3326
+ },
3327
+ "temperature": {
3328
+ "_input_type": "SliderInput",
3329
+ "advanced": true,
3330
+ "display_name": "Temperature",
3331
+ "dynamic": false,
3332
+ "info": "",
3333
+ "max_label": "",
3334
+ "max_label_icon": "",
3335
+ "min_label": "",
3336
+ "min_label_icon": "",
3337
+ "name": "temperature",
3338
+ "placeholder": "",
3339
+ "range_spec": {
3340
+ "max": 1,
3341
+ "min": 0,
3342
+ "step": 0.01,
3343
+ "step_type": "float"
3344
+ },
3345
+ "required": false,
3346
+ "show": true,
3347
+ "slider_buttons": false,
3348
+ "slider_buttons_options": [],
3349
+ "slider_input": false,
3350
+ "title_case": false,
3351
+ "tool_mode": false,
3352
+ "type": "slider",
3353
+ "value": 0.1
3354
+ },
3355
+ "timeout": {
3356
+ "_input_type": "IntInput",
3357
+ "advanced": true,
3358
+ "display_name": "Timeout",
3359
+ "dynamic": false,
3360
+ "info": "The timeout for requests to OpenAI completion API.",
3361
+ "list": false,
3362
+ "list_add_label": "Add More",
3363
+ "name": "timeout",
3364
+ "placeholder": "",
3365
+ "required": false,
3366
+ "show": true,
3367
+ "title_case": false,
3368
+ "tool_mode": false,
3369
+ "trace_as_metadata": true,
3370
+ "type": "int",
3371
+ "value": 700
3372
+ },
3373
+ "tools": {
3374
+ "_input_type": "HandleInput",
3375
+ "advanced": false,
3376
+ "display_name": "Tools",
3377
+ "dynamic": false,
3378
+ "info": "These are the tools that the agent can use to help with tasks.",
3379
+ "input_types": [
3380
+ "Tool"
3381
+ ],
3382
+ "list": true,
3383
+ "list_add_label": "Add More",
3384
+ "name": "tools",
3385
+ "placeholder": "",
3386
+ "required": false,
3387
+ "show": true,
3388
+ "title_case": false,
3389
+ "trace_as_metadata": true,
3390
+ "type": "other",
3391
+ "value": ""
3392
+ },
3393
+ "verbose": {
3394
+ "_input_type": "BoolInput",
3395
+ "advanced": true,
3396
+ "display_name": "Verbose",
3397
+ "dynamic": false,
3398
+ "info": "",
3399
+ "list": false,
3400
+ "list_add_label": "Add More",
3401
+ "name": "verbose",
3402
+ "placeholder": "",
3403
+ "required": false,
3404
+ "show": true,
3405
+ "title_case": false,
3406
+ "tool_mode": false,
3407
+ "trace_as_metadata": true,
3408
+ "type": "bool",
3409
+ "value": true
3410
+ }
3411
+ },
3412
+ "tool_mode": false
3413
+ },
3414
+ "selected_output": "response",
3415
+ "showNode": true,
3416
+ "type": "Agent"
3417
+ },
3418
+ "dragging": false,
3419
+ "id": "Agent-C8zRS",
3420
+ "measured": {
3421
+ "height": 594,
3422
+ "width": 320
3423
+ },
3424
+ "position": {
3425
+ "x": 3936.123532016018,
3426
+ "y": 356.3534774464019
3427
+ },
3428
+ "selected": false,
3429
+ "type": "genericNode"
3430
+ }
3431
+ ],
3432
+ "viewport": {
3433
+ "x": -700.2707036326251,
3434
+ "y": 138.91846301898352,
3435
+ "zoom": 0.4425927036021963
3436
+ }
3437
+ },
3438
+ "description": "Create a travel planning chatbot that uses specialized agents to craft personalized trip itineraries.",
3439
+ "endpoint_name": null,
3440
+ "id": "240131dc-390a-4d6a-9ef4-39b810e4165d",
3441
+ "is_component": false,
3442
+ "last_tested_version": "1.4.3",
3443
+ "name": "Travel Planning Agents",
3444
+ "tags": [
3445
+ "agents",
3446
+ "openai"
3447
+ ]
3448
+ }