Mycroft Core, the Mycroft Artificial Intelligence platform.
We're not out of beta but we're releasin' on time! In the best possible way!
A major release like this is an opportunity for us to clean up some of the older things and make future development easier and cleaner. The improvements over 19.08.0 are now many thanks to the work of the core team and the awesome community of developers and users.
v20.02 brings some changes, some old deprecated code has been removed making core a little bit leaner and some huge contributions has made it in (targeted messages) along with the usual bag of minor fixes, and improvements.
Registering settings changed callback (docs):
def initialize(self):
self.settings_change_callback = self.my_callback
def my_callback(self):
...
Write settings to disk:
from mycroft.skills.settings import save_settings
...
def skill_method(self, _):
save_settings(self.root_dir, self.settings)
The ConfigurationManager has been removed (Deprecated 18.02) #2470
The backwards compatibility language for extract_datetime()
has been removed. #2469
The function now follows the documentation and returns None
if the utterance doesn't include a date or time.
audio accuracy test is now wake word test The test is moved from the mycroft module into the test folder.
This is something that has been discussed for a long time and now the implementation by @jarbasal is here. The system allows for multiple clients to be connected to Mycroft and only returning the response to the caller client that called. For an example implementation check out the Hive Mind Voice Sat.
@FruityWelsh created a simple commandline tool to trigger mycroft listening. Many thanks!
Thanks to @ludwhe the storage of utterances and detected wake words can be configured.
An API allowing a skill or application to query the state of the intent service, listing things such as registered intents, skill ids and other things. This is also the work of @jarbasal
#
in config file #2472Using only // as comment makes the config compatible with tools such as jsmin. Big thanks to @belvederef for the initiative and implementation.
Server errors generating Mimic2 audio will now be caught and Mimic1 will be used as fallback.
A series of unittests has been added to test the common play skill base class and the audioservice. As these were added a couple of minor bugs were resolved and the code was cleaned up slightly.
Adds test and fixes detection of visual platforms.
The DialogLoader
class is now deprecated instead a simple get_dialog()
function is used.
Few PR's lots of code changes!
The big change in this release is the removal of the language parsing/formatting code and instead relies on the lingua-franca module run by the Mycroft community (and @JarbasAI in particular who set up the project originally). Much discussion is going on in the mycroft chat language channel, if you're interested join us there!
This basically cuts 20 000 lines of code from mycroft-core (roughly 50% of the python code). Stubs still remains to retain backwards compatibility.
This relates to the work @andlo is making to make the skills easier to run in various IDEs. Big thanks to him for improving this side of things!
The dev_setup.sh script will now install pip 20.0.2, besides bringing us uptodate this allows installs on bleeding edge systems running Python 3.9.
I saw the future clearly. It was 20/20...
Mycroft has now entered the new year with a release, we're happy for all contributors old and new that are joining us in this Brave New World of 2020.
root_dir
and settings_change_callback
were added to the readthedocs documentation.Tests were extended for the mycroft_skill, tts and audio modules, increasing code coverage by a couple of percent. In doing this some issues were identified and squashed.
We're always grateful when contributors make our scripts work with more platforms and tools. Big thanks to @notdefine for fixing this.
Padatious will default run multithreaded to speed up training but this is now configurable thanks to @andlo.
This allows mycroft to work with v2.1.0 and above of gTTS. Many thanks to @ansgar-t for this update.
This allows the installer skill to detect errors when installing.
The audioservice will now send an end of playlist message after the last track has been played. This will be useful for restoring the resting screen after the last track or detecting the end of a sequence of steps in an prerecorded situation.
The Mycroft Christmas release comes with a small bag of goodies this year, even if I won't be doing any rhyming like I did last year.
We've had 25 releases this year (unless this release is messed up somehow that's how we'll end). These 25 releases include the code contributions from no less than 41 community members (just on mycroft-core).
The biggest thing in this release is an attempt to stabilize the settings upload. This will make sure that the skills page on Mycroft Home is populated as soon as the device is paired. It also tries to guarantee that the skills manifest is uploaded before any new changes to the settingsmeta are pushed making modifying skills easier.
@maxbachmann replaced the old python34 package with the generic python package installing a more modern python version on Red Hat systems. Many thanks for that!
This is a quick work-around allowing the gui to connect to core over the enclosure bus again. A change in the recently upgraded tornado made this fail.
The cli now always disregards the DEBUG message filter, relying solely on the log level setting.
The recent update of hotword config loading included a bug where the settings from different places wasn't merged correctly. This fix handles the merging properly.
@alumae submitted a PR to allow the usage of the porcupine hotword engine by picovoice. Many thanks for this awesome feature.
This release comes with many small updates and more excitingly a couple of new contributors
The API is now prepared for the comming update of the mycroft backend offering a geolocation api. This will enable retrieving coordinates from names of places.
--clean
option now exists allowing to wipe Mycroft from the system. Big thanks to @gbaptista, @maxbachmann for helping out with this.The latest release of msk adds License selections and the option to add a manifest.yml at skill creation time. And some splashes of color to make it more readable.
Python 3.8 is now included in the Travis tests and is running the mycroft stack nicely.
@domcross added a fallback to the en-us folder in case the .intent file doesn't exist. This allows skills that aren't fully translated to be loaded. Many thanks.
Yo it's my turn, do drop the mic, old python 3.4 will have to take a hike It's served long and well It's been nice, it won't go to hell
We've come a long way since the early days, we moved on and changed our ways first python two had to go It's 2019 and support for 3.4 is gone so we'll follow suite drop this snake, yo, hope you enjoyed this hot take.
Boom Mic drop.
So as the poetry slam entry above indicated, as of this version (19.8.3) we join the rest of the Python community and dropping support for Python 3.4. This was originally planned for 19.8.0 but the packaging changes for the Mark-1 wasn't completed and tested in time. This change will allow us to start updating a couple of the dependencies to newer versions. We now officially support Python 3.5 - 3.7, 3.8 is on the horizon.
The recognizer_loop:wakeword
message wasn't sent until after the STT was complete. Thanks to the work of @speedfox-uk the message is now sent as soon as the wakeword is detected.
In case of errors when starting up the TTS and STT systems would fail quitely, Error logging has been added and a fallback mechanism using the default services.
The simple send script in the messagebus used by some of the mycroft commandline tools (mycroft-speak, mycroft-say-to) has been sped up by not requiring the remote settings to be fetched.
In the process of dropping python gTTS was updated along with pillow (fixing a stability issue), and the
Due to a possible major bug (voice process going haywire and filling the disk) this release got moved forward a couple of days.
Especially the Mic Array v2 seemed prone to throw IO errors, this release adds a basic restart control allowing it to recover in some cases. The change also adds some extra safety to the mute/unmute operations which could theoretically cause an issue. In addition this resolves a possible issue with looping logging if an IOError occured.
The new MycroftSkill.ask_selection()
method adds a simple way of asking the user to choose between a number of options. Many thanks to @JarbasAl for designing it. Read more about the method in the api documentation
The restructuring of how the get_response()
or speak()
with exepect_response=True
methods triggers listening missed a special case on the Picroft platform. This small one-line change resolves the issue.
This release features mainly bugfixes for issues introduced in 19.8.0 but also a couple of very welcome improvements.
Big thanks to @cclauss for handling this and making the setup more standardized.
Recent updates has improved the stability during and after NTP updates so the reboot is no longer necessary.
Many thanks to @KishCom for updating the MaryTTS backend into a functional state.
@ChanceNCounter is to be commended for this little tweak making sure that the same dialog line isn't used twice in a row.
Attaches the listen trigger to the last chunk of a sentence instead of relying on the audio_output_end message.
@ChanceNCounter fixed an issue where the numbers were summed instead of returned as a list
Thanks to @ChanceNCounter the nice_duration now takes resolution as an argument.
__delitem__
method in Settings #2354At long last the 19.08 release is here.
During these last 8 weeks (time sure flies) we've focused on refactoring the code to improve maintainability and to make it easier to improve Mycroft in the future. This has led to some major shifts in the structure of Mycroft and some backwards-incompatible changes. Most of these changes was flagged in the 19.02.0 release and the ones that weren't generally doesn't impact skill developers.
MycroftSkill.settings.store()
and MycroftSkill.settings.set_changed_callback()
are deprecated and will be removed in v20.02. mycroft.skills.settings.save_settings()
will replace the first mentioned and MycroftSkill.settings_changed_callback
can be set replacing the second. Secondly this adds warning about features of the settingsmeta that hasn't been used since the switch to the new backend.During the coming month we will look through and mark more deprecated features...
The following are the breaking changes included in this major release
MycroftSkill.config
no longer exists. Any skill specific settings should be made using the settings.json in the skills folder.SkillManager
api was reworked and will not work as previously, locks are missing etc.record_utterances
was completely replaced with the save_utterances
Config.init()
to setup bus connections for the process configuration was replaced by Config.set_config_update_handlers()
Message
parameter (and member) type
was renamed to msg_type
WebSocketClient
was renamed to MessageBusClient
Refactors the SkillManager
, moving complex logic into a couple of helper classes SkillLoader
and SkillUpdater
. Refactors the startup code to a simpler flow. All of this makes the startup of skills much speedier.
Major restructure splitting the settings metadata from the actual settings. This restores the skill settings to a simple dict instead of a vastly complex object.
The MycroftSkill
class was refactored moving some of the complexity into helper classes. This also makes way for adding some mycroft skill Utils
The skill tester was reorganized to make the code easier to follow.
The TTS can now trigger pulseaudio role ducking of roles (like music and video) lowering playing media while Mycroft is speaking
The recording sent to STT lost a couple of audio frames right after the wake word trigger, this stores and prepends the lost frames to the STT data.
Precise download could fail due to network errors and never restart leaving the user with pocketsphinx wakeword. This allows retrying and will use an existing precise installation if available.
@vegerot contributed an update to the dev_setup.sh to make it work better on Fedora. Many thanks!
@fermulator fixed a couple of issues related to detecting Debian like OSes, this adds support for Mint among other distributions. Many thanks!
Long time contributor @JarbasAI found and fixed an issue with the keyword munging causing intents to fail if the intent contained the skill id. As always great work!
Fixes an issue when the playback of the utterance wouldn't start if the .pho file for a cached utterance was missing.
This warns if a conflict in Ubuntu could lead to packages being uninstalled.
the @intent_handler()
decorator can now be used with padatious .intent files as well as adapt intents.
Big thanks to @c0r73x for fixing these issues!
Many thanks to @cclauss for looking through the code and fixing these issues.
Instead use the builtin unittest.mock
. Many thanks to @mathmauney for contributing this.
Add a basic mock of the get_response()
bus method.
A simple tool for merging and viewing all mycroft log files.
This tool validates configuration files before storing them making it harder to destroy a config.
Make a dns lookup as part of the test to validate that part along with the reachability of the outside world.
Make sure the pairing check fails early if the identity information is missing and only initiate pairing for 401 errors from STT services behind mycroft pairing.
This is one of those general improvement releases with lots of minor and some major things making quite a noticeable difference.
The code surrounding the messagebus was heavily refactored and improved.
The voice config was read multiple times on boot resulting in up to 4 restarts of precise when starting the service. this was resolved by improving the configuration change detection and loading of the service.
The skill startup was reorganized slightly to load skills before trying to update as well as launch the settings fetching in a thread instead of blocking skill loading.
The TTS service was loaded twice on startup, a fix in handling the config hash fixed the issue.
@strugee submitted a couple of extra words for use when handling ask_yes_no()
. Many thanks for that.
Only report stt timing if an utterance was returned and report skill id for skill handlers.