Metadata-Version: 2.4
Name: ovos_core
Version: 2.1.2a2
Summary: The spiritual successor to Mycroft AI, OVOS is flexible voice assistant software that can be run almost anywhere!
Home-page: https://github.com/OpenVoiceOS/ovos-core
License: Apache-2.0
Classifier: Development Status :: 4 - Beta
Classifier: Programming Language :: Python :: 3
Classifier: License :: OSI Approved :: Apache Software License
Description-Content-Type: text/markdown
License-File: LICENSE
Requires-Dist: requests<3.0,>=2.26
Requires-Dist: python-dateutil<3.0,>=2.6
Requires-Dist: watchdog<3.0,>=2.1
Requires-Dist: combo-lock<0.4,>=0.2.2
Requires-Dist: ovos-utils<1.0.0,>=0.8.2a1
Requires-Dist: ovos_bus_client<2.0.0,>=1.3.6a1
Requires-Dist: ovos-plugin-manager<3.0.0,>=1.0.3
Requires-Dist: ovos-config<3.0.0,>=0.0.13
Requires-Dist: ovos-workshop<9.0.0,>=7.0.6
Requires-Dist: rapidfuzz<4.0,>=3.6
Requires-Dist: langcodes
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<1.0.0,>=0.7.2; extra == "test"
Provides-Extra: mycroft
Requires-Dist: ovos_PHAL[extras]<1.0.0,>=0.2.9; extra == "mycroft"
Requires-Dist: ovos-audio[extras]<2.0.0,>=1.0.1; extra == "mycroft"
Requires-Dist: ovos-audio<2.0.0,>=1.0.1; extra == "mycroft"
Requires-Dist: ovos-gui[extras]<2.0.0,>=1.3.3; extra == "mycroft"
Requires-Dist: ovos-messagebus<1.0.0,>=0.0.7; extra == "mycroft"
Requires-Dist: ovos-dinkum-listener[extras]<1.0.0,>=0.4.1; extra == "mycroft"
Provides-Extra: lgpl
Requires-Dist: ovos_padatious<2.0.0,>=1.4.2; 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.1; extra == "plugins"
Requires-Dist: ovos-utterance-plugin-cancel<1.0.0,>=0.2.3; extra == "plugins"
Requires-Dist: ovos-bidirectional-translation-plugin<1.0.0,>=0.1.0; extra == "plugins"
Requires-Dist: ovos-translate-server-plugin<1.0.0,>=0.0.4; extra == "plugins"
Requires-Dist: ovos-utterance-normalizer<1.0.0,>=0.2.2; extra == "plugins"
Requires-Dist: ovos-number-parser<1.0.0,>=0.0.1; extra == "plugins"
Requires-Dist: ovos-date-parser<1.0.0,>=0.0.3; extra == "plugins"
Requires-Dist: ovos-m2v-pipeline<1.0.0,>=0.0.6; extra == "plugins"
Requires-Dist: ovos-common-query-pipeline-plugin<2.0.0,>=1.1.8; extra == "plugins"
Requires-Dist: ovos-adapt-parser<2.0.0,>=1.0.6; extra == "plugins"
Requires-Dist: ovos_ocp_pipeline_plugin<2.0.0,>=1.1.18a1; extra == "plugins"
Requires-Dist: ovos-persona<1.0.0,>=0.6.23; extra == "plugins"
Requires-Dist: padacioso<2.0.0,>=1.0.0; extra == "plugins"
Requires-Dist: keyword-template-matcher<1.0.0,>=0.1.1; extra == "plugins"
Requires-Dist: ahocorasick-ner<1.0.0,>=0.1.1; extra == "plugins"
Provides-Extra: skills-essential
Requires-Dist: ovos-skill-fallback-unknown<1.0.0,>=0.1.9; extra == "skills-essential"
Requires-Dist: ovos-skill-alerts<1.0.0,>=0.1.10; extra == "skills-essential"
Requires-Dist: ovos-skill-personal<1.0.0,>=0.1.19; extra == "skills-essential"
Requires-Dist: ovos-skill-date-time<2.0.0,>=1.1.3; extra == "skills-essential"
Requires-Dist: ovos-skill-hello-world<1.0.0,>=0.1.10; extra == "skills-essential"
Requires-Dist: ovos-skill-spelling<1.0.0,>=0.2.5; extra == "skills-essential"
Requires-Dist: ovos-skill-diagnostics<1.0.0,>=0.0.2; extra == "skills-essential"
Requires-Dist: ovos-skill-parrot<1.0.0,>=0.1.25; extra == "skills-essential"
Requires-Dist: ovos-skill-count<1.0.0,>=0.0.1; extra == "skills-essential"
Requires-Dist: ovos-skill-randomness<1.0.0,>=0.1.2; python_version >= "3.10" and extra == "skills-essential"
Provides-Extra: skills-extra
Requires-Dist: ovos-skill-wordnet<1.0.0,>=0.2.5; extra == "skills-extra"
Requires-Dist: ovos-skill-laugh<1.0.0,>=0.1.1; extra == "skills-extra"
Requires-Dist: ovos-skill-number-facts<1.0.0,>=0.1.12; extra == "skills-extra"
Requires-Dist: ovos-skill-iss-location<1.0.0,>=0.2.16; extra == "skills-extra"
Requires-Dist: ovos-skill-cmd<1.0.0,>=0.2.11; extra == "skills-extra"
Requires-Dist: ovos-skill-moviemaster<1.0.0,>=0.0.12; extra == "skills-extra"
Requires-Dist: ovos-skill-confucius-quotes<1.0.0,>=0.1.13; extra == "skills-extra"
Requires-Dist: ovos-skill-icanhazdadjokes<1.0.0,>=0.3.7; extra == "skills-extra"
Requires-Dist: ovos-skill-camera; extra == "skills-extra"
Provides-Extra: skills-audio
Requires-Dist: ovos-skill-boot-finished<1.0.0,>=0.4.8; extra == "skills-audio"
Requires-Dist: ovos-skill-audio-recording<1.0.0,>=0.2.4; extra == "skills-audio"
Requires-Dist: ovos-skill-dictation<1.0.0,>=0.2.5; extra == "skills-audio"
Requires-Dist: ovos-skill-volume<1.0.0,>=0.1.16; extra == "skills-audio"
Requires-Dist: ovos-skill-naptime<1.0.0,>=0.3.15; extra == "skills-audio"
Provides-Extra: skills-desktop
Requires-Dist: ovos-skill-application-launcher<1.0.0,>=0.5.14; extra == "skills-desktop"
Requires-Dist: ovos-skill-wallpapers<3.0.0,>=1.0.2; extra == "skills-desktop"
Requires-Dist: ovos-skill-screenshot<1.0.0,>=0.0.2; extra == "skills-desktop"
Provides-Extra: skills-internet
Requires-Dist: ovos-skill-weather<2.0.0,>=1.0.3; extra == "skills-internet"
Requires-Dist: ovos-skill-ddg<1.0.0,>=0.3.5; extra == "skills-internet"
Requires-Dist: ovos-skill-wolfie<1.0.0,>=0.5.8; extra == "skills-internet"
Requires-Dist: ovos-skill-wikipedia<1.0.0,>=0.8.13; extra == "skills-internet"
Requires-Dist: ovos-skill-wikihow<1.0.0,>=0.3.3; extra == "skills-internet"
Requires-Dist: ovos-skill-speedtest<1.0.0,>=0.3.6; extra == "skills-internet"
Requires-Dist: ovos-skill-ip<1.0.0,>=0.2.5; extra == "skills-internet"
Provides-Extra: skills-gui
Requires-Dist: ovos-skill-homescreen<4.0.0,>=3.0.3; extra == "skills-gui"
Requires-Dist: ovos-skill-screenshot<1.0.0,>=0.0.2; extra == "skills-gui"
Requires-Dist: ovos-skill-color-picker<1.0.0,>=0.0.2; extra == "skills-gui"
Provides-Extra: skills-media
Requires-Dist: ovos-skill-somafm<1.0.0,>=0.1.3; extra == "skills-media"
Requires-Dist: ovos-skill-news<1.0.0,>=0.4.6a1; extra == "skills-media"
Requires-Dist: ovos-skill-pyradios<1.0.0,>=0.1.5; extra == "skills-media"
Requires-Dist: ovos-skill-local-media<1.0.0,>=0.2.12; extra == "skills-media"
Requires-Dist: ovos-skill-youtube-music<1.0.0,>=0.1.7; extra == "skills-media"
Provides-Extra: skills-ca
Requires-Dist: ovos-skill-fuster-quotes; extra == "skills-ca"
Requires-Dist: ovos-skill-word-of-the-day; extra == "skills-ca"
Provides-Extra: skills-pt
Requires-Dist: ovos-skill-word-of-the-day; extra == "skills-pt"
Provides-Extra: skills-gl
Requires-Dist: ovos-skill-word-of-the-day>=0.2.0; extra == "skills-gl"
Provides-Extra: skills-en
Requires-Dist: ovos-skill-word-of-the-day; extra == "skills-en"
Requires-Dist: ovos-skill-days-in-history<1.0.0,>=0.3.11; extra == "skills-en"
Dynamic: classifier
Dynamic: description
Dynamic: description-content-type
Dynamic: home-page
Dynamic: license
Dynamic: license-file
Dynamic: provides-extra
Dynamic: requires-dist
Dynamic: summary

