ServeStreamlit

class lightning.app.components.serve.streamlit.ServeStreamlit(*args, **kwargs)[source]

Bases: LightningWork, ABC

The ServeStreamlit work allows you to use streamlit from a work.

You can optionally build a model in the build_model hook, which will only be called once per session.

LightningWork, or Work in short, is a building block for long-running jobs.

The LightningApp runs its LightningFlow component within an infinite loop and track the LightningWork status update.

Use LightningWork for third-party services or for launching heavy jobs such as downloading data, training or serving a model.

Each LightningWork is running in its own independent process. Works are self-isolated from the rest, e.g any state changes happening within the work will be reflected within the flow but not the other way around.

Parameters
  • parallel – Whether to run in parallel mode or not. When False, the flow waits for the work to finish.

  • cache_calls – Whether the run method should cache its input arguments and not run again when provided with the same arguments in subsequent calls.

  • raise_exception – Whether to re-raise an exception in the flow when raised from within the work run method.

  • host – Bind socket to this host

  • port – Bind socket to this port. Be default, this is None and should be called within your run method.

  • local_build_config – The local BuildConfig isn’t used until Lightning supports DockerRuntime.

  • cloud_build_config – The cloud BuildConfig enables user to easily configure machine before running this work.

  • run_once – Deprecated in favor of cache_calls. This will be removed soon.

  • start_with_flow – Whether the work should be started at the same time as the root flow. Only applies to works defined in __init__.

Learn More About Lightning Work Inner Workings


build_model()[source]

Optionally override to instantiate and return your model.

The model will be accessible under self.model.

Return type

Any

configure_layout()[source]

Configure the UI of this LightningWork.

You can either :rtype: str

  1. Return a single Frontend object to serve a user interface for this Work.

  2. Return a string containing a URL to act as the user interface for this Work.

  3. Return None to indicate that this Work doesn’t currently have a user interface.

Example: Serve a static directory (with at least a file index.html inside).

from lightning.app.frontend import StaticWebFrontend


class Work(LightningWork):
    def configure_layout(self):
        return StaticWebFrontend("path/to/folder/to/serve")

Example: Arrange the UI of my children in tabs (default UI by Lightning).

class Work(LightningWork):
    def configure_layout(self):
        return [
            dict(name="First Tab", content=self.child0),
            dict(name="Second Tab", content=self.child1),
            dict(name="Lightning", content="https://lightning.ai"),
        ]

If you don’t implement configure_layout, Lightning will use self.url.

Note

This hook gets called at the time of app creation and then again as part of the loop. If desired, a returned URL can depend on the state. This is not the case if the work returns a Frontend. These need to be provided at the time of app creation in order for the runtime to start the server.

on_exit()[source]

Override this hook to add your logic when the work is exiting.

Note: This hook is not guaranteed to be called when running in the cloud.

Return type

None

abstract render()[source]

Override with your streamlit render function.

Return type

None

run()[source]

Override to add your own logic.

Raises

LightningPlatformException – If resource exceeds platform quotas or other constraints.

Return type

None