Plugin in processo
Obiettivo: aggiungere un plugin in processo che il motore scopre e risolve attraverso una porta.
Tutto ciò con cui il motore parla è un plugin: provider di modelli, store, sandbox, forge, tool. Il motore è un componente a sé. Non importa mai un plugin: lo scopre e gli parla attraverso una porta. Rimuovere un plugin non rompe mai la build del motore.
Prerequisiti
- Un pacchetto Python importabile dall'ambiente del motore.
Passi
-
Aggiungi un entry point nel gruppo
afe.pluginsal tuo pacchetto Python. Il motore scopre all'avvio ogni entry point installato, e registra le porte che il plugin dichiara.# pyproject.toml[project.entry-points."afe.plugins"]afe-models = "afe_plugins.models:PLUGIN" -
Implementa il plugin.
describerestituisce unPluginDescriptor, eresolverestituisce l'implementazione per una porta e un nome.from afe_sdk.plugin import PLUGIN_API, PluginDescriptor, PortSpecclass MyPlugin:def describe(self):return PluginDescriptor(name="my-plugin",api_version=PLUGIN_API,ports=[PortSpec(port="models", name="my-provider")],)def resolve(self, port, name):return MyProvider()PLUGIN = MyPlugin()
Note
apiVersion è la versione dei manifest (afe.dev/v1alpha1). Una major diversa viene rifiutata
con un errore chiaro, come due plugin sulla stessa (port, name).
Risoluzione dei problemi
plugin 'my-plugin' speaks afe.dev/v2alpha1, the engine speaks afe.dev/v1alpha1
describe ha restituito un api_version con una major diversa da quella del motore
(PLUGIN_API). Allinea la major version del tuo plugin a quella del motore su cui lo installi.
port models/my-provider is provided by both 'afe-models' and 'my-plugin'
Due plugin installati dichiarano la stessa (port, name). Rinomina la porta del tuo plugin,
oppure rimuovi l'altro plugin.
plugin 'my-plugin' has no 'describe' oppure has no 'resolve'
Alla classe assegnata a PLUGIN manca uno dei due metodi richiesti. Sia describe sia resolve
devono esistere sull'oggetto registrato all'entry point.