Commit Graph

636 Commits (8a26a3769a30e59e07f6eb2853a63550ed4cd17c)

Author SHA1 Message Date
Åke Forslund 84e47fb25f Fix reloading skills system
==== Fixed Issues ====
One exemple is reloading pairing skill after skill update (30-60 seconds)
results in a new pairing code being generated.

====  Tech Notes ====
Now compare individual skill modification dates and not a global last
modified skill.
2017-10-16 17:54:03 -05:00
Åke Forslund 131b10e0fc wait for msm lock to be free before loading skills
====  Tech Notes ====
The msm lock wasn't checked before reloading skills allowing skills to be loaded before msm wasn't finished installing requirements.

A check was added to ensure this along with a separate lock enforcing the handling of block_msm and release_msm in the correct order. If not the update procedure could cause a deadlock.
2017-10-15 11:30:57 -05:00
Åke Forslund f70588cab7 Add message parameter to methods connected to ws 2017-10-15 11:30:57 -05:00
Michael Nguyen f6ee33a90e formatting fixes 2017-10-13 18:09:20 -05:00
Michael Nguyen f68be2a72c added safety net for null values in get settings 2017-10-13 18:09:20 -05:00
Åke 3e8b366642 Merge pull request #1151 from MycroftAI/feature/skill-settings
improved skill settings
2017-10-13 23:16:00 +02:00
Michael Nguyen 2623cb8cca added is_alive 2017-10-13 16:06:07 -05:00
Michael Nguyen 157c113678 fixed timer bug 2017-10-13 13:43:55 -05:00
Åke Forslund b40e03d859 Fix update interval after success
The interval was previously not updated after success (unless speak was set to
true). This caused the skills to continuously update.

Also set speak = false as default since that's the most commonly used
case right now.
2017-10-13 15:53:10 +02:00
Åke Forslund 7c0a3b2fe5 Fix codacy warnings. 2017-10-13 11:22:01 +02:00
penrods 3d64509b25 SkillManager, msm messagebus notifications
Significantly reworked the loading/updating of Skills.  Unified
all management under a single SkillManager class.  This class
runs as a thread that initially loads, upgrades (via MSM)
and reloads skills.

Removed the independent threads that were being run.  The skill
updating still happens once an hour, but works in conjunction
with the scan to reload modified skills.  Also added messagebus
notifications from MSM so mycroft-core can pause reloading
skills until the installation is complete.

Added a new mycroft.messagebus.send module to allow command
line interaction with the messagebus, e.g.:
   python -m mycroft.messagebus.send mycroft.wifi.start
   python -m mycroft.messagebus.send speak '{"utterance":"hello"}'

==== Fixed Issues ====
MSM installs that have PIP dependencies were failing, as the
load would occur after code was retrieved but before PIP install
completed.  Restart was required to load new skills.

====  Tech Notes ====
TODO: Change the way we manage modules.  The auto-load of the
remote configuration for the module is silly, slow and wasteful.

I made the WebsocketClient.build_url() method static in
anticipation of being able to do this more efficiently when the
submodule load doesn't hit the remove API automatically.

==== Localization Notes ====
Modified 'sorry I couldn't install default skills' message.

==== Protocol Notes ====
MSM now generates:
  msm.updating
  msm.installing
  msm.install.succeeded     { "skill" : name }
  msm.install.failed        { "skill" : name, "error" : code }
  msm.installed
  msm.updated
  msm.removing
  msm.remove.succeeded      { "skill" : name }
  msm.remove.failed { "skill" : name, "error" : code }
  msm.removed

An update can now be forced by posting 'skillmanager.update' to the
messagebus.
2017-10-13 02:21:58 -05:00
Michael Nguyen 614cc57d01 made some changes 2017-10-12 14:36:23 -05:00
Michael Nguyen cec098c442 update docstring 2017-10-12 13:32:50 -05:00
Michael Nguyen f3dacfb204 ==== Tech Notes ====
added capability to auto upload changes from settingsmeta.json to home.mycroft.ai

====  Documentation Notes ====
If a developer make changes to the settingsmeta.json, then this will be auto uploaded to home.mycroft.ai

==== Protocol Notes ====
hash and uuid are now stored as variables in files located in ~/.mycroft/skills/{skill-name}
2017-10-12 12:35:50 -05:00
Augusto Monteiro 'Sparky e39c38ff3c Updating version when device is update 2017-10-11 14:36:12 -05:00
Matthew D. Scholefield ef1a6e24c3 Upgrade padatious to fix travis build 2017-10-06 00:06:08 -05:00
Matthew D. Scholefield b6bc4ee482 Increment padatious version number to 0.3.3
This adds a bugfix for empty containers
2017-10-04 21:50:54 -05:00
Matthew D. Scholefield 43a59b0d88 Fix Padatious to load intents and entities
Doesn't make sense to add intents since no sample lines are provided
2017-10-04 21:45:21 -05:00
Åke 6acc0adb40 Merge pull request #1128 from MycroftAI/feature/to-apache-license
Change to Apache 2.0 license from GPLv3.0
2017-10-04 09:13:40 +02:00
penrods d49ec3616f Fixing PEP8 whitespace errors 2017-10-04 01:44:58 -05:00
penrods 8f2e5d9498 Change to Apache 2.0 license from GPLv3.0
This commit officially switches the mycroft-core repository from
GPLv3.0 licensing to Apache 2.0.  All dependencies on GPL'ed code
have been removed and we have contacted all previous contributors
with still-existing code in the repository to agree to this change.

Going forward, all contributors will sign a Contributor License
Agreement (CLA) by visiting https://mycroft.ai/cla, then they will
be included in the Mycroft Project's overall Contributor list,
found at: https://github.com/MycroftAI/contributors.  This cleanly
protects the project, the contributor and all who use the technology
to build upon.

Futher discussion can be found at this blog post:
https://mycroft.ai/blog/right-license/

This commit also removes all __author__="" from the code.  These
lines are painful to maintain and the etiquette surrounding their
maintainence is unclear.  Do you remove a name from the list if the
last line of code the wrote gets replaced?  Etc.  Now all
contributors are publicly acknowledged in the aforementioned repo,
and actual authorship is maintained by Github in a much more
effective and elegant way!

Finally, a few references to "Mycroft AI" were changed to the correct
legal entity name "Mycroft AI Inc."

