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>', **variables)
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], variables={'my_variable': 'hello'})
Once bundled as an Application
, the components inside may be managed together.
For example, all components in the application may be removed in one shot:
db.remove(component='Application', identifier='my-app', recursive=True)
Using variables inside a Component
​
If a Component
has the variables
parameter, then these variables
may be referred to by any sub-Component
. (For example in Application
.)
app.export('<path_to_export>')
Load the template and reuse:
app = Component.read('<path_to_export>', my_variable='goodbye')
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('.')