Package
Exporting Component instances
Packaging Component instances for sharing, and using in other deployments and teams,
is straightforward, by means of the Superduper-protocol, which creates
a human-readable export, linked with large data-blobs.
Any component may be exported to disk with:
component.export('<path_to_export>')
The component may be reloaded, without any type of prior initialization, in another session or program:
from superduper import Component
component = Component.read('<path_to_export>')
The component may be then reused with db.apply.
Packaging multiple Component instances as an Application
Developers may want to ship several interconnected components, which may not have a single parent component.
To this end, Superduper includes the Application component, which may be used to bundle the components
together.
app = Application('my-app', components=[my_model, my_cdc, my_vector_index])
Once bundled as an Application, the components inside may be managed together.
For example, all components in the application may be shown:
db.show(application='my-app')
and all components may be removed in a single command:
db.remove('Application', 'my-app', recursive=True)
Creating Template instances from Component
In order to re-use Component instances with certain values replaced with new values,
for example, the location of data, Superduper provides an additional helper component: Template.
Create the template:
t = Template('my-template', substitutions={'my_value': 'my_variable'}, templte=app)
t.export('<path_to_export>')
Load the template and reuse:
t = Template.read('<path_to_export>')
app = t(my_variable='new_value')
db.apply(app)
Leveraging plugins to make development code portable
If developers would like to include locally developed code in their Component, Application and Template instances and implementations,
they can use the Plugin component.
from superduper import Plugin
plugin = Plugin('./my_local_file.py')
app = Application('my-app', components=[my_model, my_cdc, my_vector_index], upstream=[plugin])
db.apply(app) # plugin is applied first (since in `upstream`) and saved as a loadable artifact
app.export('.')