Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .github/workflows/license_tests.yml
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@ jobs:
pip freeze > requirements-all.txt
- name: Check python
id: license_check_report
uses: pilosus/action-pip-license-checker@v0.5.0
uses: pilosus/action-pip-license-checker@v3.1.0
with:
requirements: 'requirements-all.txt'
fail: 'Copyleft,Other,Error'
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/pipaudit.yml
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@ jobs:
- name: Install package
run: |
pip install .
- uses: pypa/gh-action-pip-audit@v1.0.0
- uses: pypa/gh-action-pip-audit@v1.1.0
with:
# Ignore setuptools vulnerability we can't do much about
ignore-vulns: |
Expand Down
43 changes: 40 additions & 3 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,12 +1,49 @@
# Changelog

## [2.2.0a1](https://github.com/OpenVoiceOS/ovos-plugin-manager/tree/2.2.0a1) (2026-01-28)
## [2.2.3a1](https://github.com/OpenVoiceOS/ovos-plugin-manager/tree/2.2.3a1) (2026-01-30)

[Full Changelog](https://github.com/OpenVoiceOS/ovos-plugin-manager/compare/2.1.1...2.2.0a1)
[Full Changelog](https://github.com/OpenVoiceOS/ovos-plugin-manager/compare/2.2.2a1...2.2.3a1)

**Merged pull requests:**

- feat: introduce base class for "memory" plugins [\#363](https://github.com/OpenVoiceOS/ovos-plugin-manager/pull/363) ([JarbasAl](https://github.com/JarbasAl))
- fix: explicitly model streaming tokens vs sentences [\#374](https://github.com/OpenVoiceOS/ovos-plugin-manager/pull/374) ([JarbasAl](https://github.com/JarbasAl))

## [2.2.2a1](https://github.com/OpenVoiceOS/ovos-plugin-manager/tree/2.2.2a1) (2026-01-29)

[Full Changelog](https://github.com/OpenVoiceOS/ovos-plugin-manager/compare/2.2.1a5...2.2.2a1)

**Merged pull requests:**

- fix: deprecated import [\#372](https://github.com/OpenVoiceOS/ovos-plugin-manager/pull/372) ([JarbasAl](https://github.com/JarbasAl))

## [2.2.1a5](https://github.com/OpenVoiceOS/ovos-plugin-manager/tree/2.2.1a5) (2026-01-29)

[Full Changelog](https://github.com/OpenVoiceOS/ovos-plugin-manager/compare/2.2.1a4...2.2.1a5)

**Merged pull requests:**

- Deprecate solver plugins [\#365](https://github.com/OpenVoiceOS/ovos-plugin-manager/pull/365) ([JarbasAl](https://github.com/JarbasAl))

## [2.2.1a4](https://github.com/OpenVoiceOS/ovos-plugin-manager/tree/2.2.1a4) (2026-01-29)

[Full Changelog](https://github.com/OpenVoiceOS/ovos-plugin-manager/compare/2.2.1a3...2.2.1a4)

## [2.2.1a3](https://github.com/OpenVoiceOS/ovos-plugin-manager/tree/2.2.1a3) (2026-01-29)

[Full Changelog](https://github.com/OpenVoiceOS/ovos-plugin-manager/compare/2.2.1a1...2.2.1a3)

**Merged pull requests:**

- chore\(deps\): update pilosus/action-pip-license-checker action to v3 [\#355](https://github.com/OpenVoiceOS/ovos-plugin-manager/pull/355) ([renovate[bot]](https://github.com/apps/renovate))
- chore\(deps\): update pypa/gh-action-pip-audit action to v1.1.0 - autoclosed [\#351](https://github.com/OpenVoiceOS/ovos-plugin-manager/pull/351) ([renovate[bot]](https://github.com/apps/renovate))

## [2.2.1a1](https://github.com/OpenVoiceOS/ovos-plugin-manager/tree/2.2.1a1) (2026-01-29)

[Full Changelog](https://github.com/OpenVoiceOS/ovos-plugin-manager/compare/2.2.0...2.2.1a1)

**Merged pull requests:**

- chore: move 3rd party code to own file [\#361](https://github.com/OpenVoiceOS/ovos-plugin-manager/pull/361) ([JarbasAl](https://github.com/JarbasAl))



Expand Down
234 changes: 233 additions & 1 deletion ovos_plugin_manager/agents.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,9 @@
from typing import Dict, Type
from ovos_plugin_manager.templates.agents import AgentContextManager, MultimodalAdapter

from ovos_plugin_manager.templates.agents import (
AgentContextManager, MultimodalAdapter, RetrievalEngine, ChatEngine, MultimodalChatEngine, SummarizerEngine,
ChatSummarizerEngine, ExtractiveQAEngine, ReRankerEngine, YesNoEngine, NaturalLanguageInferenceEngine,
DocumentIndexerEngine, QAIndexerEngine, CoreferenceEngine)
from ovos_plugin_manager.utils import PluginTypes


Expand Down Expand Up @@ -39,3 +43,231 @@ def load_multimodal_adapter_plugin(module_name: str) -> Type[MultimodalAdapter]:
"""
from ovos_plugin_manager.utils import load_plugin
return load_plugin(module_name, PluginTypes.AGENT_MULTIMODAL_ADAPTER)


def find_retrieval_plugins() -> Dict[str, Type[RetrievalEngine]]:
"""
Find all installed plugins
@return: dict plugin names to entrypoints
"""
from ovos_plugin_manager.utils import find_plugins
return find_plugins(PluginTypes.AGENT_RETRIEVAL)


def load_retrieval_plugin(module_name: str) -> Type[RetrievalEngine]:
"""
Get an uninstantiated class for the requested module_name
@param module_name: Plugin entrypoint name to load
@return: Uninstantiated class
"""
from ovos_plugin_manager.utils import load_plugin
return load_plugin(module_name, PluginTypes.AGENT_RETRIEVAL)


def find_chat_plugins() -> Dict[str, Type[ChatEngine]]:
"""
Find all installed plugins
@return: dict plugin names to entrypoints
"""
from ovos_plugin_manager.utils import find_plugins
return find_plugins(PluginTypes.AGENT_CHAT)


def load_chat_plugin(module_name: str) -> Type[ChatEngine]:
"""
Get an uninstantiated class for the requested module_name
@param module_name: Plugin entrypoint name to load
@return: Uninstantiated class
"""
from ovos_plugin_manager.utils import load_plugin
return load_plugin(module_name, PluginTypes.AGENT_CHAT)


def find_multimodal_chat_plugins() -> Dict[str, Type[MultimodalChatEngine]]:
"""
Find all installed plugins
@return: dict plugin names to entrypoints
"""
from ovos_plugin_manager.utils import find_plugins
return find_plugins(PluginTypes.AGENT_CHAT_MULTIMODAL)


def load_multimodal_chat_plugin(module_name: str) -> Type[MultimodalChatEngine]:
"""
Get an uninstantiated class for the requested module_name
@param module_name: Plugin entrypoint name to load
@return: Uninstantiated class
"""
from ovos_plugin_manager.utils import load_plugin
return load_plugin(module_name, PluginTypes.AGENT_CHAT_MULTIMODAL)


def find_summarizer_plugins() -> Dict[str, Type[SummarizerEngine]]:
"""
Find all installed plugins
@return: dict plugin names to entrypoints
"""
from ovos_plugin_manager.utils import find_plugins
return find_plugins(PluginTypes.AGENT_SUMMARIZER)


def load_summarizer_plugin(module_name: str) -> Type[SummarizerEngine]:
"""
Get an uninstantiated class for the requested module_name
@param module_name: Plugin entrypoint name to load
@return: Uninstantiated class
"""
from ovos_plugin_manager.utils import load_plugin
return load_plugin(module_name, PluginTypes.AGENT_SUMMARIZER)


def find_chat_summarizer_plugins() -> Dict[str, Type[ChatSummarizerEngine]]:
"""
Find all installed plugins
@return: dict plugin names to entrypoints
"""
from ovos_plugin_manager.utils import find_plugins
return find_plugins(PluginTypes.AGENT_CHAT_SUMMARIZER)


def load_chat_summarizer_plugin(module_name: str) -> Type[ChatSummarizerEngine]:
"""
Get an uninstantiated class for the requested module_name
@param module_name: Plugin entrypoint name to load
@return: Uninstantiated class
"""
from ovos_plugin_manager.utils import load_plugin
return load_plugin(module_name, PluginTypes.AGENT_CHAT_SUMMARIZER)


def find_extractive_qa_plugins() -> Dict[str, Type[ExtractiveQAEngine]]:
"""
Find all installed plugins
@return: dict plugin names to entrypoints
"""
from ovos_plugin_manager.utils import find_plugins
return find_plugins(PluginTypes.AGENT_EXTRACTIVE_QA)


def load_extractive_qa_plugin(module_name: str) -> Type[ExtractiveQAEngine]:
"""
Get an uninstantiated class for the requested module_name
@param module_name: Plugin entrypoint name to load
@return: Uninstantiated class
"""
from ovos_plugin_manager.utils import load_plugin
return load_plugin(module_name, PluginTypes.AGENT_EXTRACTIVE_QA)


def find_reranker_plugins() -> Dict[str, Type[ReRankerEngine]]:
"""
Find all installed plugins
@return: dict plugin names to entrypoints
"""
from ovos_plugin_manager.utils import find_plugins
return find_plugins(PluginTypes.AGENT_RERANKER)


def load_reranker_plugin(module_name: str) -> Type[ReRankerEngine]:
"""
Get an uninstantiated class for the requested module_name
@param module_name: Plugin entrypoint name to load
@return: Uninstantiated class
"""
from ovos_plugin_manager.utils import load_plugin
return load_plugin(module_name, PluginTypes.AGENT_RERANKER)


def find_yesno_plugins() -> Dict[str, Type[YesNoEngine]]:
"""
Find all installed plugins
@return: dict plugin names to entrypoints
"""
from ovos_plugin_manager.utils import find_plugins
return find_plugins(PluginTypes.AGENT_YES_NO)


def load_yesno_plugin(module_name: str) -> Type[YesNoEngine]:
"""
Get an uninstantiated class for the requested module_name
@param module_name: Plugin entrypoint name to load
@return: Uninstantiated class
"""
from ovos_plugin_manager.utils import load_plugin
return load_plugin(module_name, PluginTypes.AGENT_YES_NO)


def find_natural_language_inference_plugins() -> Dict[str, Type[NaturalLanguageInferenceEngine]]:
"""
Find all installed plugins
@return: dict plugin names to entrypoints
"""
from ovos_plugin_manager.utils import find_plugins
return find_plugins(PluginTypes.AGENT_NLI)


def load_natural_language_inference_plugin(module_name: str) -> Type[NaturalLanguageInferenceEngine]:
"""
Get an uninstantiated class for the requested module_name
@param module_name: Plugin entrypoint name to load
@return: Uninstantiated class
"""
from ovos_plugin_manager.utils import load_plugin
return load_plugin(module_name, PluginTypes.AGENT_NLI)


def find_document_indexer_plugins() -> Dict[str, Type[DocumentIndexerEngine]]:
"""
Find all installed plugins
@return: dict plugin names to entrypoints
"""
from ovos_plugin_manager.utils import find_plugins
return find_plugins(PluginTypes.AGENT_DOC_RETRIEVAL)


def load_document_indexer_plugin(module_name: str) -> Type[DocumentIndexerEngine]:
"""
Get an uninstantiated class for the requested module_name
@param module_name: Plugin entrypoint name to load
@return: Uninstantiated class
"""
from ovos_plugin_manager.utils import load_plugin
return load_plugin(module_name, PluginTypes.AGENT_DOC_RETRIEVAL)


def find_qa_indexer_plugins() -> Dict[str, Type[QAIndexerEngine]]:
"""
Find all installed plugins
@return: dict plugin names to entrypoints
"""
from ovos_plugin_manager.utils import find_plugins
return find_plugins(PluginTypes.AGENT_QA_RETRIEVAL)


def load_qa_indexer_plugin(module_name: str) -> Type[QAIndexerEngine]:
"""
Get an uninstantiated class for the requested module_name
@param module_name: Plugin entrypoint name to load
@return: Uninstantiated class
"""
from ovos_plugin_manager.utils import load_plugin
return load_plugin(module_name, PluginTypes.AGENT_QA_RETRIEVAL)


def find_coreference_plugins() -> Dict[str, Type[CoreferenceEngine]]:
"""
Find all installed plugins
@return: dict plugin names to entrypoints
"""
from ovos_plugin_manager.utils import find_plugins
return find_plugins(PluginTypes.AGENT_COREF)


def load_coreference_plugin(module_name: str) -> Type[CoreferenceEngine]:
"""
Get an uninstantiated class for the requested module_name
@param module_name: Plugin entrypoint name to load
@return: Uninstantiated class
"""
from ovos_plugin_manager.utils import load_plugin
return load_plugin(module_name, PluginTypes.AGENT_COREF)
2 changes: 1 addition & 1 deletion ovos_plugin_manager/audio2ipa.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
from typing import Optional
from ovos_plugin_manager.utils import normalize_lang, PluginTypes, PluginConfigTypes
from ovos_plugin_manager.utils import PluginTypes, PluginConfigTypes
from ovos_plugin_manager.templates.audio2ipa import Audio2IPA
from ovos_utils.log import LOG

Expand Down
11 changes: 9 additions & 2 deletions ovos_plugin_manager/coreference.py
Original file line number Diff line number Diff line change
@@ -1,11 +1,18 @@
from typing import Optional

from ovos_plugin_manager.utils import normalize_lang, PluginTypes, \
PluginConfigTypes
from ovos_plugin_manager.utils import PluginTypes, PluginConfigTypes
from ovos_config import Configuration
from ovos_utils.log import LOG
from ovos_plugin_manager.templates.coreference import CoreferenceSolverEngine, \
replace_coreferences
from ovos_utils.log import log_deprecation
from ovos_plugin_manager.version import VERSION_MAJOR


log_deprecation("coreference plugins have been deprecated and will be removed in the next major release.\n"
"Please migrate your code to use AbstractAgentEngine.\n"
"The new classes live in ovos_plugin_manager.templates.agents",
f"{VERSION_MAJOR + 1}.0.0")


def find_coref_plugins() -> dict:
Expand Down
2 changes: 1 addition & 1 deletion ovos_plugin_manager/g2p.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
from typing import Optional
from ovos_config import Configuration
from ovos_plugin_manager.utils import normalize_lang, PluginTypes, PluginConfigTypes
from ovos_plugin_manager.utils import PluginTypes, PluginConfigTypes
from ovos_plugin_manager.templates.g2p import Grapheme2PhonemePlugin, PhonemeAlphabet
from ovos_utils.log import LOG

Expand Down
2 changes: 1 addition & 1 deletion ovos_plugin_manager/keywords.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
from ovos_plugin_manager.utils import normalize_lang, PluginTypes, PluginConfigTypes
from ovos_plugin_manager.utils import PluginTypes, PluginConfigTypes
from ovos_config import Configuration
from ovos_utils.log import LOG
from ovos_plugin_manager.templates.keywords import KeywordExtractor
Expand Down
3 changes: 1 addition & 2 deletions ovos_plugin_manager/metadata_transformers.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,4 @@
from ovos_plugin_manager.utils import normalize_lang, PluginTypes, \
PluginConfigTypes
from ovos_plugin_manager.utils import PluginTypes, PluginConfigTypes
from ovos_plugin_manager.templates.transformers import MetadataTransformer


Expand Down
3 changes: 1 addition & 2 deletions ovos_plugin_manager/postag.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,4 @@
from ovos_plugin_manager.utils import normalize_lang, PluginTypes, \
PluginConfigTypes
from ovos_plugin_manager.utils import PluginTypes, PluginConfigTypes
from ovos_config import Configuration
from ovos_utils.log import LOG
from ovos_plugin_manager.templates.postag import PosTagger
Expand Down
3 changes: 1 addition & 2 deletions ovos_plugin_manager/segmentation.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,4 @@
from ovos_plugin_manager.utils import normalize_lang, \
PluginTypes, PluginConfigTypes
from ovos_plugin_manager.utils import PluginTypes, PluginConfigTypes
from ovos_config import Configuration
from ovos_utils.log import LOG
from ovos_plugin_manager.templates.segmentation import Segmenter
Expand Down
8 changes: 8 additions & 0 deletions ovos_plugin_manager/solvers.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,14 @@
EntailmentSolver, MultipleChoiceSolver, EvidenceSolver, ChatMessageSolver
from ovos_plugin_manager.utils import PluginTypes, PluginConfigTypes

from ovos_utils.log import log_deprecation
from ovos_plugin_manager.version import VERSION_MAJOR

log_deprecation("solver plugins have been deprecated and will be removed in the next major release.\n"
"Please migrate your code to use AbstractAgentEngine.\n"
"The new classes live in ovos_plugin_manager.templates.agents",
f"{VERSION_MAJOR + 1}.0.0")


def find_chat_solver_plugins() -> dict:
"""
Expand Down
3 changes: 1 addition & 2 deletions ovos_plugin_manager/stt.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,4 @@
from ovos_plugin_manager.utils import normalize_lang, \
PluginTypes, PluginConfigTypes
from ovos_plugin_manager.utils import PluginTypes, PluginConfigTypes
from ovos_config import Configuration
from ovos_plugin_manager.utils.config import get_valid_plugin_configs, \
sort_plugin_configs, get_plugin_config
Expand Down
Loading
Loading