Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[FEATURE] AIVF Plugin Manager #275

Open
1 task done
timlrx opened this issue Mar 27, 2024 · 0 comments
Open
1 task done

[FEATURE] AIVF Plugin Manager #275

timlrx opened this issue Mar 27, 2024 · 0 comments
Labels
feature Should build this needs-triage Issues need triages by maintainer

Comments

@timlrx
Copy link
Collaborator

timlrx commented Mar 27, 2024

Is there an existing issue for this?

  • I have searched the existing issues

Description

Currently, it is difficult to installing and maintaining new plugins and their dependencies. One possible approach is to make the system more modular and rely on pip to manage dependencies.

Here's a design document that goes through the various approaches and their pros and cons, paying attention to:

  • User experience of installing plugins
  • Operations and maintenance of the system
  • Developer experience of new plugins

Current approach - custom plugin manager

Currently to install a plugin, 2 steps are required:

  1. Install the requirements associated with the plugin (e.g. requirements.txt for each stock plugin)
  2. Register the path of the plugin with the PluginManager so that it is able to execute the plugin as a Python script
    This is similar to the approach taken by more UI first applications e.g. automatic1111 since users can just drag and drop the extension to install it via the UI, though they also have a CLI to make installing and maintaining packages a little easier.

Pros:

  • Allows installation via a GUI (though this is not currently done by AIVF)
  • Allows modification of other aspects of AIVF system e.g. UI

Cons:

  • Installation issues especially those that are hardware dependent e.g. PyTorch
  • Duplicates the work of existing package managers (e.g. verification that the library exists), more maintenance work needed
  • Not straight forward to develop and build a plugin - requires a custom approach
  • Hard to specify cross-package dependencies

Alternative 1 - Manage dependencies through pip and venv

This is a common approach among Python based applications (e.g. flask). See https://packaging.python.org/en/latest/guides/creating-and-discovering-plugins/#using-naming-convention

Users can pick and choose which plugin to install via the package manager.

Pros:

  • Dependency resolution is handled natively via pip
  • Easy to create and distribute plugins
  • No need for a custom plugin manager, less to maintain, versioning and other package manager features available out of the box
  • Easy for another developer / user to modify dependencies

Cons:

  • Plugin has to be built and published to pypi (but this also means better discoverability)
  • Might need re-examine the best way to include Python <-> UI dependencies

Alternative 2 - plugin integration as class methods

Relatively common approach taken by libraries e.g. Scikitlearn where there are conventions e.g. train / predict methods and packages that want to implement SKlearn compatible methods, just need to create those methods. Also the approach taken by MAS Veritas.

Maintainers inherit an Abstract Base Class and implement the methods e.g. AIVF_test

Pros:

  • Allow any package to be “AIVF compatible” by implementing methods
  • Simplified plugin method - check that class methods are implemented

Cons:

  • Need to have very clear schema or what is the expected input and output
  • Discovery is more difficulty, users need to register packages at run-time so AIVF is aware what is available

Is your feature request related to a problem/limitation?

No response

Describe the solution you'd like

My preference is to move towards alternative 1, but would also like to hear from other users / maintainers or their preferences or other possible approaches

Alternatives

No response

Additional Context

No response

Related Issues/PRs

No response

@timlrx timlrx added feature Should build this needs-triage Issues need triages by maintainer labels Mar 27, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
feature Should build this needs-triage Issues need triages by maintainer
Projects
None yet
Development

No branches or pull requests

1 participant