[![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, we strongly recommend using the [ovos-installer](https://github.com/OpenVoiceOS/ovos-installer) to install OVOS and its dependencies. This tool simplifies installing everything in one go!  

📦 For Raspberry Pi users, the [RaspOVOS](https://github.com/OpenVoiceOS/RaspOVOS) image is a perfect choice. It runs in a "headless" mode (no GUI) and is optimized for Raspberry Pi 3B or higher. 💨 Enjoy even better performance on newer devices!  

🔧 For embedded systems, check out [ovos-buildroot](https://github.com/OpenVoiceOS/ovos-buildroot) – a custom Linux distribution for minimal and efficient setups. Stay tuned for updates!  

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

🎯 Developers can install `ovos-core` standalone via:  
```bash
pip install ovos-core
```  
This includes the core components, perfect for custom assistant development.

---

## 🎛️ Skills

🌟 OVOS is powered by **skills**!  
While 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 explore the [OVOS GitHub organization](https://github.com/orgs/OpenVoiceOS/repositories?language=&q=skill&sort=&type=all).  

🤔 Did you know most classic **Mycroft skills** also work on OVOS?  

🎉 Feel free to share your creative skills with the community!

---

## 🤖 Persona Support  

[ovos-persona](https://github.com/OpenVoiceOS/ovos-persona) can be used to generate responses when skills fail to handle user input

> 💡 With Persona you can connect a 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** (e.g., [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 attempt 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."
  }
}
```

Now the `"Salamandra"` persona should be available, the example above is using a demo server, please note no uptime is guaranteed


More details on how to create your personas [here](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 thrives on community contributions. Whether you're a coder, designer, or translator, there's a way to contribute!  

🌐 **Translate!** Help improve OVOS in 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 be happy to mentor you.  

💡 Join our [Discussions](https://github.com/OpenVoiceOS/OpenVoiceOS/discussions) to ask questions, share ideas, and learn from the community!

---

## 🏆 Credits

The OpenVoiceOS team extends gratitude to 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)
```
