solara 1.30.0__py2.py3-none-any.whl → 1.31.0__py2.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.
Files changed (439) hide show
  1. {solara-1.30.0.dist-info → solara-1.31.0.dist-info}/METADATA +7 -42
  2. solara-1.31.0.dist-info/RECORD +5 -0
  3. {solara-1.30.0.dist-info → solara-1.31.0.dist-info}/WHEEL +1 -1
  4. {solara/template/portal → solara-1.31.0.dist-info/licenses}/LICENSE +1 -1
  5. solara/__init__.py +0 -123
  6. solara/__main__.py +0 -734
  7. solara/alias.py +0 -6
  8. solara/autorouting.py +0 -554
  9. solara/cache.py +0 -294
  10. solara/checks.html +0 -71
  11. solara/checks.py +0 -224
  12. solara/comm.py +0 -28
  13. solara/components/__init__.py +0 -59
  14. solara/components/alert.py +0 -155
  15. solara/components/applayout.py +0 -393
  16. solara/components/button.py +0 -85
  17. solara/components/card.py +0 -87
  18. solara/components/checkbox.py +0 -50
  19. solara/components/code_highlight_css.py +0 -11
  20. solara/components/code_highlight_css.vue +0 -63
  21. solara/components/columns.py +0 -159
  22. solara/components/component_vue.py +0 -109
  23. solara/components/cross_filter.py +0 -335
  24. solara/components/dataframe.py +0 -546
  25. solara/components/datatable.py +0 -221
  26. solara/components/datatable.vue +0 -175
  27. solara/components/details.py +0 -21
  28. solara/components/download.vue +0 -35
  29. solara/components/echarts.py +0 -75
  30. solara/components/echarts.vue +0 -128
  31. solara/components/figure_altair.py +0 -39
  32. solara/components/file_browser.py +0 -182
  33. solara/components/file_download.py +0 -199
  34. solara/components/file_drop.py +0 -139
  35. solara/components/file_drop.vue +0 -83
  36. solara/components/file_list_widget.vue +0 -78
  37. solara/components/head.py +0 -27
  38. solara/components/head_tag.py +0 -49
  39. solara/components/head_tag.vue +0 -60
  40. solara/components/image.py +0 -173
  41. solara/components/input.py +0 -440
  42. solara/components/link.py +0 -55
  43. solara/components/markdown.py +0 -371
  44. solara/components/markdown_editor.py +0 -25
  45. solara/components/markdown_editor.vue +0 -362
  46. solara/components/matplotlib.py +0 -74
  47. solara/components/meta.py +0 -47
  48. solara/components/misc.py +0 -333
  49. solara/components/pivot_table.py +0 -258
  50. solara/components/pivot_table.vue +0 -158
  51. solara/components/progress.py +0 -47
  52. solara/components/select.py +0 -186
  53. solara/components/select.vue +0 -27
  54. solara/components/slider.py +0 -442
  55. solara/components/slider_date.vue +0 -56
  56. solara/components/spinner-solara.vue +0 -105
  57. solara/components/spinner.py +0 -30
  58. solara/components/sql_code.py +0 -33
  59. solara/components/sql_code.vue +0 -128
  60. solara/components/style.py +0 -105
  61. solara/components/switch.py +0 -68
  62. solara/components/tab_navigation.py +0 -37
  63. solara/components/title.py +0 -90
  64. solara/components/title.vue +0 -38
  65. solara/components/togglebuttons.py +0 -202
  66. solara/components/tooltip.py +0 -61
  67. solara/datatypes.py +0 -143
  68. solara/express.py +0 -241
  69. solara/hooks/__init__.py +0 -4
  70. solara/hooks/dataframe.py +0 -99
  71. solara/hooks/misc.py +0 -263
  72. solara/hooks/use_reactive.py +0 -129
  73. solara/hooks/use_thread.py +0 -129
  74. solara/kitchensink.py +0 -8
  75. solara/lab/__init__.py +0 -34
  76. solara/lab/components/__init__.py +0 -6
  77. solara/lab/components/chat.py +0 -203
  78. solara/lab/components/confirmation_dialog.py +0 -165
  79. solara/lab/components/cross_filter.py +0 -7
  80. solara/lab/components/input_date.py +0 -298
  81. solara/lab/components/menu.py +0 -181
  82. solara/lab/components/menu.vue +0 -38
  83. solara/lab/components/tabs.py +0 -274
  84. solara/lab/components/theming.py +0 -98
  85. solara/lab/components/theming.vue +0 -72
  86. solara/lab/hooks/__init__.py +0 -0
  87. solara/lab/hooks/dataframe.py +0 -12
  88. solara/lab/toestand.py +0 -3
  89. solara/lab/utils/__init__.py +0 -2
  90. solara/lab/utils/cookies.py +0 -5
  91. solara/lab/utils/dataframe.py +0 -115
  92. solara/lab/utils/headers.py +0 -5
  93. solara/layout.py +0 -44
  94. solara/minisettings.py +0 -133
  95. solara/py.typed +0 -0
  96. solara/reactive.py +0 -93
  97. solara/routing.py +0 -268
  98. solara/scope/__init__.py +0 -87
  99. solara/scope/types.py +0 -55
  100. solara/server/__init__.py +0 -0
  101. solara/server/app.py +0 -490
  102. solara/server/assets/custom.css +0 -1
  103. solara/server/assets/custom.js +0 -1
  104. solara/server/assets/favicon.png +0 -0
  105. solara/server/assets/favicon.svg +0 -5
  106. solara/server/assets/style.css +0 -1665
  107. solara/server/assets/theme-dark.css +0 -437
  108. solara/server/assets/theme-light.css +0 -420
  109. solara/server/assets/theme.js +0 -3
  110. solara/server/cdn_helper.py +0 -77
  111. solara/server/esm.py +0 -69
  112. solara/server/fastapi.py +0 -5
  113. solara/server/flask.py +0 -286
  114. solara/server/jupyter/__init__.py +0 -2
  115. solara/server/jupyter/cdn_handler.py +0 -28
  116. solara/server/jupyter/server_extension.py +0 -29
  117. solara/server/jupytertools.py +0 -46
  118. solara/server/kernel.py +0 -319
  119. solara/server/kernel_context.py +0 -393
  120. solara/server/patch.py +0 -552
  121. solara/server/reload.py +0 -242
  122. solara/server/server.py +0 -437
  123. solara/server/settings.py +0 -212
  124. solara/server/shell.py +0 -240
  125. solara/server/starlette.py +0 -597
  126. solara/server/static/ansi.js +0 -270
  127. solara/server/static/highlight-dark.css +0 -82
  128. solara/server/static/highlight.css +0 -43
  129. solara/server/static/main-vuetify.js +0 -260
  130. solara/server/static/main.js +0 -163
  131. solara/server/static/solara_bootstrap.py +0 -129
  132. solara/server/static/sun.svg +0 -23
  133. solara/server/static/webworker.js +0 -42
  134. solara/server/telemetry.py +0 -212
  135. solara/server/templates/index.html.j2 +0 -1
  136. solara/server/templates/loader-plain.css +0 -11
  137. solara/server/templates/loader-plain.html +0 -20
  138. solara/server/templates/loader-solara.css +0 -111
  139. solara/server/templates/loader-solara.html +0 -40
  140. solara/server/templates/plain.html +0 -82
  141. solara/server/templates/solara.html.j2 +0 -446
  142. solara/server/threaded.py +0 -75
  143. solara/server/utils.py +0 -30
  144. solara/server/websocket.py +0 -44
  145. solara/settings.py +0 -56
  146. solara/tasks.py +0 -847
  147. solara/template/button.py +0 -16
  148. solara/template/markdown.py +0 -42
  149. solara/template/portal/.flake8 +0 -6
  150. solara/template/portal/.pre-commit-config.yaml +0 -28
  151. solara/template/portal/Procfile +0 -7
  152. solara/template/portal/mypy.ini +0 -3
  153. solara/template/portal/pyproject.toml +0 -26
  154. solara/template/portal/solara_portal/__init__.py +0 -3
  155. solara/template/portal/solara_portal/components/__init__.py +0 -2
  156. solara/template/portal/solara_portal/components/article.py +0 -28
  157. solara/template/portal/solara_portal/components/data.py +0 -28
  158. solara/template/portal/solara_portal/components/header.py +0 -6
  159. solara/template/portal/solara_portal/components/layout.py +0 -6
  160. solara/template/portal/solara_portal/content/articles/equis-in-vidi.md +0 -85
  161. solara/template/portal/solara_portal/content/articles/substiterat-vati.md +0 -70
  162. solara/template/portal/solara_portal/data.py +0 -60
  163. solara/template/portal/solara_portal/pages/__init__.py +0 -67
  164. solara/template/portal/solara_portal/pages/article/__init__.py +0 -26
  165. solara/template/portal/solara_portal/pages/tabular.py +0 -29
  166. solara/template/portal/solara_portal/pages/viz/__init__.py +0 -69
  167. solara/template/portal/solara_portal/pages/viz/overview.py +0 -14
  168. solara/test/__init__.py +0 -0
  169. solara/test/pytest_plugin.py +0 -698
  170. solara/toestand.py +0 -772
  171. solara/util.py +0 -308
  172. solara/website/__init__.py +0 -0
  173. solara/website/assets/custom.css +0 -462
  174. solara/website/assets/images/logo-small.png +0 -0
  175. solara/website/assets/images/logo.svg +0 -17
  176. solara/website/assets/images/logo_white.svg +0 -50
  177. solara/website/assets/theme.js +0 -8
  178. solara/website/components/__init__.py +0 -5
  179. solara/website/components/algolia.vue +0 -24
  180. solara/website/components/algolia_api.vue +0 -157
  181. solara/website/components/docs.py +0 -118
  182. solara/website/components/header.py +0 -72
  183. solara/website/components/hero.py +0 -15
  184. solara/website/components/mailchimp.py +0 -12
  185. solara/website/components/mailchimp.vue +0 -47
  186. solara/website/components/notebook.py +0 -172
  187. solara/website/pages/__init__.py +0 -564
  188. solara/website/pages/apps/__init__.py +0 -16
  189. solara/website/pages/apps/authorization/__init__.py +0 -118
  190. solara/website/pages/apps/authorization/admin.py +0 -12
  191. solara/website/pages/apps/authorization/users.py +0 -12
  192. solara/website/pages/apps/jupyter-dashboard-1.py +0 -116
  193. solara/website/pages/apps/layout-demo.py +0 -40
  194. solara/website/pages/apps/multipage/__init__.py +0 -38
  195. solara/website/pages/apps/multipage/page1.py +0 -26
  196. solara/website/pages/apps/multipage/page2.py +0 -34
  197. solara/website/pages/apps/scatter.py +0 -136
  198. solara/website/pages/apps/scrolling.py +0 -63
  199. solara/website/pages/apps/tutorial-streamlit.py +0 -18
  200. solara/website/pages/changelog/__init__.py +0 -8
  201. solara/website/pages/changelog/changelog.md +0 -180
  202. solara/website/pages/contact/__init__.py +0 -8
  203. solara/website/pages/contact/contact.md +0 -17
  204. solara/website/pages/doc_use_download.py +0 -85
  205. solara/website/pages/documentation/__init__.py +0 -184
  206. solara/website/pages/documentation/advanced/__init__.py +0 -36
  207. solara/website/pages/documentation/advanced/content/00-overview.md +0 -1
  208. solara/website/pages/documentation/advanced/content/10-howto/00-overview.md +0 -1
  209. solara/website/pages/documentation/advanced/content/10-howto/10-multipage.md +0 -191
  210. solara/website/pages/documentation/advanced/content/10-howto/20-layout.md +0 -120
  211. solara/website/pages/documentation/advanced/content/10-howto/30-testing.md +0 -149
  212. solara/website/pages/documentation/advanced/content/10-howto/31-debugging.md +0 -66
  213. solara/website/pages/documentation/advanced/content/10-howto/40-embed.md +0 -43
  214. solara/website/pages/documentation/advanced/content/10-howto/50-ipywidget_libraries.md +0 -120
  215. solara/website/pages/documentation/advanced/content/20-understanding/00-introduction.md +0 -4
  216. solara/website/pages/documentation/advanced/content/20-understanding/05-ipywidgets.md +0 -30
  217. solara/website/pages/documentation/advanced/content/20-understanding/06-ipyvuetify.md +0 -38
  218. solara/website/pages/documentation/advanced/content/20-understanding/10-reacton.md +0 -24
  219. solara/website/pages/documentation/advanced/content/20-understanding/12-reacton-basics.md +0 -104
  220. solara/website/pages/documentation/advanced/content/20-understanding/15-anatomy.md +0 -19
  221. solara/website/pages/documentation/advanced/content/20-understanding/17-rules-of-hooks.md +0 -3
  222. solara/website/pages/documentation/advanced/content/20-understanding/18-containers.md +0 -160
  223. solara/website/pages/documentation/advanced/content/20-understanding/20-solara.md +0 -13
  224. solara/website/pages/documentation/advanced/content/20-understanding/40-routing.md +0 -236
  225. solara/website/pages/documentation/advanced/content/20-understanding/50-solara-server.md +0 -81
  226. solara/website/pages/documentation/advanced/content/20-understanding/60-voila.md +0 -7
  227. solara/website/pages/documentation/advanced/content/30-enterprise/00-overview.md +0 -1
  228. solara/website/pages/documentation/advanced/content/30-enterprise/10-oauth.md +0 -167
  229. solara/website/pages/documentation/advanced/content/40-development/00-overview.md +0 -0
  230. solara/website/pages/documentation/advanced/content/40-development/01-contribute.md +0 -41
  231. solara/website/pages/documentation/advanced/content/40-development/10-setup.md +0 -72
  232. solara/website/pages/documentation/advanced/content/__init__.py +0 -0
  233. solara/website/pages/documentation/api/__init__.py +0 -19
  234. solara/website/pages/documentation/api/cross_filter/__init__.py +0 -9
  235. solara/website/pages/documentation/api/cross_filter/cross_filter_dataframe.py +0 -23
  236. solara/website/pages/documentation/api/cross_filter/cross_filter_report.py +0 -22
  237. solara/website/pages/documentation/api/cross_filter/cross_filter_select.py +0 -22
  238. solara/website/pages/documentation/api/cross_filter/cross_filter_slider.py +0 -22
  239. solara/website/pages/documentation/api/hooks/__init__.py +0 -9
  240. solara/website/pages/documentation/api/hooks/use_cross_filter.py +0 -25
  241. solara/website/pages/documentation/api/hooks/use_dark_effective.py +0 -13
  242. solara/website/pages/documentation/api/hooks/use_effect.md +0 -43
  243. solara/website/pages/documentation/api/hooks/use_effect.py +0 -9
  244. solara/website/pages/documentation/api/hooks/use_exception.py +0 -33
  245. solara/website/pages/documentation/api/hooks/use_memo.md +0 -16
  246. solara/website/pages/documentation/api/hooks/use_memo.py +0 -9
  247. solara/website/pages/documentation/api/hooks/use_previous.py +0 -32
  248. solara/website/pages/documentation/api/hooks/use_reactive.py +0 -15
  249. solara/website/pages/documentation/api/hooks/use_state.py +0 -11
  250. solara/website/pages/documentation/api/hooks/use_state_or_update.py +0 -68
  251. solara/website/pages/documentation/api/hooks/use_thread.md +0 -58
  252. solara/website/pages/documentation/api/hooks/use_thread.py +0 -44
  253. solara/website/pages/documentation/api/hooks/use_trait_observe.py +0 -13
  254. solara/website/pages/documentation/api/routing/__init__.py +0 -9
  255. solara/website/pages/documentation/api/routing/generate_routes.py +0 -11
  256. solara/website/pages/documentation/api/routing/generate_routes_directory.py +0 -11
  257. solara/website/pages/documentation/api/routing/resolve_path.py +0 -36
  258. solara/website/pages/documentation/api/routing/route.py +0 -32
  259. solara/website/pages/documentation/api/routing/use_route.py +0 -80
  260. solara/website/pages/documentation/api/routing/use_router.py +0 -15
  261. solara/website/pages/documentation/api/utilities/__init__.py +0 -9
  262. solara/website/pages/documentation/api/utilities/component_vue.py +0 -11
  263. solara/website/pages/documentation/api/utilities/computed.py +0 -16
  264. solara/website/pages/documentation/api/utilities/display.py +0 -15
  265. solara/website/pages/documentation/api/utilities/get_kernel_id.py +0 -16
  266. solara/website/pages/documentation/api/utilities/get_session_id.py +0 -16
  267. solara/website/pages/documentation/api/utilities/memoize.py +0 -36
  268. solara/website/pages/documentation/api/utilities/on_kernel_start.py +0 -27
  269. solara/website/pages/documentation/api/utilities/reactive.py +0 -15
  270. solara/website/pages/documentation/api/utilities/widget.py +0 -104
  271. solara/website/pages/documentation/components/__init__.py +0 -12
  272. solara/website/pages/documentation/components/advanced/__init__.py +0 -9
  273. solara/website/pages/documentation/components/advanced/link.py +0 -28
  274. solara/website/pages/documentation/components/advanced/meta.py +0 -21
  275. solara/website/pages/documentation/components/advanced/style.py +0 -44
  276. solara/website/pages/documentation/components/common.py +0 -9
  277. solara/website/pages/documentation/components/data/__init__.py +0 -9
  278. solara/website/pages/documentation/components/data/dataframe.py +0 -44
  279. solara/website/pages/documentation/components/data/pivot_table.py +0 -81
  280. solara/website/pages/documentation/components/enterprise/__init__.py +0 -9
  281. solara/website/pages/documentation/components/enterprise/avatar.py +0 -19
  282. solara/website/pages/documentation/components/enterprise/avatar_menu.py +0 -20
  283. solara/website/pages/documentation/components/input/__init__.py +0 -9
  284. solara/website/pages/documentation/components/input/button.py +0 -22
  285. solara/website/pages/documentation/components/input/checkbox.py +0 -12
  286. solara/website/pages/documentation/components/input/file_browser.py +0 -33
  287. solara/website/pages/documentation/components/input/file_drop.py +0 -75
  288. solara/website/pages/documentation/components/input/input.py +0 -18
  289. solara/website/pages/documentation/components/input/select.py +0 -21
  290. solara/website/pages/documentation/components/input/slider.py +0 -28
  291. solara/website/pages/documentation/components/input/switch.py +0 -12
  292. solara/website/pages/documentation/components/input/togglebuttons.py +0 -20
  293. solara/website/pages/documentation/components/lab/__init__.py +0 -9
  294. solara/website/pages/documentation/components/lab/chat.py +0 -108
  295. solara/website/pages/documentation/components/lab/confirmation_dialog.py +0 -55
  296. solara/website/pages/documentation/components/lab/cookies_headers.py +0 -48
  297. solara/website/pages/documentation/components/lab/input_date.py +0 -19
  298. solara/website/pages/documentation/components/lab/menu.py +0 -21
  299. solara/website/pages/documentation/components/lab/tab.py +0 -24
  300. solara/website/pages/documentation/components/lab/tabs.py +0 -44
  301. solara/website/pages/documentation/components/lab/task.py +0 -12
  302. solara/website/pages/documentation/components/lab/theming.py +0 -72
  303. solara/website/pages/documentation/components/lab/use_task.py +0 -12
  304. solara/website/pages/documentation/components/layout/__init__.py +0 -9
  305. solara/website/pages/documentation/components/layout/app_bar.py +0 -15
  306. solara/website/pages/documentation/components/layout/app_bar_title.py +0 -15
  307. solara/website/pages/documentation/components/layout/app_layout.py +0 -23
  308. solara/website/pages/documentation/components/layout/card.py +0 -14
  309. solara/website/pages/documentation/components/layout/card_actions.py +0 -15
  310. solara/website/pages/documentation/components/layout/column.py +0 -29
  311. solara/website/pages/documentation/components/layout/columns.py +0 -26
  312. solara/website/pages/documentation/components/layout/columns_responsive.py +0 -67
  313. solara/website/pages/documentation/components/layout/griddraggable.py +0 -61
  314. solara/website/pages/documentation/components/layout/gridfixed.py +0 -21
  315. solara/website/pages/documentation/components/layout/hbox.py +0 -17
  316. solara/website/pages/documentation/components/layout/row.py +0 -29
  317. solara/website/pages/documentation/components/layout/sidebar.py +0 -23
  318. solara/website/pages/documentation/components/layout/vbox.py +0 -19
  319. solara/website/pages/documentation/components/output/__init__.py +0 -9
  320. solara/website/pages/documentation/components/output/file_download.py +0 -12
  321. solara/website/pages/documentation/components/output/html.py +0 -22
  322. solara/website/pages/documentation/components/output/image.py +0 -12
  323. solara/website/pages/documentation/components/output/markdown.py +0 -59
  324. solara/website/pages/documentation/components/output/markdown_editor.py +0 -53
  325. solara/website/pages/documentation/components/output/sql_code.py +0 -84
  326. solara/website/pages/documentation/components/output/tooltip.py +0 -12
  327. solara/website/pages/documentation/components/page/__init__.py +0 -9
  328. solara/website/pages/documentation/components/page/head.py +0 -19
  329. solara/website/pages/documentation/components/page/title.py +0 -28
  330. solara/website/pages/documentation/components/status/__init__.py +0 -9
  331. solara/website/pages/documentation/components/status/error.py +0 -40
  332. solara/website/pages/documentation/components/status/info.py +0 -40
  333. solara/website/pages/documentation/components/status/progress.py +0 -10
  334. solara/website/pages/documentation/components/status/spinner.py +0 -10
  335. solara/website/pages/documentation/components/status/success.py +0 -40
  336. solara/website/pages/documentation/components/status/warning.py +0 -47
  337. solara/website/pages/documentation/components/viz/__init__.py +0 -9
  338. solara/website/pages/documentation/components/viz/altair.py +0 -44
  339. solara/website/pages/documentation/components/viz/echarts.py +0 -78
  340. solara/website/pages/documentation/components/viz/matplotlib.py +0 -32
  341. solara/website/pages/documentation/components/viz/plotly.py +0 -63
  342. solara/website/pages/documentation/components/viz/plotly_express.py +0 -41
  343. solara/website/pages/documentation/examples/__init__.py +0 -52
  344. solara/website/pages/documentation/examples/ai/__init__.py +0 -10
  345. solara/website/pages/documentation/examples/ai/chatbot.py +0 -96
  346. solara/website/pages/documentation/examples/ai/tokenizer.py +0 -106
  347. solara/website/pages/documentation/examples/basics/__init__.py +0 -2
  348. solara/website/pages/documentation/examples/basics/sine.py +0 -28
  349. solara/website/pages/documentation/examples/fullscreen/__init__.py +0 -9
  350. solara/website/pages/documentation/examples/fullscreen/authorization.py +0 -3
  351. solara/website/pages/documentation/examples/fullscreen/layout_demo.py +0 -3
  352. solara/website/pages/documentation/examples/fullscreen/multipage.py +0 -3
  353. solara/website/pages/documentation/examples/fullscreen/scatter.py +0 -3
  354. solara/website/pages/documentation/examples/fullscreen/scrolling.py +0 -3
  355. solara/website/pages/documentation/examples/fullscreen/tutorial_streamlit.py +0 -3
  356. solara/website/pages/documentation/examples/general/__init__.py +0 -9
  357. solara/website/pages/documentation/examples/general/custom_storage.py +0 -69
  358. solara/website/pages/documentation/examples/general/deploy_model.py +0 -114
  359. solara/website/pages/documentation/examples/general/live_update.py +0 -38
  360. solara/website/pages/documentation/examples/general/login_oauth.py +0 -76
  361. solara/website/pages/documentation/examples/general/mycard.vue +0 -58
  362. solara/website/pages/documentation/examples/general/pokemon_search.py +0 -51
  363. solara/website/pages/documentation/examples/general/vue_component.py +0 -50
  364. solara/website/pages/documentation/examples/ipycanvas.py +0 -49
  365. solara/website/pages/documentation/examples/libraries/__init__.py +0 -9
  366. solara/website/pages/documentation/examples/libraries/altair.py +0 -63
  367. solara/website/pages/documentation/examples/libraries/bqplot.py +0 -39
  368. solara/website/pages/documentation/examples/libraries/ipyleaflet.py +0 -32
  369. solara/website/pages/documentation/examples/libraries/ipyleaflet_advanced.py +0 -65
  370. solara/website/pages/documentation/examples/utilities/__init__.py +0 -9
  371. solara/website/pages/documentation/examples/utilities/calculator.py +0 -157
  372. solara/website/pages/documentation/examples/utilities/countdown_timer.py +0 -64
  373. solara/website/pages/documentation/examples/utilities/todo.py +0 -195
  374. solara/website/pages/documentation/examples/visualization/__init__.py +0 -6
  375. solara/website/pages/documentation/examples/visualization/annotator.py +0 -68
  376. solara/website/pages/documentation/examples/visualization/linked_views.py +0 -84
  377. solara/website/pages/documentation/examples/visualization/plotly.py +0 -43
  378. solara/website/pages/documentation/faq/__init__.py +0 -11
  379. solara/website/pages/documentation/faq/content/99-faq.md +0 -73
  380. solara/website/pages/documentation/getting_started/__init__.py +0 -15
  381. solara/website/pages/documentation/getting_started/content/00-quickstart.md +0 -84
  382. solara/website/pages/documentation/getting_started/content/01-introduction.md +0 -121
  383. solara/website/pages/documentation/getting_started/content/02-installing.md +0 -81
  384. solara/website/pages/documentation/getting_started/content/04-tutorials/00-overview.md +0 -9
  385. solara/website/pages/documentation/getting_started/content/04-tutorials/10_data_science.py +0 -13
  386. solara/website/pages/documentation/getting_started/content/04-tutorials/20-web-app.md +0 -84
  387. solara/website/pages/documentation/getting_started/content/04-tutorials/30-ipywidgets.md +0 -120
  388. solara/website/pages/documentation/getting_started/content/04-tutorials/40-streamlit.md +0 -141
  389. solara/website/pages/documentation/getting_started/content/04-tutorials/50-dash.md +0 -140
  390. solara/website/pages/documentation/getting_started/content/04-tutorials/60-jupyter-dashboard-part1.py +0 -64
  391. solara/website/pages/documentation/getting_started/content/04-tutorials/SF_crime_sample.csv.gz +0 -0
  392. solara/website/pages/documentation/getting_started/content/04-tutorials/_data_science.ipynb +0 -445
  393. solara/website/pages/documentation/getting_started/content/04-tutorials/_jupyter_dashboard_1.ipynb +0 -1000
  394. solara/website/pages/documentation/getting_started/content/05-fundamentals/00-overview.md +0 -7
  395. solara/website/pages/documentation/getting_started/content/05-fundamentals/10-components.md +0 -218
  396. solara/website/pages/documentation/getting_started/content/05-fundamentals/50-state-management.md +0 -83
  397. solara/website/pages/documentation/getting_started/content/06-reference/00-overview.md +0 -3
  398. solara/website/pages/documentation/getting_started/content/06-reference/40-static_files.md +0 -27
  399. solara/website/pages/documentation/getting_started/content/06-reference/41-asset-files.md +0 -32
  400. solara/website/pages/documentation/getting_started/content/06-reference/60-static-site-generation.md +0 -55
  401. solara/website/pages/documentation/getting_started/content/06-reference/70-search.md +0 -30
  402. solara/website/pages/documentation/getting_started/content/06-reference/80-reloading.md +0 -30
  403. solara/website/pages/documentation/getting_started/content/06-reference/90-notebook-support.md +0 -4
  404. solara/website/pages/documentation/getting_started/content/06-reference/95-caching.md +0 -143
  405. solara/website/pages/documentation/getting_started/content/07-deploying/00-overview.md +0 -3
  406. solara/website/pages/documentation/getting_started/content/07-deploying/10-self-hosted.md +0 -269
  407. solara/website/pages/documentation/getting_started/content/07-deploying/20-cloud-hosted.md +0 -76
  408. solara/website/pages/documentation/getting_started/content/08-lab/00-what-is-lab.md +0 -3
  409. solara/website/pages/documentation/getting_started/content/90-troubleshoot.md +0 -22
  410. solara/website/pages/documentation/getting_started/content/__init__.py +0 -0
  411. solara/website/pages/docutils.py +0 -38
  412. solara/website/pages/showcase/__init__.py +0 -105
  413. solara/website/pages/showcase/domino_code_assist.py +0 -60
  414. solara/website/pages/showcase/planeto_tessa.py +0 -19
  415. solara/website/pages/showcase/solara_dev.py +0 -54
  416. solara/website/pages/showcase/solarathon_2023_team_2.py +0 -22
  417. solara/website/pages/showcase/solarathon_2023_team_4.py +0 -22
  418. solara/website/pages/showcase/solarathon_2023_team_5.py +0 -23
  419. solara/website/pages/showcase/solarathon_2023_team_6.py +0 -34
  420. solara/website/pages/showcase/wanderlust.py +0 -27
  421. solara/website/public/beach.jpeg +0 -0
  422. solara/website/public/logo.svg +0 -6
  423. solara/website/public/social/discord.svg +0 -1
  424. solara/website/public/social/github.svg +0 -1
  425. solara/website/public/social/twitter.svg +0 -3
  426. solara/website/public/success.html +0 -25
  427. solara/website/templates/index.html.j2 +0 -117
  428. solara/website/utils.py +0 -51
  429. solara/widgets/__init__.py +0 -1
  430. solara/widgets/vue/gridlayout.vue +0 -110
  431. solara/widgets/vue/html.vue +0 -4
  432. solara/widgets/vue/navigator.vue +0 -104
  433. solara/widgets/vue/vegalite.vue +0 -115
  434. solara/widgets/widgets.py +0 -65
  435. solara-1.30.0.data/data/etc/jupyter/jupyter_notebook_config.d/solara.json +0 -7
  436. solara-1.30.0.data/data/etc/jupyter/jupyter_server_config.d/solara.json +0 -7
  437. solara-1.30.0.dist-info/RECORD +0 -438
  438. solara-1.30.0.dist-info/entry_points.txt +0 -5
  439. /solara-1.30.0.dist-info/licenses/LICENSE → /LICENSE +0 -0
