Passa al contenuto principale

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​

  1. Aggiungi un entry point nel gruppo afe.plugins al 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"
  2. Implementa il plugin. describe restituisce un PluginDescriptor, e resolve restituisce l'implementazione per una porta e un nome.

    from afe_sdk.plugin import PLUGIN_API, PluginDescriptor, PortSpec

    class 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.

Vedi anche​