From 95bfcfe422f21a2946e50031a3623675dfe81b9d Mon Sep 17 00:00:00 2001 From: louistiti Date: Mon, 21 Mar 2022 00:01:44 +0800 Subject: [PATCH] feat(server): slot filling PoC (tmp wip) --- .env.sample | 6 +++--- bridges/python/tcp_server/main.py | 4 ++-- scripts/train.js | 18 ++++++++++++++++-- server/src/core/nlu.js | 18 ++++++++++++++++-- server/src/index.js | 4 ++-- 5 files changed, 39 insertions(+), 11 deletions(-) diff --git a/.env.sample b/.env.sample index 3b3343811..4ecf2d664 100644 --- a/.env.sample +++ b/.env.sample @@ -34,9 +34,9 @@ LEON_HTTP_API_LANG=en-US # Enable/disable collaborative logger LEON_LOGGER=true -# Python WebSocket server -LEON_PY_WS_SERVER_HOST=0.0.0.0 -LEON_PY_WS_SERVER_PORT=1342 +# Python TCP server +LEON_PY_TCP_SERVER_HOST=0.0.0.0 +LEON_PY_TCP_SERVER_PORT=1342 # Path to the Pipfile PIPENV_PIPFILE=bridges/python/Pipfile diff --git a/bridges/python/tcp_server/main.py b/bridges/python/tcp_server/main.py index 3c5b39651..e159743cd 100644 --- a/bridges/python/tcp_server/main.py +++ b/bridges/python/tcp_server/main.py @@ -13,8 +13,8 @@ nlp.load_spacy_model() -tcp_server_host = os.environ.get('LEON_PY_WS_SERVER_HOST', '0.0.0.0') -tcp_server_port = os.environ.get('LEON_PY_WS_SERVER_PORT', 1342) +tcp_server_host = os.environ.get('LEON_PY_TCP_SERVER_HOST', '0.0.0.0') +tcp_server_port = os.environ.get('LEON_PY_TCP_SERVER_PORT', 1342) tcp_server = TCPServer(tcp_server_host, tcp_server_port) tcp_server.init() diff --git a/scripts/train.js b/scripts/train.js index a2a6c67b8..937f1dfe1 100644 --- a/scripts/train.js +++ b/scripts/train.js @@ -29,7 +29,7 @@ export default () => new Promise(async (resolve, reject) => { const nlp = container.get('nlp') const nluManager = container.get('nlu-manager') - // const slotManager = container.get('slot-manager') + // const slotManager = container.get('SlotManager') nluManager.settings.log = false nluManager.settings.trainByDomain = true @@ -72,12 +72,26 @@ export default () => new Promise(async (resolve, reject) => { for (let k = 0; k < actionsKeys.length; k += 1) { const actionName = actionsKeys[k] const actionObj = actions[actionName] + const intent = `${skillName}.${actionName}` const { utterance_samples: utteranceSamples, answers } = actionObj nlp.assignDomain(lang, `${skillName}.${actionName}`, currentDomain.name) + /** + * TODO: + * 1. Merge person, location and organization to the + * NER before processing NLU (cf. line 210 in nlu.js) + * 2. Grab intents with slots + * 3. .addSlot() as per the slots config + */ + if (intent === 'guess_the_number.start') { + console.log('iiin') + // nlp.slotManager.addSlot(intent, 'number', true, { [lang]: 'How many players?' }) + nlp.slotManager.addSlot(intent, 'person', true, { [lang]: 'How many players?' }) + } + for (let l = 0; l < utteranceSamples.length; l += 1) { - nlp.addDocument(lang, utteranceSamples[l], `${skillName}.${actionName}`) + nlp.addDocument(lang, utteranceSamples[l], intent) } // Train NLG if the skill has a dialog type diff --git a/server/src/core/nlu.js b/server/src/core/nlu.js index d6277b1a0..c43bc2ff4 100644 --- a/server/src/core/nlu.js +++ b/server/src/core/nlu.js @@ -132,8 +132,8 @@ class Nlu { global.tcpServerProcess = spawn(`pipenv run python bridges/python/tcp_server/main.py ${locale}`, { shell: true }) global.tcpClient = new TcpClient( - process.env.LEON_PY_WS_SERVER_HOST, - process.env.LEON_PY_WS_SERVER_PORT + process.env.LEON_PY_TCP_SERVER_HOST, + process.env.LEON_PY_TCP_SERVER_PORT ) global.tcpClient.ee.removeListener('connected', connectedHandler) @@ -207,6 +207,20 @@ class Nlu { } try { + const [{ entity, resolution }] = obj.entities + const testoEntity = { + [entity]: { + options: { + [resolution.value]: [resolution.value] + } + } + } + this.nlp.addEntities(testoEntity, this.brain.lang) + + const result2 = await this.nlp.process(utterance) + + console.log('result2', result2) + // Inject action entities with the others if there is const data = await this.brain.execute(obj, { mute: opts.mute }) const processingTimeEnd = Date.now() diff --git a/server/src/index.js b/server/src/index.js index bcb938318..0db47b091 100644 --- a/server/src/index.js +++ b/server/src/index.js @@ -13,8 +13,8 @@ import server from '@/core/http-server/server' global.tcpServerProcess = spawn(`pipenv run python bridges/python/tcp_server/main.py ${lang.getShortCode(process.env.LEON_LANG)}`, { shell: true }) global.tcpClient = new TcpClient( - process.env.LEON_PY_WS_SERVER_HOST, - process.env.LEON_PY_WS_SERVER_PORT + process.env.LEON_PY_TCP_SERVER_HOST, + process.env.LEON_PY_TCP_SERVER_PORT ) await server.init()