Build an open future with us.

Invest in Mycroft and become a community partner.

What to install to do new stuff


#1

Skill name: what-to-install

User story:

When using mycroft he sometimes tells me that he cant do or answer what I ask of him. He then tells me that he i learning new things every day.
Would i be perfect if he also could tell what skill maybe could help in this situation ?

Like if you ask mycroft to count down from 10 he cant do that. But then he asnwered something like
“I cant do that but I am learning new things every day. If you ask me to install count skill I would be able to countdown from 10”

What third party services, data sets or platforms will the Skill interact with? Needs to connect to GitHub and traverse all skills for what they can do.

Are there similar Mycroft Skills already? i dont think I found any

Other comments?
This would be a way to tell users that there were skills that they could benefit from.

The skill could traverse all skills in repo, and get their intents files and from that figure out if one or more skills could be relevant to tell user about.


#2

I had the same thought a while back…


#3

Yeah, I was thinking about building something like this after I finish the calendar skil


#4

Both of these Skills are great suggestions - essentially what you’re both looking for here is a smarter “Fallback Skill”. A Fallback triggers when none of the Intents that are currently registered can handle the Utterance that has been spoken.

There is currently an order of precedence with Fallbacks (which I can’t remember off the top of my head).

How do you envisage the Fallback working - would it be something like the CommonPlay Framework that associated weights to various phrases?


#5

I was thinking that this fallback would use/search https://mycroftai.github.io/mycroft-skills/ for skill suggestions and use some local data to inform the user how to interact with installed skills.


#6

I have created a “help” skill that is capable of informing the user how to interact with the installed skills. Might be some synergy here.


#7

That help skill looks good, I’ll try it out. That solves half of the issue for this topic.

A Voice UI for Mycroft via Persona would be interesting and could include this help skill. I’ve been thinking about how to croudsource multi-turn/nonlinear dialogue for Mycroft. There are techniques and software used for planning dialogue in video games (think Fallout). Chatmapper http://www.chatmapper.com is one package but I’m sure there are others, it could be a simple mindmap. If something like this could be hosted at http://mycroft.ai Mycroft would quickly have a personality and a Voice UI.

Suggesting dialogue for Mycroft is something every user could do.


#8

Yah that skill looks good and solves half of the issues. As it looks in the installed skills readme.md files for help information.

The same could be done traversing not installed skills in the repo - to figure out if one of those skills could help.


#9

Feel free to let me know if there is anything you need me to assist in modifying the help-skill or supporting other development.


#10

I will look at your skill, but i dont think I can add much cleaver coding to it. But I have plenty of ideas popping up in my head though.


#11

@pcwii nice skill! I’ll definitely check it out.

I also imagine this being a fallback skill but also using the sample utterances provide in the Mycroft skills data repo to match utterances to uninstalled skills. When the skill finds a skill that matches, it will install that skill.


#12

It could probably use some cleanup, but give it a go and let me know what you think and what can be done to improve it.


#13

Hey all, this weekend I finished the initial version of the this skill here:

Basically it downloads the skills data then when mycroft can’t connect an utterance to a skill, it will get triggered and look for a example phrase matching that exact utterance.

Right now it is totally functional however here is my todo list:

  • Use fuzzy matching - so that the utterance doesn’t have to be exactly what an example is.
  • After downloading, have mycroft process the utterance again so that the user doesn’t notice anything.
  • Auto updating the data

Feedback + pull requests welcome! :grinning:


#14

Ohh that look just what i had in mind. Nice job.

in mycroft.utils there is match_one which takes a list and uses fuzzylogic to match the one.

match_one(query, choices)
Find best match from a list or dictionary given an input
Arguments: query: string to test choices: list or dictionary of choices
Returns: tuple with best match, score


#15

from mycroft.util.parse import match_one

I did that in a fairytalez skill like this:

index = self.get_index("https://fairytalez.com/fairy-tales/")
result = match_one(response, list(index.keys()))

#16

I’ll take a look, sounds great. Could this be merged with the skill pcwii is working on?

I’ve always liked the response “I don’t know but I can find out”


#17

Hey all,
I added fuzzy matching so that it will match the skill even if you’ve not said exactly what an example is.

@mycroft This skill is a fallback skill, which picks up any phrase not matched by the intent matcher, while the help skill by @pcwii is a regular skill which picks up utterances with “help” in them. These shouldn’t probably merged, however I could see if you ask the help skill something it doesn’t know, it could “call” to this skill to search or download (or the help skill could do this too). Here is a pr in Mycroft-core that could allow this:

Finally, once I get the tests figured out, I’ll submit this to the skills repo next week! :smile:

Thanks!


#18

@brrn sounds great. I could see some kind of built in/user configured threshold, maybe 2-3 intent failures before making a recommendation. One intent failure then a correction from Mycroft might be a little caddy/sassy/cheeky. Maybe even a mode selection i.e. new user, novice mode to help users get familiar with installed stock skills + number intent failures and a discovery mode to just recommend new skills. QA and feedback would be needed to flush this out though.