Metadata-Version: 2.4
Name: ovos-core
Version: 2.6.0a1
Summary: The spiritual successor to Mycroft AI, OVOS is flexible voice assistant software that can be run almost anywhere!
License-Expression: Apache-2.0
Project-URL: Homepage, https://github.com/OpenVoiceOS/ovos-core
Project-URL: Repository, https://github.com/OpenVoiceOS/ovos-core
Requires-Python: >=3.10
Description-Content-Type: text/markdown
License-File: LICENSE
Requires-Dist: requests<3.0,>=2.26
Requires-Dist: packaging>=20.0
Requires-Dist: python-dateutil<3.0,>=2.6
Requires-Dist: combo-lock<0.4,>=0.2.2
Requires-Dist: ovos-utils<1.0.0,>=0.13.9a1
Requires-Dist: ovos_bus_client<3.0.0,>=2.7.1a1
Requires-Dist: ovos-plugin-manager<3.0.0,>=2.11.1a1
Requires-Dist: ovos-config<3.0.0,>=2.1.4a5
Requires-Dist: ovos-workshop<10.0.0,>=9.3.2a1
Requires-Dist: rapidfuzz<4.0,>=3.6
Requires-Dist: ovos-spec-tools[langcodes]<2.0.0,>=1.5.1a2
Provides-Extra: test
Requires-Dist: coveralls>=1.8.2; extra == "test"
Requires-Dist: flake8>=3.7.9; extra == "test"
Requires-Dist: pytest>=5.2.4; extra == "test"
Requires-Dist: pytest-cov>=2.8.1; extra == "test"
Requires-Dist: pytest-testmon>=2.1.3; extra == "test"
Requires-Dist: pytest-randomly>=3.16.0; extra == "test"
Requires-Dist: cov-core>=1.15.0; extra == "test"
Requires-Dist: ovoscope<2.0.0,>=1.6.1a1; extra == "test"
Requires-Dist: ovos-m2v-pipeline<1.0.0,>=0.5.4a1; extra == "test"
Requires-Dist: ovos-adapt-parser<2.0.0,>=1.6.1a1; extra == "test"
Requires-Dist: ovos_padatious<3.0.0,>=2.0.1a1; extra == "test"
Requires-Dist: ovos-utterance-plugin-cancel<1.0.0,>=0.3.3a1; extra == "test"
Requires-Dist: ovos-skill-count>=0.0.6a1; extra == "test"
Requires-Dist: ovos-skill-hello-world>=0.2.6a2; extra == "test"
Requires-Dist: ovos-skill-parrot>=0.1.31a2; extra == "test"
Requires-Dist: ovos-skill-fallback-unknown>=0.1.12a1; extra == "test"
Requires-Dist: ovos-dinkum-listener<1.0.0,>=0.8.2a2; extra == "test"
Requires-Dist: ovos-audio-transformer-plugin-ggwave<2.0.0,>=1.0.0a1; extra == "test"
Provides-Extra: mycroft
Requires-Dist: ovos_PHAL[extras]<1.0.0,>=0.2.16a1; extra == "mycroft"
Requires-Dist: ovos-audio[extras]<3.0.0,>=2.1.1a2; extra == "mycroft"
Requires-Dist: ovos-gui<2.0.0,>=1.4.1a1; extra == "mycroft"
Requires-Dist: ovos-messagebus<1.0.0,>=0.2.1a1; extra == "mycroft"
Requires-Dist: ovos-dinkum-listener[extras]<1.0.0,>=0.8.2a2; extra == "mycroft"
Provides-Extra: lgpl
Requires-Dist: ovos_padatious<3.0.0,>=2.0.1a1; extra == "lgpl"
Requires-Dist: fann2<1.1.0,>=1.0.7; extra == "lgpl"
Provides-Extra: plugins
Requires-Dist: ovos-utterance-corrections-plugin<1.0.0,>=0.1.3a5; extra == "plugins"
Requires-Dist: ovos-utterance-plugin-cancel<1.0.0,>=0.3.3a1; extra == "plugins"
Requires-Dist: ovos-bidirectional-translation-plugin<1.0.0,>=0.1.3a4; extra == "plugins"
Requires-Dist: ovos-translate-server-plugin<1.0.0,>=0.0.8a1; extra == "plugins"
Requires-Dist: ovos-utterance-normalizer<1.0.0,>=0.2.5a1; extra == "plugins"
Requires-Dist: ovos-number-parser<1.0.0,>=0.19.8a1; extra == "plugins"
Requires-Dist: ovos-date-parser<1.0.0,>=0.29.0; extra == "plugins"
Requires-Dist: ovos-m2v-pipeline<1.0.0,>=0.5.4a1; extra == "plugins"
Requires-Dist: ovos-common-query-pipeline-plugin<2.0.0,>=1.1.15a1; extra == "plugins"
Requires-Dist: ovos-adapt-parser<2.0.0,>=1.6.1a1; extra == "plugins"
Requires-Dist: ovos_ocp_pipeline_plugin<2.0.0,>=1.1.28a1; extra == "plugins"
Requires-Dist: ovos-persona<1.0.0,>=0.9.0a15; extra == "plugins"
Requires-Dist: padacioso<3.0.0,>=2.2.2a1; extra == "plugins"
Requires-Dist: keyword-template-matcher<1.0.0,>=0.1.3a1; extra == "plugins"
Requires-Dist: ahocorasick-ner<1.0.0,>=0.1.1; extra == "plugins"
Provides-Extra: skills-essential
Requires-Dist: ovos-skill-fallback-unknown>=0.1.12a1; extra == "skills-essential"
Requires-Dist: ovos-skill-alerts>=0.2.2a1; extra == "skills-essential"
Requires-Dist: ovos-skill-personal>=0.1.25a1; extra == "skills-essential"
Requires-Dist: ovos-skill-date-time<2.0.0,>=1.1.14a1; extra == "skills-essential"
Requires-Dist: ovos-skill-hello-world>=0.2.6a2; extra == "skills-essential"
Requires-Dist: ovos-skill-spelling>=0.2.7a2; extra == "skills-essential"
Requires-Dist: ovos-skill-diagnostics>=0.0.12a2; extra == "skills-essential"
Requires-Dist: ovos-skill-parrot>=0.1.31a2; extra == "skills-essential"
Requires-Dist: ovos-skill-count>=0.0.6a1; extra == "skills-essential"
Requires-Dist: ovos-skill-randomness>=1.1.0a1; python_version >= "3.10" and extra == "skills-essential"
Provides-Extra: skills-extra
Requires-Dist: ovos-skill-wordnet>=0.5.0a1; extra == "skills-extra"
Requires-Dist: ovos-skill-laugh>=1.0.6a1; extra == "skills-extra"
Requires-Dist: ovos-skill-number-facts>=0.1.13a5; extra == "skills-extra"
Requires-Dist: ovos-skill-iss-location>=0.2.18a5; extra == "skills-extra"
Requires-Dist: ovos-skill-cmd>=0.2.14a3; extra == "skills-extra"
Requires-Dist: ovos-skill-moviemaster>=0.0.15a1; extra == "skills-extra"
Requires-Dist: ovos-skill-confucius-quotes>=0.3.1a1; extra == "skills-extra"
Requires-Dist: ovos-skill-icanhazdadjokes>=0.3.11a2; extra == "skills-extra"
Requires-Dist: ovos-skill-camera; extra == "skills-extra"
Provides-Extra: skills-audio
Requires-Dist: ovos-skill-boot-finished>=0.5.5a2; extra == "skills-audio"
Requires-Dist: ovos-skill-audio-recording>=0.2.12a1; extra == "skills-audio"
Requires-Dist: ovos-skill-dictation>=0.2.25a1; extra == "skills-audio"
Requires-Dist: ovos-skill-volume>=0.1.22a3; extra == "skills-audio"
Requires-Dist: ovos-skill-naptime>=0.4.0a3; extra == "skills-audio"
Provides-Extra: skills-desktop
Requires-Dist: ovos-skill-application-launcher>=0.6.0a3; extra == "skills-desktop"
Requires-Dist: ovos-skill-wallpapers>=1.0.14a5; extra == "skills-desktop"
Requires-Dist: ovos-skill-screenshot>=0.0.10a3; extra == "skills-desktop"
Provides-Extra: skills-internet
Requires-Dist: ovos-skill-weather>=1.0.12a2; extra == "skills-internet"
Requires-Dist: ovos-skill-ddg>=0.3.9a2; extra == "skills-internet"
Requires-Dist: ovos-skill-wolfie>=0.7.1a2; extra == "skills-internet"
Requires-Dist: ovos-skill-wikipedia>=0.8.17a3; extra == "skills-internet"
Requires-Dist: ovos-skill-wikihow>=0.3.7a1; extra == "skills-internet"
Requires-Dist: ovos-skill-speedtest>=0.3.8a5; extra == "skills-internet"
Requires-Dist: ovos-skill-ip>=0.3.0a3; extra == "skills-internet"
Provides-Extra: skills-gui
Requires-Dist: ovos-skill-homescreen>=3.0.4a1; extra == "skills-gui"
Requires-Dist: ovos-skill-screenshot>=0.0.10a3; extra == "skills-gui"
Requires-Dist: ovos-skill-color-picker>=0.1.0a1; extra == "skills-gui"
Provides-Extra: skills-media
Requires-Dist: ovos-skill-somafm>=0.1.6a8; extra == "skills-media"
Requires-Dist: ovos-skill-news>=0.4.9a2; extra == "skills-media"
Requires-Dist: ovos-skill-pyradios>=0.1.6a7; extra == "skills-media"
Requires-Dist: ovos-skill-local-media>=0.2.15a2; extra == "skills-media"
Requires-Dist: ovos-skill-youtube-music>=0.1.10a2; extra == "skills-media"
Provides-Extra: skills-ca
Requires-Dist: ovos-skill-fuster-quotes; extra == "skills-ca"
Requires-Dist: ovos-skill-word-of-the-day>=0.2.5; extra == "skills-ca"
Provides-Extra: skills-pt
Requires-Dist: ovos-skill-word-of-the-day>=0.2.5; extra == "skills-pt"
Provides-Extra: skills-gl
Requires-Dist: ovos-skill-word-of-the-day>=0.2.5; extra == "skills-gl"
Provides-Extra: skills-en
Requires-Dist: ovos-skill-word-of-the-day>=0.2.5; extra == "skills-en"
Requires-Dist: ovos-skill-days-in-history>=0.3.12a5; extra == "skills-en"
Dynamic: license-file

