The thumbs up and thumbs down feedback on the clients is meant for the improvement of the skills in SUSI.AI. So we need to scope the feedback system to a particular interaction rather than skill as a whole. The feedback logs can be used for various kinds of analysis and machine learning.
Server side implementation
Components of Feedback Log:
- User ID – For identification of a feedback given by a particular user. For consistency in data, the user should not be able to change the feedback over the same interaction.
- Interaction:
- User query
- SUSI Reply
- Client location – The response of a skill may not be interesting for the users of a particular country. That means the skill should give localised results.
- Skill path – The path on the server where the skill is stored.
Create a feedbackLogs.json file to store the logs of feedback given by the user and make a JSONTray object for that in src/ai/susi/DAO.java file. The JSON file contains the above mentioned components.
public static JsonTray feedbackLogs; Path feedbackLogs_per = susi_skill_rating_dir.resolve("feedbackLogs.json"); Path feedbackLogs_vol = susi_skill_rating_dir.resolve("feedbackLogs_session.json"); feedbackLogs = new JsonTray(feedbackLogs_per.toFile(), feedbackLogs_vol.toFile(), 1000000); OS.protectPath(feedbackLogs_per); OS.protectPath(feedbackLogs_vol);
Create FeedbackLogService.java file that acts as an API to create the feedback logs. The API accepts the feedback data from the client and stores it into the json file using DAO object. The user should be logged in to give feedback on an interaction. So keep the minimum user role as USER to access the API.
JSONObject feedbackLogObject = new JSONObject(); feedbackLogObject.put("timestamp", timestamp); feedbackLogObject.put("uuid", idvalue); feedbackLogObject.put("feedback", skill_rate); feedbackLogObject.put("user_query", user_query); feedbackLogObject.put("susi_reply", susi_reply); feedbackLogObject.put("country_name", country_name); feedbackLogObject.put("country_code", country_code); feedbackLogObject.put("skill_path", skill_path);
The API is accessible at /cms/feedbackLog.json endpoint.
Send feedback log from Web Client
The feedback API should be called only if the user is logged in. When the user presses the feedback buttons fetch the required data for log (access token, user query, susi response, country and user feedback) and POST them on the feedbackLog.json API.
let rateEndPoint = BASE_URL + '/cms/feedbackLog.json?model=' + skill.model + '&group=' + skill.group + '&language=' + skill.language + '&skill=' + skill.skill + '&rating=' + rating + '&access_token=' + accessToken + '&user_query=' + interaction.userQuery + '&susi_reply=' + interaction.susiReply + '&country_name=' + country.countryName + '&country_code=' + country.countryCode ; $.ajax({ url: rateEndPoint, success: function(response) { console.log('Skill rated successfully'); } })
References
- FreeGeoIP- http://freegeoip.net/json/