streamlit-nightly 1.43.2.dev20250307__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.
- streamlit/__init__.py +306 -0
- streamlit/__main__.py +20 -0
- streamlit/auth_util.py +218 -0
- streamlit/cli_util.py +105 -0
- streamlit/column_config.py +56 -0
- streamlit/commands/__init__.py +13 -0
- streamlit/commands/echo.py +126 -0
- streamlit/commands/execution_control.py +238 -0
- streamlit/commands/experimental_query_params.py +169 -0
- streamlit/commands/logo.py +189 -0
- streamlit/commands/navigation.py +385 -0
- streamlit/commands/page_config.py +311 -0
- streamlit/components/__init__.py +13 -0
- streamlit/components/lib/__init__.py +13 -0
- streamlit/components/lib/local_component_registry.py +84 -0
- streamlit/components/types/__init__.py +13 -0
- streamlit/components/types/base_component_registry.py +99 -0
- streamlit/components/types/base_custom_component.py +150 -0
- streamlit/components/v1/__init__.py +31 -0
- streamlit/components/v1/component_arrow.py +141 -0
- streamlit/components/v1/component_registry.py +130 -0
- streamlit/components/v1/components.py +38 -0
- streamlit/components/v1/custom_component.py +243 -0
- streamlit/config.py +1513 -0
- streamlit/config_option.py +311 -0
- streamlit/config_util.py +177 -0
- streamlit/connections/__init__.py +28 -0
- streamlit/connections/base_connection.py +174 -0
- streamlit/connections/snowflake_connection.py +562 -0
- streamlit/connections/snowpark_connection.py +213 -0
- streamlit/connections/sql_connection.py +425 -0
- streamlit/connections/util.py +97 -0
- streamlit/cursor.py +210 -0
- streamlit/dataframe_util.py +1416 -0
- streamlit/delta_generator.py +602 -0
- streamlit/delta_generator_singletons.py +204 -0
- streamlit/deprecation_util.py +209 -0
- streamlit/development.py +21 -0
- streamlit/elements/__init__.py +13 -0
- streamlit/elements/alert.py +234 -0
- streamlit/elements/arrow.py +962 -0
- streamlit/elements/balloons.py +47 -0
- streamlit/elements/bokeh_chart.py +133 -0
- streamlit/elements/code.py +114 -0
- streamlit/elements/deck_gl_json_chart.py +546 -0
- streamlit/elements/dialog_decorator.py +267 -0
- streamlit/elements/doc_string.py +558 -0
- streamlit/elements/empty.py +130 -0
- streamlit/elements/exception.py +331 -0
- streamlit/elements/form.py +354 -0
- streamlit/elements/graphviz_chart.py +150 -0
- streamlit/elements/heading.py +302 -0
- streamlit/elements/html.py +105 -0
- streamlit/elements/iframe.py +191 -0
- streamlit/elements/image.py +196 -0
- streamlit/elements/json.py +139 -0
- streamlit/elements/layouts.py +879 -0
- streamlit/elements/lib/__init__.py +13 -0
- streamlit/elements/lib/built_in_chart_utils.py +1157 -0
- streamlit/elements/lib/color_util.py +263 -0
- streamlit/elements/lib/column_config_utils.py +542 -0
- streamlit/elements/lib/column_types.py +2188 -0
- streamlit/elements/lib/dialog.py +147 -0
- streamlit/elements/lib/dicttools.py +154 -0
- streamlit/elements/lib/event_utils.py +37 -0
- streamlit/elements/lib/file_uploader_utils.py +66 -0
- streamlit/elements/lib/form_utils.py +77 -0
- streamlit/elements/lib/image_utils.py +441 -0
- streamlit/elements/lib/js_number.py +105 -0
- streamlit/elements/lib/mutable_status_container.py +183 -0
- streamlit/elements/lib/options_selector_utils.py +250 -0
- streamlit/elements/lib/pandas_styler_utils.py +274 -0
- streamlit/elements/lib/policies.py +194 -0
- streamlit/elements/lib/streamlit_plotly_theme.py +207 -0
- streamlit/elements/lib/subtitle_utils.py +176 -0
- streamlit/elements/lib/utils.py +250 -0
- streamlit/elements/map.py +508 -0
- streamlit/elements/markdown.py +277 -0
- streamlit/elements/media.py +793 -0
- streamlit/elements/metric.py +301 -0
- streamlit/elements/plotly_chart.py +546 -0
- streamlit/elements/progress.py +156 -0
- streamlit/elements/pyplot.py +194 -0
- streamlit/elements/snow.py +47 -0
- streamlit/elements/spinner.py +113 -0
- streamlit/elements/text.py +76 -0
- streamlit/elements/toast.py +98 -0
- streamlit/elements/vega_charts.py +1984 -0
- streamlit/elements/widgets/__init__.py +13 -0
- streamlit/elements/widgets/audio_input.py +310 -0
- streamlit/elements/widgets/button.py +1123 -0
- streamlit/elements/widgets/button_group.py +1008 -0
- streamlit/elements/widgets/camera_input.py +263 -0
- streamlit/elements/widgets/chat.py +647 -0
- streamlit/elements/widgets/checkbox.py +352 -0
- streamlit/elements/widgets/color_picker.py +265 -0
- streamlit/elements/widgets/data_editor.py +983 -0
- streamlit/elements/widgets/file_uploader.py +486 -0
- streamlit/elements/widgets/multiselect.py +338 -0
- streamlit/elements/widgets/number_input.py +545 -0
- streamlit/elements/widgets/radio.py +407 -0
- streamlit/elements/widgets/select_slider.py +437 -0
- streamlit/elements/widgets/selectbox.py +366 -0
- streamlit/elements/widgets/slider.py +880 -0
- streamlit/elements/widgets/text_widgets.py +628 -0
- streamlit/elements/widgets/time_widgets.py +970 -0
- streamlit/elements/write.py +574 -0
- streamlit/emojis.py +34 -0
- streamlit/env_util.py +61 -0
- streamlit/error_util.py +105 -0
- streamlit/errors.py +452 -0
- streamlit/external/__init__.py +13 -0
- streamlit/external/langchain/__init__.py +23 -0
- streamlit/external/langchain/streamlit_callback_handler.py +406 -0
- streamlit/file_util.py +247 -0
- streamlit/git_util.py +173 -0
- streamlit/hello/__init__.py +13 -0
- streamlit/hello/animation_demo.py +82 -0
- streamlit/hello/dataframe_demo.py +71 -0
- streamlit/hello/hello.py +37 -0
- streamlit/hello/mapping_demo.py +114 -0
- streamlit/hello/plotting_demo.py +55 -0
- streamlit/hello/streamlit_app.py +55 -0
- streamlit/hello/utils.py +28 -0
- streamlit/logger.py +130 -0
- streamlit/material_icon_names.py +25 -0
- streamlit/navigation/__init__.py +13 -0
- streamlit/navigation/page.py +302 -0
- streamlit/net_util.py +125 -0
- streamlit/platform.py +33 -0
- streamlit/proto/Alert_pb2.py +29 -0
- streamlit/proto/Alert_pb2.pyi +90 -0
- streamlit/proto/AppPage_pb2.py +27 -0
- streamlit/proto/AppPage_pb2.pyi +64 -0
- streamlit/proto/ArrowNamedDataSet_pb2.py +28 -0
- streamlit/proto/ArrowNamedDataSet_pb2.pyi +57 -0
- streamlit/proto/ArrowVegaLiteChart_pb2.py +29 -0
- streamlit/proto/ArrowVegaLiteChart_pb2.pyi +84 -0
- streamlit/proto/Arrow_pb2.py +33 -0
- streamlit/proto/Arrow_pb2.pyi +188 -0
- streamlit/proto/AudioInput_pb2.py +28 -0
- streamlit/proto/AudioInput_pb2.pyi +58 -0
- streamlit/proto/Audio_pb2.py +27 -0
- streamlit/proto/Audio_pb2.pyi +58 -0
- streamlit/proto/AuthRedirect_pb2.py +27 -0
- streamlit/proto/AuthRedirect_pb2.pyi +41 -0
- streamlit/proto/AutoRerun_pb2.py +27 -0
- streamlit/proto/AutoRerun_pb2.pyi +45 -0
- streamlit/proto/BackMsg_pb2.py +29 -0
- streamlit/proto/BackMsg_pb2.pyi +105 -0
- streamlit/proto/Balloons_pb2.py +27 -0
- streamlit/proto/Balloons_pb2.pyi +43 -0
- streamlit/proto/Block_pb2.py +53 -0
- streamlit/proto/Block_pb2.pyi +322 -0
- streamlit/proto/BokehChart_pb2.py +27 -0
- streamlit/proto/BokehChart_pb2.pyi +49 -0
- streamlit/proto/ButtonGroup_pb2.py +36 -0
- streamlit/proto/ButtonGroup_pb2.pyi +169 -0
- streamlit/proto/Button_pb2.py +27 -0
- streamlit/proto/Button_pb2.pyi +71 -0
- streamlit/proto/CameraInput_pb2.py +28 -0
- streamlit/proto/CameraInput_pb2.pyi +58 -0
- streamlit/proto/ChatInput_pb2.py +31 -0
- streamlit/proto/ChatInput_pb2.pyi +111 -0
- streamlit/proto/Checkbox_pb2.py +30 -0
- streamlit/proto/Checkbox_pb2.pyi +90 -0
- streamlit/proto/ClientState_pb2.py +30 -0
- streamlit/proto/ClientState_pb2.pyi +90 -0
- streamlit/proto/Code_pb2.py +27 -0
- streamlit/proto/Code_pb2.pyi +55 -0
- streamlit/proto/ColorPicker_pb2.py +28 -0
- streamlit/proto/ColorPicker_pb2.pyi +67 -0
- streamlit/proto/Common_pb2.py +51 -0
- streamlit/proto/Common_pb2.pyi +293 -0
- streamlit/proto/Components_pb2.py +35 -0
- streamlit/proto/Components_pb2.pyi +172 -0
- streamlit/proto/DataFrame_pb2.py +56 -0
- streamlit/proto/DataFrame_pb2.pyi +397 -0
- streamlit/proto/DateInput_pb2.py +28 -0
- streamlit/proto/DateInput_pb2.pyi +83 -0
- streamlit/proto/DeckGlJsonChart_pb2.py +29 -0
- streamlit/proto/DeckGlJsonChart_pb2.pyi +102 -0
- streamlit/proto/Delta_pb2.py +31 -0
- streamlit/proto/Delta_pb2.pyi +74 -0
- streamlit/proto/DocString_pb2.py +29 -0
- streamlit/proto/DocString_pb2.pyi +93 -0
- streamlit/proto/DownloadButton_pb2.py +27 -0
- streamlit/proto/DownloadButton_pb2.pyi +70 -0
- streamlit/proto/Element_pb2.py +78 -0
- streamlit/proto/Element_pb2.pyi +312 -0
- streamlit/proto/Empty_pb2.py +27 -0
- streamlit/proto/Empty_pb2.pyi +36 -0
- streamlit/proto/Exception_pb2.py +27 -0
- streamlit/proto/Exception_pb2.pyi +72 -0
- streamlit/proto/Favicon_pb2.py +27 -0
- streamlit/proto/Favicon_pb2.pyi +40 -0
- streamlit/proto/FileUploader_pb2.py +28 -0
- streamlit/proto/FileUploader_pb2.pyi +78 -0
- streamlit/proto/ForwardMsg_pb2.py +53 -0
- streamlit/proto/ForwardMsg_pb2.pyi +293 -0
- streamlit/proto/GitInfo_pb2.py +29 -0
- streamlit/proto/GitInfo_pb2.pyi +83 -0
- streamlit/proto/GraphVizChart_pb2.py +27 -0
- streamlit/proto/GraphVizChart_pb2.pyi +53 -0
- streamlit/proto/Heading_pb2.py +27 -0
- streamlit/proto/Heading_pb2.pyi +56 -0
- streamlit/proto/Html_pb2.py +27 -0
- streamlit/proto/Html_pb2.pyi +42 -0
- streamlit/proto/IFrame_pb2.py +27 -0
- streamlit/proto/IFrame_pb2.pyi +59 -0
- streamlit/proto/Image_pb2.py +29 -0
- streamlit/proto/Image_pb2.pyi +84 -0
- streamlit/proto/Json_pb2.py +27 -0
- streamlit/proto/Json_pb2.pyi +53 -0
- streamlit/proto/LabelVisibilityMessage_pb2.py +29 -0
- streamlit/proto/LabelVisibilityMessage_pb2.pyi +68 -0
- streamlit/proto/LinkButton_pb2.py +27 -0
- streamlit/proto/LinkButton_pb2.pyi +58 -0
- streamlit/proto/Logo_pb2.py +27 -0
- streamlit/proto/Logo_pb2.pyi +51 -0
- streamlit/proto/Markdown_pb2.py +29 -0
- streamlit/proto/Markdown_pb2.pyi +86 -0
- streamlit/proto/Metric_pb2.py +32 -0
- streamlit/proto/Metric_pb2.pyi +101 -0
- streamlit/proto/MetricsEvent_pb2.py +30 -0
- streamlit/proto/MetricsEvent_pb2.pyi +200 -0
- streamlit/proto/MultiSelect_pb2.py +28 -0
- streamlit/proto/MultiSelect_pb2.pyi +81 -0
- streamlit/proto/NamedDataSet_pb2.py +28 -0
- streamlit/proto/NamedDataSet_pb2.pyi +59 -0
- streamlit/proto/Navigation_pb2.py +30 -0
- streamlit/proto/Navigation_pb2.pyi +84 -0
- streamlit/proto/NewSession_pb2.py +51 -0
- streamlit/proto/NewSession_pb2.pyi +481 -0
- streamlit/proto/NumberInput_pb2.py +30 -0
- streamlit/proto/NumberInput_pb2.pyi +121 -0
- streamlit/proto/PageConfig_pb2.py +33 -0
- streamlit/proto/PageConfig_pb2.pyi +126 -0
- streamlit/proto/PageInfo_pb2.py +27 -0
- streamlit/proto/PageInfo_pb2.pyi +43 -0
- streamlit/proto/PageLink_pb2.py +27 -0
- streamlit/proto/PageLink_pb2.pyi +63 -0
- streamlit/proto/PageNotFound_pb2.py +27 -0
- streamlit/proto/PageNotFound_pb2.pyi +42 -0
- streamlit/proto/PageProfile_pb2.py +31 -0
- streamlit/proto/PageProfile_pb2.pyi +127 -0
- streamlit/proto/PagesChanged_pb2.py +28 -0
- streamlit/proto/PagesChanged_pb2.pyi +48 -0
- streamlit/proto/ParentMessage_pb2.py +27 -0
- streamlit/proto/ParentMessage_pb2.pyi +46 -0
- streamlit/proto/PlotlyChart_pb2.py +31 -0
- streamlit/proto/PlotlyChart_pb2.pyi +131 -0
- streamlit/proto/Progress_pb2.py +27 -0
- streamlit/proto/Progress_pb2.pyi +43 -0
- streamlit/proto/Radio_pb2.py +28 -0
- streamlit/proto/Radio_pb2.pyi +84 -0
- streamlit/proto/RootContainer_pb2.py +27 -0
- streamlit/proto/RootContainer_pb2.pyi +56 -0
- streamlit/proto/Selectbox_pb2.py +28 -0
- streamlit/proto/Selectbox_pb2.pyi +80 -0
- streamlit/proto/SessionEvent_pb2.py +28 -0
- streamlit/proto/SessionEvent_pb2.pyi +62 -0
- streamlit/proto/SessionStatus_pb2.py +27 -0
- streamlit/proto/SessionStatus_pb2.pyi +57 -0
- streamlit/proto/Skeleton_pb2.py +29 -0
- streamlit/proto/Skeleton_pb2.pyi +71 -0
- streamlit/proto/Slider_pb2.py +32 -0
- streamlit/proto/Slider_pb2.pyi +142 -0
- streamlit/proto/Snow_pb2.py +27 -0
- streamlit/proto/Snow_pb2.pyi +43 -0
- streamlit/proto/Spinner_pb2.py +27 -0
- streamlit/proto/Spinner_pb2.pyi +49 -0
- streamlit/proto/TextArea_pb2.py +28 -0
- streamlit/proto/TextArea_pb2.pyi +80 -0
- streamlit/proto/TextInput_pb2.py +30 -0
- streamlit/proto/TextInput_pb2.pyi +107 -0
- streamlit/proto/Text_pb2.py +27 -0
- streamlit/proto/Text_pb2.pyi +46 -0
- streamlit/proto/TimeInput_pb2.py +28 -0
- streamlit/proto/TimeInput_pb2.pyi +74 -0
- streamlit/proto/Toast_pb2.py +27 -0
- streamlit/proto/Toast_pb2.pyi +45 -0
- streamlit/proto/VegaLiteChart_pb2.py +29 -0
- streamlit/proto/VegaLiteChart_pb2.pyi +71 -0
- streamlit/proto/Video_pb2.py +31 -0
- streamlit/proto/Video_pb2.pyi +117 -0
- streamlit/proto/WidgetStates_pb2.py +31 -0
- streamlit/proto/WidgetStates_pb2.pyi +126 -0
- streamlit/proto/__init__.py +15 -0
- streamlit/proto/openmetrics_data_model_pb2.py +60 -0
- streamlit/proto/openmetrics_data_model_pb2.pyi +522 -0
- streamlit/py.typed +0 -0
- streamlit/runtime/__init__.py +50 -0
- streamlit/runtime/app_session.py +982 -0
- streamlit/runtime/caching/__init__.py +98 -0
- streamlit/runtime/caching/cache_data_api.py +665 -0
- streamlit/runtime/caching/cache_errors.py +142 -0
- streamlit/runtime/caching/cache_resource_api.py +527 -0
- streamlit/runtime/caching/cache_type.py +33 -0
- streamlit/runtime/caching/cache_utils.py +523 -0
- streamlit/runtime/caching/cached_message_replay.py +290 -0
- streamlit/runtime/caching/hashing.py +637 -0
- streamlit/runtime/caching/legacy_cache_api.py +169 -0
- streamlit/runtime/caching/storage/__init__.py +29 -0
- streamlit/runtime/caching/storage/cache_storage_protocol.py +239 -0
- streamlit/runtime/caching/storage/dummy_cache_storage.py +60 -0
- streamlit/runtime/caching/storage/in_memory_cache_storage_wrapper.py +145 -0
- streamlit/runtime/caching/storage/local_disk_cache_storage.py +223 -0
- streamlit/runtime/connection_factory.py +436 -0
- streamlit/runtime/context.py +280 -0
- streamlit/runtime/credentials.py +364 -0
- streamlit/runtime/forward_msg_cache.py +296 -0
- streamlit/runtime/forward_msg_queue.py +240 -0
- streamlit/runtime/fragment.py +477 -0
- streamlit/runtime/media_file_manager.py +234 -0
- streamlit/runtime/media_file_storage.py +143 -0
- streamlit/runtime/memory_media_file_storage.py +181 -0
- streamlit/runtime/memory_session_storage.py +77 -0
- streamlit/runtime/memory_uploaded_file_manager.py +138 -0
- streamlit/runtime/metrics_util.py +486 -0
- streamlit/runtime/pages_manager.py +165 -0
- streamlit/runtime/runtime.py +792 -0
- streamlit/runtime/runtime_util.py +106 -0
- streamlit/runtime/script_data.py +46 -0
- streamlit/runtime/scriptrunner/__init__.py +38 -0
- streamlit/runtime/scriptrunner/exec_code.py +159 -0
- streamlit/runtime/scriptrunner/magic.py +273 -0
- streamlit/runtime/scriptrunner/magic_funcs.py +32 -0
- streamlit/runtime/scriptrunner/script_cache.py +89 -0
- streamlit/runtime/scriptrunner/script_runner.py +756 -0
- streamlit/runtime/scriptrunner_utils/__init__.py +19 -0
- streamlit/runtime/scriptrunner_utils/exceptions.py +48 -0
- streamlit/runtime/scriptrunner_utils/script_requests.py +307 -0
- streamlit/runtime/scriptrunner_utils/script_run_context.py +287 -0
- streamlit/runtime/secrets.py +534 -0
- streamlit/runtime/session_manager.py +394 -0
- streamlit/runtime/state/__init__.py +41 -0
- streamlit/runtime/state/common.py +191 -0
- streamlit/runtime/state/query_params.py +205 -0
- streamlit/runtime/state/query_params_proxy.py +218 -0
- streamlit/runtime/state/safe_session_state.py +138 -0
- streamlit/runtime/state/session_state.py +772 -0
- streamlit/runtime/state/session_state_proxy.py +153 -0
- streamlit/runtime/state/widgets.py +135 -0
- streamlit/runtime/stats.py +109 -0
- streamlit/runtime/uploaded_file_manager.py +148 -0
- streamlit/runtime/websocket_session_manager.py +167 -0
- streamlit/source_util.py +98 -0
- streamlit/static/favicon.png +0 -0
- streamlit/static/index.html +61 -0
- streamlit/static/static/css/index.Bmkmz40k.css +1 -0
- streamlit/static/static/css/index.DpJG_94W.css +1 -0
- streamlit/static/static/css/index.DzuxGC_t.css +1 -0
- streamlit/static/static/js/FileDownload.esm.Bp9m5jrx.js +1 -0
- streamlit/static/static/js/FileHelper.D_3pbilj.js +5 -0
- streamlit/static/static/js/FormClearHelper.Ct2rwLXo.js +1 -0
- streamlit/static/static/js/Hooks.BKdzj5MJ.js +1 -0
- streamlit/static/static/js/InputInstructions.DB3QGNJP.js +1 -0
- streamlit/static/static/js/ProgressBar.D40A5xc2.js +2 -0
- streamlit/static/static/js/RenderInPortalIfExists.DLUCooTN.js +1 -0
- streamlit/static/static/js/Toolbar.BiGGIQun.js +1 -0
- streamlit/static/static/js/UploadFileInfo.C-jY39rj.js +1 -0
- streamlit/static/static/js/base-input.CQBQT24M.js +4 -0
- streamlit/static/static/js/checkbox.Buj8gd_M.js +9 -0
- streamlit/static/static/js/createDownloadLinkElement.DZMwyjvU.js +1 -0
- streamlit/static/static/js/createSuper.CesK3I23.js +1 -0
- streamlit/static/static/js/data-grid-overlay-editor.B69OOFM4.js +1 -0
- streamlit/static/static/js/downloader.BZQhlBNT.js +1 -0
- streamlit/static/static/js/es6.D9Zhqujy.js +2 -0
- streamlit/static/static/js/iframeResizer.contentWindow.CAzcBpCC.js +1 -0
- streamlit/static/static/js/index.08vcOOvb.js +1 -0
- streamlit/static/static/js/index.0uqKfJUS.js +1 -0
- streamlit/static/static/js/index.B02M5u69.js +203 -0
- streamlit/static/static/js/index.B7mcZKMx.js +1 -0
- streamlit/static/static/js/index.BAQDHFA_.js +1 -0
- streamlit/static/static/js/index.BI60cMVr.js +2 -0
- streamlit/static/static/js/index.BLug2inK.js +1 -0
- streamlit/static/static/js/index.BM6TMY8g.js +2 -0
- streamlit/static/static/js/index.BZ9p1t7G.js +1 -0
- streamlit/static/static/js/index.BZqa87a1.js +2 -0
- streamlit/static/static/js/index.BcsRUzZZ.js +1 -0
- streamlit/static/static/js/index.BgVMiY_P.js +197 -0
- streamlit/static/static/js/index.BtuGy7By.js +6 -0
- streamlit/static/static/js/index.BuDuBmrs.js +1 -0
- streamlit/static/static/js/index.BvXU2oKV.js +1 -0
- streamlit/static/static/js/index.BxcwPacT.js +73 -0
- streamlit/static/static/js/index.CWX8KB81.js +1 -0
- streamlit/static/static/js/index.CXzZTo_q.js +1 -0
- streamlit/static/static/js/index.CcRWp_KL.js +1 -0
- streamlit/static/static/js/index.Cd-_xe55.js +3 -0
- streamlit/static/static/js/index.CdG2PXln.js +4537 -0
- streamlit/static/static/js/index.CjXvXmcP.js +1 -0
- streamlit/static/static/js/index.D1HZENZx.js +776 -0
- streamlit/static/static/js/index.D21Efo64.js +1617 -0
- streamlit/static/static/js/index.D9WgGVBx.js +7 -0
- streamlit/static/static/js/index.DEcsHtvb.js +12 -0
- streamlit/static/static/js/index.DFeMfr_K.js +1 -0
- streamlit/static/static/js/index.DHFBoItz.js +1 -0
- streamlit/static/static/js/index.D_PrBKnJ.js +3 -0
- streamlit/static/static/js/index.DmuRkekN.js +3855 -0
- streamlit/static/static/js/index.Do6eY8sf.js +1 -0
- streamlit/static/static/js/index.Dz3lP2P-.js +1 -0
- streamlit/static/static/js/index.Dz_UqF-s.js +1 -0
- streamlit/static/static/js/index.GkSUsPhJ.js +1 -0
- streamlit/static/static/js/index.H1U1IC_d.js +3 -0
- streamlit/static/static/js/index.g6p_4DPr.js +1 -0
- streamlit/static/static/js/index.g9x_GKss.js +1 -0
- streamlit/static/static/js/index.zo9jm08y.js +1 -0
- streamlit/static/static/js/input.DnaFglHq.js +2 -0
- streamlit/static/static/js/inputUtils.CQWz5UKz.js +1 -0
- streamlit/static/static/js/memory.Crb9x4-F.js +1 -0
- streamlit/static/static/js/mergeWith.ouAz0sK3.js +1 -0
- streamlit/static/static/js/number-overlay-editor._UaN-O48.js +9 -0
- streamlit/static/static/js/possibleConstructorReturn.CtGjGFHz.js +1 -0
- streamlit/static/static/js/sandbox.CBybYOhV.js +1 -0
- streamlit/static/static/js/sprintf.D7DtBTRn.js +1 -0
- streamlit/static/static/js/textarea.Cb_uJt5U.js +2 -0
- streamlit/static/static/js/threshold.DjX0wlsa.js +1 -0
- streamlit/static/static/js/timepicker.DKT7pfoF.js +4 -0
- streamlit/static/static/js/timer.CAwTRJ_g.js +1 -0
- streamlit/static/static/js/toConsumableArray.05Ikp13-.js +3 -0
- streamlit/static/static/js/uniqueId.D2FMWUEI.js +1 -0
- streamlit/static/static/js/useBasicWidgetState.urnZLANY.js +1 -0
- streamlit/static/static/js/useOnInputChange.BOKIIdJ1.js +1 -0
- streamlit/static/static/js/value.CgPGBV_l.js +1 -0
- streamlit/static/static/js/withFullScreenWrapper.C_N8J0Xx.js +1 -0
- streamlit/static/static/media/KaTeX_AMS-Regular.BQhdFMY1.woff2 +0 -0
- streamlit/static/static/media/KaTeX_AMS-Regular.DMm9YOAa.woff +0 -0
- streamlit/static/static/media/KaTeX_AMS-Regular.DRggAlZN.ttf +0 -0
- streamlit/static/static/media/KaTeX_Caligraphic-Bold.ATXxdsX0.ttf +0 -0
- streamlit/static/static/media/KaTeX_Caligraphic-Bold.BEiXGLvX.woff +0 -0
- streamlit/static/static/media/KaTeX_Caligraphic-Bold.Dq_IR9rO.woff2 +0 -0
- streamlit/static/static/media/KaTeX_Caligraphic-Regular.CTRA-rTL.woff +0 -0
- streamlit/static/static/media/KaTeX_Caligraphic-Regular.Di6jR-x-.woff2 +0 -0
- streamlit/static/static/media/KaTeX_Caligraphic-Regular.wX97UBjC.ttf +0 -0
- streamlit/static/static/media/KaTeX_Fraktur-Bold.BdnERNNW.ttf +0 -0
- streamlit/static/static/media/KaTeX_Fraktur-Bold.BsDP51OF.woff +0 -0
- streamlit/static/static/media/KaTeX_Fraktur-Bold.CL6g_b3V.woff2 +0 -0
- streamlit/static/static/media/KaTeX_Fraktur-Regular.CB_wures.ttf +0 -0
- streamlit/static/static/media/KaTeX_Fraktur-Regular.CTYiF6lA.woff2 +0 -0
- streamlit/static/static/media/KaTeX_Fraktur-Regular.Dxdc4cR9.woff +0 -0
- streamlit/static/static/media/KaTeX_Main-Bold.Cx986IdX.woff2 +0 -0
- streamlit/static/static/media/KaTeX_Main-Bold.Jm3AIy58.woff +0 -0
- streamlit/static/static/media/KaTeX_Main-Bold.waoOVXN0.ttf +0 -0
- streamlit/static/static/media/KaTeX_Main-BoldItalic.DxDJ3AOS.woff2 +0 -0
- streamlit/static/static/media/KaTeX_Main-BoldItalic.DzxPMmG6.ttf +0 -0
- streamlit/static/static/media/KaTeX_Main-BoldItalic.SpSLRI95.woff +0 -0
- streamlit/static/static/media/KaTeX_Main-Italic.3WenGoN9.ttf +0 -0
- streamlit/static/static/media/KaTeX_Main-Italic.BMLOBm91.woff +0 -0
- streamlit/static/static/media/KaTeX_Main-Italic.NWA7e6Wa.woff2 +0 -0
- streamlit/static/static/media/KaTeX_Main-Regular.B22Nviop.woff2 +0 -0
- streamlit/static/static/media/KaTeX_Main-Regular.Dr94JaBh.woff +0 -0
- streamlit/static/static/media/KaTeX_Main-Regular.ypZvNtVU.ttf +0 -0
- streamlit/static/static/media/KaTeX_Math-BoldItalic.B3XSjfu4.ttf +0 -0
- streamlit/static/static/media/KaTeX_Math-BoldItalic.CZnvNsCZ.woff2 +0 -0
- streamlit/static/static/media/KaTeX_Math-BoldItalic.iY-2wyZ7.woff +0 -0
- streamlit/static/static/media/KaTeX_Math-Italic.DA0__PXp.woff +0 -0
- streamlit/static/static/media/KaTeX_Math-Italic.flOr_0UB.ttf +0 -0
- streamlit/static/static/media/KaTeX_Math-Italic.t53AETM-.woff2 +0 -0
- streamlit/static/static/media/KaTeX_SansSerif-Bold.CFMepnvq.ttf +0 -0
- streamlit/static/static/media/KaTeX_SansSerif-Bold.D1sUS0GD.woff2 +0 -0
- streamlit/static/static/media/KaTeX_SansSerif-Bold.DbIhKOiC.woff +0 -0
- streamlit/static/static/media/KaTeX_SansSerif-Italic.C3H0VqGB.woff2 +0 -0
- streamlit/static/static/media/KaTeX_SansSerif-Italic.DN2j7dab.woff +0 -0
- streamlit/static/static/media/KaTeX_SansSerif-Italic.YYjJ1zSn.ttf +0 -0
- streamlit/static/static/media/KaTeX_SansSerif-Regular.BNo7hRIc.ttf +0 -0
- streamlit/static/static/media/KaTeX_SansSerif-Regular.CS6fqUqJ.woff +0 -0
- streamlit/static/static/media/KaTeX_SansSerif-Regular.DDBCnlJ7.woff2 +0 -0
- streamlit/static/static/media/KaTeX_Script-Regular.C5JkGWo-.ttf +0 -0
- streamlit/static/static/media/KaTeX_Script-Regular.D3wIWfF6.woff2 +0 -0
- streamlit/static/static/media/KaTeX_Script-Regular.D5yQViql.woff +0 -0
- streamlit/static/static/media/KaTeX_Size1-Regular.C195tn64.woff +0 -0
- streamlit/static/static/media/KaTeX_Size1-Regular.Dbsnue_I.ttf +0 -0
- streamlit/static/static/media/KaTeX_Size1-Regular.mCD8mA8B.woff2 +0 -0
- streamlit/static/static/media/KaTeX_Size2-Regular.B7gKUWhC.ttf +0 -0
- streamlit/static/static/media/KaTeX_Size2-Regular.Dy4dx90m.woff2 +0 -0
- streamlit/static/static/media/KaTeX_Size2-Regular.oD1tc_U0.woff +0 -0
- streamlit/static/static/media/KaTeX_Size3-Regular.CTq5MqoE.woff +0 -0
- streamlit/static/static/media/KaTeX_Size3-Regular.DgpXs0kz.ttf +0 -0
- streamlit/static/static/media/KaTeX_Size4-Regular.BF-4gkZK.woff +0 -0
- streamlit/static/static/media/KaTeX_Size4-Regular.DWFBv043.ttf +0 -0
- streamlit/static/static/media/KaTeX_Size4-Regular.Dl5lxZxV.woff2 +0 -0
- streamlit/static/static/media/KaTeX_Typewriter-Regular.C0xS9mPB.woff +0 -0
- streamlit/static/static/media/KaTeX_Typewriter-Regular.CO6r4hn1.woff2 +0 -0
- streamlit/static/static/media/KaTeX_Typewriter-Regular.D3Ib7_Hf.ttf +0 -0
- streamlit/static/static/media/MaterialSymbols-Rounded.DcZbplWk.woff2 +0 -0
- streamlit/static/static/media/SourceCodePro-Bold.CFEfr7-q.woff2 +0 -0
- streamlit/static/static/media/SourceCodePro-BoldItalic.C-LkFXxa.woff2 +0 -0
- streamlit/static/static/media/SourceCodePro-Italic.CxFOx7N-.woff2 +0 -0
- streamlit/static/static/media/SourceCodePro-Regular.CBOlD63d.woff2 +0 -0
- streamlit/static/static/media/SourceCodePro-SemiBold.CFHwW3Wd.woff2 +0 -0
- streamlit/static/static/media/SourceCodePro-SemiBoldItalic.Cg2yRu82.woff2 +0 -0
- streamlit/static/static/media/SourceSansPro-Bold.-6c9oR8J.woff2 +0 -0
- streamlit/static/static/media/SourceSansPro-BoldItalic.DmM_grLY.woff2 +0 -0
- streamlit/static/static/media/SourceSansPro-Italic.I1ipWe7Q.woff2 +0 -0
- streamlit/static/static/media/SourceSansPro-Regular.DZLUzqI4.woff2 +0 -0
- streamlit/static/static/media/SourceSansPro-SemiBold.sKQIyTMz.woff2 +0 -0
- streamlit/static/static/media/SourceSansPro-SemiBoldItalic.C0wP0icr.woff2 +0 -0
- streamlit/static/static/media/SourceSerifPro-Bold.8TUnKj4x.woff2 +0 -0
- streamlit/static/static/media/SourceSerifPro-BoldItalic.CBVO7Ve7.woff2 +0 -0
- streamlit/static/static/media/SourceSerifPro-Italic.DkFgL2HZ.woff2 +0 -0
- streamlit/static/static/media/SourceSerifPro-Regular.CNJNET2S.woff2 +0 -0
- streamlit/static/static/media/SourceSerifPro-SemiBold.CHyh9GC5.woff2 +0 -0
- streamlit/static/static/media/SourceSerifPro-SemiBoldItalic.CBtz8sWN.woff2 +0 -0
- streamlit/static/static/media/balloon-0.Czj7AKwE.png +0 -0
- streamlit/static/static/media/balloon-1.CNvFFrND.png +0 -0
- streamlit/static/static/media/balloon-2.DTvC6B1t.png +0 -0
- streamlit/static/static/media/balloon-3.CgSk4tbL.png +0 -0
- streamlit/static/static/media/balloon-4.mbtFrzxf.png +0 -0
- streamlit/static/static/media/balloon-5.CSwkUfRA.png +0 -0
- streamlit/static/static/media/fireworks.B4d-_KUe.gif +0 -0
- streamlit/static/static/media/flake-0.DgWaVvm5.png +0 -0
- streamlit/static/static/media/flake-1.B2r5AHMK.png +0 -0
- streamlit/static/static/media/flake-2.BnWSExPC.png +0 -0
- streamlit/static/static/media/snowflake.JU2jBHL8.svg +11 -0
- streamlit/string_util.py +203 -0
- streamlit/temporary_directory.py +56 -0
- streamlit/testing/__init__.py +13 -0
- streamlit/testing/v1/__init__.py +17 -0
- streamlit/testing/v1/app_test.py +1050 -0
- streamlit/testing/v1/element_tree.py +2083 -0
- streamlit/testing/v1/local_script_runner.py +180 -0
- streamlit/testing/v1/util.py +53 -0
- streamlit/time_util.py +75 -0
- streamlit/type_util.py +460 -0
- streamlit/url_util.py +122 -0
- streamlit/user_info.py +519 -0
- streamlit/util.py +72 -0
- streamlit/vendor/__init__.py +0 -0
- streamlit/vendor/pympler/__init__.py +0 -0
- streamlit/vendor/pympler/asizeof.py +2869 -0
- streamlit/version.py +18 -0
- streamlit/watcher/__init__.py +28 -0
- streamlit/watcher/event_based_path_watcher.py +406 -0
- streamlit/watcher/folder_black_list.py +82 -0
- streamlit/watcher/local_sources_watcher.py +233 -0
- streamlit/watcher/path_watcher.py +185 -0
- streamlit/watcher/polling_path_watcher.py +124 -0
- streamlit/watcher/util.py +207 -0
- streamlit/web/__init__.py +13 -0
- streamlit/web/bootstrap.py +353 -0
- streamlit/web/cache_storage_manager_config.py +38 -0
- streamlit/web/cli.py +369 -0
- streamlit/web/server/__init__.py +26 -0
- streamlit/web/server/app_static_file_handler.py +93 -0
- streamlit/web/server/authlib_tornado_integration.py +60 -0
- streamlit/web/server/browser_websocket_handler.py +246 -0
- streamlit/web/server/component_request_handler.py +116 -0
- streamlit/web/server/media_file_handler.py +141 -0
- streamlit/web/server/oauth_authlib_routes.py +176 -0
- streamlit/web/server/oidc_mixin.py +108 -0
- streamlit/web/server/routes.py +295 -0
- streamlit/web/server/server.py +479 -0
- streamlit/web/server/server_util.py +161 -0
- streamlit/web/server/stats_request_handler.py +95 -0
- streamlit/web/server/upload_file_request_handler.py +137 -0
- streamlit/web/server/websocket_headers.py +56 -0
- streamlit_nightly-1.43.2.dev20250307.data/scripts/streamlit.cmd +16 -0
- streamlit_nightly-1.43.2.dev20250307.dist-info/METADATA +207 -0
- streamlit_nightly-1.43.2.dev20250307.dist-info/RECORD +563 -0
- streamlit_nightly-1.43.2.dev20250307.dist-info/WHEEL +5 -0
- streamlit_nightly-1.43.2.dev20250307.dist-info/entry_points.txt +2 -0
- streamlit_nightly-1.43.2.dev20250307.dist-info/top_level.txt +1 -0
@@ -0,0 +1,574 @@
|
|
1
|
+
# Copyright (c) Streamlit Inc. (2018-2022) Snowflake Inc. (2022-2025)
|
2
|
+
#
|
3
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
4
|
+
# you may not use this file except in compliance with the License.
|
5
|
+
# You may obtain a copy of the License at
|
6
|
+
#
|
7
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
8
|
+
#
|
9
|
+
# Unless required by applicable law or agreed to in writing, software
|
10
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
11
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
12
|
+
# See the License for the specific language governing permissions and
|
13
|
+
# limitations under the License.
|
14
|
+
|
15
|
+
from __future__ import annotations
|
16
|
+
|
17
|
+
import dataclasses
|
18
|
+
import inspect
|
19
|
+
import types
|
20
|
+
from collections import ChainMap, UserDict, UserList
|
21
|
+
from collections.abc import (
|
22
|
+
AsyncGenerator,
|
23
|
+
Generator,
|
24
|
+
ItemsView,
|
25
|
+
Iterable,
|
26
|
+
KeysView,
|
27
|
+
ValuesView,
|
28
|
+
)
|
29
|
+
from io import StringIO
|
30
|
+
from typing import (
|
31
|
+
TYPE_CHECKING,
|
32
|
+
Any,
|
33
|
+
Callable,
|
34
|
+
Final,
|
35
|
+
cast,
|
36
|
+
)
|
37
|
+
|
38
|
+
from streamlit import dataframe_util, type_util
|
39
|
+
from streamlit.errors import StreamlitAPIException
|
40
|
+
from streamlit.logger import get_logger
|
41
|
+
from streamlit.runtime.metrics_util import gather_metrics
|
42
|
+
from streamlit.string_util import (
|
43
|
+
is_mem_address_str,
|
44
|
+
max_char_sequence,
|
45
|
+
)
|
46
|
+
|
47
|
+
if TYPE_CHECKING:
|
48
|
+
from streamlit.delta_generator import DeltaGenerator
|
49
|
+
|
50
|
+
# Special methods:
|
51
|
+
HELP_TYPES: Final[tuple[type[Any], ...]] = (
|
52
|
+
types.BuiltinFunctionType,
|
53
|
+
types.BuiltinMethodType,
|
54
|
+
types.FunctionType,
|
55
|
+
types.MethodType,
|
56
|
+
types.ModuleType,
|
57
|
+
)
|
58
|
+
|
59
|
+
_LOGGER: Final = get_logger(__name__)
|
60
|
+
|
61
|
+
_TEXT_CURSOR: Final = " ▏"
|
62
|
+
|
63
|
+
|
64
|
+
class StreamingOutput(list[Any]):
|
65
|
+
pass
|
66
|
+
|
67
|
+
|
68
|
+
class WriteMixin:
|
69
|
+
@gather_metrics("write_stream")
|
70
|
+
def write_stream(
|
71
|
+
self,
|
72
|
+
stream: Callable[..., Any]
|
73
|
+
| Generator[Any, Any, Any]
|
74
|
+
| Iterable[Any]
|
75
|
+
| AsyncGenerator[Any, Any],
|
76
|
+
) -> list[Any] | str:
|
77
|
+
"""Stream a generator, iterable, or stream-like sequence to the app.
|
78
|
+
|
79
|
+
``st.write_stream`` iterates through the given sequences and writes all
|
80
|
+
chunks to the app. String chunks will be written using a typewriter effect.
|
81
|
+
Other data types will be written using ``st.write``.
|
82
|
+
|
83
|
+
Parameters
|
84
|
+
----------
|
85
|
+
stream : Callable, Generator, Iterable, OpenAI Stream, or LangChain Stream
|
86
|
+
The generator or iterable to stream.
|
87
|
+
|
88
|
+
If you pass an async generator, Streamlit will internally convert
|
89
|
+
it to a sync generator.
|
90
|
+
|
91
|
+
.. note::
|
92
|
+
To use additional LLM libraries, you can create a wrapper to
|
93
|
+
manually define a generator function and include custom output
|
94
|
+
parsing.
|
95
|
+
|
96
|
+
Returns
|
97
|
+
-------
|
98
|
+
str or list
|
99
|
+
The full response. If the streamed output only contains text, this
|
100
|
+
is a string. Otherwise, this is a list of all the streamed objects.
|
101
|
+
The return value is fully compatible as input for ``st.write``.
|
102
|
+
|
103
|
+
Example
|
104
|
+
-------
|
105
|
+
You can pass an OpenAI stream as shown in our tutorial, `Build a \
|
106
|
+
basic LLM chat app <https://docs.streamlit.io/develop/tutorials/llms\
|
107
|
+
/build-conversational-apps#build-a-chatgpt-like-app>`_. Alternatively,
|
108
|
+
you can pass a generic generator function as input:
|
109
|
+
|
110
|
+
>>> import time
|
111
|
+
>>> import numpy as np
|
112
|
+
>>> import pandas as pd
|
113
|
+
>>> import streamlit as st
|
114
|
+
>>>
|
115
|
+
>>> _LOREM_IPSUM = \"\"\"
|
116
|
+
>>> Lorem ipsum dolor sit amet, **consectetur adipiscing** elit, sed do eiusmod tempor
|
117
|
+
>>> incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis
|
118
|
+
>>> nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.
|
119
|
+
>>> \"\"\"
|
120
|
+
>>>
|
121
|
+
>>>
|
122
|
+
>>> def stream_data():
|
123
|
+
>>> for word in _LOREM_IPSUM.split(" "):
|
124
|
+
>>> yield word + " "
|
125
|
+
>>> time.sleep(0.02)
|
126
|
+
>>>
|
127
|
+
>>> yield pd.DataFrame(
|
128
|
+
>>> np.random.randn(5, 10),
|
129
|
+
>>> columns=["a", "b", "c", "d", "e", "f", "g", "h", "i", "j"],
|
130
|
+
>>> )
|
131
|
+
>>>
|
132
|
+
>>> for word in _LOREM_IPSUM.split(" "):
|
133
|
+
>>> yield word + " "
|
134
|
+
>>> time.sleep(0.02)
|
135
|
+
>>>
|
136
|
+
>>>
|
137
|
+
>>> if st.button("Stream data"):
|
138
|
+
>>> st.write_stream(stream_data)
|
139
|
+
|
140
|
+
.. output::
|
141
|
+
https://doc-write-stream-data.streamlit.app/
|
142
|
+
height: 550px
|
143
|
+
|
144
|
+
"""
|
145
|
+
|
146
|
+
# Just apply some basic checks for common iterable types that should
|
147
|
+
# not be passed in here.
|
148
|
+
if isinstance(stream, str) or dataframe_util.is_dataframe_like(stream):
|
149
|
+
raise StreamlitAPIException(
|
150
|
+
"`st.write_stream` expects a generator or stream-like object as input "
|
151
|
+
f"not {type(stream)}. Please use `st.write` instead for "
|
152
|
+
"this data type."
|
153
|
+
)
|
154
|
+
|
155
|
+
stream_container: DeltaGenerator | None = None
|
156
|
+
streamed_response: str = ""
|
157
|
+
written_content: list[Any] = StreamingOutput()
|
158
|
+
|
159
|
+
def flush_stream_response():
|
160
|
+
"""Write the full response to the app."""
|
161
|
+
nonlocal streamed_response
|
162
|
+
nonlocal stream_container
|
163
|
+
|
164
|
+
if streamed_response and stream_container:
|
165
|
+
# Replace the stream_container element the full response
|
166
|
+
stream_container.markdown(streamed_response)
|
167
|
+
written_content.append(streamed_response)
|
168
|
+
stream_container = None
|
169
|
+
streamed_response = ""
|
170
|
+
|
171
|
+
# Make sure we have a generator and not just a generator function.
|
172
|
+
if inspect.isgeneratorfunction(stream) or inspect.isasyncgenfunction(stream):
|
173
|
+
stream = stream()
|
174
|
+
|
175
|
+
# If the stream is an async generator, convert it to a sync generator:
|
176
|
+
if inspect.isasyncgen(stream):
|
177
|
+
stream = type_util.async_generator_to_sync(stream)
|
178
|
+
|
179
|
+
try:
|
180
|
+
iter(stream) # type: ignore
|
181
|
+
except TypeError as exc:
|
182
|
+
raise StreamlitAPIException(
|
183
|
+
f"The provided input (type: {type(stream)}) cannot be iterated. "
|
184
|
+
"Please make sure that it is a generator, generator function or iterable."
|
185
|
+
) from exc
|
186
|
+
|
187
|
+
# Iterate through the generator and write each chunk to the app
|
188
|
+
# with a type writer effect.
|
189
|
+
for chunk in stream: # type: ignore
|
190
|
+
if type_util.is_openai_chunk(chunk):
|
191
|
+
# Try to convert OpenAI chat completion chunk to a string:
|
192
|
+
try:
|
193
|
+
if len(chunk.choices) == 0 or chunk.choices[0].delta is None:
|
194
|
+
# The choices list can be empty. E.g. when using the
|
195
|
+
# AzureOpenAI client, the first chunk will always be empty.
|
196
|
+
chunk = ""
|
197
|
+
else:
|
198
|
+
chunk = chunk.choices[0].delta.content or ""
|
199
|
+
except AttributeError as err:
|
200
|
+
raise StreamlitAPIException(
|
201
|
+
"Failed to parse the OpenAI ChatCompletionChunk. "
|
202
|
+
"The most likely cause is a change of the chunk object structure "
|
203
|
+
"due to a recent OpenAI update. You might be able to fix this "
|
204
|
+
"by downgrading the OpenAI library or upgrading Streamlit. Also, "
|
205
|
+
"please report this issue to: https://github.com/streamlit/streamlit/issues."
|
206
|
+
) from err
|
207
|
+
|
208
|
+
if type_util.is_type(chunk, "langchain_core.messages.ai.AIMessageChunk"):
|
209
|
+
# Try to convert LangChain message chunk to a string:
|
210
|
+
try:
|
211
|
+
chunk = chunk.content or ""
|
212
|
+
except AttributeError as err:
|
213
|
+
raise StreamlitAPIException(
|
214
|
+
"Failed to parse the LangChain AIMessageChunk. "
|
215
|
+
"The most likely cause is a change of the chunk object structure "
|
216
|
+
"due to a recent LangChain update. You might be able to fix this "
|
217
|
+
"by downgrading the OpenAI library or upgrading Streamlit. Also, "
|
218
|
+
"please report this issue to: https://github.com/streamlit/streamlit/issues."
|
219
|
+
) from err
|
220
|
+
|
221
|
+
if isinstance(chunk, str):
|
222
|
+
if not chunk:
|
223
|
+
# Empty strings can be ignored
|
224
|
+
continue
|
225
|
+
|
226
|
+
first_text = False
|
227
|
+
if not stream_container:
|
228
|
+
stream_container = self.dg.empty()
|
229
|
+
first_text = True
|
230
|
+
streamed_response += chunk
|
231
|
+
# Only add the streaming symbol on the second text chunk
|
232
|
+
stream_container.markdown(
|
233
|
+
streamed_response + ("" if first_text else _TEXT_CURSOR),
|
234
|
+
)
|
235
|
+
elif callable(chunk):
|
236
|
+
flush_stream_response()
|
237
|
+
chunk()
|
238
|
+
else:
|
239
|
+
flush_stream_response()
|
240
|
+
self.write(chunk)
|
241
|
+
written_content.append(chunk)
|
242
|
+
|
243
|
+
flush_stream_response()
|
244
|
+
|
245
|
+
if not written_content:
|
246
|
+
# If nothing was streamed, return an empty string.
|
247
|
+
return ""
|
248
|
+
elif len(written_content) == 1 and isinstance(written_content[0], str):
|
249
|
+
# If the output only contains a single string, return it as a string
|
250
|
+
return written_content[0]
|
251
|
+
|
252
|
+
# Otherwise return it as a list of write-compatible objects
|
253
|
+
return written_content
|
254
|
+
|
255
|
+
@gather_metrics("write")
|
256
|
+
def write(self, *args: Any, unsafe_allow_html: bool = False, **kwargs) -> None:
|
257
|
+
"""Displays arguments in the app.
|
258
|
+
|
259
|
+
This is the Swiss Army knife of Streamlit commands: it does different
|
260
|
+
things depending on what you throw at it. Unlike other Streamlit
|
261
|
+
commands, ``st.write()`` has some unique properties:
|
262
|
+
|
263
|
+
- You can pass in multiple arguments, all of which will be displayed.
|
264
|
+
- Its behavior depends on the input type(s).
|
265
|
+
|
266
|
+
Parameters
|
267
|
+
----------
|
268
|
+
*args : any
|
269
|
+
One or many objects to display in the app.
|
270
|
+
|
271
|
+
.. list-table:: Each type of argument is handled as follows:
|
272
|
+
:header-rows: 1
|
273
|
+
|
274
|
+
* - Type
|
275
|
+
- Handling
|
276
|
+
* - ``str``
|
277
|
+
- Uses ``st.markdown()``.
|
278
|
+
* - dataframe-like, ``dict``, or ``list``
|
279
|
+
- Uses ``st.dataframe()``.
|
280
|
+
* - ``Exception``
|
281
|
+
- Uses ``st.exception()``.
|
282
|
+
* - function, module, or class
|
283
|
+
- Uses ``st.help()``.
|
284
|
+
* - ``DeltaGenerator``
|
285
|
+
- Uses ``st.help()``.
|
286
|
+
* - Altair chart
|
287
|
+
- Uses ``st.altair_chart()``.
|
288
|
+
* - Bokeh figure
|
289
|
+
- Uses ``st.bokeh_chart()``.
|
290
|
+
* - Graphviz graph
|
291
|
+
- Uses ``st.graphviz_chart()``.
|
292
|
+
* - Keras model
|
293
|
+
- Converts model and uses ``st.graphviz_chart()``.
|
294
|
+
* - Matplotlib figure
|
295
|
+
- Uses ``st.pyplot()``.
|
296
|
+
* - Plotly figure
|
297
|
+
- Uses ``st.plotly_chart()``.
|
298
|
+
* - ``PIL.Image``
|
299
|
+
- Uses ``st.image()``.
|
300
|
+
* - generator or stream (like ``openai.Stream``)
|
301
|
+
- Uses ``st.write_stream()``.
|
302
|
+
* - SymPy expression
|
303
|
+
- Uses ``st.latex()``.
|
304
|
+
* - An object with ``._repr_html()``
|
305
|
+
- Uses ``st.html()``.
|
306
|
+
* - Database cursor
|
307
|
+
- Displays DB API 2.0 cursor results in a table.
|
308
|
+
* - Any
|
309
|
+
- Displays ``str(arg)`` as inline code.
|
310
|
+
|
311
|
+
unsafe_allow_html : bool
|
312
|
+
Whether to render HTML within ``*args``. This only applies to
|
313
|
+
strings or objects falling back on ``_repr_html_()``. If this is
|
314
|
+
``False`` (default), any HTML tags found in ``body`` will be
|
315
|
+
escaped and therefore treated as raw text. If this is ``True``, any
|
316
|
+
HTML expressions within ``body`` will be rendered.
|
317
|
+
|
318
|
+
Adding custom HTML to your app impacts safety, styling, and
|
319
|
+
maintainability.
|
320
|
+
|
321
|
+
.. note::
|
322
|
+
If you only want to insert HTML or CSS without Markdown text,
|
323
|
+
we recommend using ``st.html`` instead.
|
324
|
+
|
325
|
+
**kwargs : any
|
326
|
+
Keyword arguments. Not used.
|
327
|
+
|
328
|
+
.. deprecated::
|
329
|
+
``**kwargs`` is deprecated and will be removed in a later version.
|
330
|
+
Use other, more specific Streamlit commands to pass additional
|
331
|
+
keyword arguments.
|
332
|
+
|
333
|
+
Returns
|
334
|
+
-------
|
335
|
+
None
|
336
|
+
|
337
|
+
Examples
|
338
|
+
--------
|
339
|
+
|
340
|
+
Its basic use case is to draw Markdown-formatted text, whenever the
|
341
|
+
input is a string:
|
342
|
+
|
343
|
+
>>> import streamlit as st
|
344
|
+
>>>
|
345
|
+
>>> st.write("Hello, *World!* :sunglasses:")
|
346
|
+
|
347
|
+
.. output::
|
348
|
+
https://doc-write1.streamlit.app/
|
349
|
+
height: 150px
|
350
|
+
|
351
|
+
As mentioned earlier, ``st.write()`` also accepts other data formats, such as
|
352
|
+
numbers, data frames, styled data frames, and assorted objects:
|
353
|
+
|
354
|
+
>>> import streamlit as st
|
355
|
+
>>> import pandas as pd
|
356
|
+
>>>
|
357
|
+
>>> st.write(1234)
|
358
|
+
>>> st.write(
|
359
|
+
... pd.DataFrame(
|
360
|
+
... {
|
361
|
+
... "first column": [1, 2, 3, 4],
|
362
|
+
... "second column": [10, 20, 30, 40],
|
363
|
+
... }
|
364
|
+
... )
|
365
|
+
... )
|
366
|
+
|
367
|
+
.. output::
|
368
|
+
https://doc-write2.streamlit.app/
|
369
|
+
height: 350px
|
370
|
+
|
371
|
+
Finally, you can pass in multiple arguments to do things like:
|
372
|
+
|
373
|
+
>>> import streamlit as st
|
374
|
+
>>>
|
375
|
+
>>> st.write("1 + 1 = ", 2)
|
376
|
+
>>> st.write("Below is a DataFrame:", data_frame, "Above is a dataframe.")
|
377
|
+
|
378
|
+
.. output::
|
379
|
+
https://doc-write3.streamlit.app/
|
380
|
+
height: 410px
|
381
|
+
|
382
|
+
Oh, one more thing: ``st.write`` accepts chart objects too! For example:
|
383
|
+
|
384
|
+
>>> import streamlit as st
|
385
|
+
>>> import pandas as pd
|
386
|
+
>>> import numpy as np
|
387
|
+
>>> import altair as alt
|
388
|
+
>>>
|
389
|
+
>>> df = pd.DataFrame(np.random.randn(200, 3), columns=["a", "b", "c"])
|
390
|
+
>>> c = (
|
391
|
+
... alt.Chart(df)
|
392
|
+
... .mark_circle()
|
393
|
+
... .encode(x="a", y="b", size="c", color="c", tooltip=["a", "b", "c"])
|
394
|
+
... )
|
395
|
+
>>>
|
396
|
+
>>> st.write(c)
|
397
|
+
|
398
|
+
.. output::
|
399
|
+
https://doc-vega-lite-chart.streamlit.app/
|
400
|
+
height: 300px
|
401
|
+
|
402
|
+
"""
|
403
|
+
if kwargs:
|
404
|
+
_LOGGER.warning(
|
405
|
+
'Invalid arguments were passed to "st.write" function. Support for '
|
406
|
+
"passing such unknown keywords arguments will be dropped in future. "
|
407
|
+
"Invalid arguments were: %s",
|
408
|
+
kwargs,
|
409
|
+
)
|
410
|
+
|
411
|
+
string_buffer: list[str] = []
|
412
|
+
|
413
|
+
# This bans some valid cases like: e = st.empty(); e.write("a", "b").
|
414
|
+
# BUT: 1) such cases are rare, 2) this rule is easy to understand,
|
415
|
+
# and 3) this rule should be removed once we have st.container()
|
416
|
+
if not self.dg._is_top_level and len(args) > 1:
|
417
|
+
raise StreamlitAPIException(
|
418
|
+
"Cannot replace a single element with multiple elements.\n\n"
|
419
|
+
"The `write()` method only supports multiple elements when "
|
420
|
+
"inserting elements rather than replacing. That is, only "
|
421
|
+
"when called as `st.write()` or `st.sidebar.write()`."
|
422
|
+
)
|
423
|
+
|
424
|
+
def flush_buffer():
|
425
|
+
if string_buffer:
|
426
|
+
text_content = " ".join(string_buffer)
|
427
|
+
# The usage of empty here prevents
|
428
|
+
# some grey out effects:
|
429
|
+
text_container = self.dg.empty()
|
430
|
+
text_container.markdown(
|
431
|
+
text_content,
|
432
|
+
unsafe_allow_html=unsafe_allow_html,
|
433
|
+
)
|
434
|
+
string_buffer[:] = []
|
435
|
+
|
436
|
+
for arg in args:
|
437
|
+
# Order matters!
|
438
|
+
if isinstance(arg, str):
|
439
|
+
string_buffer.append(arg)
|
440
|
+
elif isinstance(arg, StreamingOutput):
|
441
|
+
flush_buffer()
|
442
|
+
for item in arg:
|
443
|
+
if callable(item):
|
444
|
+
flush_buffer()
|
445
|
+
item()
|
446
|
+
else:
|
447
|
+
self.write(item, unsafe_allow_html=unsafe_allow_html)
|
448
|
+
elif isinstance(arg, Exception):
|
449
|
+
flush_buffer()
|
450
|
+
self.dg.exception(arg)
|
451
|
+
elif type_util.is_delta_generator(arg):
|
452
|
+
flush_buffer()
|
453
|
+
self.dg.help(arg)
|
454
|
+
elif dataframe_util.is_dataframe_like(arg):
|
455
|
+
flush_buffer()
|
456
|
+
self.dg.dataframe(arg)
|
457
|
+
elif type_util.is_altair_chart(arg):
|
458
|
+
flush_buffer()
|
459
|
+
self.dg.altair_chart(arg)
|
460
|
+
elif type_util.is_type(arg, "matplotlib.figure.Figure"):
|
461
|
+
flush_buffer()
|
462
|
+
self.dg.pyplot(arg)
|
463
|
+
elif type_util.is_plotly_chart(arg):
|
464
|
+
flush_buffer()
|
465
|
+
self.dg.plotly_chart(arg)
|
466
|
+
elif type_util.is_type(arg, "bokeh.plotting.figure.Figure"):
|
467
|
+
flush_buffer()
|
468
|
+
self.dg.bokeh_chart(arg)
|
469
|
+
elif type_util.is_graphviz_chart(arg):
|
470
|
+
flush_buffer()
|
471
|
+
self.dg.graphviz_chart(arg)
|
472
|
+
elif type_util.is_sympy_expression(arg):
|
473
|
+
flush_buffer()
|
474
|
+
self.dg.latex(arg)
|
475
|
+
elif type_util.is_pillow_image(arg):
|
476
|
+
flush_buffer()
|
477
|
+
self.dg.image(arg)
|
478
|
+
elif type_util.is_keras_model(arg):
|
479
|
+
from tensorflow.python.keras.utils import vis_utils
|
480
|
+
|
481
|
+
flush_buffer()
|
482
|
+
dot = vis_utils.model_to_dot(arg)
|
483
|
+
self.dg.graphviz_chart(dot.to_string())
|
484
|
+
elif (
|
485
|
+
isinstance(
|
486
|
+
arg,
|
487
|
+
(
|
488
|
+
dict,
|
489
|
+
list,
|
490
|
+
map,
|
491
|
+
enumerate,
|
492
|
+
types.MappingProxyType,
|
493
|
+
UserDict,
|
494
|
+
ChainMap,
|
495
|
+
UserList,
|
496
|
+
ItemsView,
|
497
|
+
KeysView,
|
498
|
+
ValuesView,
|
499
|
+
),
|
500
|
+
)
|
501
|
+
or type_util.is_custom_dict(arg)
|
502
|
+
or type_util.is_namedtuple(arg)
|
503
|
+
or type_util.is_pydantic_model(arg)
|
504
|
+
):
|
505
|
+
flush_buffer()
|
506
|
+
self.dg.json(arg)
|
507
|
+
elif type_util.is_pydeck(arg):
|
508
|
+
flush_buffer()
|
509
|
+
self.dg.pydeck_chart(arg)
|
510
|
+
elif isinstance(arg, StringIO):
|
511
|
+
flush_buffer()
|
512
|
+
self.dg.markdown(arg.getvalue())
|
513
|
+
elif (
|
514
|
+
inspect.isgenerator(arg)
|
515
|
+
or inspect.isgeneratorfunction(arg)
|
516
|
+
or inspect.isasyncgenfunction(arg)
|
517
|
+
or inspect.isasyncgen(arg)
|
518
|
+
or type_util.is_type(arg, "openai.Stream")
|
519
|
+
):
|
520
|
+
flush_buffer()
|
521
|
+
self.write_stream(arg)
|
522
|
+
elif isinstance(arg, HELP_TYPES):
|
523
|
+
flush_buffer()
|
524
|
+
self.dg.help(arg)
|
525
|
+
elif dataclasses.is_dataclass(arg):
|
526
|
+
flush_buffer()
|
527
|
+
self.dg.help(arg)
|
528
|
+
elif inspect.isclass(arg):
|
529
|
+
flush_buffer()
|
530
|
+
# We cast arg to type here to appease mypy, due to bug in mypy:
|
531
|
+
# https://github.com/python/mypy/issues/12933
|
532
|
+
self.dg.help(cast(type, arg))
|
533
|
+
elif unsafe_allow_html and type_util.has_callable_attr(arg, "_repr_html_"):
|
534
|
+
self.dg.html(arg._repr_html_())
|
535
|
+
elif type_util.has_callable_attr(
|
536
|
+
arg, "to_pandas"
|
537
|
+
) or type_util.has_callable_attr(arg, "__dataframe__"):
|
538
|
+
# This object can very likely be converted to a DataFrame
|
539
|
+
# using the to_pandas, to_arrow, or the dataframe interchange
|
540
|
+
# protocol.
|
541
|
+
flush_buffer()
|
542
|
+
self.dg.dataframe(arg)
|
543
|
+
else:
|
544
|
+
stringified_arg = str(arg)
|
545
|
+
|
546
|
+
if is_mem_address_str(stringified_arg):
|
547
|
+
flush_buffer()
|
548
|
+
self.dg.help(arg)
|
549
|
+
|
550
|
+
elif "\n" in stringified_arg:
|
551
|
+
# With a multi-line string, use a preformatted block
|
552
|
+
# To fully escape backticks, we wrap with backticks larger than
|
553
|
+
# the largest sequence of backticks in the string.
|
554
|
+
backtick_count = max(3, max_char_sequence(stringified_arg, "`") + 1)
|
555
|
+
backtick_wrapper = "`" * backtick_count
|
556
|
+
string_buffer.append(
|
557
|
+
f"{backtick_wrapper}\n{stringified_arg}\n{backtick_wrapper}"
|
558
|
+
)
|
559
|
+
else:
|
560
|
+
# With a single-line string, use a preformatted text
|
561
|
+
# To fully escape backticks, we wrap with backticks larger than
|
562
|
+
# the largest sequence of backticks in the string.
|
563
|
+
backtick_count = max_char_sequence(stringified_arg, "`") + 1
|
564
|
+
backtick_wrapper = "`" * backtick_count
|
565
|
+
string_buffer.append(
|
566
|
+
f"{backtick_wrapper}{stringified_arg}{backtick_wrapper}"
|
567
|
+
)
|
568
|
+
|
569
|
+
flush_buffer()
|
570
|
+
|
571
|
+
@property
|
572
|
+
def dg(self) -> DeltaGenerator:
|
573
|
+
"""Get our DeltaGenerator."""
|
574
|
+
return cast("DeltaGenerator", self)
|