From 01f7515e6fe705ebb24a2a62cb8d91f086055beb Mon Sep 17 00:00:00 2001 From: louistiti Date: Sat, 20 Aug 2022 22:35:34 +0800 Subject: [PATCH] refactor: switch from skill NLU config to skill config naming --- bridges/python/utils.py | 2 +- scripts/generate/generate-skills-endpoints.js | 10 +++--- .../train-main-model/train-skills-actions.js | 8 ++--- .../train-skills-resolvers.js | 6 ++-- server/src/core/brain.js | 10 +++--- server/src/core/conversation.js | 4 +-- server/src/core/nlu.js | 32 +++++++++---------- server/src/helpers/json.js | 10 +++--- skills/games/akinator/{nlu => config}/en.json | 0 .../guess_the_number/{nlu => config}/en.json | 0 .../games/rochambeau/{nlu => config}/en.json | 0 skills/leon/color/{nlu => config}/en.json | 0 skills/leon/good_bye/{nlu => config}/en.json | 0 skills/leon/good_bye/{nlu => config}/fr.json | 0 skills/leon/greeting/{nlu => config}/en.json | 0 skills/leon/greeting/{nlu => config}/fr.json | 0 .../leon/introduction/{nlu => config}/en.json | 0 .../leon/introduction/{nlu => config}/fr.json | 0 skills/leon/joke/{nlu => config}/en.json | 0 skills/leon/joke/{nlu => config}/fr.json | 0 .../meaning_of_life/{nlu => config}/en.json | 0 .../meaning_of_life/{nlu => config}/fr.json | 0 .../partner_assistant/{nlu => config}/en.json | 0 .../partner_assistant/{nlu => config}/fr.json | 0 .../random_number/{nlu => config}/en.json | 0 .../random_number/{nlu => config}/fr.json | 0 skills/leon/welcome/{nlu => config}/en.json | 0 skills/leon/welcome/{nlu => config}/fr.json | 0 .../github_trends/{nlu => config}/en.json | 0 .../github_trends/{nlu => config}/fr.json | 0 .../{nlu => config}/en.json | 0 .../{nlu => config}/fr.json | 0 .../todo_list/{nlu => config}/en.json | 0 .../todo_list/{nlu => config}/fr.json | 0 .../mbti/{nlu => config}/en.json | 0 .../have_i_been_pwned/{nlu => config}/en.json | 0 .../have_i_been_pwned/{nlu => config}/fr.json | 0 .../is_it_down/{nlu => config}/en.json | 0 .../is_it_down/{nlu => config}/fr.json | 0 .../speed_test/{nlu => config}/en.json | 0 .../speed_test/{nlu => config}/fr.json | 0 .../{nlu => config}/en.json | 0 .../{nlu => config}/fr.json | 0 43 files changed, 41 insertions(+), 41 deletions(-) rename skills/games/akinator/{nlu => config}/en.json (100%) rename skills/games/guess_the_number/{nlu => config}/en.json (100%) rename skills/games/rochambeau/{nlu => config}/en.json (100%) rename skills/leon/color/{nlu => config}/en.json (100%) rename skills/leon/good_bye/{nlu => config}/en.json (100%) rename skills/leon/good_bye/{nlu => config}/fr.json (100%) rename skills/leon/greeting/{nlu => config}/en.json (100%) rename skills/leon/greeting/{nlu => config}/fr.json (100%) rename skills/leon/introduction/{nlu => config}/en.json (100%) rename skills/leon/introduction/{nlu => config}/fr.json (100%) rename skills/leon/joke/{nlu => config}/en.json (100%) rename skills/leon/joke/{nlu => config}/fr.json (100%) rename skills/leon/meaning_of_life/{nlu => config}/en.json (100%) rename skills/leon/meaning_of_life/{nlu => config}/fr.json (100%) rename skills/leon/partner_assistant/{nlu => config}/en.json (100%) rename skills/leon/partner_assistant/{nlu => config}/fr.json (100%) rename skills/leon/random_number/{nlu => config}/en.json (100%) rename skills/leon/random_number/{nlu => config}/fr.json (100%) rename skills/leon/welcome/{nlu => config}/en.json (100%) rename skills/leon/welcome/{nlu => config}/fr.json (100%) rename skills/news/github_trends/{nlu => config}/en.json (100%) rename skills/news/github_trends/{nlu => config}/fr.json (100%) rename skills/news/product_hunt_trends/{nlu => config}/en.json (100%) rename skills/news/product_hunt_trends/{nlu => config}/fr.json (100%) rename skills/productivity/todo_list/{nlu => config}/en.json (100%) rename skills/productivity/todo_list/{nlu => config}/fr.json (100%) rename skills/social_communication/mbti/{nlu => config}/en.json (100%) rename skills/utilities/have_i_been_pwned/{nlu => config}/en.json (100%) rename skills/utilities/have_i_been_pwned/{nlu => config}/fr.json (100%) rename skills/utilities/is_it_down/{nlu => config}/en.json (100%) rename skills/utilities/is_it_down/{nlu => config}/fr.json (100%) rename skills/utilities/speed_test/{nlu => config}/en.json (100%) rename skills/utilities/speed_test/{nlu => config}/fr.json (100%) rename skills/utilities/youtube_downloader/{nlu => config}/en.json (100%) rename skills/utilities/youtube_downloader/{nlu => config}/fr.json (100%) diff --git a/bridges/python/utils.py b/bridges/python/utils.py index 74c9e3f3..7c95ad04 100644 --- a/bridges/python/utils.py +++ b/bridges/python/utils.py @@ -37,7 +37,7 @@ def translate(key, dict = { }): output = '' variables = { } - file = open(path.join(dirname, '../../skills', intent_obj['domain'], intent_obj['skill'], 'nlu', intent_obj['lang'] + '.json'), 'r', encoding = 'utf8') + file = open(path.join(dirname, '../../skills', intent_obj['domain'], intent_obj['skill'], 'config', intent_obj['lang'] + '.json'), 'r', encoding = 'utf8') obj = loads(file.read()) file.close() diff --git a/scripts/generate/generate-skills-endpoints.js b/scripts/generate/generate-skills-endpoints.js index 5248d706..4bee2f4a 100644 --- a/scripts/generate/generate-skills-endpoints.js +++ b/scripts/generate/generate-skills-endpoints.js @@ -11,7 +11,7 @@ dotenv.config() /** * Generate skills endpoints script - * Parse and convert skills NLU config into a JSON file understandable by Fastify + * Parse and convert skills config into a JSON file understandable by Fastify * to dynamically generate endpoints so skills can be accessible over HTTP */ export default () => new Promise(async (resolve, reject) => { @@ -40,7 +40,7 @@ export default () => new Promise(async (resolve, reject) => { for (let j = 0; j < skillKeys.length; j += 1) { const skillFriendlyName = skillKeys[j] const currentSkill = currentDomain.skills[skillFriendlyName] - const fileInfo = fs.statSync(path.join(currentSkill.path, 'nlu', `${lang}.json`)) + const fileInfo = fs.statSync(path.join(currentSkill.path, 'config', `${lang}.json`)) const mtime = fileInfo.mtime.getTime() if (mtime > mtimeEndpoints) { @@ -62,7 +62,7 @@ export default () => new Promise(async (resolve, reject) => { // Force if a language is given if (isFileNeedToBeGenerated) { - log.info('Parsing skills NLU configuration...') + log.info('Parsing skills configuration...') for (let i = 0; i < domainKeys.length; i += 1) { const currentDomain = domains[domainKeys[i]] @@ -73,8 +73,8 @@ export default () => new Promise(async (resolve, reject) => { const skillFriendlyName = skillKeys[j] const currentSkill = currentDomain.skills[skillFriendlyName] - const nluFilePath = path.join(currentSkill.path, 'nlu', `${lang}.json`) - const { actions } = JSON.parse(fs.readFileSync(nluFilePath, 'utf8')) + const configFilePath = path.join(currentSkill.path, 'config', `${lang}.json`) + const { actions } = JSON.parse(fs.readFileSync(configFilePath, 'utf8')) const actionsKeys = Object.keys(actions) for (let k = 0; k < actionsKeys.length; k += 1) { diff --git a/scripts/train/train-main-model/train-skills-actions.js b/scripts/train/train-main-model/train-skills-actions.js index 1f959a09..907de39c 100644 --- a/scripts/train/train-main-model/train-skills-actions.js +++ b/scripts/train/train-main-model/train-skills-actions.js @@ -26,15 +26,15 @@ export default (lang, nlp) => new Promise(async (resolve) => { const { name: skillName } = currentDomain.skills[skillKeys[j]] const currentSkill = currentDomain.skills[skillKeys[j]] - log.info(`[${lang}] Using "${skillKeys[j]}" skill NLU data`) + log.info(`[${lang}] Using "${skillKeys[j]}" skill config data`) - const nluFilePath = path.join(currentSkill.path, 'nlu', `${lang}.json`) + const configFilePath = path.join(currentSkill.path, 'config', `${lang}.json`) - if (fs.existsSync(nluFilePath)) { + if (fs.existsSync(configFilePath)) { const { actions, variables - } = await json.loadNluData(nluFilePath, lang) // eslint-disable-line no-await-in-loop + } = await json.loadConfigData(configFilePath, lang) // eslint-disable-line no-await-in-loop const actionsKeys = Object.keys(actions) for (let k = 0; k < actionsKeys.length; k += 1) { diff --git a/scripts/train/train-resolvers-model/train-skills-resolvers.js b/scripts/train/train-resolvers-model/train-skills-resolvers.js index 02538435..ab99f1c0 100644 --- a/scripts/train/train-resolvers-model/train-skills-resolvers.js +++ b/scripts/train/train-resolvers-model/train-skills-resolvers.js @@ -20,10 +20,10 @@ export default (lang, nlp) => new Promise(async (resolve) => { skillKeys.forEach(async (skillName) => { const currentSkill = currentDomain.skills[skillName] - const nluFilePath = path.join(currentSkill.path, 'nlu', `${lang}.json`) + const configFilePath = path.join(currentSkill.path, 'config', `${lang}.json`) - if (fs.existsSync(nluFilePath)) { - const { resolvers } = await json.loadNluData(nluFilePath, lang) + if (fs.existsSync(configFilePath)) { + const { resolvers } = await json.loadConfigData(configFilePath, lang) if (resolvers) { const resolversKeys = Object.keys(resolvers) diff --git a/server/src/core/brain.js b/server/src/core/brain.js index 1080d350..8de68307 100644 --- a/server/src/core/brain.js +++ b/server/src/core/brain.js @@ -158,8 +158,8 @@ class Brain { executionTime }) } else { - const { nluDataFilePath, classification: { action: actionName } } = obj - const { actions } = JSON.parse(fs.readFileSync(nluDataFilePath, 'utf8')) + const { configDataFilePath, classification: { action: actionName } } = obj + const { actions } = JSON.parse(fs.readFileSync(configDataFilePath, 'utf8')) const action = actions[actionName] const { type: actionType } = action const nextAction = action.next_action ? actions[action.next_action] : null @@ -360,10 +360,10 @@ class Brain { * "Dialog" action skill execution */ - const nluFilePath = path.join( - process.cwd(), 'skills', obj.classification.domain, obj.classification.skill, 'nlu', `${this._lang}.json` + const configFilePath = path.join( + process.cwd(), 'skills', obj.classification.domain, obj.classification.skill, 'config', `${this._lang}.json` ) - const { actions, entities } = await json.loadNluData(nluFilePath, this._lang) + const { actions, entities } = await json.loadConfigData(configFilePath, this._lang) const utteranceHasEntities = obj.entities.length > 0 const { answers: rawAnswers } = obj let answers = rawAnswers diff --git a/server/src/core/conversation.js b/server/src/core/conversation.js index 2c9ccfbf..97491cca 100644 --- a/server/src/core/conversation.js +++ b/server/src/core/conversation.js @@ -53,7 +53,7 @@ class Conversation { const { slots, isInActionLoop, - nluDataFilePath, + configDataFilePath, actionName, lang, domain, @@ -63,7 +63,7 @@ class Conversation { const slotKeys = Object.keys(slots) const [skillName] = intent.split('.') const newContextName = `${domain}.${skillName}` - const { actions } = JSON.parse(fs.readFileSync(nluDataFilePath, 'utf8')) + const { actions } = JSON.parse(fs.readFileSync(configDataFilePath, 'utf8')) // Grab next action from the NLU data file const { next_action: nextAction } = actions[actionName] diff --git a/server/src/core/nlu.js b/server/src/core/nlu.js index a829470e..c03d3011 100644 --- a/server/src/core/nlu.js +++ b/server/src/core/nlu.js @@ -24,7 +24,7 @@ const defaultNluResultObj = { currentResolvers: [], resolvers: [], slots: null, - nluDataFilePath: null, + configDataFilePath: null, answers: [], // For dialog action type classification: { domain: null, @@ -241,12 +241,12 @@ class Nlu { async handleActionLoop (utterance, opts) { const { domain, intent } = this.conv.activeContext const [skillName, actionName] = intent.split('.') - const nluDataFilePath = join(process.cwd(), 'skills', domain, skillName, `nlu/${this.brain.lang}.json`) + const configDataFilePath = join(process.cwd(), 'skills', domain, skillName, `config/${this.brain.lang}.json`) this.nluResultObj = { ...defaultNluResultObj, // Reset entities, slots, etc. slots: this.conv.activeContext.slots, utterance, - nluDataFilePath, + configDataFilePath, classification: { domain, skill: skillName, @@ -256,11 +256,11 @@ class Nlu { } this.nluResultObj.entities = await this.ner.extractEntities( this.brain.lang, - nluDataFilePath, + configDataFilePath, this.nluResultObj ) - const { actions, resolvers } = JSON.parse(fs.readFileSync(nluDataFilePath, 'utf8')) + const { actions, resolvers } = JSON.parse(fs.readFileSync(configDataFilePath, 'utf8')) const action = actions[this.nluResultObj.classification.action] const { name: expectedItemName, type: expectedItemType @@ -369,7 +369,7 @@ class Nlu { slots: processedData.slots, isInActionLoop: !!processedData.nextAction.loop, originalUtterance: processedData.utterance, - nluDataFilePath: processedData.nluDataFilePath, + configDataFilePath: processedData.configDataFilePath, actionName: processedData.action.next_action, domain: processedData.classification.domain, intent: `${processedData.classification.skill}.${processedData.action.next_action}`, @@ -510,13 +510,13 @@ class Nlu { log.title('NLU') log.success(`Intent found: ${this.nluResultObj.classification.skill}.${this.nluResultObj.classification.action} (domain: ${this.nluResultObj.classification.domain})`) - const nluDataFilePath = join(process.cwd(), 'skills', this.nluResultObj.classification.domain, this.nluResultObj.classification.skill, `nlu/${this.brain.lang}.json`) - this.nluResultObj.nluDataFilePath = nluDataFilePath + const configDataFilePath = join(process.cwd(), 'skills', this.nluResultObj.classification.domain, this.nluResultObj.classification.skill, `config/${this.brain.lang}.json`) + this.nluResultObj.configDataFilePath = configDataFilePath try { this.nluResultObj.entities = await this.ner.extractEntities( this.brain.lang, - nluDataFilePath, + configDataFilePath, this.nluResultObj ) } catch (e) /* istanbul ignore next */ { @@ -552,7 +552,7 @@ class Nlu { slots: { }, isInActionLoop: false, originalUtterance: this.nluResultObj.utterance, - nluDataFilePath: this.nluResultObj.nluDataFilePath, + configDataFilePath: this.nluResultObj.configDataFilePath, actionName: this.nluResultObj.classification.action, domain: this.nluResultObj.classification.domain, intent, @@ -574,7 +574,7 @@ class Nlu { slots: { }, isInActionLoop: !!processedData.nextAction.loop, originalUtterance: processedData.utterance, - nluDataFilePath: processedData.nluDataFilePath, + configDataFilePath: processedData.configDataFilePath, actionName: processedData.action.next_action, domain: processedData.classification.domain, intent: `${processedData.classification.skill}.${processedData.action.next_action}`, @@ -614,7 +614,7 @@ class Nlu { const { domain, intent } = this.conv.activeContext const [skillName, actionName] = intent.split('.') - const nluDataFilePath = join(process.cwd(), 'skills', domain, skillName, `nlu/${this.brain.lang}.json`) + const configDataFilePath = join(process.cwd(), 'skills', domain, skillName, `config/${this.brain.lang}.json`) this.nluResultObj = { ...defaultNluResultObj, // Reset entities, slots, etc. @@ -627,7 +627,7 @@ class Nlu { } const entities = await this.ner.extractEntities( this.brain.lang, - nluDataFilePath, + configDataFilePath, this.nluResultObj ) @@ -657,7 +657,7 @@ class Nlu { // Assign slots only if there is a next action slots: this.conv.activeContext.nextAction ? this.conv.activeContext.slots : { }, utterance: this.conv.activeContext.originalUtterance, - nluDataFilePath, + configDataFilePath, classification: { domain, skill: skillName, @@ -691,7 +691,7 @@ class Nlu { slots, isInActionLoop: false, originalUtterance: this.nluResultObj.utterance, - nluDataFilePath: this.nluResultObj.nluDataFilePath, + configDataFilePath: this.nluResultObj.configDataFilePath, actionName: this.nluResultObj.classification.action, domain: this.nluResultObj.classification.domain, intent, @@ -701,7 +701,7 @@ class Nlu { const notFilledSlot = this.conv.getNotFilledSlot() // Loop for questions if a slot hasn't been filled if (notFilledSlot) { - const { actions } = JSON.parse(fs.readFileSync(this.nluResultObj.nluDataFilePath, 'utf8')) + const { actions } = JSON.parse(fs.readFileSync(this.nluResultObj.configDataFilePath, 'utf8')) const [currentSlot] = actions[this.nluResultObj.classification.action].slots .filter(({ name }) => name === notFilledSlot.name) diff --git a/server/src/helpers/json.js b/server/src/helpers/json.js index 668c3136..66d107d3 100644 --- a/server/src/helpers/json.js +++ b/server/src/helpers/json.js @@ -3,10 +3,10 @@ import path from 'path' const json = { } -json.loadNluData = async (nluFilePath, lang) => { +json.loadConfigData = async (configFilePath, lang) => { const sharedDataPath = path.join(process.cwd(), 'core/data', lang) - const nluData = JSON.parse(fs.readFileSync(nluFilePath, 'utf8')) - const { entities } = nluData + const configData = JSON.parse(fs.readFileSync(configFilePath, 'utf8')) + const { entities } = configData // Load shared data entities if entity = 'xxx.json' if (entities) { @@ -18,10 +18,10 @@ json.loadNluData = async (nluFilePath, lang) => { } }) - nluData.entities = entities + configData.entities = entities } - return nluData + return configData } export default json diff --git a/skills/games/akinator/nlu/en.json b/skills/games/akinator/config/en.json similarity index 100% rename from skills/games/akinator/nlu/en.json rename to skills/games/akinator/config/en.json diff --git a/skills/games/guess_the_number/nlu/en.json b/skills/games/guess_the_number/config/en.json similarity index 100% rename from skills/games/guess_the_number/nlu/en.json rename to skills/games/guess_the_number/config/en.json diff --git a/skills/games/rochambeau/nlu/en.json b/skills/games/rochambeau/config/en.json similarity index 100% rename from skills/games/rochambeau/nlu/en.json rename to skills/games/rochambeau/config/en.json diff --git a/skills/leon/color/nlu/en.json b/skills/leon/color/config/en.json similarity index 100% rename from skills/leon/color/nlu/en.json rename to skills/leon/color/config/en.json diff --git a/skills/leon/good_bye/nlu/en.json b/skills/leon/good_bye/config/en.json similarity index 100% rename from skills/leon/good_bye/nlu/en.json rename to skills/leon/good_bye/config/en.json diff --git a/skills/leon/good_bye/nlu/fr.json b/skills/leon/good_bye/config/fr.json similarity index 100% rename from skills/leon/good_bye/nlu/fr.json rename to skills/leon/good_bye/config/fr.json diff --git a/skills/leon/greeting/nlu/en.json b/skills/leon/greeting/config/en.json similarity index 100% rename from skills/leon/greeting/nlu/en.json rename to skills/leon/greeting/config/en.json diff --git a/skills/leon/greeting/nlu/fr.json b/skills/leon/greeting/config/fr.json similarity index 100% rename from skills/leon/greeting/nlu/fr.json rename to skills/leon/greeting/config/fr.json diff --git a/skills/leon/introduction/nlu/en.json b/skills/leon/introduction/config/en.json similarity index 100% rename from skills/leon/introduction/nlu/en.json rename to skills/leon/introduction/config/en.json diff --git a/skills/leon/introduction/nlu/fr.json b/skills/leon/introduction/config/fr.json similarity index 100% rename from skills/leon/introduction/nlu/fr.json rename to skills/leon/introduction/config/fr.json diff --git a/skills/leon/joke/nlu/en.json b/skills/leon/joke/config/en.json similarity index 100% rename from skills/leon/joke/nlu/en.json rename to skills/leon/joke/config/en.json diff --git a/skills/leon/joke/nlu/fr.json b/skills/leon/joke/config/fr.json similarity index 100% rename from skills/leon/joke/nlu/fr.json rename to skills/leon/joke/config/fr.json diff --git a/skills/leon/meaning_of_life/nlu/en.json b/skills/leon/meaning_of_life/config/en.json similarity index 100% rename from skills/leon/meaning_of_life/nlu/en.json rename to skills/leon/meaning_of_life/config/en.json diff --git a/skills/leon/meaning_of_life/nlu/fr.json b/skills/leon/meaning_of_life/config/fr.json similarity index 100% rename from skills/leon/meaning_of_life/nlu/fr.json rename to skills/leon/meaning_of_life/config/fr.json diff --git a/skills/leon/partner_assistant/nlu/en.json b/skills/leon/partner_assistant/config/en.json similarity index 100% rename from skills/leon/partner_assistant/nlu/en.json rename to skills/leon/partner_assistant/config/en.json diff --git a/skills/leon/partner_assistant/nlu/fr.json b/skills/leon/partner_assistant/config/fr.json similarity index 100% rename from skills/leon/partner_assistant/nlu/fr.json rename to skills/leon/partner_assistant/config/fr.json diff --git a/skills/leon/random_number/nlu/en.json b/skills/leon/random_number/config/en.json similarity index 100% rename from skills/leon/random_number/nlu/en.json rename to skills/leon/random_number/config/en.json diff --git a/skills/leon/random_number/nlu/fr.json b/skills/leon/random_number/config/fr.json similarity index 100% rename from skills/leon/random_number/nlu/fr.json rename to skills/leon/random_number/config/fr.json diff --git a/skills/leon/welcome/nlu/en.json b/skills/leon/welcome/config/en.json similarity index 100% rename from skills/leon/welcome/nlu/en.json rename to skills/leon/welcome/config/en.json diff --git a/skills/leon/welcome/nlu/fr.json b/skills/leon/welcome/config/fr.json similarity index 100% rename from skills/leon/welcome/nlu/fr.json rename to skills/leon/welcome/config/fr.json diff --git a/skills/news/github_trends/nlu/en.json b/skills/news/github_trends/config/en.json similarity index 100% rename from skills/news/github_trends/nlu/en.json rename to skills/news/github_trends/config/en.json diff --git a/skills/news/github_trends/nlu/fr.json b/skills/news/github_trends/config/fr.json similarity index 100% rename from skills/news/github_trends/nlu/fr.json rename to skills/news/github_trends/config/fr.json diff --git a/skills/news/product_hunt_trends/nlu/en.json b/skills/news/product_hunt_trends/config/en.json similarity index 100% rename from skills/news/product_hunt_trends/nlu/en.json rename to skills/news/product_hunt_trends/config/en.json diff --git a/skills/news/product_hunt_trends/nlu/fr.json b/skills/news/product_hunt_trends/config/fr.json similarity index 100% rename from skills/news/product_hunt_trends/nlu/fr.json rename to skills/news/product_hunt_trends/config/fr.json diff --git a/skills/productivity/todo_list/nlu/en.json b/skills/productivity/todo_list/config/en.json similarity index 100% rename from skills/productivity/todo_list/nlu/en.json rename to skills/productivity/todo_list/config/en.json diff --git a/skills/productivity/todo_list/nlu/fr.json b/skills/productivity/todo_list/config/fr.json similarity index 100% rename from skills/productivity/todo_list/nlu/fr.json rename to skills/productivity/todo_list/config/fr.json diff --git a/skills/social_communication/mbti/nlu/en.json b/skills/social_communication/mbti/config/en.json similarity index 100% rename from skills/social_communication/mbti/nlu/en.json rename to skills/social_communication/mbti/config/en.json diff --git a/skills/utilities/have_i_been_pwned/nlu/en.json b/skills/utilities/have_i_been_pwned/config/en.json similarity index 100% rename from skills/utilities/have_i_been_pwned/nlu/en.json rename to skills/utilities/have_i_been_pwned/config/en.json diff --git a/skills/utilities/have_i_been_pwned/nlu/fr.json b/skills/utilities/have_i_been_pwned/config/fr.json similarity index 100% rename from skills/utilities/have_i_been_pwned/nlu/fr.json rename to skills/utilities/have_i_been_pwned/config/fr.json diff --git a/skills/utilities/is_it_down/nlu/en.json b/skills/utilities/is_it_down/config/en.json similarity index 100% rename from skills/utilities/is_it_down/nlu/en.json rename to skills/utilities/is_it_down/config/en.json diff --git a/skills/utilities/is_it_down/nlu/fr.json b/skills/utilities/is_it_down/config/fr.json similarity index 100% rename from skills/utilities/is_it_down/nlu/fr.json rename to skills/utilities/is_it_down/config/fr.json diff --git a/skills/utilities/speed_test/nlu/en.json b/skills/utilities/speed_test/config/en.json similarity index 100% rename from skills/utilities/speed_test/nlu/en.json rename to skills/utilities/speed_test/config/en.json diff --git a/skills/utilities/speed_test/nlu/fr.json b/skills/utilities/speed_test/config/fr.json similarity index 100% rename from skills/utilities/speed_test/nlu/fr.json rename to skills/utilities/speed_test/config/fr.json diff --git a/skills/utilities/youtube_downloader/nlu/en.json b/skills/utilities/youtube_downloader/config/en.json similarity index 100% rename from skills/utilities/youtube_downloader/nlu/en.json rename to skills/utilities/youtube_downloader/config/en.json diff --git a/skills/utilities/youtube_downloader/nlu/fr.json b/skills/utilities/youtube_downloader/config/fr.json similarity index 100% rename from skills/utilities/youtube_downloader/nlu/fr.json rename to skills/utilities/youtube_downloader/config/fr.json