Skill marketplace / registry

So as already discussed on other topics and github, I have lately been working on a prototype for some kind of skill marketplace / registry. As of now, I have a fully working chain from installing skills to rhasspy training.

The skill registry is currently working on conjunction with the hss-server skill server and its command line tool hss-cli. However, the registry is designed as generic server, which could host other skill technologies as well.

Maybe a picture could best illustrate it:

As said, the architecture assumes an installation of hss-server.

Concept

The registry provides both a website frontend as well as a basic REST API which allows to access it using command line tools. The registry does not host the skills, but instead only keeps a set of meta infos about each skill, especially its real git repo URL.

The API currently contains the following features:

  • register new account
  • delete account
  • publish skill
  • unpublish skill
  • get single skill
  • search all skills

I have documented with more details on the github page of hss-server Link, so I don’t want to go into much more details here.

Link to the registry’s web frontend: https://hss-registry.herokuapp.com

The current state of development is the following

  1. hss-server supports python- and Node.JS skills, both of which are supported by the registry
  2. The hss-cli tool is able to browse the registry, and install skills listed on the registry (direct URL installing also possible)
  3. Upon installation, hss-cli queries the registry for the repo URL, and then proceeds installing
  4. When installing, hss-cli checks whether or not the skill provides its own sentences/slots. If so, they are registered at rhasspy using the rhasspy (2.4) HTTP API, and afterwards training is triggered.

I am no web developer, thus the website of the registry is really basic and of poor design. Also, it is lacking user preferences and similar functionality, which is due to the current state of development.

The registry is currently hosted on a free heroku account.

Feedback & suggestions are highly welcome.

6 Likes

This is exactly what I was looking for after I started creating my own weather skill. In order to have a full-featured skill there is a lot of tedious work editing sentences.ini, connecting to an API, etc. I noticed your hss-s710-weather uses German sentences. Is it possible to localize, or would you prefer alternate skills to be developed in other languages? I’m using openweathermap.org for my weather API and node-red to hook it all up.

I never thought about making skills multi-language, however it should be pretty easy to implement. Let me see what I can come up with.

I have given this some thought in the rhasspy-hermes-app project (not yet implemented). I’m definitely interested in hearing other opinions.

Sorry didn’t see your post until today (mail notifications tend to work only sometimes). I have now come up with a similar approach.

I have just published hss-skill v0.5.0 which includes support for multiple languages. I have also updated/migrated hss-s710-weather to make use of that and support both english and german languages.

I have not yet published the skill, as it will require more work on the CLI so that the correct language gets installed. I will finish this today/tomorrow.

@koan:
hss-skill/hss-server already supported registering skills and slots, and with the v0.5.0 it supports registering sentences/slots when a skill features more than one language. Upon installation, a language must be picked, and the corresponding sentences/slots will then be registered.

While working on this, I found that working with localized slot values in multiple languages in code is rather tedious, and therefore decided that slots shall be given in a dictionary format, which then provides a mapping/bridge from language-specific slot values to generic slot identifiers. This helped a lot with the skill implementation.

It roughly looks like this:

slotsdict.de_de.json:

{
   "relative_time": {
      "now": ["jetzt", "gerade", "später", "nachher", "gegen später"],
      "today": ["heute"],
      "todayMorning": ["heute früh", "heute morgen"]
   }
}

slotsdict.en_gb.json:

{
   "relative_time": {
      "now": ["now", "right now", "later", "then", "towards later", "around later"],
      "today": ["today"],
      "todayMorning": ["this morning", "ealier today"]
   }
}

So in code the skill will receive both the real slot value (e.g. “right now”), but also the generic slot identifier (“now”), which will be the same in every language.

@reedlaw
So while I have finished my implementation on the weather skill (english language support), I am not a native speaker, so the responses might sound a bit weird here and there. Would you be interested in checking the skill responses on a grammer/language level?