[![GitHub Discussions](https://img.shields.io/github/discussions/OpenVoiceOS/OpenVoiceOS?label=OVOS%20Discussions)](https://github.com/OpenVoiceOS/OpenVoiceOS/discussions)
[![License](https://img.shields.io/badge/License-Apache%202.0-blue.svg)](LICENSE.md)
[![PRs Welcome](https://img.shields.io/badge/PRs-welcome-brightgreen.svg)](http://makeapullrequest.com)
![Unit Tests](https://github.com/OpenVoiceOS/ovos-core/actions/workflows/unit_tests.yml/badge.svg)
[![codecov](https://codecov.io/gh/OpenVoiceOS/ovos-core/branch/dev/graph/badge.svg?token=CS7WJH4PO2)](https://codecov.io/gh/OpenVoiceOS/ovos-core)

# OVOS-core

[OpenVoiceOS](https://openvoiceos.org/) is an open-source platform for smart speakers and other voice-centric devices. `ovos-core` (this repo) is the central component.

---

## Installing OVOS

If you have an existing system, use the [ovos-installer](https://github.com/OpenVoiceOS/ovos-installer) to install OVOS and its dependencies in one step.

For Raspberry Pi users, the [RaspOVOS](https://github.com/OpenVoiceOS/RaspOVOS) image runs in headless mode (no GUI) and targets Raspberry Pi 3B or higher.

For embedded systems, [ovos-buildroot](https://github.com/OpenVoiceOS/ovos-buildroot) builds a custom Linux distribution for minimal setups.

More detailed documentation is available in the [ovos-technical-manual](https://openvoiceos.github.io/ovos-technical-manual).

Developers can install `ovos-core` standalone:

```bash
pip install ovos-core
```

This includes the core components, for custom assistant development.

---

## Skills

OVOS is powered by skills. Some skills come pre-installed; most need to be installed explicitly.

Browse OVOS-compatible skills on [PyPI](https://pypi.org/search/?q=ovos-skill-) or in the [OVOS GitHub organization](https://github.com/orgs/OpenVoiceOS/repositories?language=&q=skill&sort=&type=all).

Most classic Mycroft skills also work on OVOS.

---

## Persona Support

[ovos-persona](https://github.com/OpenVoiceOS/ovos-persona) generates responses when skills fail to handle user input. With Persona you can connect an LLM to `ovos-core`.

**List Personas**

- "What personas are available?"
- "Can you list the personas?"
- "What personas can I use?"

**Activate a Persona**

- "Connect me to {persona}"
- "Enable {persona}"
- "Start a conversation with {persona}"
- "Let me chat with {persona}"

**Stop Conversation**

- "Stop the interaction"
- "Terminate persona"
- "Deactivate Large Language Model"

<details>
  <summary>Creating a Persona: Click to expand</summary>

#### Persona Files

Personas are configured using JSON files. These can be:

1. Provided by plugins (for example, the [OpenAI plugin](https://github.com/OpenVoiceOS/ovos-solver-openai-persona-plugin/pull/12)).
2. Created as user-defined JSON files in `~/.config/ovos_persona`.

Personas rely on [solver plugins](https://openvoiceos.github.io/ovos-technical-manual/solvers/), which try to answer queries in sequence until a response is found.

**Example:** using a local OpenAI-compatible server.

Save this in `~/.config/ovos_persona/salamandra.json`:

```json
{
  "name": "Salamandra",
  "solvers": [
    "ovos-solver-openai-persona-plugin"
  ],
  "ovos-solver-openai-persona-plugin": {
    "api_url": "https://ollama.uoi.io/v1",
    "model": "hdnh2006/salamandra-7b-instruct",
    "key": "sk-xxxx",
    "persona": "helpful, creative, clever, and very friendly."
  }
}
```

The `"Salamandra"` persona is now available. The example above uses a demo server; no uptime is guaranteed.

More details on how to create your personas are in the [OVOS-persona README](https://github.com/OpenVoiceOS/OVOS-persona?tab=readme-ov-file#-configuring-personas).

</details>

<details>
  <summary>Pipeline Configuration: Click to expand</summary>

#### Persona Pipeline

Add the persona pipeline to your `mycroft.conf` after the `_high` pipeline matchers.

```json
{
  "intents": {
      "persona": {"handle_fallback":  true},
      "pipeline": [
          "stop_high",
          "converse",
          "ocp_high",
          "padatious_high",
          "adapt_high",
          "ovos-persona-pipeline-plugin-high",
          "ocp_medium",
          "fallback_high",
          "stop_medium",
          "adapt_medium",
          "padatious_medium",
          "adapt_low",
          "common_qa",
          "fallback_medium",
          "ovos-persona-pipeline-plugin-low",
          "fallback_low"
    ]
  }
}
```

</details>

---

## Getting Involved

OVOS is open source and depends on community contributions. There is a way to contribute as a coder, designer, or translator.

Help translate OVOS into your language through our [Translation Portal](https://gitlocalize.com/users/OpenVoiceOS).

Have questions or need guidance? Say hi in the [OpenVoiceOS Chat](https://matrix.to/#/!XFpdtmgyCoPDxOMPpH:matrix.org?via=matrix.org), and a team member will help.

Join our [Discussions](https://github.com/OpenVoiceOS/OpenVoiceOS/discussions) to ask questions and share ideas.

---

## Credits

The OpenVoiceOS team thanks the following organizations for their support in our early days:

- **Mycroft** was a hackable, open-source voice assistant by the now-defunct MycroftAI. OpenVoiceOS continues that work.
- [NeonGecko](https://neon.ai)
- [KDE](https://kde.org) / [Blue Systems](https://blue-systems.com)

---

## Links

- [Release Notes](https://github.com/OpenVoiceOS/ovos-releases)
- [Technical Manual](https://openvoiceos.github.io/ovos-technical-manual)
- [OpenVoiceOS Chat](https://matrix.to/#/!XFpdtmgyCoPDxOMPpH:matrix.org?via=matrix.org)
- [Website](https://openvoiceos.org)
- [Open Conversational AI Forums](https://community.openconversational.ai/) (previously Mycroft forums)