==== Fixed Issues ====
#403 Update License.md and file headers to Apache 2.0
#400 Update LICENSE.md

====  Documentation Notes ====
Deprecated the ScheduledSkill and ScheduledCRUDSkill classes.
These capabilities have been superceded by the more flexible MycroftSkill
class methods schedule_event(), schedule_repeating_event(), update_event(),
and cancel_event().
2017-10-04 01:28:44 -05:00
Åke b850143824 Merge pull request #1117 from forslund/bugfix/inspect-failure
Add workaround for inspect-decorator problem
2017-10-04 07:08:15 +02:00
Matthew D. Scholefield 32ac6a83da Fix Padatious parameter 2017-10-03 19:31:37 -05:00
Matthew D. Scholefield 403aeb9360 Upgrade Padatious to 0.3.2 which brings in entity support 2017-10-03 12:17:02 -05:00
Jarbas f5806b86c5 fallback start, end, failure messages (#1108)
==== Tech Notes ====
Add mycroft.skill.handler.start and mycroft.skill.handler.complete to fallback handler. handler in data field will be called "fallback" upon completion the used handler will be reported in the "fallback_handler" data entry.

* fix

* pep8

* fallback handler name
2017-09-28 17:53:57 +02:00
Åke Forslund 838e2dd7d8 Remove repeating events from saved schedule
====  Tech Notes ====
Repeating events are not saved to make sure repeating events aren't
stacked over and over.
2017-09-28 02:24:34 -05:00
Åke Forslund 5d9574ea4f Reorder canceling and adding event handling
====  Tech Notes ====
If cancel + add event messages arrive at roughly the same time the add
would be overridden by the cancel. More intuitive to handle cancel first
and add new arrived events after.
2017-09-28 02:24:34 -05:00
Åke Forslund 1d0e65dfb1 Fix update_event and cancel_event methods
====  Tech Notes ====
update_event and cancel_event did not use a name unique to the skill
forcing the user to build it themselves. Now the unique name is
constructed in the method _unique_name() for all event scheduling
methods.
2017-09-28 02:24:34 -05:00
Åke Forslund 68a96b40b0 Add workaround for inspect-decorator problem
====  Tech Notes ====
when using multiple decorators on a method inspect will return incorrect
values despite @wraps. This causes the intent handler to fail to
execute.

@decorator can't really be of help here since it doesn't handle
decorators with arguments (as far as I can understand)

This is a workaround using the fact that the argument count will be zero
on methods with multiple decorators, and basically tries the usual
signatures
2017-09-26 19:11:33 +02:00
Matthew D. Scholefield 5e392f34aa Optimize imports
Remove unused imports and group local vs external alphabetically
2017-09-18 16:07:50 -05:00
Matthew D. Scholefield cfdc405da5 Add new LOG class 2017-09-18 13:56:06 -05:00
Åke Forslund f756673bff Start network check faster
====  Tech Notes ====
The network check is now only delayed until priority skills have been
loaded (this includes the relevant pairing skill)
2017-09-15 06:48:39 -05:00
Åke Forslund a100d2a6dc Refactor priority skill loading
====  Tech Notes ====
- Set pairing as a priority skill by default
- Move priority loading to separate function
2017-09-15 06:48:39 -05:00
Jarbas 82b49c1397 Jarbas work adding priority skill loading 2017-09-15 06:48:39 -05:00
Åke Forslund cf9aafa765 Add data to the information of running skill
==== Tech Notes ====
The handler name (including class if available) is sent along in the
data field. If an exception is raised an exception field in the data is
added with minor information of the problem.
2017-09-14 16:38:54 -05:00
Åke Forslund 1d6da7d37d Add messages for skill handler's starting/stopping
====  Tech Notes ====
Add message bus messages when a skill handler is starting to execute and
a separate message for when skill handler completes. Usable if grouping
speech in certain clients for example. Can also be of use for audio
ducking and similar processes.

==== Protocol Notes ====
Adds the following messages:
mycroft.skill.handler.start
mycroft.skill.handler.complete
2017-09-14 16:38:54 -05:00
Åke Forslund a33c07621b Reduce configuration loading in module scope
====  Tech Notes ====
Autoloading configuration in submodules is bad for testing purposes and
should be reduced. It takes time and adds the possibility of altering
the base conditions for the tests

- mycroft/skills/core: global configuration moved to main.py
- mycroft/messagebus/client/ws.py global config moved to __init__ of
Websocket
- client/speech/mic.py global config moved to ResponsiveRecognizer
__init__() method
- client/enclosure/display_manager.py
 - get_ipc_directory() called in methods where used
2017-09-13 12:51:48 -05:00
Åke Forslund 14f931e046 Fix send pairing utterance before loading skills
====  Tech Notes ====
Add a wait until skills have been loaded once before checking for
internet connection. If not an "I'm sorry I didn't catch that" may be
emitted since the pairing skill isn't loaded.
2017-09-13 12:49:31 -05:00
Åke Forslund 31701fc05d Add more safety around the context manager
====  Tech Notes ====
- Sanity check Message in handle_add_context(), 'word' needs to be a
string before calling into the context manager.
- Sanity check Message in handle_remove_context(), make sure a context
keyword was received before trying to remove.
- Docstrings
- Suppress exceptions while injecting context
2017-09-13 12:44:35 -05:00
Åke Forslund 5ddf1250ab Fix issues discovered by codacity. 2017-09-12 15:07:20 -05:00
Åke Forslund df8fe650c8 Update docstrings after PR feedback 2017-09-12 15:07:20 -05:00
Åke Forslund f1c6912d43 Add event scheduler
====  Tech Notes ====
A single thread handling scheduled events. The skills interact with this
using the self.schedule_event() self.schedule_repeating_event
self.update_event() and self.remove_event().

This is an improvement over scheduledSkill since each skill creates
their own Thread and has to handle storing/restoring scheduled events
between starts.

All pending events are stored in a json file at shutdown for future
sessions.

====  Documentation Notes ====
Needs to be documented

==== Protocol Notes ====
new messagebus event handlers:
- mycroft.scheduler.schedule_event
- mycroft.scheduler.remove_event
- mycroft.scheduler.update_event
2017-09-12 15:07:20 -05:00
Åke Forslund 72a318cd92 make skill id hash of skill directory
====  Tech Notes ====
To ensure that the skills have the same id when loading the id was
replaced with a hash of the skill directory. (as long the skill isn't
 renamed). This is useful for things like the event_scheduler where
skills are referenced using the skill id and has info being persistent
over restarts
2017-09-11 19:43:02 -05:00
Matthew D. Scholefield 9efcc01ce0 Update padatious 2017-09-06 19:22:33 -05:00
Åke 27dba0c786 Merge branch 'dev' into make_message_optional 2017-09-01 21:29:16 +02:00
Åke Forslund c7c25cc01b Fix errors during shutdown
====  Tech Notes ====
Skills weren't cleanly shutdown. This ensures that skills are shutdown more cleanly and that shutdown procedure will not be interrupted by broken shutdown methods.

Shutdown of reload thread fixed

Unused globals removed
2017-09-01 10:53:22 -05:00
Åke Forslund 2881b1842f Setting storage is no longer forced at shutdown
Risk of corruption if the skill service was terminated while settings
were written was determined to be greater than any benefit from this.
2017-09-01 10:45:05 -05:00
Åke Forslund 0782064819 Write settings dict to disk more frequently
====  Tech Notes ====
After an intent has been handled the settings will be stored if any changes are detected.

A force option was added to the .store method of the settings class which always writes the dict to disk even if no changes has been made. This is used during shutdown.
2017-09-01 10:45:05 -05:00
Michael Nguyen 995d67e612 Merge pull request #1018 from forslund/bugfix/issue-1014
Bugfix/issue 1014
2017-08-31 15:59:32 -05:00
Michael Nguyen 2dc6e47bea Merge pull request #1020 from forslund/bugfix/issue-1019
Fix expect response for speak_dialog
2017-08-31 15:58:54 -05:00
Michael Nguyen e7775d26d0 Merge pull request #1026 from forslund/bugfix/issue-1022
Fix failure when using one_of in intents
2017-08-31 15:58:38 -05:00
Michael Nguyen 2dab08f483 Merge pull request #1035 from forslund/bugfix/localization
Bugfix/localization
2017-08-31 15:58:02 -05:00
Åke Forslund 144e9c016c Automatically find skill directory in __init__
====  Tech Notes ====
Previously the _dir parameter was poplated from the skill loader between calling __init__() and initialize(). The skill path can however be gleaned from with in the __init__() of MycroftSkill.

Doing this makes the settings accessable from __init__() as well and will allow a more straight forward usage.
2017-08-31 15:54:46 -05:00
Åke Forslund d746a87e34 Added docstring for update_context
Including note about not working on one_of keywords.
2017-08-31 21:34:30 +02:00
Åke Forslund de8dff6320 defaulting to TimeRulesEnUs now works
====  Tech Notes ====
Wheb a language without time rules were defaulted back to us-english
time rules the class was instanciated prematurely. Now the default
returns a class and not an object.
2017-08-31 00:18:43 +02:00
Åke Forslund 7022239456 Fix failure when using one_of in intents
==== Fixed Issues ====
#1022

====  Tech Notes ====
When a one_of intent is hit the intent returned by adapt doesn't look like normal require/optional intent parameters. This PR adds a check for entities before trying to accessing them when trying to update context.

This is a temporary workaround while it's determined if the adapt behaviour is correct or should be modified to conform to the normal format. (See issue 66 in the adapt repo), but in any case it's a good sanity check
2017-08-29 09:05:29 +02:00
Åke Forslund b44b2914af Fix expect response for speak_dialog
==== Fixed Issues ====
the expect_response pararmeter is now correctly passed along to
self.speak()

====  Tech Notes ====
NONE - explain new algorithms in detail, tool changes, etc.

====  Documentation Notes ====
NONE - description of a new feature or notes on behavior changes

==== Localization Notes ====
NONE - point to new strings, language specific functions, etc.

==== Environment Notes ====
NONE - new package requirements, new files being written to disk, etc.

==== Protocol Notes ====
NONE - message types added or changed, new signals, APIs, etc.
2017-08-25 14:26:33 +02:00
Åke Forslund 34a527b130 Add warning if skill isn't properly removed 2017-08-25 11:15:50 +02:00
Åke Forslund 3be861cee2 Fix trailing references causing memory leak
==== Fixed Issues ====

====  Tech Notes ====
This PR corrects a couple of small issues led to skills being left in memory when.
- Handler for `stop.mycroft` weren't removed from event emitter when
skill shut down. Now is added using `self.add_event()`
- registered intent list `self.events` created a circular reference that
python couldn't resolve a live so this is now deleted at shutdown
- Timers in scheduled skills weren't terminated properly. Now if the
timer is alive it will be joined

====  Documentation Notes ====
Registring event handlers should use `self.add_event` instead of
`self.emitter.on()` To make sure they are cleaned up when skill is
terminated.

==== Localization Notes ====
NONE - point to new strings, language specific functions, etc.

==== Environment Notes ====
NONE - new package requirements, new files being written to disk, etc.

==== Protocol Notes ====
NONE - message types added or changed, new signals, APIs, etc.
2017-08-25 11:15:50 +02:00
ginanjar azie 41c7921bbb make message parameter on intent handler optional 2017-08-24 11:15:25 +07:00
Åke Forslund dea591e9b8 Cleanup imports 2017-08-22 08:45:06 +02:00
Åke Forslund e61b516ea1 Add more docstrings 2017-08-22 07:40:28 +02:00
Åke Forslund 12bf78cd5f Move funcs only used in skill_tester from core.py
====  Tech Notes ====
Some functions have been orphaned in core.py and are only used in the
tests. To clean up these have been moved to where they're used.
2017-08-21 15:59:48 +02:00
Åke Forslund bb0fbb51ed Cleanup skill service main
====  Tech Notes ====
Minor cleanup and comments
2017-08-21 15:59:48 +02:00
Åke Forslund ebcbbd3a60 Fix skill container
==== Fixed Issues ====
#1007

====  Tech Notes ====
The converse system changed the api for the load_skill() function this
since the skill_container wasn't updated accordingly it stopped working.
This PR makes updates the container to use the new interface.
2017-08-21 15:09:51 +02:00
Jarbas f04f5107e7 small fix (#1005) Rebase issues with converse method
====  Tech Notes  ====
- Use skill id instead of name
- use time() function correctly
2017-08-21 09:18:01 +02:00
Åke Forslund eb4991ade9 Fix multiple reloads of skills at startup
==== Fixed Issues ====
#1001

====  Tech Notes ====
Previously the skills were reloaded a couple of times during startup
since updates of the .pyc file and possible the settings.json file were
made.

This commit adds a bit finer control over which files to check.
Currently all files in skill root except ones ending in .pyc and the
settings.json are checked along with all visible subdirectories
2017-08-18 11:41:14 +02:00
Michael Nguyen f2f5925b09 fixing issue 998 2017-08-17 22:05:49 -05:00
Matthew D. Scholefield 9de5a13659 Add decorator support for intent files and fix regular decorator 2017-08-17 16:01:11 -05:00
Matthew D. Scholefield 7b28e7e61d Make PadatiousService inherit from FallbackSkill to fix new fallback changes 2017-08-17 16:01:11 -05:00
Matthew D. Scholefield e3da4dbcb8 Train on initialization in case no intents are added 2017-08-17 16:01:11 -05:00
Matthew D. Scholefield 3aa52273f4 Add notification when padatious not installed 2017-08-17 16:01:11 -05:00
Matthew D. Scholefield 69d17a373b Create PadatiousService and add padatious to requirements.txt 2017-08-17 16:01:11 -05:00
Jarbas d661b8d2e7 Add conversational support to skill system
The most recently used skills now have an opportunity to preview all
utterances before they hit the intent system.

==== Tech Notes ====
Skills get a preview in the order of activation -- most recent first --
and if they can consume the utterance or ignore it. If consumed,
processing stops. If ignored, the next most recent skill gets a shot
at it. Finally, if no skill consumes it the intent system takes over,
running as it always has.

Skills remain "active" for 5 minutes after last use.

A skill achieves this by implementing the converse() method, e.g.

def def converse(self, utterances, lang="en-us"):
    if .... :
        return True  # handled, consume utterance
    else:
        return False  # not for this skill, pass it along
2017-08-17 12:09:17 -05:00
Åke Forslund 811cbdb6da Remove requrement to build Intents
====  Tech Notes ====
IntentBuilder objects always need to be built into an Intent to be
usable in mycroft. Since this is always neccessary the code doing this
can be moved so users don't need to do this step.

This commit makes the `register_intent()` method check the handler
argument type, if it's an IntentBuilder object it builds the Intent, if
it's an Intent it continues as normal, if it's any other type it will
raise a ValueError
2017-08-17 11:49:00 +02:00
harika 4c3dd3aa7c Updating skill_tester to automate skills testing(regression) 2017-08-17 02:05:02 -05:00
harika 632df2a498 Update tests 2017-08-17 02:05:02 -05:00
Åke Forslund f19ac28a5c Add some safety to the add/remove context methods
====  Tech Notes ====
Invalid context or word arguments will now raise ValueError
2017-08-15 21:27:19 -05:00
Åke Forslund b1082d4b27 Only use latest meaning of each keyword 2017-08-15 21:27:19 -05:00
Åke Forslund 242770aa94 Update context config options
- options grouped under "context"
- added option to activate "greedy" context gathering
2017-08-15 21:27:19 -05:00
Åke Forslund d7cbe3065a Add decorators making context management easier 2017-08-15 21:27:19 -05:00
Åke Forslund c9b19cb97e Fix remove_context
Also remove debug prints
2017-08-15 21:27:19 -05:00
Åke Forslund 471a8d8360 Add configuration settings for using adapt's context 2017-08-15 21:27:19 -05:00
Åke Forslund b9a054e669 Manual context injection
A skill can inject context to enable and disable intent handlers
automatically depending on previous conversation.
2017-08-15 21:27:19 -05:00
Åke Forslund 1d7d02161d Add a default shutdown method for fallback skills
====  Tech Notes ====
Adds a shutdown method that removes all handlers registered by the
current instance.
2017-08-09 14:24:21 +02:00
Åke Forslund c363662b67 Remove need for name parameter
====  Tech Notes ====
If name is not provided the class name will be used
2017-08-09 14:18:14 +02:00
Åke Forslund 7f5f1ac2c1 Fix double __init__ in MycroftSkill
==== Fixed Issues ====
NONE

====  Tech Notes ====
During earlier rebase it seems like a double instance of __init__ got
into MycroftSkill.

====  Documentation Notes ====
NONE

==== Localization Notes ====
NONE

==== Environment Notes ====
NONE

==== Protocol Notes ====
NONE
2017-08-09 13:31:55 +02:00
Matthew D. Scholefield 6f1a2dbe55 Convert static methods in FallbackSkill to class methods
This makes it more concise and mimics the behavior of self, but for static methods
2017-08-03 13:49:32 -05:00
Matthew D. Scholefield 3b6942a250 Move intent fallback behavior to new FallbackSkill base class 2017-08-03 13:49:32 -05:00
Matthew D. Scholefield 4afe6687c4 Fix intent failed messages before running fallbacks 2017-08-03 13:49:02 -05:00
Matthew D. Scholefield a86f0478a4 Add intent fallback system
Also removes multi utterence intent fail. Only makes sense to emit an intent_failure regardless of the amount of intents
2017-08-03 13:49:02 -05:00
Åke Forslund db6127a0ed Catch exceptions in user provided stop() method
==== Fixed Issues ====
#960

====  Tech Notes ====
The messagebus handler for "mycroft.stop" halts and exits if an
exception occurs in any methods that are registered to that name. The
handler executes the stop() method that's provided by the user and is
not verified. To ensure that other skills are unaffected exceptions in
the user provided method are caught.

====  Documentation Notes ====
NONE - things like description of a new feature or notes on behavior
changes

==== Localization Notes ====
NONE - point out new strings, functions needing international versions,
etc.

==== Environment Notes ====
NONE - new package requirements, new files being written to disk,
etc.

==== Protocol Notes ====
NONE - message types added or changed, new signals, etc.
2017-08-03 14:14:31 +02:00
Åke e7c55aaa43 Merge pull request #933 from MycroftAI/feature/skill-configuration
Feature/skill configuration
2017-08-02 08:57:28 +02:00
Michael Nguyen 48b26d1fbd added new test and put back is_stored property 2017-08-01 13:52:51 -05:00
Åke Forslund 9c49f97421 Audio service is_playing property 2017-07-31 13:37:18 +02:00
Åke Forslund 6f37d3c8f8 Fix bug in track_info_method
* import Message to allow audio service to reply info
* Add default message to audio service class
2017-07-31 13:37:18 +02:00
Åke Forslund 839803c958 Rename messages.
As requested by Augusto Monteiro
2017-07-31 13:37:17 +02:00
Åke Forslund 86a557e1ac Docstrings! 2017-07-31 13:37:17 +02:00
Åke Forslund c81ad57ebf Populate AudioService class with more methods
Pause, resume, next and previous added to the interface.
The play method was updated to add 'file://' to uri's lacking uri type.
2017-07-31 13:37:17 +02:00
Åke Forslund 5c874677cc Add check for valid type of tracks 2017-07-31 13:37:17 +02:00
Åke Forslund 44a7c5ec0c Fix playback_control skill 2017-07-31 13:37:17 +02:00
Åke Forslund 2270448fff Fix pep8 errors 2017-07-31 13:37:17 +02:00
Åke Forslund 3001dd5a83 Move backend base class to audio/services 2017-07-31 13:37:17 +02:00
Åke Forslund c7ad6b11bb Move audio service to separate process. 2017-07-31 13:37:17 +02:00
Åke Forslund ac5bd17041 Add chromecast service
Chromecast can be manually added with a backend entry with type set to "chromecast" or the service can autodetect all chromecast and register them with their names by setting the Audio configuration parameter autodetect-chromecast set to true.

Currently this implementation is very basic and is using the default media controller. This limits the usable uri's to http(s), adding support for local files and hopefully more services will be added later.
2017-07-31 13:37:17 +02:00
Åke Forslund 67502372bf fix pep8 issues 2017-07-31 13:37:17 +02:00
Åke Forslund e55cd018f2 Activate default-backend option 2017-07-31 13:37:17 +02:00
Åke Forslund b098f2ad30 Make sure mopidy startup doesn't block 2017-07-31 13:37:17 +02:00
Åke Forslund ee5141ed6f Make all audio backend build on the base class
Abstract base class is now a bit more lenient
2017-07-31 13:37:16 +02:00
Åke Forslund 34dd679d3e Fix mopidy configuration 2017-07-31 13:37:16 +02:00
Åke Forslund 8686cade3b Update service alias to use config name 2017-07-31 13:37:16 +02:00
Åke Forslund 06a9eb7ee5 Initial update to follow changes in mycroft 2017-07-31 13:37:16 +02:00
Åke Forslund e6723b2a56 Add backend selection
The user can now specify which backend to use to play media. default the keywords are the name of the backend (vlc, mpg123, mopidy) but can be set with the config.

Example:
audio.mopidy.name = "livingroom"

A possible user interaction might be

- "Hey mycroft, play the news in the livingroom"

The detection is very basic and not very elegant but works as a proof of concept.
2017-07-31 13:37:16 +02:00
Åke Forslund 8078bdd4c2 Correct return value from track_info 2017-07-31 13:37:16 +02:00
Åke Forslund 37b8c17121 Add name property to VlcService 2017-07-31 13:37:16 +02:00
Åke Forslund 4af620c968 Add configuration handling for mpg123 backend 2017-07-31 13:37:16 +02:00
Åke Forslund 7ea387988d Add vocab dir to project 2017-07-31 13:37:16 +02:00
Åke Forslund a28a435ddf Add configuration options 2017-07-31 13:37:16 +02:00
Åke Forslund 26e63cdff3 Add abstract base class for audio backends 2017-07-31 13:37:16 +02:00
Åke Forslund 717c6fa49b Add track_info to audio service connection 2017-07-31 13:37:16 +02:00
Åke Forslund f596992a88 Remove unused vocabulary. 2017-07-31 13:37:16 +02:00
Åke Forslund 89d4cc5f0a Add basic configuration to activate services 2017-07-31 13:37:16 +02:00
Åke Forslund 89adf6e8ac Initial commit of audio service
Three backends have been added, mopidy, vlc and mpg123. Depending on uri type an apporpriate service is selected when media playback is requested. (for example mopidy service can handle spotify://... and local://...)

A playback Control skill can pause, resume, stop change track, etc any started media. So for example if the NPR news skill used this after starting playing the news the user can say "Hey Mycroft, pause" and the playback will pause. The playback control also handles stuff like lowering the volume of the playback if mycroft is asked another question.

Currently the different backend runs under the playbeck control, this was made most for convenience and the services should be moved in the future.

Usage:
The user needs to import the audioservice interface
`from mycroft.skills.audioservice import AudioService`

and initialize an instance in the skill `initialize` method

`self.audio_service = AudioService(self.emitter)`

Then playing an uri is as simple as

`self.audio_service.play(uri)`

TODO:
* Configuration (Alias for the different backends, service specific config, active services, etc.)
* Manual selection of backend (This is prepared in the audioservice interface biut not implemented)
* More feature complete audio service interface (playback control, get trackname etc)
* Separate audio services from the playback control
* Probably lots more
2017-07-31 13:37:16 +02:00
Michael Nguyen 05852f30ef removed logger messages 2017-07-28 15:08:33 -05:00
Michael Nguyen 0c0bc6fd34 fixed bugs 2017-07-28 13:42:18 -05:00
Michael Nguyen 1e8ee03674 fixed pep8 issues 2017-07-27 16:38:24 -05:00
Michael Nguyen 37ada28dbd refactored skill settings and fixed test 2017-07-27 16:28:32 -05:00
Steve Penrod e8e0853825 Merge pull request #838 from MycroftAI/feature/display_state_manager
Feature/display state manager
2017-07-21 19:58:07 -05:00
Åke Forslund 6f41964796 Make name parameter optional.
==== Fixed Issues ====

==== Tech Notes ====
Uses supplied name parameter if present, otherwise uses name of class.

==== Documentation Notes ====
The skill creation documentation should mention that the name parameter
is only an option.

==== Localization Notes ====
NONE

==== Environment Notes ====
NONE

=== Protocol Notes ====
NONE
2017-07-19 16:47:26 -05:00
Matthew D. Scholefield 90aff68034 Reverting "Add intent fallback system (#899)"
This is because this will break wolfra alpha skill unless they update
skills, but if they update before getting the new version, it will also
break wolfram

This reverts commit 6ca4161335.
2017-07-14 17:53:42 -05:00
Matthew D. Scholefield 6ca4161335 Add intent fallback system (#899)
* Create new FallbackSkill base class for implementing fallback behavior
Also removes multi utterance intent fail. Only makes sense to emit an intent_failure regardless of the amount of intents
2017-07-14 17:27:26 -05:00
Michael Nguyen 6eb1c194cb add try except 2017-07-11 18:19:21 -05:00
Michael Nguyen 00bde77400 fixed test 2017-07-11 16:19:05 -05:00
Michael Nguyen b891e03511 implement patch functionality, chaged json structure 2017-07-11 15:25:43 -05:00
penrods e307df2bb4 Duplicate service hack #2... performing check in the Enclosure client after a
60 second delay.  The packaging system was preventing the previous approach
from rebooting.
2017-07-10 23:22:29 -05:00
penrods b6cc47a1a4 Hack to deal with a silly problem happening during upgrade of a Mark 1 from a
0.8.17 or earlier build.  A Series of Unfortunate Events leads to two instances
of the mycroft-skills service running.  This causes double-answers, which is
confusing to everyone.  The root problem that lead to this is corrected in
release 0.8.18, but resolving it in packaging is ridiculously difficult.

So, we'll do this simple hack for the interim.  It is harmless and useless if
not running in the Mark 1 environment.
2017-07-10 22:12:59 -05:00
Michael Nguyen f62a771e28 merge changes 2017-07-06 16:59:26 -05:00
Åke Forslund 28c15eb64e Fix subprocess.call() issue and add error logging. 2017-07-06 15:29:19 -05:00
Michael Nguyen f361392628 Merge branch 'dev' of https://github.com/MycroftAI/mycroft-core into feature/skill-configuration 2017-07-06 12:40:50 -05:00
Michael Nguyen bf48d7b6fb [WIP] need to implement PATCH 2017-07-06 12:40:21 -05:00
Åke Forslund 653d1e6f5e Change logging level for missing dialog/vocab to debug 2017-07-05 19:37:33 +02:00
Åke Forslund 54783a1dd1 Minor cleanup 2017-07-05 19:35:26 +02:00
Åke Forslund a2644bc97c Load data files and decorated intent handlers automatically. 2017-07-05 19:35:26 +02:00
Åke Forslund eb6cd79e52 Minor cosmetic fixes
- underscore in front of variables/methods not intended for users
- docstrings
- remove debug printout
2017-07-05 19:35:26 +02:00
Åke Forslund 7955feaec7 Add support for decorating handlers with intents 2017-07-05 19:35:26 +02:00
Michael Nguyen b6a7234be3 Merge branch 'dev' of https://github.com/MycroftAI/mycroft-core into feature/skill-configuration 2017-06-30 17:36:08 -05:00
Michael Nguyen 01d8a0caf7 [WIP] need to add PATCH for settingsmeta.json 2017-06-30 17:36:04 -05:00
Åke 97af70bb86 Merge pull request #857 from JarbasAI/patch-16
Read Blacklisted skills from config
2017-06-30 22:08:01 +02:00
Jarbas 2c0ed93e4b pep8 2017-06-30 20:27:33 +01:00
Steve Penrod 96c08189ed Revert "This add comments to document the message class" 2017-06-30 00:41:20 +02:00
Jarbas ebe1c7fcea use get 2017-06-29 21:44:21 +01:00
Jarbas 8af5ce09cf read blacklisted skills from config 2017-06-29 20:36:02 +01:00
Art McGee 355225ee3d Merge branch 'dev' into amcgee7_docs 2017-06-29 07:17:19 -07:00
Michael Nguyen d3621b7fca [WIP] refactored 2017-06-28 17:31:35 -05:00
Michael Nguyen 344d53cc7e [WIP] 2017-06-28 11:35:25 -05:00
Michael Nguyen e3b4e7c6e3 [WIP] modify settings.py to post metadata to api, and get settings form api 2017-06-28 11:32:19 -05:00
Åke Forslund e7b2665f80 Enable config updates for skills in container 2017-06-26 13:52:52 -07:00
Augusto Monteiro 'Sparky a4cfd76639 #706 - checking network connection 2017-06-26 13:48:09 -07:00
Augusto Monteiro 'Sparky 8e49947a03 #706 - saying that isn't connected 2017-06-26 13:48:09 -07:00
Augusto Monteiro 'Sparky 6485018bb7 #706 - fixing on raspberry msm 2017-06-26 13:48:09 -07:00
Augusto Monteiro 'Sparky 253e3bdc66 #706 - Using configuration to get msm bin 2017-06-26 13:48:09 -07:00
Augusto Monteiro 'Sparky d09febf3eb #696 - checking connection 2017-06-26 13:48:09 -07:00
Augusto Monteiro 'Sparky e34608e2f9 #696 - listening on connected 2017-06-26 13:45:23 -07:00
Augusto Monteiro 'Sparky ec9746d933 #696 - installing skills on connect 2017-06-26 13:45:23 -07:00
Chris ca9116f87c Fixed typo
There was a typo ("Lodaded" instead of "Loaded") which I have fixed
2017-06-26 13:45:23 -07:00
Åke Forslund 9f5c1d1582 Move ignore SIGCHLD to entry points.
Ignoring SIGCHLD trips up unittests, this was done as the unittest loaded mycroft.skills.core
2017-06-26 13:45:23 -07:00
Åke Forslund 5ac2e5f51e Check if settings have changed with simple hash 2017-06-22 08:36:33 +02:00
Michael Nguyen c0b603ab51 state manager implemented 2017-06-16 13:31:44 -05:00
Steve Penrod c824c03611 Feature/onboarding bug (#811)
* Implementing changes to out-of-the-box experience, providing an "onboarding" process.

* Added a mycroft.api.is_paired() method
* Added mycroft.util.is_speaking and mycroft.util.wait_while_speaking() methods
* RESET now waits for the spoken notice to complete
* Stopped the "Checking for updates" and "Skills updated" prompts (commented out for now, probably will eliminate)
* Wifi setup filters out hidden ("x00") networks
* Visemes should keep up better if they get behind (will skip)
* Mimic is now searched for on the users path
* Onboarding process:
  - wifi setup starts automatically
  - User is walked through the process
  - wake word and button pressing are ignored
  - At end, a short tutorial is given

* Fixing pep8 whitespace errors... grrr

* Typo in onboarding changes prevented pairing for auto-starting

The command "pair my device" needed to be sent as an array, ["pair my device"]
2017-06-07 19:40:34 -05:00
penrods ffc3f6ec60 Implementing changes to out-of-the-box experience, providing an "onboarding" process.
* Added a mycroft.api.is_paired() method
* Added mycroft.util.is_speaking and mycroft.util.wait_while_speaking() methods
* RESET now waits for the spoken notice to complete
* Stopped the "Checking for updates" and "Skills updated" prompts (commented out for now, probably will eliminate)
* Wifi setup filters out hidden ("x00") networks
* Visemes should keep up better if they get behind (will skip)
* Mimic is now searched for on the users path
* Onboarding process:
  - wifi setup starts automatically
  - User is walked through the process
  - wake word and button pressing are ignored
  - At end, a short tutorial is given
2017-06-07 11:45:06 -05:00
kfezer 3988da5ffb Merge pull request #692 from forslund/feature/issue-691
#691 - adding setting per skill
2017-05-30 16:47:33 -07:00
Åke Forslund 986cf55d1b Use exit status of msm to determine install success
- msm will now return immediately if an error occurs
- install_default_skills now checks exit status instead of text output
2017-05-23 07:47:06 +02:00
Åke Forslund bcd7776a38 Fix grammar issue. 2017-05-20 08:31:39 +02:00
Åke Forslund 3a71f85301 Replace load_settings() with a settings property
settings are now loaded and created when required and not directly at
load of skill.
2017-05-20 08:31:22 +02:00
Åke Forslund 0ef94689bf Add docstrings. 2017-05-20 08:31:07 +02:00
Åke Forslund e79dee92e9 Only store settings object after new write 2017-05-20 08:30:31 +02:00
Åke Forslund 40010e90f0 Store settings object on shutdown 2017-05-20 08:30:07 +02:00
Åke Forslund b6a34f8cee Add skill settings to skills 2017-05-20 08:29:05 +02:00
Åke Forslund 4912573cab Remove ignoring SIG_CHLD
Ignoring SIG_CHLD can be convenient but parts of the python standard
library relies on the behaviour of SIG_CHLD and will not work correctly
in this configuration.
2017-05-20 08:16:52 +02:00
penrods 3c2b78c670 Stopping attempt to perform Skill Update unless connected to the internet
Stopping attempt to perform Skill Update unless connected to the internet.  Also added translatable versions of spoken messages.
2017-05-18 16:53:10 -03:00
Åke Forslund c89cb36670 Enable config updates for skills in container 2017-05-18 16:53:10 -03:00
Augusto Monteiro 'Sparky f9463da857 #706 - checking network connection 2017-05-18 16:51:17 -03:00
Augusto Monteiro 'Sparky a5bdc3e134 #706 - saying that isn't connected 2017-05-18 16:51:17 -03:00
Augusto Monteiro 'Sparky 7789db4e3c #706 - fixing on raspberry msm 2017-05-18 16:51:17 -03:00
Augusto Monteiro 'Sparky cbd2bf99d8 #706 - Using configuration to get msm bin 2017-05-18 16:51:17 -03:00
Augusto Monteiro 'Sparky 190a72da8d #696 - checking connection 2017-05-18 16:51:17 -03:00
Augusto Monteiro 'Sparky 92bc82be15 #696 - listening on connected 2017-05-18 16:49:07 -03:00
Augusto Monteiro 'Sparky 6a0f608207 #696 - installing skills on connect 2017-05-18 16:49:07 -03:00
Chris b1abdba19c Fixed typo
There was a typo ("Lodaded" instead of "Loaded") which I have fixed
2017-05-18 16:49:07 -03:00
Åke Forslund 484d4a9ce3 Move ignore SIGCHLD to entry points.
Ignoring SIGCHLD trips up unittests, this was done as the unittest loaded mycroft.skills.core
2017-05-18 16:49:07 -03:00
Augusto Monteiro 'Sparky 650df97f0e #683 - removing msm path configuration 2017-05-18 16:49:07 -03:00
Åke Forslund ae38e90ec7 Fix skill container.
Switch from Intent to IntentService.
2017-05-18 16:49:07 -03:00
Augusto Monteiro 'Sparky be2d97907a #683 - removing msm path configuration 2017-04-21 11:00:35 -07:00
Åke Forslund 44949f2d8b Fix skill container.
Switch from Intent to IntentService.
2017-04-21 15:16:49 +02:00
Augusto Monteiro 'Sparky 2a4e5c3e73 #671 - comparing the dates inside de loop instead of add all in a array 2017-04-19 20:08:48 -05:00
Augusto Monteiro 'Sparky 4e885ee4c5 #671 - making auto load doesn't watch hidden folders changes 2017-04-19 20:08:48 -05:00
Augusto Monteiro 'Sparky d21b0bd948 #671 - Fixing autoload when folder doesn't exists 2017-04-17 11:27:07 -07:00
Augusto Monteiro 'Sparky 237827a099 #671 - fixing auto load 2017-04-17 10:26:34 -07:00
Steve Penrod c6e6c8244a Reverting to 'msm' (as in repo) instead of 'msm.sh' 2017-04-14 13:50:30 -07:00
Steve Penrod 60abb41fc6 Fix for issue #659, broken git install after recent changes
There are several issues with the changes recently made to break out
Skills from mycroft-core.
* The subdirectory mycroft/skills/intent/ is left behind when you do
  a pull, so the change to core.py that tries to
  "import mycroft.skills.intent" gets confused.  I renamed the file
  intent.py to intent_service.py
* Added a bunch of comments
* Made a bunch of functions "private", using the leading _
* The MSM install was failing.  Still working on that, but we should
  probably make msm.sh a part of mycroft-core instead of its own
  repo.
* Restored some mycroft.conf values that I noticed got lost during
  an automatic merge.
2017-04-14 01:53:29 -07:00
Åke Forslund e9c94d0305 Update skill container to use Intent class
the command line to enable the intent parsing is now --enable-intent
2017-04-08 11:41:31 +02:00
Åke Forslund 95641451fa Fix PEP-8 issues 2017-04-08 11:08:13 +02:00
DMendyke ed21c1471c Merge pull request #638 from MycroftAI/dmendyke.service.instance
Code to prevent multiple instances of a service
2017-04-07 15:40:26 -07:00
Augusto Monteiro 'Sparky 621c7c4437 #636 - Fixing pep8 2017-04-06 17:14:18 -07:00
Augusto Monteiro 'Sparky b35c012692 #636 - Adding ignore logs 2017-04-06 17:14:18 -07:00
Augusto Monteiro 'Sparky 13fe3fe12a #636 - Removing old skills folder 2017-04-06 17:14:18 -07:00
Augusto Monteiro 'Sparky 54db8c6c33 #546 - Fixing pep8 2017-04-06 16:55:09 -07:00
Augusto Monteiro 'Sparky 18f4ff3e90 #546 - Fixing pep8 2017-04-06 16:42:43 -07:00
Augusto Monteiro 'Sparky 2e172433aa #546 - Adding feedback to user that mycroft is updating 2017-04-06 16:30:58 -07:00
Augusto Monteiro 'Sparky f708a1e15c #546 - Using events 2017-04-06 16:08:23 -07:00
dmendyke 0bfbe58467 pep8 2017-04-06 15:57:34 -07:00
dmendyke c7645be49c Added PID locking to both 'voice' and 'service' services. 2017-04-06 12:59:31 -07:00
Augusto Monteiro 'Sparky b5aeca02ac #546 - Removing unsed import 2017-04-05 17:11:20 -07:00
Augusto Monteiro 'Sparky aeb73054da #546 - Installing Default Skills 2017-04-05 16:46:54 -07:00
Augusto Monteiro 'Sparky 1f59c50df5 #546 - Removing Skills 2017-04-05 16:23:42 -07:00
dmendyke f81d5b1249 Added locking PID file creation to 'skills' service 2017-04-05 15:16:32 -07:00
Augusto Monteiro 'Sparky 9728e645bc #546 - Adding Skill Install 2017-04-05 15:11:45 -07:00
Augusto Monteiro 'Sparky f76685d46d #546 - Removing prioritary skills loading 2017-04-04 17:11:33 -07:00
Augusto Monteiro 'Sparky 1150fc9a54 #546 - Making Intent a class instead of skill 2017-04-04 16:48:40 -07:00
Augusto Monteiro 'Sparky b89ffcfd37 #546 - Removing skills 2017-04-04 11:12:11 -07:00
Augusto Monteiro 'Sparky 12620694b3 #630 - Fixing SkillInstaller, using text to match instead of exit code 2017-04-03 11:18:56 -07:00
Augusto Monteiro 601948ff3f Merge pull request #533 from MycroftAI/feature/issue-527
#527 - skill to skill installation
2017-03-31 15:04:54 -07:00
penrods bd23d26011 Implementing WolframAlpha changes from issue #600
This limits WolframAlphaSkill to only query WolframAlpha when the utterance doesn't match an intent (calling the fallback handler) and it contains an obvious question phrase.
2017-03-30 17:15:57 -07:00
kfezer a475341346 Merge branch 'dev' into feature/issue-553 2017-03-30 20:49:36 +00:00
kfezer 622765015d Revert "Fixes Issue 588" 2017-03-30 08:50:24 -07:00
kfezer f7c781d119 Update core.py
Fixed Pep8 Issue
2017-03-29 16:27:49 -07:00
kfezer 4c24466120 Merge branch 'dev' into feature/issue-553 2017-03-29 17:28:10 +00:00
kfezer 80b54296b3 Merge pull request #591 from MycroftAI/bugfix/issue-588
Fixes Issue 588
2017-03-29 16:40:06 +00:00
kfezer de27ad4caa Merge pull request #572 from SoloVeniaASaludar/bugfix/issue-571
Update core.py
2017-03-29 16:39:06 +00:00
kfezer cf4bc9a20d Update not.found.dialog
Fixed typo
2017-03-29 09:35:48 -07:00
kfezer 4e1b739474 Update choose.dialog
changed some wording
2017-03-29 09:35:28 -07:00
Augusto Monteiro 814f2fb441 #527 - fixing pep8 2017-03-28 11:20:00 -07:00
Augusto Monteiro 5ec0d0d48a #527 - cleaning all events 2017-03-28 11:20:00 -07:00
Augusto Monteiro 0c60da0883 #527 - cloning msm 2017-03-28 11:20:00 -07:00
Augusto Monteiro 5def9aceca #527 - Fixing rename 2017-03-28 11:20:00 -07:00
Augusto Monteiro 2b96f2dd19 #527 - Adding msm install script and renaming skill 2017-03-28 11:20:00 -07:00
Augusto Monteiro 1f363a245b #527 - skill to skill installation 2017-03-28 11:20:00 -07:00
kfezer@gmail.com 348a9111a2 modified: mycroft/skills/core.py
Fixed typo
2017-03-27 13:56:13 -07:00
Åke Forslund be8dd47250 Add expect_response option to speak_methods
if expect_response flag is set to True the stt will be triggered just as if the wakeword has been received or the button on the mycroft enclosure has been pressed.
2017-03-17 20:20:27 +01:00
SoloVeniaASaludar 852d1d3c15 Update core.py 2017-03-16 16:43:53 +01:00
SoloVeniaASaludar a8f7e84a2c Update core.py 2017-03-16 16:29:11 +01:00
Augusto Monteiro 319f39801a #566 - Adding normalize import on wolfranalpha 2017-03-15 14:31:10 -05:00
Åke Forslund 8df393c813 Remove handler from registered_intents list, it wasn't used 2017-03-14 22:01:48 +01:00
Åke Forslund 49c5a3e523 Add debug and error logging 2017-03-14 21:55:04 +01:00
Augusto Monteiro 7c25e56b96 #560 - fixing pep8 2017-03-14 14:34:53 -05:00
Augusto Monteiro 2464e87118 #560 - loading skills sorted 2017-03-14 14:34:53 -05:00
Augusto Monteiro eaac4a1f08 #539 - fixing pep8 2017-03-14 13:57:17 -05:00
Augusto Monteiro 0901f1bafc #539 - fixing pep8 2017-03-14 13:43:45 -05:00
penrods eafcc1abfb Several extensions to text normalization:
* intent_failure message now carries along the utterance's lang code
* normalizing query for Wolfram Alpha
* added normalization of "whats" to "what is".  This is technically incorrect ("whats" means more than one instance of "what", as in "the whats and whys of open source"), but that is a rare phrase.  Unfortunately, several STT engines incorrectly output things like "whats 8 + 4", which is grammatically incorrect.  So we'll handle the common and potentially screw up the uncommon.
* more parsing test cases, including a few corrections
2017-03-14 13:43:45 -05:00
Steve Penrod 883848fa11 Fixed typo (parser instead of parse)
Fixed typo (parser instead of parse)
2017-03-14 13:43:45 -05:00