@@ -1,28 +0,0 @@
1
- """# Title
2
- """
3
-
4
- from typing import Optional, cast
5
-
6
- import solara
7
- from solara.website.utils import apidoc
8
-
9
-
10
- @solara.component
11
- def Page():
12
- title, set_title = solara.use_state(cast(Optional[str], "Custom title!"))
13
- with solara.VBox() as main:
14
- solara.ToggleButtonsSingle(value=title, values=[None, "Custom title!", "Different custom title"], on_value=set_title)
15
-
16
- if title is not None:
17
- # if the title is not set in a child component, the parent's title will be used
18
- with solara.Head():
19
- # title should always occur inside a Head component
20
- solara.Title(title)
21
- solara.Info(f"Your browser tab title should say {title}", classes=["mt-4"])
22
- else:
23
- solara.Warning("If no title is set, the parent title is used.", classes=["mt-4"])
24
-
25
- return main
26
-
27
-
28
- __doc__ += apidoc(solara.Title.f) # type: ignore
@@ -1,9 +0,0 @@
1
- import solara
2
- from solara.website.components import NoPage, SubCategoryLayout
3
-
4
- Page = NoPage
5
-
6
-
7
- @solara.component
8
- def Layout(children=[]):
9
- SubCategoryLayout(children=children)
@@ -1,40 +0,0 @@
1
- """# Error
2
-
3
- Solara has 4 types of alerts:
4
-
5
- * [Success](/documentation/components/status/success)
6
- * [Info](/documentation/components/status/info)
7
- * [Warning](/documentation/components/status/warning)
8
- * Error (this page)
9
-
10
-
11
-
12
- """
13
-
14
- import solara
15
- from solara.website.utils import apidoc
16
-
17
-
18
- @solara.component
19
- def Page():
20
- icon, set_icon = solara.use_state(True)
21
- dense, set_dense = solara.use_state(False)
22
- outlined, set_outlined = solara.use_state(True)
23
- text, set_text = solara.use_state(True)
24
- with solara.VBox() as main:
25
- with solara.GridFixed(4):
26
- solara.Checkbox(label="Use icon", value=icon, on_value=set_icon)
27
- solara.Checkbox(label="Show dense", value=dense, on_value=set_dense)
28
- solara.Checkbox(label="Show as text", value=text, on_value=set_text)
29
- solara.Checkbox(label="Show outlined", value=outlined, on_value=set_outlined)
30
- solara.Error(
31
- f"This is solara.Error(label='...', text={text}, dense={dense}, outlined={outlined}, icon={icon})",
32
- text=text,
33
- dense=dense,
34
- outlined=outlined,
35
- icon=icon,
36
- )
37
- return main
38
-
39
-
40
- __doc__ += apidoc(solara.Error.f) # type: ignore
@@ -1,40 +0,0 @@
1
- """# Info
2
-
3
- Solara has 4 types of alerts:
4
-
5
- * [Success](/documentation/components/status/success)
6
- * Info (this page)
7
- * [Warning](/documentation/components/status/warning)
8
- * [Error](/documentation/components/status/error)
9
-
10
-
11
-
12
- """
13
-
14
- import solara
15
- from solara.website.utils import apidoc
16
-
17
-
18
- @solara.component
19
- def Page():
20
- icon, set_icon = solara.use_state(True)
21
- dense, set_dense = solara.use_state(False)
22
- outlined, set_outlined = solara.use_state(True)
23
- text, set_text = solara.use_state(True)
24
- with solara.VBox() as main:
25
- with solara.GridFixed(4):
26
- solara.Checkbox(label="Use icon", value=icon, on_value=set_icon)
27
- solara.Checkbox(label="Show dense", value=dense, on_value=set_dense)
28
- solara.Checkbox(label="Show as text", value=text, on_value=set_text)
29
- solara.Checkbox(label="Show outlined", value=outlined, on_value=set_outlined)
30
- solara.Info(
31
- f"This is solara.Info(label='...', text={text}, dense={dense}, outlined={outlined}, icon={icon})",
32
- text=text,
33
- dense=dense,
34
- outlined=outlined,
35
- icon=icon,
36
- )
37
- return main
38
-
39
-
40
- __doc__ += apidoc(solara.Info.f) # type: ignore
@@ -1,10 +0,0 @@
1
- """# ProgressLinear
2
- """
3
- import solara
4
- from solara.website.components import NoPage
5
- from solara.website.utils import apidoc
6
-
7
- Page = NoPage
8
-
9
-
10
- __doc__ += apidoc(solara.ProgressLinear.f) # type: ignore
@@ -1,10 +0,0 @@
1
- """
2
- # SpinnerSolara
3
- """
4
- import solara
5
- from solara.website.components import NoPage
6
- from solara.website.utils import apidoc
7
-
8
- Page = NoPage
9
-
10
- __doc__ += apidoc(solara.SpinnerSolara.f) # type: ignore
@@ -1,40 +0,0 @@
1
- """# Success
2
-
3
- Solara has 4 types of alerts:
4
-
5
- * Success (this page)
6
- * [Info](/documentation/components/status/info)
7
- * [Warning](/documentation/components/status/warning)
8
- * [Error](/documentation/components/status/error)
9
-
10
-
11
-
12
- """
13
-
14
- import solara
15
- from solara.website.utils import apidoc
16
-
17
-
18
- @solara.component
19
- def Page():
20
- icon, set_icon = solara.use_state(True)
21
- dense, set_dense = solara.use_state(False)
22
- outlined, set_outlined = solara.use_state(True)
23
- text, set_text = solara.use_state(True)
24
- with solara.VBox() as main:
25
- with solara.GridFixed(4):
26
- solara.Checkbox(label="Use icon", value=icon, on_value=set_icon)
27
- solara.Checkbox(label="Show dense", value=dense, on_value=set_dense)
28
- solara.Checkbox(label="Show as text", value=text, on_value=set_text)
29
- solara.Checkbox(label="Show outlined", value=outlined, on_value=set_outlined)
30
- solara.Success(
31
- f"This is solara.Success(label='...', text={text}, dense={dense}, outlined={outlined}, icon={icon})",
32
- text=text,
33
- dense=dense,
34
- outlined=outlined,
35
- icon=icon,
36
- )
37
- return main
38
-
39
-
40
- __doc__ += apidoc(solara.Success.f) # type: ignore
@@ -1,47 +0,0 @@
1
- """# Warning
2
-
3
- Solara has 4 types of alerts:
4
-
5
- * [Success](/documentation/components/status/success)
6
- * [Info](/documentation/components/status/info)
7
- * Warning (this page)
8
- * [Error](/documentation/components/status/error)
9
-
10
-
11
-
12
- """
13
-
14
- import solara
15
- from solara.website.utils import apidoc
16
-
17
-
18
- @solara.component
19
- def Page():
20
- icon, set_icon = solara.use_state(True)
21
- dense, set_dense = solara.use_state(False)
22
- outlined, set_outlined = solara.use_state(True)
23
- text, set_text = solara.use_state(True)
24
- with solara.VBox() as main:
25
- with solara.GridFixed(4):
26
- solara.Checkbox(label="Use icon", value=icon, on_value=set_icon)
27
- solara.Checkbox(label="Show dense", value=dense, on_value=set_dense)
28
- solara.Checkbox(label="Show as text", value=text, on_value=set_text)
29
- solara.Checkbox(label="Show outlined", value=outlined, on_value=set_outlined)
30
- solara.Warning(
31
- f"This is solara.Warning(label='...', text={text}, dense={dense}, outlined={outlined}, icon={icon})",
32
- text=text,
33
- dense=dense,
34
- outlined=outlined,
35
- icon=icon,
36
- )
37
- solara.Warning(
38
- f"This is solara.Warning(label='...', text={text}, dense={dense}, outlined={outlined}, icon={icon})",
39
- text=text,
40
- dense=dense,
41
- outlined=outlined,
42
- icon=icon,
43
- )
44
- return main
45
-
46
-
47
- __doc__ += apidoc(solara.Warning.f) # type: ignore
@@ -1,9 +0,0 @@
1
- import solara
2
- from solara.website.components import NoPage, SubCategoryLayout
3
-
4
- Page = NoPage
5
-
6
-
7
- @solara.component
8
- def Layout(children=[]):
9
- SubCategoryLayout(children=children)
@@ -1,44 +0,0 @@
1
- """# FigureAltair
2
-
3
- """
4
-
5
- import altair as alt
6
- import pandas as pd
7
-
8
- import solara
9
- from solara.website.utils import apidoc
10
-
11
- title = "FigureAltair"
12
-
13
- df = pd.DataFrame({"a": ["A", "B", "C", "D", "E", "F", "G", "H", "I"], "b": [28, 55, 43, 91, 81, 53, 19, 87, 52]})
14
-
15
-
16
- @solara.component
17
- def Page():
18
- click_data, set_click_data = solara.use_state(None)
19
- hover_data, set_hover_data = solara.use_state(None)
20
-
21
- chart = alt.Chart(df).mark_bar().encode(x="a", y="b")
22
-
23
- with solara.Div() as main:
24
- solara.AltairChart(chart, on_click=set_click_data, on_hover=set_hover_data)
25
-
26
- solara.Markdown(
27
- f"""
28
- Click data:
29
-
30
- ```
31
- {click_data}
32
- ```
33
-
34
- Hover data:
35
- ```
36
- {hover_data}
37
- ```
38
- """
39
- )
40
-
41
- return main
42
-
43
-
44
- __doc__ += apidoc(solara.FigureAltair.f) # type: ignore
@@ -1,78 +0,0 @@
1
- """# Echarts
2
-
3
- """
4
-
5
-
6
- import solara
7
- from solara.website.utils import apidoc
8
-
9
- options = {
10
- "bars": {
11
- "title": {"text": "ECharts Getting Started Example"},
12
- "tooltip": {},
13
- "legend": {"data": ["sales"]},
14
- "xAxis": {"type": "category"},
15
- "yAxis": {},
16
- "emphasis": {"itemStyle": {"shadowBlur": 10, "shadowOffsetX": 0, "shadowColor": "rgba(0, 0, 0, 0.5)"}},
17
- "series": [
18
- {
19
- "name": "sales",
20
- "type": "bar",
21
- "data": [
22
- {"name": "Shirts", "value": 5},
23
- {"name": "Cardigans", "value": 20},
24
- {"name": "Chiffons", "value": 36},
25
- {"name": "Pants", "value": 10},
26
- {"name": "Heels", "value": 10},
27
- {"name": "Socks", "value": 20},
28
- ],
29
- "universalTransition": True,
30
- }
31
- ],
32
- },
33
- "pie": {
34
- "title": {"text": "ECharts Getting Started Example"},
35
- "tooltip": {},
36
- "legend": {"data": ["sales"]},
37
- "series": [
38
- {
39
- "name": "sales",
40
- "type": "pie",
41
- "radius": [0, "50%"],
42
- "data": [
43
- {"name": "Shirts", "value": 5},
44
- {"name": "Cardigans", "value": 20},
45
- {"name": "Chiffons", "value": 36},
46
- {"name": "Pants", "value": 10},
47
- {"name": "Heels", "value": 10},
48
- {"name": "Socks", "value": 20},
49
- ],
50
- "universalTransition": True,
51
- }
52
- ],
53
- },
54
- }
55
-
56
-
57
- @solara.component
58
- def Page():
59
- option, set_option = solara.use_state("bars")
60
- click_data, set_click_data = solara.use_state(None)
61
- mouseover_data, set_mouseover_data = solara.use_state(None)
62
- mouseout_data, set_mouseout_data = solara.use_state(None)
63
-
64
- with solara.VBox() as main:
65
- with solara.Card("Echarts"):
66
- with solara.ToggleButtonsSingle("bars", on_value=set_option):
67
- solara.Button("bars")
68
- solara.Button("pie")
69
- solara.FigureEcharts(option=options[option], on_click=set_click_data, on_mouseover=set_mouseover_data, on_mouseout=set_mouseout_data)
70
- with solara.Card("Event data"):
71
- solara.Markdown(f"**Click data**: {click_data}")
72
- solara.Markdown(f"**Mouseover data**: {mouseover_data}")
73
- solara.Markdown(f"**Mouseout data**: {mouseout_data}")
74
-
75
- return main
76
-
77
-
78
- __doc__ += apidoc(solara.FigureEcharts.f) # type: ignore
@@ -1,32 +0,0 @@
1
- """# Matplotlib
2
-
3
- """
4
-
5
- import numpy as np
6
- from matplotlib.figure import Figure
7
-
8
- import solara
9
- from solara.website.utils import apidoc
10
-
11
- x = np.linspace(0, 2, 100)
12
-
13
-
14
- @solara.component
15
- def Page():
16
- freq, set_freq = solara.use_state(2.0)
17
- phase, set_phase = solara.use_state(0.1)
18
- y = np.sin(x * freq + phase)
19
-
20
- fig = Figure()
21
- ax = fig.subplots()
22
- ax.plot(x, y)
23
- ax.set_ylim(-1.2, 1.2)
24
-
25
- with solara.VBox() as main:
26
- solara.FloatSlider("Frequency", value=freq, on_value=set_freq, min=0, max=10)
27
- solara.FloatSlider("Phase", value=phase, on_value=set_phase, min=0, max=np.pi, step=0.1)
28
- solara.FigureMatplotlib(fig, dependencies=[freq, phase])
29
- return main
30
-
31
-
32
- __doc__ += apidoc(solara.FigureMatplotlib.f) # type: ignore
@@ -1,63 +0,0 @@
1
- """Renders a plotly figure object and support for events.
2
-
3
- You can use a regular plotly figure, for instance using plotly.express.
4
-
5
- Supported events are include in the example below.
6
-
7
- For performance, a dependency list can be provided. Any change to the dependency list will cause the Figure data to be updated.
8
- This can be significantly faster than comparing he figure data directly.
9
-
10
- """
11
-
12
- import plotly.express as px
13
-
14
- import solara
15
-
16
- df = px.data.iris()
17
-
18
-
19
- @solara.component
20
- def Page():
21
- with solara.VBox() as main:
22
- selection_data, set_selection_data = solara.use_state(None)
23
- click_data, set_click_data = solara.use_state(None)
24
- hover_data, set_hover_data = solara.use_state(None)
25
- unhover_data, set_unhover_data = solara.use_state(None)
26
- deselect_data, set_deselect_data = solara.use_state(None)
27
- fig = px.scatter(df, x="sepal_width", y="sepal_length", color="species")
28
- solara.FigurePlotly(
29
- fig, on_selection=set_selection_data, on_click=set_click_data, on_hover=set_hover_data, on_unhover=set_unhover_data, on_deselect=set_deselect_data
30
- )
31
-
32
- solara.Markdown(
33
- f"""
34
- # Events data
35
- ## selection
36
- ```
37
- {selection_data}
38
- ```
39
-
40
- ## click
41
- ```
42
- {click_data}
43
- ```
44
-
45
- ## hover
46
- ```
47
- {hover_data}
48
- ```
49
-
50
- ## unhover
51
- ```
52
- {unhover_data}
53
- ```
54
-
55
- ## deselect
56
- ```
57
- {deselect_data}
58
- ```
59
-
60
-
61
- """
62
- )
63
- return main
@@ -1,41 +0,0 @@
1
- """
2
-
3
- Wraps plotly express function and adds cross filtering support.
4
-
5
- Instead of `plotly.express' you can use `solara.express` instead.
6
-
7
- ```python
8
- # import plotly.express as px
9
- import solara.express as px
10
-
11
- df = px.data.iris()
12
- px.histogram(df, "species")
13
- px.scatter(df, x="sepal_width", y="sepal_length", color="species")
14
- ```
15
-
16
-
17
- Click the lasso icon in the top scatter plot to select points, which should then be filtered out in the other
18
- plots.
19
-
20
-
21
- """
22
-
23
- import plotly.express as px
24
-
25
- import solara
26
- import solara.express as spx
27
-
28
- df = px.data.iris()
29
-
30
-
31
- @solara.component
32
- def Page():
33
- solara.provide_cross_filter()
34
- fig = px.histogram(df, "species")
35
- fig.update_layout(dragmode="select", selectdirection="h")
36
-
37
- with solara.VBox() as main:
38
- spx.scatter(df, x="sepal_width", y="sepal_length", color="species")
39
- spx.scatter_3d(df, x="sepal_width", y="sepal_length", z="petal_width")
40
- spx.CrossFilteredFigurePlotly(fig)
41
- return main
@@ -1,52 +0,0 @@
1
- import solara
2
- from solara.website.components import Gallery
3
-
4
- title = "Examples"
5
-
6
-
7
- @solara.component
8
- def Page(route_external=None):
9
- Gallery(route_external)
10
-
11
-
12
- @solara.component
13
- def Layout(children):
14
- # TODO: this is using a private API, what is the best way to do this?
15
- # we want to 'eat' the whole route for the current level, and the level below
16
- # for example the utilities directory. But if an example does routing, we don't want
17
- # to take on that route.
18
- router = solara.use_router()
19
- route_current = router.path_routes[-1]
20
- # route_current, all_routes = solara.use_route()
21
-
22
- if route_current is None:
23
- return solara.Error("Page not found")
24
- module = route_current.module
25
- assert module is not None
26
- github_url = solara.util.github_url(module.__file__)
27
-
28
- with solara.HBox(grow=False) as main:
29
- if route_current.path == "fullscreen":
30
- with solara.Padding(4, children=children):
31
- pass
32
- else:
33
- with solara.VBox(grow=True, align_items="baseline"):
34
- doc = module.__doc__
35
- if doc:
36
- with solara.VBox(grow=True):
37
- solara.Markdown(doc)
38
- with solara.HBox():
39
- if route_current.path != "/":
40
- solara.Button("View source code on GitHub", icon_name="mdi-github-circle", href=github_url, class_="ma-2", target="_blank", text=True)
41
- # code = inspect.getsource(module)
42
-
43
- # code_quoted = urllib.parse.quote_plus(code)
44
- # url = f"https://test.solara.dev/try?code={code_quoted}"
45
- # solara.Button("Run on solara.dev", icon_name="mdi-pencil", href=url, class_="ma-2", target="_blank")
46
- # with solara.HBox():
47
- if not hasattr(module, "Page"):
48
- solara.Error(f"No Page component found in {module}")
49
- else:
50
- with solara.Padding(4, children=children):
51
- pass
52
- return main
@@ -1,10 +0,0 @@
1
- """Large Language Models and Generative AI examples."""
2
- import solara
3
-
4
- title = "AI"
5
- redirect = None
6
-
7
-
8
- @solara.component
9
- def Page():
10
- return solara.Markdown("Click an example on the left")
@@ -1,96 +0,0 @@
1
- """
2
- # Chatbot
3
-
4
- A way to create a chatbot using OpenAI's GPT-4 API, utilizing their new API, and the streaming feature.
5
- """
6
-
7
-
8
- import os
9
- from typing import List
10
-
11
- from openai import OpenAI
12
- from typing_extensions import TypedDict
13
-
14
- import solara
15
- import solara.lab
16
-
17
-
18
- class MessageDict(TypedDict):
19
- role: str
20
- content: str
21
-
22
-
23
- if os.getenv("OPENAI_API_KEY") is None and "OPENAI_API_KEY" not in os.environ:
24
- openai = None
25
- else:
26
- openai = OpenAI()
27
- openai.api_key = os.getenv("OPENAI_API_KEY") # type: ignore
28
-
29
- messages: solara.Reactive[List[MessageDict]] = solara.reactive([])
30
-
31
-
32
- def no_api_key_message():
33
- messages.value = [
34
- {
35
- "role": "assistant",
36
- "content": "No OpenAI API key found. Please set your OpenAI API key in the environment variable `OPENAI_API_KEY`.",
37
- },
38
- ]
39
-
40
-
41
- def add_chunk_to_ai_message(chunk: str):
42
- messages.value = [
43
- *messages.value[:-1],
44
- {
45
- "role": "assistant",
46
- "content": messages.value[-1]["content"] + chunk,
47
- },
48
- ]
49
-
50
-
51
- @solara.component
52
- def Page():
53
- user_message_count = len([m for m in messages.value if m["role"] == "user"])
54
-
55
- def send(message):
56
- messages.value = [
57
- *messages.value,
58
- {"role": "user", "content": message},
59
- ]
60
-
61
- def call_openai():
62
- if user_message_count == 0:
63
- return
64
- if openai is None:
65
- no_api_key_message()
66
- return
67
- response = openai.chat.completions.create(
68
- model="gpt-4-1106-preview",
69
- messages=messages.value, # type: ignore
70
- stream=True,
71
- )
72
- messages.value = [*messages.value, {"role": "assistant", "content": ""}]
73
- for chunk in response:
74
- if chunk.choices[0].finish_reason == "stop": # type: ignore
75
- return
76
- add_chunk_to_ai_message(chunk.choices[0].delta.content) # type: ignore
77
-
78
- task = solara.lab.use_task(call_openai, dependencies=[user_message_count]) # type: ignore
79
-
80
- with solara.Column(
81
- style={"width": "700px", "height": "50vh"},
82
- ):
83
- with solara.lab.ChatBox():
84
- for item in messages.value:
85
- with solara.lab.ChatMessage(
86
- user=item["role"] == "user",
87
- avatar=False,
88
- name="ChatGPT" if item["role"] == "assistant" else "User",
89
- color="rgba(0,0,0, 0.06)" if item["role"] == "assistant" else "#ff991f",
90
- avatar_background_color="primary" if item["role"] == "assistant" else None,
91
- border_radius="20px",
92
- ):
93
- solara.Markdown(item["content"])
94
- if task.pending:
95
- solara.Text("I'm thinking...", style={"font-size": "1rem", "padding-left": "20px"})
96
- solara.lab.ChatInput(send_callback=send, disabled=task.pending)