Compare commits

...

1079 Commits

Author SHA1 Message Date
louistiti 9c5d2ea0c8 Merge branch 'develop'
Build / build (push) Waiting to run
Lint / lint (push) Waiting to run
Tests / tests (push) Waiting to run
2023-05-01 10:15:43 +08:00
louistiti b7a4f69565 build: release 1.0.0-beta.8 2023-05-01 10:09:29 +08:00
louistiti 7b8a324658 fix(server): catch error on start for telemetry client 2023-05-01 01:54:19 +08:00
louistiti 59cfded2bb feat(server): send Node.js bridge version to telemetry 2023-05-01 01:26:28 +08:00
louistiti 8dc8c05d7d refactor(scripts): add bin level for Node.js bridge 2023-05-01 01:13:19 +08:00
louistiti 0e4ec4fb97 refactor(scripts): exclude current Node.js bridge archive from new archive 2023-05-01 00:49:35 +08:00
louistiti bb00677568 feat(scripts): add build for Node.js bridge 2023-05-01 00:36:03 +08:00
louistiti 308b63f576 fix(scripts): tmp setup Node.js bridge removal 2023-04-30 23:49:21 +08:00
louistiti 40819e8e17 feat(bridge/nodejs): release process 2023-04-30 23:39:39 +08:00
louistiti 0fba50905f feat(bridge/nodejs): entry point build 2023-04-30 21:36:07 +08:00
louistiti 419bfe3d78 refactor(scripts): commit-msg scopes 2023-04-30 20:35:56 +08:00
louistiti 1847248f12 feat: add instanceID on check script 2023-04-30 10:45:51 +08:00
louistiti eed4a9597c refactor(server): get Node.js version from process.versions.node 2023-04-30 10:32:01 +08:00
louistiti c3452d2170 feat(server): add minimum RAM requirement on pre-check 2023-04-30 10:31:18 +08:00
louistiti 0a14567776 refactor: round up total RAM on check script 2023-04-30 10:13:41 +08:00
louistiti 71573b78d1 refactor: instance ID log on postinstall 2023-04-29 21:04:29 +08:00
louistiti 722dba875b feat: do not download binaries if the latest version is already installed 2023-04-29 20:58:10 +08:00
louistiti 593419639e refactor: naming 2023-04-27 20:24:16 +08:00
louistiti 8b2f06e305 feat(server): bootstrap Node.js bridge entry point 2023-04-27 20:16:08 +08:00
louistiti 12e4b7bccf ci: use ubuntu-20.04 for the draft-release job 2023-04-26 23:00:01 +08:00
louistiti 63a6c2d161 ci: force ubuntu-20.04 and npm install as there is no package-lock.json anymore 2023-04-26 22:49:54 +08:00
louistiti f0e898e3c0 ci: remove npm caching 2023-04-26 22:45:34 +08:00
louistiti 10bb4af4dc build: bump Python bridge to 1.0.1 2023-04-26 22:35:48 +08:00
louistiti 1af3fc2011 style: better info message on prompt false for pre release binaries 2023-04-26 22:34:47 +08:00
louistiti 781cb072a3 fix: use version.py to prompt version bump confirmation on pre-release binaries 2023-04-26 22:33:10 +08:00
louistiti 73fe21f02e Merge branch 'fix-python-bridge-requests-certs' into develop 2023-04-26 22:24:44 +08:00
louistiti 0947bd7877 fix(server): close error log file handler 2023-04-26 21:31:12 +08:00
Divlo 07d2a41ecb fix(python bridge): include requests.certs file 2023-04-23 22:32:43 +02:00
louistiti 9a66b677e0 feat(server): sanitize current OS profile session name on telemetry error 2023-04-23 22:14:06 +08:00
louistiti fe580cfb92 feat: sanitize current OS profile session name for better privacy 2023-04-23 22:12:19 +08:00
louistiti 075f4458a0 feat(server): support isGitpod telemetry 2023-04-22 23:51:08 +08:00
louistiti 094b1218e6 refactor(server): replace HAS_LOGGER by IS_TELEMETRY_ENABLED for the Telemetry service 2023-04-18 20:09:42 +08:00
louistiti b16475766a fix(server): create errors.log if it does not exist before parsing logs 2023-04-18 09:21:05 +08:00
louistiti e5fdeba50b fix(server): ensure the errors.log file exist before reporting errors 2023-04-18 09:05:35 +08:00
louistiti 12b0fe6525 Merge branch 'telemetry' into develop 2023-04-16 16:46:58 +08:00
louistiti 302e1e11e0 feat(server): switch telemetry to production mode 2023-04-16 16:46:51 +08:00
louistiti 8d5bca0d2b refactor(server): handle telemetry on NLU edge cases 2023-04-16 15:36:59 +08:00
louistiti 994cca7bf4 refactor: do not call any core singletons during setup 2023-04-15 00:32:28 +08:00
louistiti a03afa78be refactor(server): telemetry utterance less parameters 2023-04-13 22:44:28 +08:00
louistiti a1f93a6922 fix(server): await for logical skill execution 2023-04-13 22:20:06 +08:00
louistiti 2678f6f04a feat(server): add isProduction data to telemetry 2023-04-13 00:41:02 +08:00
louistiti 03acb35e84 feat(server): complete telemetry client 2023-04-13 00:11:23 +08:00
louistiti 337854ab02 feat: kick off telemetry client 2023-04-12 00:25:40 +08:00
louistiti 19c569b76a Merge branch 'develop' into telemetry 2023-04-11 22:39:50 +08:00
louistiti 5b4cd9da81 Merge branch 'feat/better-json-schemas-developer-experience' into develop 2023-04-11 20:20:07 +08:00
louistiti 40069ab5f0 feat(server): kick off telemetry 2023-04-10 22:35:37 +08:00
Divlo 8c89cbf43c Merge branch 'develop' into feat/better-json-schemas-developer-experience 2023-04-05 00:13:34 +02:00
louistiti 5061cac591 Merge branch 'http-server-refactoring' into develop 2023-04-04 23:09:49 +08:00
louistiti f660506d98 chore(server): add TODO for HTTP API skills routes 2023-04-04 23:08:54 +08:00
louistiti 25f81d3c3c Merge branch 'refactor/fastify-api' into http-server-refactoring 2023-04-04 23:03:03 +08:00
Divlo d261967920 refactor(server): http-server with over http enabled 2023-04-03 20:58:02 +02:00
Divlo 907fb1a129 Merge branch 'http-server-refactoring' into refactor/fastify-api 2023-04-03 19:19:21 +02:00
Divlo 7d63108e8d fix(server): async hooks http-server 2023-04-03 19:12:54 +02:00
louistiti 274d7d52fd refactor(server): remove legacy server/src/tts/tts.js 2023-04-03 23:26:52 +08:00
louistiti d815ab8bff refactor(server): socket server interfaces 2023-04-03 23:24:54 +08:00
louistiti 35da3a388a refactor(server): socket server typing 2023-04-03 23:22:07 +08:00
Divlo a29296c612 refactor(server): api and plugins for http-server 2023-04-03 17:20:00 +02:00
louistiti b93180a822 fix(server): ASR not getting ready 2023-04-03 23:04:18 +08:00
louistiti 9fa0c2e1ba chore: re-enable linter on commit 2023-04-03 22:29:21 +08:00
louistiti 2115054de6 Merge branch 'refactor/fs-promises' into http-server-refactoring 2023-04-03 21:59:20 +08:00
louistiti f167f64cfb fix: simultaneous skills execution; Akinator new step 0 2023-04-03 21:55:36 +08:00
Divlo abc6b21df2 fix: make cleanActiveContext synchronous 2023-04-03 08:33:45 +02:00
Divlo bd66bb5cb7 refactor: usage of fs.promises 2023-04-02 20:34:50 +02:00
Divlo c49f931da4 style: fix linting 2023-04-02 19:18:15 +02:00
louistiti 070f0e1469 refactor(server): change HTTP server props accessiblity 2023-04-02 19:11:37 +08:00
louistiti bf4806c987 refactor(server): finish NLU typing 2023-04-02 18:42:00 +08:00
louistiti 37e5ca0e87 refactor(server): simpler error handler from the NLU action execution 2023-04-02 18:04:25 +08:00
louistiti a6011e3cc6 refactor(server): NLP.js process raw type 2023-04-02 18:00:10 +08:00
louistiti 44882129a7 refactor(server): NLU default values 2023-04-02 16:56:53 +08:00
louistiti 8282c37a5a refactor(server): slot filling 2023-03-27 22:23:10 +08:00
louistiti 26ff4520c8 refactor(server): action loop 2023-03-27 22:09:32 +08:00
louistiti e2f0df2cb6 refactor(server): unify join path 2023-03-27 21:51:40 +08:00
louistiti 7259ceda59 refactor(server): unify skill config getter 2023-03-27 21:42:33 +08:00
louistiti 7f99372130 Merge branch 'develop' into http-server-refactoring 2023-03-26 18:52:19 +08:00
Louis Grenard 0cbd438a34 docs: question LLMs to large language models 2023-03-26 10:23:11 +08:00
Louis Grenard 71b30a7f97 docs: add current state to the README 2023-03-26 10:21:22 +08:00
louistiti bfdc60fa65 refactor(server): slot filling 2023-03-22 23:54:58 +08:00
louistiti 99af936803 refactor(server): action loop 2023-03-22 23:34:39 +08:00
louistiti d41e960373 refactor(server): brain types 2023-03-22 22:31:42 +08:00
louistiti ae04ba369c refactor(server): NLP conversation 2023-03-22 22:19:29 +08:00
louistiti afff309d43 refactor(server): skillConfigPath naming unification 2023-03-22 22:08:35 +08:00
louistiti 16c25c9036 chore: upgrade async to latest 2023-03-20 23:46:27 +08:00
louistiti cd551197ea chore: upgrade Fastify to latest 2023-03-20 23:37:55 +08:00
louistiti f6077d58f1 chore: upgrade to TypeScript 5+ 2023-03-20 23:35:07 +08:00
louistiti eb026cb74a refactor(server): move some NER methods from NLU to NER 2023-03-20 23:15:26 +08:00
louistiti 7d6698df17 refactor(server): NLU method accessibility 2023-03-20 22:45:11 +08:00
louistiti a215fc8770 refactor(server): default NLU result 2023-03-20 22:35:44 +08:00
louistiti a8e3fb8b87 refactor(server): NER 2023-03-20 22:04:04 +08:00
louistiti 6820501da6 refactor(server): remove JavaScript NER and NLU 2023-03-20 21:22:33 +08:00
louistiti b51bf4b1c2 refactor(server): model loader error handling 2023-03-20 20:52:42 +08:00
louistiti 5369da1734 refactor(server): models loader 2023-03-18 10:47:44 +08:00
louistiti d5d8d56124 refactor(server): brain done 2023-03-15 22:30:22 +08:00
louistiti fbcc089e2b refactor(server): brain options 2023-03-07 23:22:35 +08:00
louistiti 76dacb4f5e refactor(server): brain logic action skill execution 2023-03-07 22:20:40 +08:00
louistiti 24ec0f0927 refactor(server): start brain refactoring 2023-03-05 23:07:34 +08:00
louistiti b8aac89c4d refactor(server): brain NLU result renaming 2023-03-04 06:48:04 +08:00
louistiti 72a4f787a3 refactor(server): brain typing done 2023-02-25 09:32:11 +08:00
louistiti 137032b1c0 refactor(server): fix brain answers types 2023-02-25 08:46:23 +08:00
louistiti 5011d906e7 chore: more comment and remove socket server legacy comments 2023-02-21 00:15:42 +08:00
louistiti 35d171e421 chore: comment for what to do next 2023-02-21 00:11:32 +08:00
louistiti 20e7a98241 refactor(server): continue brain typing 2023-02-21 00:00:14 +08:00
louistiti abf811f2e4 refactor(server): handle skill result in brain 2023-02-20 22:58:15 +08:00
louistiti 4d7c49e1ee refactor(server): load models and init core instances only once 2023-02-20 21:56:22 +08:00
louistiti e182da0048 refactor(server): remove unecessary socket connections 2023-02-20 20:26:38 +08:00
louistiti f81255aa20 refactor(server): better STT/TTS logs 2023-02-20 20:31:42 +08:00
louistiti 7aaca4dfc8 refactor(server): only keep types file at the first-node level 2023-02-20 00:30:17 +08:00
louistiti 4a74ee030a refactor(server): BrainProcessResult action; nextAction type to skill config schema action [string] 2023-02-20 00:09:38 +08:00
louistiti 7c76e538ab refactor(server): define BrainProcessResult and refactor schema types naming 2023-02-20 00:07:42 +08:00
louistiti 87ed70d313 refactor(server): define NLUSlot 2023-02-19 23:15:34 +08:00
louistiti 98bb70bee6 refactor(server): define SkillOutputType 2023-02-19 20:56:35 +08:00
louistiti a77f0e2473 refactor(server): implement all NER entity types 2023-02-19 20:48:48 +08:00
louistiti 03b128a544 chore: new ESLint rules for TypeScript 2023-02-19 00:02:15 +08:00
louistiti 9c6a60f92c refactor(server): set SkillConfig actions type in brain 2023-02-18 23:49:10 +08:00
louistiti 311923255e fix(server): fail when first execute a dialog action 2023-02-18 19:51:56 +08:00
louistiti cb77b4fc95 refactor(server): get correct audio duration from TTS 2023-02-18 19:16:26 +08:00
louistiti 4883d7723b refactor(server): synthesizers and parsers debug (tmp) 2023-02-13 23:57:29 +08:00
louistiti eb72a61bad refactor(server): brain tmp 2023-02-12 23:21:19 +08:00
louistiti 6dfeb6480f chore: add save-exact npm option to install exact packages version 2023-02-11 19:35:15 +08:00
louistiti 51f9a29679 chore: lock all deps 2023-02-11 11:36:08 +08:00
louistiti d51bf36566 refactor(server): NLU and brain kick off (tmp) 2023-02-10 22:18:56 +08:00
louistiti 9c9f944350 refactor(server): switch from brain instance within NLU to singleton brain 2023-02-09 21:15:49 +08:00
louistiti 7b557da549 refactor(server): NLP.js TS declarations + NLU kick off 2023-02-09 21:01:33 +08:00
louistiti 849749b900 refactor(server): add lang to TTS init 2023-02-07 22:41:02 +08:00
louistiti 528da32d03 refactor(server): STT parser abstract class 2023-02-07 22:36:59 +08:00
louistiti 9ef7476267 refactor(server): Watson synthesizer + synthesizer abstract class 2023-02-07 22:21:42 +08:00
louistiti 0f897942fa refactor(server): remove already-refactored synthesizers 2023-02-07 21:55:14 +08:00
louistiti 885f3738fc refactor(server): TTS Google Cloud synthesizer 2023-02-07 21:35:27 +08:00
louistiti ab0d88accf refactor(server): add STT parser parent class 2023-02-07 21:30:47 +08:00
louistiti 1146322196 refactor(server): TTS Flite synthesizer + synthesizer parent class 2023-02-07 21:26:14 +08:00
louistiti 157e28a063 Merge remote-tracking branch 'origin/develop' into http-server-refactoring 2023-02-03 00:18:56 +08:00
louistiti c8bc9ecbb0 refactor(server): HTTP server; brain entries; STT parsers; TTS synthesizers (WIP) 2023-02-03 00:14:23 +08:00
Louis Grenard 18ba094647 docs: add sponsor to README.md 2023-01-31 23:22:31 +08:00
Divlo 31e44cde37 fix(server): improve schemas by adding descriptions 2023-01-06 22:20:55 +01:00
Divlo 248dbb84f0 chore: add $schema property to all JSON files 2023-01-06 21:48:35 +01:00
Divlo 609fb676e4 feat(server): pre-check validate $schema property 2023-01-06 21:48:14 +01:00
Divlo 5d866664b2 fix(server): remove additionalProperties in schemas to allow $schema property 2023-01-06 21:18:27 +01:00
Divlo ba09ef10b1 feat: add generate:json-schemas script 2023-01-06 21:18:19 +01:00
louistiti 19ce6eb9c2 refactor(server): socket server and brain (WIP) 2022-11-20 23:21:06 +08:00
louistiti 934689ecf7 chore: merge branch 'develop' into http-server-refactoring 2022-11-19 21:15:35 +08:00
louistiti 2f56a14d68 chore: delete package-lock.json file due to @ffmpeg-installer/ffmpeg optionalDependencies binaries 2022-11-19 21:14:36 +08:00
louistiti cc05ce3d76 chore: format pre-check 2022-11-19 21:13:00 +08:00
louistiti 5959b43e0a chore: upgrade TypeScript to latest 2022-11-19 21:12:43 +08:00
louistiti b9a6ee08fe refactor(server): split socket server (WIP) 2022-11-19 20:57:45 +08:00
louistiti b1739bbe6b Merge branch 'develop' into http-server-refactoring 2022-11-14 23:57:41 +08:00
louistiti cad6d7f725 Merge branch 'feat/add-typebox-ajv' into develop 2022-11-14 23:56:08 +08:00
louistiti a08ddb2e26 Merge branch 'develop' into feat/add-typebox-ajv 2022-11-14 23:56:03 +08:00
louistiti c7aa84f9c4 docs: remove sponsor 2022-11-14 23:50:58 +08:00
louistiti ec10030951 refactor: modify voice config samples default values 2022-11-14 23:49:44 +08:00
louistiti b298667e3d Merge branch 'docs/fix-contributing-python-environment' into develop 2022-11-14 23:41:13 +08:00
louistiti 69e90c3b5f refactor(server): HTTP server and structure (wip) 2022-11-14 00:49:24 +08:00
Divlo 2ada7f2efa docs: make clear that commands should be run on Ubuntu in CONTRIBUTING to set up the Python Environment 2022-11-13 13:41:51 +01:00
Divlo 28c15885fd fix: improve error display in pre-check 2022-11-13 13:36:54 +01:00
Divlo 194a9b1bbb fix: add http_api property to skill config schema
http_api is used by `skills/news/github_trends/config/en.json`.
2022-11-13 13:08:32 +01:00
Divlo 4ce9676319 fix: include voice configuration sample schemas 2022-11-13 13:02:51 +01:00
Divlo fb75b40fb6 feat: validate JSON Schemas with AJV 2022-11-13 13:00:15 +01:00
Divlo d973ab4318 chore: delete schemas.ts files outside server 2022-11-13 12:48:43 +01:00
Divlo f8b08f38b1 fix: stricter JSON Schemas
- Type.Strict()
- Type.Object({ additionalProperties: false })
- Type.String({ format: 'email' | 'uri' })
2022-11-13 12:46:31 +01:00
louistiti b3b10e326f refactor(server): prepare upcoming core singletons registration 2022-11-13 01:12:20 +08:00
louistiti efe865a4c5 refactor(server): reorganize TCP client accessors 2022-11-13 00:40:14 +08:00
louistiti a37ac96411 refactor(server): protect TCP client from mutability 2022-11-13 00:16:53 +08:00
louistiti 8a16a3d97e refactor(server): LEON_NODE_ENV constant 2022-11-12 23:20:48 +08:00
louistiti 3d9d9496b7 fix(server): reset connection state and connection counter 2022-11-12 23:09:22 +08:00
louistiti 862112ed5f refactor(server): TCP client connect method 2022-11-12 22:51:47 +08:00
louistiti ea76739d88 refactor(server): TCP client to singleton 2022-11-12 22:31:49 +08:00
louistiti c53feba8f5 chore: latest package-lock.json 2022-11-12 10:00:22 +08:00
louistiti 62d511f967 chore: merge 2022-11-12 09:48:14 +08:00
louistiti 664359158e chore: merge 2022-11-12 09:46:50 +08:00
louistiti 8ecde83b89 refactor(server): TCP client to TypeScript 2022-11-11 23:32:33 +08:00
louistiti 420f87daca docs: add contributing guide for the Python bridge and TCP server 2022-11-11 22:54:28 +08:00
louistiti c722050aec refactor: add types to schemas object on pre-checking 2022-11-11 22:27:47 +08:00
louistiti c434b550a5 Merge branch 'feat/add-typebox-ajv' into develop 2022-11-11 21:50:55 +08:00
louistiti 06a2adf62b feat: add pre-checking for all JSON configs 2022-11-11 21:43:24 +08:00
louistiti bb0cf69659 feat: add pre-checking for all JSON configs 2022-11-11 11:43:24 +08:00
louistiti e50fadd142 Merge branch 'develop' into feat/add-typebox-ajv 2022-11-08 20:59:25 +08:00
louistiti 327cbff184 Merge branch 'develop' into feat/add-typebox-ajv 2022-11-08 20:59:25 +08:00
louistiti 62853a340f feat: add total RAM data to the checking script 2022-11-08 20:10:46 +08:00
louistiti 86852a8cac feat: add total RAM data to the checking script 2022-11-08 20:10:46 +08:00
louistiti efc94a2ac3 Merge branch 'develop' into feat/add-typebox-ajv 2022-11-06 23:13:49 +08:00
louistiti fd4f429b86 Merge branch 'develop' into feat/add-typebox-ajv 2022-11-06 23:13:49 +08:00
louistiti f5404920fa Merge branch 'develop' into feat/add-typebox-ajv 2022-11-06 23:13:49 +08:00
louistiti a0d8c7251c refactor: add full intent object path on skill execution during checking 2022-11-06 22:25:39 +08:00
louistiti 303ebea3f3 refactor: add full intent object path on skill execution during checking 2022-11-06 22:25:39 +08:00
louistiti c38012afcf refactor: add full intent object path on skill execution during checking 2022-11-06 22:25:39 +08:00
louistiti becac3b0f6 fix(server): Python bridge fails to execute on Windows intent object absolute path because of whitespace 2022-11-06 22:18:09 +08:00
louistiti 0245712e24 fix(server): Python bridge fails to execute on Windows intent object absolute path because of whitespace 2022-11-06 22:18:09 +08:00
louistiti 4b003a852e fix(server): Python bridge fails to execute on Windows intent object absolute path because of whitespace 2022-11-06 22:18:09 +08:00
louistiti ddf389ffd1 chore: add Python bridge npm script 2022-11-06 21:57:04 +08:00
louistiti 1d59b0a774 chore: add Python bridge npm script 2022-11-06 21:57:04 +08:00
louistiti 74582899a2 chore: add Python bridge npm script 2022-11-06 21:57:04 +08:00
louistiti 8a91dcb85d refactor(web app): minor style improvements 2022-11-05 23:33:15 +08:00
louistiti 8fbc4bb23f refactor(web app): minor style improvements 2022-11-05 23:33:15 +08:00
louistiti 61d31d9b52 refactor(web app): minor style improvements 2022-11-05 23:33:15 +08:00
louistiti a81e536fd5 refactor(web app): adapt new Vite config 2022-11-05 23:17:18 +08:00
louistiti 25fdaeeab2 refactor(web app): adapt new Vite config 2022-11-05 23:17:18 +08:00
louistiti c4885cb324 refactor(web app): adapt new Vite config 2022-11-05 23:17:18 +08:00
Divlo 71e0f1933c refactor: domain, skill-config and skill in skills/schemas.ts 2022-11-01 21:51:19 +01:00
Divlo 65246dc7cd refactor: domain, skill-config and skill in skills/schemas.ts 2022-11-01 21:51:19 +01:00
Divlo 32fd041495 refactor: domain, skill-config and skill in skills/schemas.ts 2022-11-01 21:51:19 +01:00
louistiti 6c292994fd feat: add data schemas 2022-11-02 00:21:14 +08:00
louistiti 6e8c326a9c feat: add data schemas 2022-11-02 00:21:14 +08:00
louistiti a4e9b1e1cc feat: add data schemas 2022-11-02 00:21:14 +08:00
louistiti 29d7f16b2c feat: add voice configuration schemas 2022-11-01 22:09:52 +08:00
louistiti e3c0a180af feat: add voice configuration schemas 2022-11-01 22:09:52 +08:00
louistiti 360c4d4f6f feat: add voice configuration schemas 2022-11-01 22:09:52 +08:00
louistiti 1a580d1051 Merge branch 'develop' into feat/add-typebox-ajv 2022-11-01 21:45:50 +08:00
louistiti f13df6ab76 Merge branch 'develop' into feat/add-typebox-ajv 2022-11-01 21:45:50 +08:00
louistiti 239472b61e Merge branch 'develop' into feat/add-typebox-ajv 2022-11-01 21:45:50 +08:00
Louis Grenard 83c501dc8d docs: add new sponsor 2022-11-01 21:44:44 +08:00
Louis Grenard 67d07ed7e6 docs: add new sponsor 2022-11-01 21:44:44 +08:00
Louis Grenard 18a728ff4b docs: add new sponsor 2022-10-30 22:23:40 +08:00
Louis Grenard b77e3a99e9 docs: add new sponsor 2022-10-30 22:23:40 +08:00
louistiti daba510755 feat: add distro level info in check report 2022-10-29 11:48:16 +08:00
louistiti dcc04de6bc feat: add distro level info in check report 2022-10-29 11:48:16 +08:00
louistiti 38693e42ef Merge branch 'fix/docker-issues-with-ssl' into develop 2022-10-23 22:55:04 +08:00
louistiti ceaff26d2d Merge branch 'fix/docker-issues-with-ssl' into develop 2022-10-23 22:55:04 +08:00
Divlo db373b66a6 fix(docker): issues with SSL 2022-10-23 12:37:36 +02:00
Divlo fb03359400 fix(docker): issues with SSL 2022-10-23 12:37:36 +02:00
Divlo d8e40c9cce refactor(server): replace unknown return type with TypeBox schema types 2022-10-23 11:09:07 +02:00
Divlo ecca030ab9 refactor(server): replace unknown return type with TypeBox schema types 2022-10-23 11:09:07 +02:00
Divlo 35322b39e3 refactor(server): replace unknown return type with TypeBox schema types 2022-10-23 11:09:07 +02:00
Divlo be079b87c8 feat(server): add JSON models with TypeBox
Later, we will be able to validate JSON files thanks to AJV.
2022-10-23 11:05:55 +02:00
Divlo 2a7b2f45d6 feat(server): add JSON models with TypeBox
Later, we will be able to validate JSON files thanks to AJV.
2022-10-23 11:05:55 +02:00
Divlo 2a48bc6343 feat(server): add JSON models with TypeBox
Later, we will be able to validate JSON files thanks to AJV.
2022-10-23 11:05:55 +02:00
louistiti 5acd22a885 Merge branch 'python-bridge-tcp-server-binaries' into develop 2022-10-23 12:01:21 +08:00
louistiti 632a048c6b Merge branch 'python-bridge-tcp-server-binaries' into develop 2022-10-23 12:01:21 +08:00
louistiti e1e4910399 fix(docker): based on Ubuntu image 2022-10-23 11:46:15 +08:00
louistiti 5bd67be2e5 fix(docker): based on Ubuntu image 2022-10-23 11:46:15 +08:00
louistiti 482f7bfbb8 chore(docker): .dockerignore path 2022-10-23 10:58:25 +08:00
louistiti 2d6f16a311 chore(docker): .dockerignore path 2022-10-23 10:58:25 +08:00
louistiti 3f8027af2a refactor: from superagent to axios 2022-10-23 10:55:03 +08:00
louistiti da063b73bc refactor: from superagent to axios 2022-10-23 10:55:03 +08:00
louistiti 3f97a12153 fix(python bridge): remove unecessary sqlite3 import 2022-10-23 10:07:14 +08:00
louistiti 6bee56580b fix(python bridge): remove unecessary sqlite3 import 2022-10-23 10:07:14 +08:00
louistiti ad1708abbb feat: ignore given warnings for TCP server binary on check script 2022-10-23 01:58:13 +08:00
louistiti bd1671c440 feat: ignore given warnings for TCP server binary on check script 2022-10-23 01:58:13 +08:00
louistiti e527110b9c feat: add binaries download progress 2022-10-23 01:00:55 +08:00
louistiti 0cf39c181f feat: add binaries download progress 2022-10-23 01:00:55 +08:00
louistiti c0886c086f Merge branch 'feat/download-unzip-python-bridge-tcp-server-binaries' into python-bridge-tcp-server-binaries 2022-10-22 23:23:08 +08:00
louistiti e459c1011c Merge branch 'feat/download-unzip-python-bridge-tcp-server-binaries' into python-bridge-tcp-server-binaries 2022-10-22 23:23:08 +08:00
louistiti 9928509171 refactor: minor setup-python-binaries renaming 2022-10-22 23:22:50 +08:00
louistiti 16444ae79f refactor: minor setup-python-binaries renaming 2022-10-22 23:22:50 +08:00
louistiti 75a351e77d chore: fix typo in report logs 2022-10-22 17:50:35 +08:00
louistiti 5c02e906fa chore: fix typo in report logs 2022-10-22 17:50:35 +08:00
louistiti b74e7beb29 ci: pre-release TCP server workflow 2022-10-22 15:14:17 +08:00
louistiti 03b0d08ae0 ci: pre-release TCP server workflow 2022-10-22 15:14:17 +08:00
louistiti 2183ffa4f0 refactor: send check report to the production URL 2022-10-19 23:28:33 +08:00
louistiti 6dbdfe7ba5 refactor: send check report to the production URL 2022-10-19 23:28:33 +08:00
Divlo 8ab9c2e4df feat: download and unzip TCP Server + Python Bridge on postinstall 2022-10-19 13:23:28 +02:00
Divlo c912b637ee feat: download and unzip TCP Server + Python Bridge on postinstall 2022-10-19 13:23:28 +02:00
louistiti fcce24d68c feat: send report to Pastebin and generate URL 2022-10-19 01:17:57 +08:00
louistiti 4df23cfe45 feat: send report to Pastebin and generate URL 2022-10-19 01:17:57 +08:00
louistiti 76e700e9ce feat: provide Python bridge and TCP server version in report 2022-10-19 00:40:34 +08:00
louistiti 65592b9af5 feat: provide Python bridge and TCP server version in report 2022-10-19 00:40:34 +08:00
louistiti 2463759717 refactor: check script according to binaries changes 2022-10-19 00:22:37 +08:00
louistiti 8f9937ddee refactor: check script according to binaries changes 2022-10-19 00:22:37 +08:00
louistiti 02c28b85f6 refactor: remove unnecessary checks 2022-10-16 23:25:58 +08:00
louistiti 5042bcc95d refactor: remove unnecessary checks 2022-10-16 23:25:58 +08:00
louistiti f54e8407c0 ci: remove tests for Ubuntu AArch64 2022-10-16 01:14:45 +08:00
louistiti cc6503e6f7 ci: remove tests for Ubuntu AArch64 2022-10-16 01:14:45 +08:00
louistiti 46a8bc61ea ci: test Ubuntu AArch64 2022-10-15 23:36:34 +08:00
louistiti 8de9d84f1f ci: test Ubuntu AArch64 2022-10-15 23:36:34 +08:00
louistiti 9aaa3d740d ci: build on Ubuntu AArch64 2022-10-15 23:24:45 +08:00
louistiti 29c582c89e ci: build on Ubuntu AArch64 2022-10-15 23:24:45 +08:00
louistiti 401f60e05b ci: split macOS ARM64 build into isolated job 2022-10-15 22:25:05 +08:00
louistiti bc53a36cd8 ci: split macOS ARM64 build into isolated job 2022-10-15 22:25:05 +08:00
louistiti a4fbba5fd0 ci: add macOS ARM64 self-hosted runner 2022-10-15 22:09:12 +08:00
louistiti 84cdc7fa60 ci: add macOS ARM64 self-hosted runner 2022-10-15 22:09:12 +08:00
louistiti 6ea6c84b3d refactor: remove setuptools and wheel force install for macOS ARM64 arch 2022-10-15 21:38:22 +08:00
louistiti 1dc0451f0f refactor: remove setuptools and wheel force install for macOS ARM64 arch 2022-10-15 21:38:22 +08:00
louistiti 6e2790b738 refactor: remove Rust compiler version number from TCP server setup 2022-10-15 21:11:29 +08:00
louistiti 1beebcccd2 refactor: remove Rust compiler version number from TCP server setup 2022-10-15 21:11:29 +08:00
louistiti 92ea9a081e feat: install additional resources for macOS ARM64 arch 2022-10-15 21:03:44 +08:00
louistiti b6b42c422c feat: install additional resources for macOS ARM64 arch 2022-10-15 21:03:44 +08:00
louistiti 23d6dd5e91 chore: ignore Fleet folder 2022-10-15 20:46:57 +08:00
louistiti bda75915b2 chore: ignore Fleet folder 2022-10-15 20:46:57 +08:00
Divlo b099d53871 fix(docker): install Python binaries from postinstall script 2022-10-13 22:59:39 +02:00
Divlo c6ad1968e7 fix(docker): install Python binaries from postinstall script 2022-10-13 22:59:39 +02:00
louistiti a5cbbf93a9 ci: try pre-release with all OSes 2022-10-13 01:42:36 +08:00
louistiti bc37bd1687 ci: try pre-release with all OSes 2022-10-13 01:42:36 +08:00
louistiti fc3e36713c ci: remove the lock file for Windows 2022-10-13 01:29:37 +08:00
louistiti 7161cd5996 ci: remove the lock file for Windows 2022-10-13 01:29:37 +08:00
louistiti 350072cf8c ci: remove skip lock for Windows 2022-10-13 01:22:40 +08:00
louistiti 23b7d5b49e ci: remove skip lock for Windows 2022-10-13 01:22:40 +08:00
louistiti b0849c0046 ci: add PIP_NO_BINARY 2022-10-13 01:11:12 +08:00
louistiti 599f9561e4 ci: add PIP_NO_BINARY 2022-10-13 01:11:12 +08:00
louistiti 0efed9d5f3 ci: set up MSBuild if Windows 2022-10-13 01:03:14 +08:00
louistiti bd45220c66 ci: set up MSBuild if Windows 2022-10-13 01:03:14 +08:00
louistiti 08d7fdf0dd ci: make use of Pipenv 2022.7.24 and skip lock on Windows 2022-10-13 00:53:58 +08:00
louistiti 53757651c8 ci: make use of Pipenv 2022.7.24 and skip lock on Windows 2022-10-13 00:53:58 +08:00
louistiti 42a3130394 ci: try with --deploy flag to install Python deps 2022-10-13 00:10:45 +08:00
louistiti bd1bde0814 ci: try with --deploy flag to install Python deps 2022-10-13 00:10:45 +08:00
louistiti 24c15c73c8 Merge branch 'develop' into python-bridge-tcp-server-binaries 2022-10-12 23:53:16 +08:00
louistiti ad044814a5 Merge branch 'develop' into python-bridge-tcp-server-binaries 2022-10-12 23:53:16 +08:00
louistiti 7d7552e95b docs: remove typo 2022-10-12 23:52:53 +08:00
louistiti fc2a37a7a6 ci: try Windows Pipenv deps install 2022-10-12 23:50:46 +08:00
louistiti aede3cbf52 ci: try Windows Pipenv deps install 2022-10-12 23:50:46 +08:00
louistiti a863c872b0 ci: try to build on Windows without catching exceptions 2022-10-12 23:37:23 +08:00
louistiti 79115d1b25 ci: try to build on Windows without catching exceptions 2022-10-12 23:37:23 +08:00
louistiti e5eeffa2bc Merge branch 'develop' into python-bridge-tcp-server-binaries 2022-10-12 23:11:07 +08:00
louistiti 404a1d5b3f Merge branch 'develop' into python-bridge-tcp-server-binaries 2022-10-12 23:11:07 +08:00
Louis Grenard 5e6caf7521 docs: add MacStadium to the README thanks section 2022-10-12 23:10:20 +08:00
louistiti 050d1f35b2 ci: tru the Windows runner without the rm command 2022-10-11 00:47:45 +08:00
louistiti 8a191b9c91 ci: tru the Windows runner without the rm command 2022-10-11 00:47:45 +08:00
louistiti 8a746d7ff8 ci: remove Pipfile.lock on Windows 2022-10-11 00:43:31 +08:00
louistiti 56a9a796bd ci: remove Pipfile.lock on Windows 2022-10-11 00:43:31 +08:00
louistiti 39bf7c678a ci: upgrade Pip to latest and try Windows runner 2022-10-11 00:36:27 +08:00
louistiti 5bc0a7f97b ci: upgrade Pip to latest and try Windows runner 2022-10-11 00:36:27 +08:00
louistiti 0188dd7ed8 ci: test to upload artifact with default name 2022-10-11 00:03:36 +08:00
louistiti 7fe7b2feaa ci: test to upload artifact with default name 2022-10-11 00:03:36 +08:00
louistiti adc63c94ba ci: upload artifacts then download and pre-release 2022-10-10 09:11:56 +08:00
louistiti ee0134598c ci: upload artifacts then download and pre-release 2022-10-10 09:11:56 +08:00
louistiti 47e9c291b4 ci: remove Windows 2022-10-10 09:02:03 +08:00
louistiti b19e5ad0cb ci: remove Windows 2022-10-10 09:02:03 +08:00
louistiti ff53b7a3f2 ci: remove Pipenv cache from pre-release binaries workflows 2022-10-10 00:14:37 +08:00
louistiti de442741e5 ci: remove Pipenv cache from pre-release binaries workflows 2022-10-10 00:14:37 +08:00
louistiti aafde0543f ci: install Pipenv on pre-release binaries workflows 2022-10-10 00:04:28 +08:00
louistiti f43e17aad4 ci: install Pipenv on pre-release binaries workflows 2022-10-10 00:04:28 +08:00
louistiti 4760c4d6de ci: checkout repo first on pre-release binaries workflows 2022-10-10 00:01:24 +08:00
louistiti ddbe4f0fd1 ci: checkout repo first on pre-release binaries workflows 2022-10-10 00:01:24 +08:00
louistiti c2865f73fb refactor: exit pre-release binaries script 2022-10-09 23:58:59 +08:00
louistiti f17a601d8e refactor: exit pre-release binaries script 2022-10-09 23:58:59 +08:00
louistiti 32ee4fef51 ci: add environment variables to locate virtual env 2022-10-09 23:58:05 +08:00
louistiti 5bace9545a ci: add environment variables to locate virtual env 2022-10-09 23:58:05 +08:00
louistiti 0f348ba48e Merge remote-tracking branch 'origin/develop' into python-bridge-tcp-server-binaries 2022-10-09 23:53:49 +08:00
louistiti f170a1dd8e Merge remote-tracking branch 'origin/develop' into python-bridge-tcp-server-binaries 2022-10-09 23:53:49 +08:00
louistiti cb37b4fcd2 refactor: pre-release binaries script give only workflow name 2022-10-09 23:53:40 +08:00
louistiti 91eac5c875 refactor: pre-release binaries script give only workflow name 2022-10-09 23:53:40 +08:00
Louis Grenard 4c19994fed ci: pre-release-tcp-server.yml GitHub Action workflow 2022-10-09 23:52:37 +08:00
Louis Grenard 8d4e8ba3a8 ci: pre-release-python-bridge.yml GitHub Action workflow 2022-10-09 23:51:22 +08:00
louistiti 6618f3a6a5 fix: rename GitHub workflows from the pre-release-binaries script 2022-10-09 23:39:22 +08:00
louistiti 518889b459 fix: rename GitHub workflows from the pre-release-binaries script 2022-10-09 23:39:22 +08:00
louistiti 0df61ae714 ci: pre-release TCP server 2022-10-09 22:03:26 +08:00
louistiti cc8a32d17d ci: pre-release TCP server 2022-10-09 22:03:26 +08:00
louistiti b9792d28d7 ci: pre-release Python bridge 2022-10-09 22:00:56 +08:00
louistiti a00b01c041 ci: pre-release Python bridge 2022-10-09 22:00:56 +08:00
louistiti 3f6e6ccdea refactor: rename GitHub workflows release script as pre-release 2022-10-09 21:27:12 +08:00
louistiti 7db5c064d9 refactor: rename GitHub workflows release script as pre-release 2022-10-09 21:27:12 +08:00
louistiti 4fcf8dceda feat: trigger GitHub workflows script done 2022-10-09 21:16:42 +08:00
louistiti ed8390a36c feat: trigger GitHub workflows script done 2022-10-09 21:16:42 +08:00
louistiti 3fe89bfda3 feat(tcp server): versioning 2022-10-09 00:31:52 +08:00
louistiti 1d45c2e715 feat(tcp server): versioning 2022-10-09 00:31:52 +08:00
louistiti 2b8ac0eb2b feat(python bridge): versioning 2022-10-09 00:29:30 +08:00
louistiti 784f86f6f3 feat(python bridge): versioning 2022-10-09 00:29:30 +08:00
louistiti 0ae31f6cc8 feat(server): add warning hint on macOS TCP server cold start 2022-10-07 19:18:36 +08:00
louistiti 9d865291f0 feat(server): add warning hint on macOS TCP server cold start 2022-10-07 19:18:36 +08:00
louistiti cb1a192a6d fix: comply macOS x86_64 and macOS arm64 to Python sysconfig.get_platform() 2022-10-07 18:25:51 +08:00
louistiti bc7dd0f836 fix: comply macOS x86_64 and macOS arm64 to Python sysconfig.get_platform() 2022-10-07 18:25:51 +08:00
louistiti 90530e4e60 refactor: remove LC_ALL and LANG env vars 2022-10-07 18:23:10 +08:00
louistiti 8d64ad9650 refactor: remove LC_ALL and LANG env vars 2022-10-07 18:23:10 +08:00
louistiti 6a4bde6c88 chore: explicit exclusion of TCP server and Python bridge on TypeScript watcher 2022-10-07 15:47:55 +08:00
louistiti b3fdde9d83 chore: explicit exclusion of TCP server and Python bridge on TypeScript watcher 2022-10-07 15:47:55 +08:00
louistiti 7111983ef5 perf(tcp server): option to download spaCy models through mirror in China 2022-10-07 15:31:37 +08:00
louistiti ea6fc4108a perf(tcp server): option to download spaCy models through mirror in China 2022-10-07 15:31:37 +08:00
louistiti b201f3f1b1 fix(tcp server): handle Windows child process does not throw exception 2022-10-07 14:10:32 +08:00
louistiti 40958f2fb4 fix(tcp server): handle Windows child process does not throw exception 2022-10-07 14:10:32 +08:00
louistiti cace69e9af perf(tcp server): do not download Python deps but spaCy models when necessary 2022-10-07 13:44:48 +08:00
louistiti 8e0d18a596 perf(tcp server): do not download Python deps but spaCy models when necessary 2022-10-07 13:44:48 +08:00
louistiti 432c590ee7 feat: on Python dev env setup, provide Windows hint related to Microsoft C++ Build Tools 2022-10-07 13:24:58 +08:00
louistiti 861d773cdd feat: on Python dev env setup, provide Windows hint related to Microsoft C++ Build Tools 2022-10-07 13:24:58 +08:00
louistiti 061f555e11 fix: always make use of latest Python build deps 2022-10-07 13:16:35 +08:00
louistiti 6bd9f0ef9d fix: always make use of latest Python build deps 2022-10-07 13:16:35 +08:00
louistiti 7bb9780ab1 feat: add hint on failed build 2022-10-07 12:07:48 +08:00
louistiti d69157439c feat: add hint on failed build 2022-10-07 12:07:48 +08:00
louistiti 999328819a feat: map Python bridge and TCP server binaries to runtime code 2022-10-07 11:53:43 +08:00
louistiti 1a3d4f2204 feat: map Python bridge and TCP server binaries to runtime code 2022-10-07 11:53:43 +08:00
louistiti 0e697183b2 perf(tcp server): optimize spaCy models checking 2022-10-07 11:26:39 +08:00
louistiti b59f6a7264 perf(tcp server): optimize spaCy models checking 2022-10-07 11:26:39 +08:00
louistiti 05b62871fb feat: universal build binaries script 2022-10-07 10:41:04 +08:00
louistiti bf902fd2d9 feat: universal build binaries script 2022-10-07 10:41:04 +08:00
louistiti 9724d7b943 feat: pack TCP server and optimize setup scripts 2022-10-07 02:37:43 +08:00
louistiti a8272e1bf9 feat: pack TCP server and optimize setup scripts 2022-10-07 02:37:43 +08:00
louistiti 109561495c feat(tcp server): set up script 2022-10-06 23:20:30 +08:00
louistiti b96070085b feat(tcp server): set up script 2022-10-06 23:20:30 +08:00
louistiti 286892eb30 chore: upgrade archiver to latest 2022-10-06 19:48:17 +08:00
louistiti 48688dc6e6 chore: upgrade archiver to latest 2022-10-06 19:48:17 +08:00
louistiti 3eea6a8fe8 feat(python bridge): pack build 2022-10-06 19:45:35 +08:00
louistiti 9dd9b010ed feat(python bridge): pack build 2022-10-06 19:45:35 +08:00
louistiti 472e388508 feat(python bridge): build script 2022-10-06 19:01:50 +08:00
louistiti 0888ae5033 feat(python bridge): build script 2022-10-06 19:01:50 +08:00
louistiti 1a953e007d feat(python bridge): set up script 2022-10-06 16:27:20 +08:00
louistiti 2d7be3348a feat(python bridge): set up script 2022-10-06 16:27:20 +08:00
louistiti 0fd4dd67c7 refactor(tcp server): move tokenizers private libraries to lib location 2022-10-06 08:34:30 +08:00
louistiti bee3fbb9e2 refactor(tcp server): move tokenizers private libraries to lib location 2022-10-06 08:34:30 +08:00
louistiti 6146fa1f15 fix(tcp server): include private libraries of the tokenizers package 2022-10-06 01:25:26 +08:00
louistiti 55db68400d fix(tcp server): include private libraries of the tokenizers package 2022-10-06 01:25:26 +08:00
louistiti 3361d9b37e feat(tcp server): include tokenizers files on build 2022-10-06 01:11:52 +08:00
louistiti 7d2432c56c feat(tcp server): include tokenizers files on build 2022-10-06 01:11:52 +08:00
louistiti 39dacb87e0 chore(tcp server): upgrade to latest setuptools version 2022-10-06 00:59:20 +08:00
louistiti 48731e8ddf chore(tcp server): upgrade to latest setuptools version 2022-10-06 00:59:20 +08:00
louistiti 2c9b675cae refactor(tcp server): remove cx_Freeze from Pipfile to install it individually during the dev phase 2022-10-06 00:13:54 +08:00
louistiti 4d0a97f9c2 refactor(tcp server): remove cx_Freeze from Pipfile to install it individually during the dev phase 2022-10-06 00:13:54 +08:00
louistiti 0d02b2e9fa fix: remove requests.certs import from the TCP server and Python bridge setups 2022-10-05 01:31:46 +08:00
louistiti 133310bd7d fix: remove requests.certs import from the TCP server and Python bridge setups 2022-10-05 01:31:46 +08:00
louistiti d8b20660a2 fix: upgrade cx_Freeze to 6.11.1 with --no-binary to avoid OpenSSL conflict with urllib3 2022-10-04 23:57:18 +08:00
louistiti 69bf9cebb3 fix: upgrade cx_Freeze to 6.11.1 with --no-binary to avoid OpenSSL conflict with urllib3 2022-10-04 23:57:18 +08:00
louistiti 5715786be2 chore: add TCP server and Python bridge as high-level nodes 2022-10-04 17:16:41 +08:00
louistiti 91e39a0a37 chore: add TCP server and Python bridge as high-level nodes 2022-10-04 17:16:41 +08:00
louistiti 0a4baf67ac feat: isolate TCP server 2022-10-04 17:10:14 +08:00
louistiti 586ca11106 feat: isolate TCP server 2022-10-04 17:10:14 +08:00
louistiti 39b605f6f4 chore: transparent distribution structure 2022-10-04 14:30:10 +08:00
louistiti 20b967b4ea chore: transparent distribution structure 2022-10-04 14:30:10 +08:00
louistiti a27ab96e18 feat: Python bridge binary build with cx_Freeze 2022-10-04 14:19:56 +08:00
louistiti dd9d024975 feat: Python bridge binary build with cx_Freeze 2022-10-04 14:19:56 +08:00
louistiti f1dcb07d5b feat: Python bridge build on macOS x86_64 arch 2022-10-02 15:43:48 +08:00
louistiti 8d1ab6973a feat: Python bridge build on macOS x86_64 arch 2022-10-02 15:43:48 +08:00
louistiti 38226ca84e feat(server): add execution time 2022-09-27 19:49:09 +08:00
louistiti b7d496e6d6 feat: add skill execution time in check script 2022-09-27 19:46:41 +08:00
louistiti 4d2fb56109 Merge branch 'chore/eslint-rule-prefer-node-protocol' into develop 2022-09-27 08:46:48 +08:00
Divlo f4a53da7fd chore: add unicorn/prefer-node-protocol ESLint rule 2022-09-26 22:10:27 +02:00
louistiti defc70128c refactor: add ESLint rules about imports 2022-09-27 00:01:03 +08:00
louistiti f68da11f6b refactor(server): make use of node:* import for all Node.js built-in modules 2022-09-26 23:28:25 +08:00
louistiti 0a49cb17fa refactor(server): remove node:* imports 2022-09-26 22:48:12 +08:00
louistiti 7081464abc refactor(server): add explicit return types 2022-09-26 22:46:12 +08:00
louistiti 7544534ea4 refactor(server): skill domain helper to static class 2022-09-26 21:36:07 +08:00
louistiti 46c0b579aa refactor(server): OS helper to static class 2022-09-26 21:32:59 +08:00
louistiti a80e8ba65d refactor(server): log helper to static class 2022-09-26 21:29:56 +08:00
louistiti 88d86117ac refactor(server): loader helper to static class 2022-09-26 21:24:07 +08:00
louistiti f4d625500f refactor(server): lang helper to static class 2022-09-26 21:17:36 +08:00
louistiti afec850fc9 refactor(server): date helper to static class 2022-09-26 21:13:33 +08:00
louistiti 9065d713e9 refactor(server): string helper from singleton to static 2022-09-26 00:44:40 +08:00
louistiti 1a4e09f908 refactor(server): simplify helpers singleton 2022-09-25 23:37:30 +08:00
Louis Grenard 4a59ba1d9c chore: update sponsor 2022-09-25 08:44:31 +08:00
louistiti cc317842d8 chore: clean up ESLint comments and new Prettier/ESLint script 2022-09-21 23:29:29 +08:00
louistiti c65f60e2b7 refactor(server): provide explicit class name to helpers 2022-09-21 23:08:11 +08:00
louistiti 2378dc37b1 Merge branch 'refactor/server-helpers' into develop 2022-09-21 23:01:36 +08:00
louistiti 82f6ee80fe refactor(server): skill domain helper to singleton 2022-09-21 23:01:16 +08:00
louistiti 84aadc0245 refactor(server): string helper to singleton 2022-09-21 22:24:48 +08:00
louistiti a5e48ec9e7 refactor(server): OS helper to singleton 2022-09-21 22:15:02 +08:00
louistiti e7cb31e706 chore(server): add comments on loader helper 2022-09-21 21:51:19 +08:00
louistiti 713ece380b refactor(server): rename lang helper methods 2022-09-21 21:46:05 +08:00
louistiti 8d3aee8da7 refactor(server): lang helper to singleton 2022-09-21 21:31:19 +08:00
louistiti f21e43c16a refactor(server): date helper to singleton 2022-09-21 20:43:50 +08:00
louistiti 4f1683dc55 refactor(server): capitalize singleton helpers instance constants 2022-09-21 20:25:00 +08:00
Divlo 74be62b812 chore: ignore core/skills-endpoints.json 2022-09-20 22:19:06 +02:00
Divlo 8d6a1167da chore: delete old unused ISSUE_TEMPLATE 2022-09-20 21:51:57 +02:00
Divlo c68b16191a chore: remove unneeded eslint disable comments 2022-09-20 21:49:41 +02:00
Divlo ef8374d03b perf: improve scripts/lint 2022-09-20 21:47:29 +02:00
Divlo 285bfa6e78 refactor(server): add getSkillConfig 2022-09-20 21:43:34 +02:00
Divlo a28eede95b refactor(server): os helper to TypeScript 2022-09-20 21:34:56 +02:00
Divlo 247167202d refactor(server): remove inconsistencies 2022-09-20 21:33:02 +02:00
Divlo 949138627e refactor(server): loader helper to TypeScript 2022-09-16 20:58:24 +02:00
Divlo b7f20710db refactor(server): log helper to TypeScript 2022-09-16 19:36:58 +02:00
Divlo c979a9ea08 refactor(server): lang helper to TypeScript 2022-09-16 17:17:54 +02:00
louistiti dabd657acf refactor(server): add comments to the skill domain helper 2022-09-13 23:16:12 +08:00
louistiti 6f7bcc5e37 refactor(server): skill domain helper to TypeScript 2022-09-13 23:06:57 +08:00
louistiti dbd659d75f feat: add OS info in the checking report 2022-09-13 00:45:23 +08:00
louistiti ed97b9361f feat: add spaCy model checking 2022-09-13 00:09:37 +08:00
louistiti 35a9f6e0ea refactor(server): string helper to TypeScript 2022-09-12 16:00:46 +08:00
louistiti da0233495d refactor(server): replace Moment.js by Day.js 2022-09-12 12:45:25 +08:00
louistiti ebe31f4b60 chore: upgrade moment-timezone to latest 2022-09-12 10:45:04 +08:00
louistiti 6dbe1e514f refactor(server): date helper to TypeScript 2022-09-12 10:41:16 +08:00
louistiti b4909564c7 chore: upgrade Coqui STT to latest 2022-09-10 11:51:23 +08:00
louistiti e8b596a8d8 chore: upgrade hotword deps 2022-09-10 10:55:13 +08:00
Louis Grenard 54336cdd01 docs: update skills list link 2022-09-05 13:45:01 +08:00
louistiti bf065fcbc6 chore: upgrade FFprobe to latest 2022-09-04 23:59:18 +08:00
louistiti e541e32c53 chore: upgrade Socket.IO to latest 2022-09-04 23:53:05 +08:00
louistiti 6872ee9735 chore: upgrade Vite to latest 2022-09-04 23:50:17 +08:00
louistiti e0bb25b1d9 fix(web app): when suggestions are null new npm deps tree was creating conflict 2022-09-04 23:48:55 +08:00
louistiti cf563f5f32 feat(server): detach the TCP server from the main process in dev 2022-09-04 18:54:16 +08:00
louistiti 891b032543 fix: recursive compilation through the server folder 2022-09-04 14:28:36 +08:00
louistiti 49ffb0b1f3 style(server): typo 2022-09-04 14:25:41 +08:00
louistiti aa7a152f7b refactor(server): make use of consts for TCP server matters 2022-09-04 14:23:23 +08:00
louistiti 58dc881a83 refactor(server): make use of consts for logger matters 2022-09-04 14:18:53 +08:00
louistiti 819e57a2c2 refactor(server): make use of consts for HTTP API matters 2022-09-04 14:17:06 +08:00
louistiti d05d572b70 refactor(server): make use of consts for voice config matters 2022-09-04 14:10:42 +08:00
louistiti e07ec87838 refactor(server): init dotenv earlier and make use of consts for time zone matters 2022-09-04 13:56:05 +08:00
louistiti cb173a6319 refactor(server): make use of consts for HTTP config matters 2022-09-04 13:32:58 +08:00
louistiti ddffd80985 refactor(server): make use of consts for lang matters 2022-09-04 13:28:10 +08:00
louistiti e1719115ea refactor(server): make use of consts for env matters 2022-09-04 13:13:03 +08:00
louistiti a903f20d7e chore: merge 2022-09-04 11:57:05 +08:00
louistiti 783858f811 chore: keep an exact ESLint version for JetBrains IDEs issue 2022-09-04 11:56:02 +08:00
louistiti 4e7ee1bb5e feat: make sure there is no .venv folder before the Python deps setup 2022-09-03 21:12:53 +08:00
louistiti a79459e5a6 chore: Prettier and lint-staged setup 2022-09-03 20:59:18 +08:00
louistiti 6d836d2d93 chore: upgrade Fastify to latest 2022-09-03 20:56:44 +08:00
louistiti e905dcc86b feat: lint-staged config 2022-09-03 20:56:15 +08:00
louistiti 4485b97ec2 chore: upgrade Fastify to latest 2022-09-03 19:57:19 +08:00
louistiti 0ea9bec001 Merge branch 'ts-kickoff' into develop 2022-09-03 19:25:04 +08:00
louistiti be4761602c chore: new deps tree 2022-09-03 19:24:06 +08:00
louistiti 27bd5a082f feat: remove Babel 2022-09-03 19:16:13 +08:00
louistiti 019c462bfa feat: complete Prettier setup 2022-09-03 19:12:41 +08:00
louistiti ba9f3f22f6 feat: basic Prettier setup 2022-09-03 18:37:56 +08:00
louistiti b9945729bb feat: new ESLint config 2022-09-03 18:17:16 +08:00
louistiti 935246d09a feat: make use of tsc-watch for dev server 2022-09-03 17:29:22 +08:00
louistiti ebda0da64e chore: install resolve-tspaths dev dep. 2022-09-03 13:08:54 +08:00
louistiti 36730025fc chore: upgrade nodemon to latest 2022-09-03 12:06:00 +08:00
louistiti 6d3d441fbf feat: extend from main TypeScript config 2022-09-03 12:02:40 +08:00
louistiti 9e48c5264c fix: resolve alias paths after compilation 2022-09-03 11:58:10 +08:00
louistiti 844fcc8a86 refactor: correct build:server executions order 2022-09-03 10:12:49 +08:00
louistiti 04c5bedd2b chore: move nodemon config to a config file 2022-09-03 10:05:27 +08:00
louistiti 4ca98cdbab chore: extend TypeScript config 2022-09-03 09:51:35 +08:00
louistiti 9645c3de68 refactor: TypeScript build kick off 2022-08-29 00:59:35 +08:00
louistiti 781e072b23 refactor: TypeScript entry point 2022-08-28 14:12:59 +08:00
louistiti 3498293098 refactor: make use of ts-node 2022-08-28 11:37:32 +08:00
louistiti fa7bc53ee9 chore: bump 1.0.0-beta.8+dev 2022-08-24 21:35:26 +08:00
louistiti cb2db411ce Merge branch 'develop' 2022-08-24 21:20:41 +08:00
louistiti 0bd07cba5c docs: add blog post to the changelog 2022-08-24 21:19:20 +08:00
louistiti 04b95e20c3 docs: clean up changelog 2022-08-24 21:17:03 +08:00
louistiti 3fb7ed691f build: release 1.0.0-beta.7 2022-08-24 21:12:30 +08:00
Louis Grenard e4a0a4556e docs: change notice from the README 2022-08-24 21:03:04 +08:00
louistiti 4bf2a9af96 docs: change newsletter link 2022-08-23 23:40:55 +08:00
louistiti 41435b3cbc chore: change email address 2022-08-23 23:01:46 +08:00
louistiti afdb71f766 perf: check Pipfile instead of Pipfile.lock to judge whether Python packages must be installed 2022-08-23 21:19:23 +08:00
louistiti 0580cfc54a chore: upgrade to spaCy latest and PyTorch latest 2022-08-23 21:05:49 +08:00
Divlo f507f6f7e4 fix(docker): usage of Ubuntu base image with pyenv and nvm (#408) 2022-08-23 20:59:09 +08:00
louistiti f17b894907 refactor: legacy package/module naming to skills naming 2022-08-20 22:47:06 +08:00
louistiti 01f7515e6f refactor: switch from skill NLU config to skill config naming 2022-08-20 22:35:34 +08:00
louistiti 141c89ecbf feat(web app): join us on Discord 2022-08-14 21:19:04 +08:00
Divlo 81ae87f0d9 chore: improve Gitpod usage (using current source code) (#398) 2022-07-30 17:20:40 +08:00
louistiti 5219e41d31 chore: simplify Gitpod initialization 2022-07-27 23:16:37 +08:00
louistiti bf679495fa chore: Gitpod makes use of the Leon CLI 2022-07-27 23:02:55 +08:00
louistiti 65bfa6cf37 chore: enable site-packages for the virtual env 2022-07-27 22:51:42 +08:00
louistiti 58ab0acdd8 refactor(server): auto capitalize first letter of spaCy entities 2022-07-21 23:03:48 +08:00
louistiti cb18ed6397 fix(skill/color): more appropriate answer 2022-07-21 21:47:29 +08:00
louistiti fdf0a389b7 fix: check script with new intent-object format 2022-07-19 22:01:48 +08:00
louistiti cfd8f7cbe5 fix: check new resolvers paths 2022-07-19 21:57:00 +08:00
louistiti a1d390dd3e style(server): format as project convention 2022-07-16 18:51:31 +08:00
Najim 6e7c0aac57 fix(server): make leon handle multiple socket.io-client instances 2022-07-15 08:45:28 +01:00
rangi376w e83a1c4230 docs: README - Edited sentence for clarity (#389)
The sentence ended with a preposition and was grammatically incorrect. Updated for clarity.

Co-authored-by: Louis Grenard <louis.grenard@gmail.com>
2022-07-13 23:35:04 +08:00
louistiti 79e7df022f feat(skill/akinator): finish up 2022-07-13 23:26:15 +08:00
louistiti 244d08c0bd feat(server): trigger next action suggestions or current ones 2022-07-13 22:51:10 +08:00
louistiti 7134c9dbc1 refactor(server): make difference between next suggestions and current suggestions 2022-07-13 22:31:11 +08:00
louistiti 93f09685b5 refactor(server): controlled suggestions 2022-07-13 09:05:53 +08:00
louistiti 602604e437 feat: create new NLP skills resolvers model + NLP global resolvers model 2022-07-12 22:27:38 +08:00
louistiti 29c5348b5a chore: use original intent object sample file 2022-07-11 08:41:21 +08:00
louistiti f6461f733b fix(skill/akinator): remove direct end on guess action 2022-07-10 20:47:51 +08:00
louistiti f9865b71c3 refactor(skill/rochambeau): move handsign global entity to skill enum entity 2022-07-10 20:07:29 +08:00
louistiti 905d248ebf feat: better isolate skill resolvers from global resolvers + finish up Akinator skill 2022-07-10 19:58:07 +08:00
louistiti b35a249bf6 feat: transfer language from core to skills + support thematics on Akinator skill 2022-07-10 09:21:43 +08:00
louistiti 76cae42fde feat(skill/akinator): finished main business logic 2022-07-10 00:26:41 +08:00
louistiti 239ce6fb36 chore: add Leon version in check report 2022-07-09 19:07:17 +08:00
louistiti ec77dd0f02 fix(server): fallback on global resolver during resolver classification 2022-07-09 18:59:25 +08:00
louistiti fa558a447a docs: edit newsletter link 2022-07-07 00:04:08 +08:00
louistiti 7101b8b4b8 feat: actions on slot level + akinator skill progress 2022-07-04 21:50:57 +08:00
louistiti 02a2f71470 feat(skill/akinator): backbone 2022-07-04 00:47:10 +08:00
louistiti aad9f3f1ef feat(skill/mbti): complete form resolver 2022-07-03 12:32:15 +08:00
louistiti 99a3f103e0 feat(skill/mbti): finish business logic 2022-07-03 12:17:05 +08:00
louistiti 0f4576c27d refactor(skill/mbti): change some questions 2022-07-03 10:00:42 +08:00
louistiti ae4f69f7c7 feat(skill/mbti): questions mapping 2022-07-03 00:00:48 +08:00
louistiti 7f1f887159 feat(skill/mbti): complete questionnaire 2022-07-02 23:46:48 +08:00
louistiti 33109a4c8b feat(skill/mbti): main logic backbone 2022-07-02 23:21:46 +08:00
louistiti 6ed88a5946 feat: add Cartesian sample training on resolvers + enum entities 2022-07-02 01:42:23 +08:00
louistiti eb5ade7684 feat: map skills resolvers intents 2022-07-01 01:07:48 +08:00
louistiti 82df0a3c23 feat: train skills resolvers and remap as per changes 2022-07-01 00:19:36 +08:00
louistiti 0fe0e9a717 refactor(server): remove resolvers ghosting as it uses its own model now 2022-06-30 22:48:40 +08:00
louistiti e37526d905 feat(server): introduce main NLP model and resolvers NLP model 2022-06-30 22:35:54 +08:00
louistiti 899676110a chore: tmp disable GitHub Actions on the develop branch 2022-06-30 21:32:06 +08:00
louistiti 86d5040a7d feat(skill/mbti): main NLU structure [skip ci] 2022-06-30 00:31:21 +08:00
louistiti aebe513599 Merge branch 'from-modules-to-skills' into develop [skip ci] 2022-06-26 23:23:57 +08:00
louistiti 07743657cd BREAKING: remove legacy packages 2022-06-26 23:11:37 +08:00
louistiti 68514cbc07 Merge branch 'from-modules-to-skills' into develop 2022-06-26 19:47:20 +08:00
louistiti ce00989b01 feat(skill/color): introduce color skill 2022-06-26 19:32:49 +08:00
louistiti f1f8b472b4 refactor(skill/todo_list): adapt to Cartesian training samples 2022-06-26 17:54:49 +08:00
louistiti a1e9011d5d feat: achieve Cartesian training 2022-06-26 17:37:21 +08:00
louistiti e3b20a320d chore: add global entities logs on training phase 2022-06-26 17:28:19 +08:00
louistiti a8d82050c8 fix(server): make use of current entities to match global entities 2022-06-26 12:40:29 +08:00
louistiti 2e66be25ef refactor: train global entities at a higher level 2022-06-26 12:01:43 +08:00
louistiti aa995d46c8 refactor: move up the rest of the config to the higher level 2022-06-20 21:17:30 +08:00
louistiti 3713521b08 refactor: move up /server/src/config to /core level 2022-06-19 23:57:36 +08:00
louistiti dcddacca29 feat: introduce suggestions 2022-06-19 14:37:21 +08:00
louistiti 4b5a883510 feat: communicate suggestions to the client 2022-06-19 13:47:43 +08:00
louistiti 192dd0a87a feat(skill/rochambeau): add start answers 2022-06-19 12:18:23 +08:00
louistiti 573704706c feat(skill/rochambeau): introduce paper scissors rock 2022-06-19 12:00:17 +08:00
louistiti fba80966c9 feat(skill/guess_the_number): introduce the Guess the Number skill 2022-06-16 23:38:35 +08:00
louistiti af0fdd1e18 feat(skill/introduction): add one utterance sample 2022-06-16 22:24:42 +08:00
louistiti 843bc428b8 feat(server): change log emojis 2022-06-16 22:21:15 +08:00
louistiti be0b345d3f feat(skill/birthday): remove birthday skill 2022-06-16 21:52:30 +08:00
louistiti c5cc9bdd52 feat(skill/introduction): ask about owner info if necessary 2022-06-16 21:52:00 +08:00
louistiti 795acc5bdd feat: shared skills memory 2022-06-16 21:31:30 +08:00
louistiti 8377c63db4 feat(server): provide nextAction even when no slot is set and clean up NLU object on context switch 2022-06-15 23:16:13 +08:00
louistiti e1485c2ed3 refactor: simplify skills outputs 2022-06-12 17:58:57 +08:00
louistiti 10d10a1690 feat: support dynamic variables on skill NLU settings for logic type 2022-06-12 10:49:07 +08:00
louistiti c5edf6488b refactor: simplify slots mapping data structure between core and skills 2022-06-11 23:02:49 +08:00
louistiti b69b1fea16 feat(server): report full traceback from skills execution 2022-06-11 10:01:47 +08:00
louistiti 567b030c4f feat(server): support on-the-fly entity annotation for built-in entities 2022-06-11 07:54:20 +08:00
louistiti 2ac1bc63cc fix(server): multiple slots filling 2022-06-10 22:57:31 +08:00
louistiti fce47cdbd5 feat(server): save slots within conversation context 2022-06-08 00:20:26 +08:00
louistiti 9139215971 chore: remove logs 2022-06-07 22:05:51 +08:00
louistiti 6712ae5539 fix(server): context switching on action loop 2022-06-06 23:42:36 +08:00
louistiti ceea47ff7d feat(server): resolve resolvers tmp 2022-06-06 00:26:24 +08:00
louistiti f4d782b69e refactor(server): split anonymous collaborative logger request 2022-06-05 10:58:00 +08:00
louistiti 8a33980260 refactor(server): split language switching 2022-06-05 10:54:58 +08:00
louistiti a42bf40b93 Merge branch 'develop' into from-modules-to-skills 2022-06-05 10:43:53 +08:00
louistiti 782a3aaa0a fix(server): check one-shot slot filling case causing infinite loop 2022-06-05 10:43:38 +08:00
Louis Grenard f30ddb6be5 docs: update sponsor [skip ci] 2022-06-03 08:47:21 +08:00
louistiti 6cfbabfe73 refactor(server): tmp NLU split 2022-05-29 17:14:28 +08:00
louistiti b1a332bab6 feat: tmp resolvers mapping 2022-05-23 23:19:25 +08:00
louistiti e88495a9a9 feat: start to map resolvers between the core and skills 2022-05-23 22:33:56 +08:00
louistiti 993d52e868 feat: train affirmation and denial resolver 2022-05-23 22:23:32 +08:00
louistiti 0acb31a9c6 feat(server): prepare the next action on non-slot-filled skills 2022-05-22 13:11:07 +08:00
louistiti ffe0c8d217 Merge branch 'develop' into from-modules-to-skills 2022-05-14 12:59:55 +08:00
Louis Grenard 5dbc010fa6 docs: remove sponsor [skip ci] 2022-05-14 12:59:02 +08:00
Louis Grenard f36dd20f82 docs: remove sponsor [skip ci] 2022-05-14 12:54:35 +08:00
louistiti 870ab2e87e feat(server): add more affirmative utterance samples 2022-05-14 12:53:31 +08:00
louistiti 0ebc0518e6 fix(skill/rochambeau): final logic 2022-05-09 22:31:47 +08:00
louistiti 7f5e30ac82 feat(skill/rochambeau): init 2022-05-09 21:47:35 +08:00
louistiti f4446ef177 feat(server): restart a skill with the original utterance saved in context 2022-05-09 01:09:33 +08:00
louistiti 035c9d5240 feat(server): clean up context if the action loop does not meet the expected items 2022-05-08 23:37:03 +08:00
louistiti 1529c72039 feat(server): add handsigns custom entity 2022-05-08 22:16:28 +08:00
louistiti 9e242d77d3 feat(server): reprocess NLU in case of slot filling interruption 2022-05-08 12:40:49 +08:00
louistiti 250e16e4e4 refactor: rename "source" to "item" 2022-05-08 11:31:05 +08:00
louistiti f88305020a feat(server): handle action loop when slots have all been filled at once 2022-05-05 22:49:39 +08:00
louistiti 27dc801cf5 feat(server): break the action loop from the skill 2022-05-05 21:37:59 +08:00
louistiti 05e0911009 chore: upgrade spaCy to 3.3.0 2022-05-05 21:26:02 +08:00
louistiti 99681e2577 feat(server): stop action loop from skill to core 2022-05-05 21:11:48 +08:00
louistiti c5b3840082 feat(server): introduce basic concept of action loop 2022-05-04 22:52:05 +08:00
louistiti 7a9db1363d chore: require Python 3.9.10 to run 2022-05-01 10:53:52 +08:00
louistiti c988a456f4 Merge branch 'develop' into from-modules-to-skills 2022-05-01 08:50:05 +08:00
Louis Grenard 5ee57ddf2a docs: remove sponsor [skip ci] 2022-05-01 08:49:35 +08:00
louistiti 6c59f17207 chore: tmp 2022-05-01 08:48:07 +08:00
Louis Grenard b47cbc3a5e docs: add @ant-media sponsor [skip ci] 2022-04-27 22:04:24 +08:00
louistiti fa4bd6a8a1 Merge branch 'develop' into from-modules-to-skills 2022-04-11 22:53:52 +08:00
louistiti 3dd9039678 fix: use ports.ubuntu.com mirror for the offline TTS [skip ci] 2022-04-11 22:53:26 +08:00
louistiti 19e1aa22f6 feat(server): prepare action loop feature 2022-04-07 22:09:01 +08:00
louistiti 8b56a1850c feat(server): add current utterance entities to differentiate from the whole context 2022-04-06 02:10:05 +08:00
louistiti 8e1868798c feat(server): when a context is activated, pick up the most probable classification 2022-04-06 01:44:40 +08:00
louistiti 875757739f feat(server): persist entities into contexts 2022-04-06 00:25:58 +08:00
louistiti 860571bcb6 refactor: persistent entities in dynamic contexts (wip) 2022-04-05 20:27:15 +08:00
louistiti efc2a3a7c0 refactor: normalize entities 2022-04-05 10:41:18 +08:00
louistiti 9d6ae0aecd refactor: comply skills params to new structure 2022-04-05 10:22:49 +08:00
louistiti 68e40f65df feat(server): forward slots to skill + add original utterance 2022-04-01 00:45:07 +08:00
louistiti 22e9234b3d feat(server): handle case when all slots have been filled in one utterance 2022-04-01 00:02:37 +08:00
louistiti 8746175eca refactor(server): NLU process method 2022-03-31 00:21:53 +08:00
louistiti 39f8dc2bae refactor(server): slotFill method 2022-03-30 23:21:43 +08:00
louistiti 6b37195d9d refactor(server): make use of setter for activeContext 2022-03-30 00:10:27 +08:00
louistiti faabc2c7b0 fix(server): clean up active context after all slots have been filled 2022-03-29 20:11:33 +08:00
louistiti 7513aa7d20 fix: set skill config only when a bridge is set 2022-03-29 20:04:55 +08:00
louistiti 9b870010dd feat(server): trigger next action once all slots have been filled 2022-03-29 00:11:08 +08:00
louistiti 9124687eb0 feat(server): complete slot filling before triggering the next action 2022-03-28 01:09:30 +08:00
louistiti 77ebaf4a9c feat(server): from modules to skills with type at the actions level 2022-03-28 00:27:42 +08:00
louistiti 81c7eb83c5 refactor(server): move from skill type to action type 2022-03-28 00:01:57 +08:00
louistiti e27c1b9c8f feat(server): verify if all slots are filled 2022-03-27 22:49:59 +08:00
louistiti b6f79e04b9 refactor(server): disable builtin boolean entity 2022-03-27 21:59:44 +08:00
louistiti 25adf406c8 feat(server): context and slot filling, keep context and await for entities 2022-03-27 19:50:35 +08:00
louistiti 1ece25a497 feat(server): unstack oldest context 2022-03-27 12:30:34 +08:00
louistiti 49a7da9117 refactor(server): context and slot filling into a specific class 2022-03-27 10:24:08 +08:00
louistiti 2a535a8898 refactor(server): start slot filling / context refactor (wip) 2022-03-27 01:32:12 +08:00
louistiti 8257eb8792 feat(server): context setup with slot for each conversation (wip) 2022-03-27 01:05:56 +08:00
louistiti 960a6dc71c feat(server): resolve slots from slot filling 2022-03-26 19:51:50 +08:00
louistiti 3bbc2f8a25 feat(server): pickup questions for slot filling 2022-03-26 17:36:21 +08:00
louistiti 6aa60bfbd8 fix(server): correctly extract all spaCy entities 2022-03-26 15:51:12 +08:00
louistiti 368c57928a refactor(server): spaCy entities extracting 2022-03-22 23:40:35 +08:00
louistiti 1d9b18093b feat(server): main slots structure (wip) 2022-03-22 22:43:57 +08:00
louistiti 334bf393f2 feat(server): introduce resolvers for slot filling (wip) 2022-03-22 00:39:36 +08:00
louistiti 7e70f41774 refactor(server): find spaCy entities before extracting entities 2022-03-21 23:40:10 +08:00
louistiti bc228a6860 feat(web app): wait for TCP client to be connected first 2022-03-21 22:48:52 +08:00
louistiti 95bfcfe422 feat(server): slot filling PoC (tmp wip) 2022-03-21 00:01:44 +08:00
louistiti 2b03d981ab refactor(server): add prefix for system intents 2022-03-20 20:01:24 +08:00
louistiti 969a83e608 feat(server): slot filling (wip) 2022-03-20 19:25:42 +08:00
louistiti 1845eed71d feat(server): trigger unsupported language 2022-03-20 18:07:16 +08:00
louistiti cbb48213d2 Merge remote-tracking branch 'origin/develop' into from-modules-to-skills 2022-03-19 20:47:15 +08:00
Louis Grenard 499be77d50 docs: add long dev notice to README [skip ci] 2022-03-19 19:47:45 +08:00
louistiti d1c2a11d82 feat(server): context (wip) 2022-03-14 00:06:23 +08:00
louistiti a9a43ac478 feat(server): context (wip) 2022-03-13 18:30:45 +08:00
louistiti bf9bf231f7 feat(server): differenciate cities from countries for location entities 2022-03-13 13:34:53 +08:00
louistiti 1e6835a9e5 chore: context (wip) 2022-03-12 13:18:13 +08:00
louistiti 9be7c70076 feat(server): auto restart the TCP server when language is switching 2022-03-06 22:09:04 +08:00
louistiti fd7234c827 chore(server): remove unnecessary Python packages 2022-03-06 15:13:34 +08:00
louistiti 0f7a6f6bed refactor(server): TCP server for better structure 2022-03-06 14:26:36 +08:00
louistiti 1e988350b4 refactor: rename skills folder to match PEP 8 convention 2022-03-06 11:08:05 +08:00
louistiti a808742c92 feat(server): support multi languages on TCP server 2022-03-06 02:33:32 +08:00
louistiti cbe89ed6cc feat(server): add auto reconnect on TCP client 2022-03-06 01:32:34 +08:00
louistiti 006e9fb011 feat(server): make TCP client global 2022-03-06 00:19:14 +08:00
louistiti 8acb82da9b feat(server): fully implement low-level networking for IPC 2022-03-05 23:41:39 +08:00
louistiti 8476d5fc3c refactor(server): add entities data to TCP server message 2022-03-05 21:32:43 +08:00
louistiti 5970ec9e8e feat: Python TCP server and Node.js TCP client for IPC (wip) 2022-03-05 18:46:34 +08:00
louistiti caa86fc8a6 feat: introduce spaCy for complete NER (wip) 2022-03-05 01:43:49 +08:00
louistiti f17db82509 refactor(skill/birthday): main NLU structure 2022-03-04 00:16:59 +08:00
louistiti 64e8742aad refactor(skill/birthday): birthday != birth date 2022-03-04 00:03:34 +08:00
louistiti 76547d9411 feat: slot filling (wip) 2022-03-03 23:50:45 +08:00
louistiti 9ce9a8bc4f fix: only set skill config when it is a logic type 2022-03-02 01:08:03 +08:00
louistiti f4f9fff978 feat: share data across domains 2022-03-02 01:00:55 +08:00
louistiti 0367b44f21 feat: dynamic variable binding on NLG 2022-03-02 00:16:03 +08:00
louistiti 8280c65897 fix(server): intent not found 2022-02-28 23:06:21 +08:00
louistiti d5577b1ef5 feat(server): more accurate NLG 2022-02-28 22:54:31 +08:00
louistiti 28efe6e7d5 feat(server): unknown_answers fallback on dialog type 2022-02-28 22:03:15 +08:00
louistiti b0d4bf6e1f refactor: remove src/ when skills are dialog type 2022-02-28 21:32:35 +08:00
louistiti a853de4558 refactor(skill/partner_assistant): use dialog type 2022-02-28 21:27:06 +08:00
louistiti 3ca48265e7 feat(server): deep data mapping on enum NER 2022-02-28 01:00:01 +08:00
louistiti 8f2f935b94 feat(server): NLG and entities mapping 2022-02-27 16:32:01 +08:00
louistiti 29b32f66f2 Merge branch 'develop' into from-modules-to-skills 2022-02-27 11:30:22 +08:00
Divlo 4372b45fc6 fix(docker): check should not allocate a pseudo-TTY (#359)
LGTM 👍
2022-02-27 11:28:25 +08:00
louistiti 4d255dd1d1 Merge branch 'develop' into from-modules-to-skills 2022-02-24 23:42:20 +08:00
Louis Grenard 8825d6877c docs: move sponsor to new section [skip ci] 2022-02-24 23:40:42 +08:00
louistiti 975b8ebcf0 feat: context and slot filling preparation (wip) 2022-02-23 21:33:47 +08:00
louistiti 4107932d00 feat: annotate entities on the fly + prepare for dialog skill type and cross-domains data 2022-02-22 22:31:06 +08:00
louistiti cf6340b3ca refactor(skill/youtube_downloader): from module to skill 2022-02-22 09:21:05 +08:00
louistiti 131659928e refactor(skill/product_hunt_trends): from module to skill 2022-02-22 09:04:18 +08:00
louistiti 4029759ba7 refactor(skill/github_trend): from module to skill 2022-02-22 08:44:21 +08:00
louistiti 6f04e36342 refactor(skill/speed_test): from module to skill 2022-02-22 08:29:57 +08:00
louistiti c658425913 refactor(skill/who_am_i): from module to skill 2022-02-21 23:13:26 +08:00
louistiti b19bb0e3eb refactor(skill/welcome): from module to skill 2022-02-21 23:10:06 +08:00
louistiti 41c4436924 refactor(skill/random_number): from module to skill 2022-02-21 23:06:08 +08:00
louistiti dc4b6ff296 refactor(skill/partner_assistant): from module to skill 2022-02-21 23:02:50 +08:00
louistiti 13132279f3 refactor(skill/meaning_of_life): from module to skill 2022-02-21 22:52:24 +08:00
louistiti 195278f975 refactor(skill/joke): from module to skill 2022-02-21 22:49:12 +08:00
louistiti 3403e8cc12 refactor(skill/greeting): from module to skill 2022-02-21 22:44:58 +08:00
louistiti 5fecc1fd85 refactor(skill/good_bye): from module to skill 2022-02-21 22:41:54 +08:00
louistiti 053d53bb10 refactor(skill/todo_list): French translations 2022-02-21 00:29:45 +08:00
louistiti 9d5ceb03cb refactor(skill/have_i_been_pwned): from module to skill 2022-02-20 23:55:21 +08:00
louistiti 3fea149497 refactor(skill/is_it_down): from module to skill 2022-02-20 23:28:13 +08:00
louistiti d49bc5f63f refactor(skill/todo_list): finish refactor 2022-02-20 20:24:55 +08:00
louistiti 98a0382103 refactor: stop crash on brain + new skills DB calls 2022-02-20 19:25:08 +08:00
louistiti 7977d55b81 Merge branch 'develop' into from-modules-to-skills 2022-02-19 09:25:02 +08:00
louistiti c1afc11cdb docs: change Twitter handle [skip ci] 2022-02-19 09:24:47 +08:00
louistiti f5bdf2c888 Merge branch 'develop' into from-modules-to-skills 2022-02-18 23:07:57 +08:00
Louis Grenard 99b401a668 docs: remove sponsor [skip ci] 2022-02-18 23:07:22 +08:00
louistiti da51f3ee30 refactor(skill/todo_list): slightly improve NLU 2022-02-17 22:15:34 +08:00
louistiti 4e36843c96 refactor(skill/todo_list): inject all actions 2022-02-17 21:45:14 +08:00
louistiti 098f3ea85f Merge branch 'develop' into from-modules-to-skills 2022-02-17 20:29:46 +08:00
Louis Grenard 238d928cac docs: add new sponsor self-hosted img [skip ci] 2022-02-17 20:28:52 +08:00
louistiti 717faf8580 Merge remote-tracking branch 'origin/develop' into from-modules-to-skills 2022-02-17 20:23:45 +08:00
Louis Grenard 254f2848aa docs: remove new sponsor link (broken) [skip ci] 2022-02-17 20:22:08 +08:00
louistiti 4a5480a3cc docs: in GitHub BUG.md from modules to skills 2022-02-17 20:17:46 +08:00
louistiti b775ec4e9d refactor: continue from modules to skills transition 2022-02-17 20:10:42 +08:00
louistiti 51f14320e9 refactor(server): synchronizer due to modules to skills refactoring 2022-02-17 08:27:25 +08:00
louistiti ef0c54b226 fix(server): fallback due to modules to skills refactoring 2022-02-17 08:20:48 +08:00
louistiti cad072c3a6 refactor: skills over HTTP 2022-02-16 22:28:05 +08:00
louistiti 963e4de8df refactor: setup skills config with skill friendly name naming 2022-02-16 21:16:57 +08:00
louistiti dc80135cd0 refactor: setup skills config 2022-02-16 21:08:47 +08:00
louistiti 7d5cadbb82 Merge remote-tracking branch 'origin/develop' into from-modules-to-skills 2022-02-15 23:51:22 +08:00
Louis Grenard 1a118b718e docs: change @FluxIndustries sponsorship [skip ci] 2022-02-15 23:46:37 +08:00
louistiti 08e6c9de54 refactor(skill/todo_list): add French NLG 2022-02-15 22:42:10 +08:00
louistiti 2b547c304b refactor(skill/todo_list): NLG level 2022-02-15 22:26:06 +08:00
louistiti 42e2346663 refactor(skill/todo_list): from modules to skills add custom functions 2022-02-15 21:05:40 +08:00
louistiti 0e3555f1e3 refactor(server): from modules to skills for the connection between core and skills 2022-02-14 23:06:37 +08:00
louistiti 0fc475e572 refactor(server): from modules to skills for the brain 2022-02-14 17:19:51 +08:00
louistiti e4d3904cee fix(server): NER due to modules to skills refactoring 2022-02-14 16:48:03 +08:00
louistiti 65398d8231 Merge branch 'develop' into from-modules-to-skills 2022-02-14 14:45:16 +08:00
Louis Grenard 9a604d7ccc docs: add @FluxIndustries sponsor [skip ci] 2022-02-14 11:44:25 +08:00
louistiti d8023308d0 feat: new NLP training 2022-02-13 12:20:27 +08:00
louistiti db1246735c refactor(skill/todo_list): replace <strike> by <s> 2022-02-13 07:54:51 +08:00
louistiti fe90c68ea0 feat(server): bootstrap skill structure 2022-02-13 07:48:45 +08:00
louistiti 18286800ed refactor(server): keep STT and TTS inside the brain 2022-02-13 05:39:17 +08:00
louistiti f24513a223 feat(server): on-the-fly language switching 2022-02-13 01:42:29 +08:00
louistiti 5edcc679f8 chore(server): remove uncessary NLP deps 2022-02-12 19:11:53 +08:00
louistiti 34b2aa5655 feat(server): new NLP containers 2022-02-12 19:10:27 +08:00
louistiti ca3f5f42da feat(server): (WIP) NLU refactoring 2022-02-11 21:34:39 +08:00
louistiti 763d19069b refactor(server): expressions to utterance samples 2022-02-10 22:11:17 +08:00
louistiti 8dd7642d3b refactor(server): queries to intents 2022-02-10 21:49:51 +08:00
louistiti 226468f6ab refactor(server): query to utterance 2022-02-10 21:47:43 +08:00
louistiti cf2a28aac2 feat(server): add skills domains 2022-02-09 22:47:52 +08:00
louistiti a0107d6294 docs: new #LeonAI link [skip ci] 2022-02-09 00:19:09 +08:00
louistiti 94eebbbf20 chore: add tag prefix on new version on changelog diff URL [skip ci] 2022-02-08 11:09:09 +08:00
louistiti e14c249826 docs: changelog new version diff link fix [skip ci] 2022-02-08 11:05:04 +08:00
louistiti 5544c3c5a2 chore: bump 1.0.0-beta.7+dev 2022-02-07 17:10:35 +08:00
louistiti f179e1070c Merge branch 'develop' 2022-02-07 17:06:08 +08:00
louistiti 6862778645 build: release 1.0.0-beta.6 2022-02-07 17:03:15 +08:00
louistiti d265377a43 fix: do not ask to regenerate the HTTP API key if this one isn't available yet 2022-02-04 14:02:07 +08:00
louistiti 36b0f68afc Merge branch 'skip-pip-deps' into develop 2022-02-04 13:48:05 +08:00
louistiti c6c0129158 fix: Python deps tree check 2022-02-04 13:44:40 +08:00
louistiti 2d0b0f1365 perf: check if Python deps tree has been updated before going through deps install 2022-02-04 13:33:32 +08:00
Louis Grenard 699ded22ad docs: add new sponsor @KeithIMyers 2022-02-04 10:22:52 +08:00
louistiti 5d58f5d918 ci: fix over HTTP test 2022-02-03 22:05:09 +08:00
louistiti 553d5df070 ci: over HTTP test 2022-02-03 22:02:13 +08:00
louistiti 4e4d1cc136 ci: add over HTTP tests 2022-02-03 21:52:37 +08:00
louistiti 6b9d53e0cc Merge branch 'over-http' into develop 2022-02-03 21:47:00 +08:00
louistiti 7bdbd0dcd0 chore: more explicit comment on over HTTP test 2022-02-03 21:46:13 +08:00
louistiti 58f5f2d21c test(server): add minimal e2e tests for over HTTP 2022-02-03 21:44:49 +08:00
louistiti aa0136baec test(server): e2e modules fix due to breaking changes 2022-02-03 20:42:31 +08:00
louistiti 1535fa67ac test(server): over HTTP unit testing 2022-02-03 19:37:56 +08:00
louistiti 62eadb10d4 docs: use leon-cli for bugs related to setup 2022-02-03 11:28:15 +08:00
louistiti af26ecac0f refactor(server): rename query HTTP endpoint from /api/core/query to /api/query 2022-02-02 20:32:08 +08:00
louistiti f61eef4882 refactor(server): rename over HTTP option toggle 2022-02-02 19:52:41 +08:00
louistiti 5c88c134f4 Merge branch 'develop' into over-http 2022-02-02 18:37:00 +08:00
louistiti 7039918760 feat(server): make Coqui STT the default STT solution 2022-01-31 14:43:54 +08:00
louistiti 79be099cc5 chore: remove DeepSpeech binary folder; add Coqui binary folder to gitignore 2022-01-31 14:11:48 +08:00
Louis Grenard 4d644ce3fd Merge branch 'develop' into develop 2022-01-31 06:10:57 +00:00
johba f563d01d07 fix: hotword offline (#342) 2022-01-31 12:09:54 +08:00
louistiti bd53641a81 docs: add Divlo to the README 2022-01-31 10:01:09 +08:00
louistiti b9b204d212 Merge branch 'cli-arrival' into develop 2022-01-29 21:10:58 +08:00
louistiti 3ec38bfb6b refactor(server): add /api/ on HTTP API endpoints 2022-01-28 18:34:35 +08:00
louistiti 706c528334 chore: remove npm dep vulns 2022-01-25 23:31:54 +08:00
louistiti 429dce6f37 Merge branch 'develop' into cli-arrival 2022-01-25 21:49:40 +08:00
louistiti bfc50154f0 docs(README): change new npm setup with npm registry 2022-01-25 21:48:20 +08:00
louistiti 3ce5b74e94 Merge branch 'develop' into over-http 2022-01-25 20:21:10 +08:00
louistiti 93a138f77c chore: use jsconfig instead of IDE config 2022-01-25 20:20:49 +08:00
Johann Barbie b1c6f5c883 fix: addressed comments by @JRMeyer 2022-01-24 08:20:04 +01:00
Johann Barbie 04d6228841 fix: allow to detect STT offline capabilities 2022-01-23 18:00:06 +01:00
Johann Barbie 86a4816b77 feat: simple coqui-ai stt integration 2022-01-23 12:50:51 +01:00
louistiti cdf4149939 feat(server): add HTTP API key middleware 2022-01-18 21:57:35 +08:00
louistiti e6246d1f8f fix: Amazon Polly is always configured on check script due to new structure 2022-01-17 21:46:08 +08:00
louistiti d10a7fa788 feat: HTTP API key generator 2022-01-16 22:22:49 +08:00
louistiti b6428d0384 feat(server): expose queries over HTTP 2022-01-10 22:37:54 +08:00
louistiti 115f9c1645 feat(server): add timeout action over HTTP 2022-01-09 21:22:24 +08:00
louistiti 82fb967af8 feat(server): handle built-in and trim entities over HTTP + add "disabled" HTTP API action option 2022-01-09 21:03:28 +08:00
louistiti 2e5b2c59da feat(server): execute modules over HTTP 2022-01-09 02:32:02 +08:00
louistiti cc0fb92351 feat: avoid unnecessary routes generation 2022-01-08 19:55:26 +08:00
louistiti 5b41713a68 feat(server): generate Fastify routes on the file to expose packages over HTTP 2021-12-30 23:06:30 +08:00
louistiti f1f48757e2 docs: fix changelog tags diff 2021-12-28 22:02:58 +08:00
louistiti 8e45da75ce chore: bump 1.0.0-beta.6+dev 2021-12-28 21:33:06 +08:00
louistiti fdeff12762 Merge branch 'develop' into origin/master 2021-12-28 21:27:12 +08:00
louistiti 38d0436101 build: release 1.0.0-beta.5 2021-12-28 21:26:00 +08:00
louistiti 89e216fd49 ci: remove unecessary step on lint 2021-12-28 21:06:48 +08:00
louistiti 7cf7f97912 feat(server): support arrays on NER between conditions 2021-12-28 18:08:13 +08:00
louistiti 10f3132d09 ci: disable Husky on lint 2021-12-27 23:09:30 +08:00
louistiti c86a0df3f4 chore: resetup Husky 2021-12-27 22:57:06 +08:00
louistiti 99e111b52d chore: fix deep deps vulns 2021-12-27 20:03:06 +08:00
louistiti d23ea0e289 chore: upgrade Socket.IO deps to latest 2021-12-27 19:46:18 +08:00
louistiti da2ebdb520 chore: upgrade Fastify deps to latest 2021-12-27 19:18:40 +08:00
louistiti dc2d36be95 chore: upgrade ffmpeg/ffprobe deps to latest 2021-12-27 19:05:52 +08:00
louistiti 02f766d6a8 fix: jest-extended new setup due to latest update 2021-12-27 19:02:46 +08:00
louistiti c73a26a11e chore: upgrade Vite to latest 2021-12-27 18:39:30 +08:00
louistiti aa9a494a4b chore: upgrade Jest deps to latest 2021-12-27 18:37:42 +08:00
louistiti 920b4b2a4f fix: linter 2021-12-27 18:02:32 +08:00
louistiti 13f5a49f67 perf: Windows setup on DeepSpeech dep removal 2021-12-27 17:54:50 +08:00
louistiti ddfebb0d74 refactor: remove training type 2021-12-27 17:09:12 +08:00
louistiti a5769dce6e refactor(web app): change listen mic shortcut 2021-12-27 14:58:04 +08:00
louistiti b09eaed63d docs(README): modify newsletter link 2021-12-24 09:20:44 +08:00
Louis Grenard a0dffbedb1 docs(README): add new sponsor 2021-12-21 22:28:15 +08:00
louistiti b4bb48def0 docs: append leon check alternative while reporting issue 2021-12-12 15:58:51 +08:00
louistiti 97b5e2086b docs(README): new getting started with CLI arrival 2021-12-12 15:50:25 +08:00
louistiti c16d5b280b docs: URL redirect managed by registrar 2021-12-12 12:31:22 +08:00
Louis Grenard 065225a7f5 docs(README): add special thanks 2021-12-07 22:44:22 +08:00
Louis Grenard acf3f9a0d2 docs(README): fix hero animation 2021-12-05 23:24:42 +08:00
Louis Grenard 607a51eead docs(README): update main asset link 2021-12-05 21:18:47 +08:00
Louis Grenard 1e612f766e docs(README): new assets 2021-12-05 21:13:44 +08:00
Louis Grenard b3affa0fc1 docs: update sponsors in README.md 2021-11-09 20:48:59 +08:00
Divlo 2f66f1c17b refactor: prerequisites Node.js >= 16.0.0 and npm >= 8.0.0 (#322)
BREAKING CHANGE: minimum supported Node.js v16.0.0 and npm v8.0.0
2021-11-07 10:24:00 +08:00
louistiti cf6d7d0749 docs: add new sponsor to README 2021-08-17 23:43:01 +08:00
Louis Grenard d13a9e3aa7 docs: add new sponsor to README 2021-08-07 17:54:16 +08:00
dependabot[bot] 2ee57490df chore(deps-dev): bump @babel/preset-env from 7.14.4 to 7.14.5 (#273) 2021-06-13 02:23:02 +02:00
dependabot[bot] 7852b8dbac chore(deps): bump dotenv from 8.2.0 to 10.0.0 (#275) 2021-06-13 02:05:26 +02:00
dependabot[bot] de7c3ad68e chore(deps): bump fastify from 3.14.0 to 3.17.0 (#271) 2021-06-13 02:00:45 +02:00
louistiti 37946b6a90 docs: add sponsoring purposes 2021-06-05 23:08:10 +08:00
dependabot[bot] a7ffdd19bd chore(deps): bump @aws-sdk/client-polly from 3.16.0 to 3.18.0 (#269)
Bumps [@aws-sdk/client-polly](https://github.com/aws/aws-sdk-js-v3/tree/HEAD/clients/client-polly) from 3.16.0 to 3.18.0.
- [Release notes](https://github.com/aws/aws-sdk-js-v3/releases)
- [Changelog](https://github.com/aws/aws-sdk-js-v3/blob/main/clients/client-polly/CHANGELOG.md)
- [Commits](https://github.com/aws/aws-sdk-js-v3/commits/v3.18.0/clients/client-polly)

---
updated-dependencies:
- dependency-name: "@aws-sdk/client-polly"
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Louis Grenard <louis.grenard@gmail.com>
2021-06-05 09:21:14 +08:00
dependabot[bot] 6b23d23b06 chore(deps): bump ibm-watson from 6.1.0 to 6.1.1 (#266)
Bumps [ibm-watson](https://github.com/watson-developer-cloud/node-sdk) from 6.1.0 to 6.1.1.
- [Release notes](https://github.com/watson-developer-cloud/node-sdk/releases)
- [Changelog](https://github.com/watson-developer-cloud/node-sdk/blob/master/CHANGELOG.md)
- [Commits](https://github.com/watson-developer-cloud/node-sdk/compare/v6.1.0...v6.1.1)

---
updated-dependencies:
- dependency-name: ibm-watson
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Louis Grenard <louis.grenard@gmail.com>
2021-06-05 09:19:06 +08:00
dependabot[bot] 9381fb2916 chore(deps-dev): bump inquirer from 8.0.0 to 8.1.0 (#265)
Bumps [inquirer](https://github.com/SBoudrias/Inquirer.js) from 8.0.0 to 8.1.0.
- [Release notes](https://github.com/SBoudrias/Inquirer.js/releases)
- [Commits](https://github.com/SBoudrias/Inquirer.js/compare/inquirer@8.0.0...inquirer@8.1.0)

---
updated-dependencies:
- dependency-name: inquirer
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Louis Grenard <louis.grenard@gmail.com>
2021-06-05 09:17:42 +08:00
dependabot[bot] 2f1266764a chore(deps-dev): bump eslint from 7.26.0 to 7.28.0 (#268)
Bumps [eslint](https://github.com/eslint/eslint) from 7.26.0 to 7.28.0.
- [Release notes](https://github.com/eslint/eslint/releases)
- [Changelog](https://github.com/eslint/eslint/blob/master/CHANGELOG.md)
- [Commits](https://github.com/eslint/eslint/compare/v7.26.0...v7.28.0)

---
updated-dependencies:
- dependency-name: eslint
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2021-06-05 09:16:05 +08:00
dependabot[bot] e3427149f6 chore(deps-dev): bump @babel/cli from 7.13.0 to 7.14.3 (#263)
Bumps [@babel/cli](https://github.com/babel/babel/tree/HEAD/packages/babel-cli) from 7.13.0 to 7.14.3.
- [Release notes](https://github.com/babel/babel/releases)
- [Changelog](https://github.com/babel/babel/blob/main/CHANGELOG.md)
- [Commits](https://github.com/babel/babel/commits/v7.14.3/packages/babel-cli)

---
updated-dependencies:
- dependency-name: "@babel/cli"
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2021-06-05 09:13:00 +08:00
louistiti 3b47cb5ee8 docs: trim .html ext 2021-05-31 07:53:49 +08:00
louistiti cd607768ed docs: edit sponsor links 2021-05-30 23:22:03 +08:00
louistiti fbbcf2eb50 docs: add sponsor button 2021-05-30 22:25:03 +08:00
louistiti 4128c3a01a chore: fix npm deps vulns 2021-05-29 09:54:53 +08:00
dependabot[bot] 2044de408c chore(deps-dev): bump @babel/node from 7.13.0 to 7.14.2 (#261)
Bumps [@babel/node](https://github.com/babel/babel/tree/HEAD/packages/babel-node) from 7.13.0 to 7.14.2.
- [Release notes](https://github.com/babel/babel/releases)
- [Changelog](https://github.com/babel/babel/blob/main/CHANGELOG.md)
- [Commits](https://github.com/babel/babel/commits/v7.14.2/packages/babel-node)

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Louis Grenard <louis.grenard@gmail.com>
2021-05-29 09:52:46 +08:00
dependabot[bot] d002610ac7 chore(deps-dev): bump eslint-plugin-jest from 24.3.1 to 24.3.6 (#260)
Bumps [eslint-plugin-jest](https://github.com/jest-community/eslint-plugin-jest) from 24.3.1 to 24.3.6.
- [Release notes](https://github.com/jest-community/eslint-plugin-jest/releases)
- [Changelog](https://github.com/jest-community/eslint-plugin-jest/blob/main/CHANGELOG.md)
- [Commits](https://github.com/jest-community/eslint-plugin-jest/compare/v24.3.1...v24.3.6)

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Louis Grenard <louis.grenard@gmail.com>
2021-05-29 09:51:05 +08:00
dependabot[bot] 5066895827 chore(deps-dev): bump @babel/preset-env from 7.13.9 to 7.14.4 (#259)
Bumps [@babel/preset-env](https://github.com/babel/babel/tree/HEAD/packages/babel-preset-env) from 7.13.9 to 7.14.4.
- [Release notes](https://github.com/babel/babel/releases)
- [Changelog](https://github.com/babel/babel/blob/main/CHANGELOG.md)
- [Commits](https://github.com/babel/babel/commits/v7.14.4/packages/babel-preset-env)

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Louis Grenard <louis.grenard@gmail.com>
2021-05-29 09:49:51 +08:00
dependabot[bot] 19cd427daa chore(deps-dev): bump vite from 2.3.2 to 2.3.4 (#258)
Bumps [vite](https://github.com/vitejs/vite/tree/HEAD/packages/vite) from 2.3.2 to 2.3.4.
- [Release notes](https://github.com/vitejs/vite/releases)
- [Changelog](https://github.com/vitejs/vite/blob/main/packages/vite/CHANGELOG.md)
- [Commits](https://github.com/vitejs/vite/commits/v2.3.4/packages/vite)

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Louis Grenard <louis.grenard@gmail.com>
2021-05-29 09:48:22 +08:00
dependabot[bot] fa3eefb220 chore(deps): bump ibm-watson from 6.0.3 to 6.1.0 (#257)
Bumps [ibm-watson](https://github.com/watson-developer-cloud/node-sdk) from 6.0.3 to 6.1.0.
- [Release notes](https://github.com/watson-developer-cloud/node-sdk/releases)
- [Changelog](https://github.com/watson-developer-cloud/node-sdk/blob/master/CHANGELOG.md)
- [Commits](https://github.com/watson-developer-cloud/node-sdk/compare/v6.0.3...v6.1.0)

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2021-05-29 09:46:31 +08:00
louistiti 1775b07bf6 ci: set npm and pipenv caching 2021-05-22 09:37:13 +08:00
dependabot[bot] 1ce04224b2 chore(deps-dev): bump semver from 7.3.4 to 7.3.5 (#255)
Bumps [semver](https://github.com/npm/node-semver) from 7.3.4 to 7.3.5.
- [Release notes](https://github.com/npm/node-semver/releases)
- [Changelog](https://github.com/npm/node-semver/blob/master/CHANGELOG.md)
- [Commits](https://github.com/npm/node-semver/compare/v7.3.4...v7.3.5)

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Louis Grenard <louis.grenard@gmail.com>
2021-05-22 09:22:06 +08:00
dependabot[bot] b39d441177 chore(deps): bump archiver from 5.2.0 to 5.3.0 (#254)
Bumps [archiver](https://github.com/archiverjs/node-archiver) from 5.2.0 to 5.3.0.
- [Release notes](https://github.com/archiverjs/node-archiver/releases)
- [Changelog](https://github.com/archiverjs/node-archiver/blob/master/CHANGELOG.md)
- [Commits](https://github.com/archiverjs/node-archiver/compare/5.2.0...5.3.0)

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Louis Grenard <louis.grenard@gmail.com>
2021-05-22 09:21:42 +08:00
dependabot[bot] ad701e12a9 chore(deps): upgrade Socket.IO to 4.1.2 (#253)
* chore(deps): bump socket.io-client from 4.1.1 to 4.1.2

Bumps [socket.io-client](https://github.com/socketio/socket.io-client) from 4.1.1 to 4.1.2.
- [Release notes](https://github.com/socketio/socket.io-client/releases)
- [Changelog](https://github.com/socketio/socket.io-client/blob/master/CHANGELOG.md)
- [Commits](https://github.com/socketio/socket.io-client/compare/4.1.1...4.1.2)

Signed-off-by: dependabot[bot] <support@github.com>

* chore: upgrade Socket.IO to 4.1.2

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Louis Grenard <louis.grenard@gmail.com>
2021-05-22 09:21:00 +08:00
dependabot[bot] d60eebd2a0 chore(deps-dev): bump eslint-import-resolver-babel-module (#252)
Bumps [eslint-import-resolver-babel-module](https://github.com/tleunen/eslint-import-resolver-babel-module) from 5.2.0 to 5.3.1.
- [Release notes](https://github.com/tleunen/eslint-import-resolver-babel-module/releases)
- [Changelog](https://github.com/tleunen/eslint-import-resolver-babel-module/blob/master/CHANGELOG.md)
- [Commits](https://github.com/tleunen/eslint-import-resolver-babel-module/compare/v5.2.0...v5.3.1)

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2021-05-22 09:16:49 +08:00
louistiti 68b86e1eae chore: upgrade Vite to latest 2021-05-17 11:47:31 +08:00
louistiti e780868004 chore: audit fix lock file 2021-05-17 11:18:43 +08:00
dependabot[bot] 68bcb4269a chore(deps-dev): bump eslint from 7.21.0 to 7.26.0 (#249)
Bumps [eslint](https://github.com/eslint/eslint) from 7.21.0 to 7.26.0.
- [Release notes](https://github.com/eslint/eslint/releases)
- [Changelog](https://github.com/eslint/eslint/blob/master/CHANGELOG.md)
- [Commits](https://github.com/eslint/eslint/compare/v7.21.0...v7.26.0)

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Louis Grenard <louis.grenard@gmail.com>
2021-05-17 11:11:32 +08:00
dependabot[bot] 1ee2ffed4b chore: upgrade Socket.IO to latest (#248)
* chore(deps): bump socket.io-client from 4.0.0 to 4.1.1

Bumps [socket.io-client](https://github.com/socketio/socket.io-client) from 4.0.0 to 4.1.1.
- [Release notes](https://github.com/socketio/socket.io-client/releases)
- [Changelog](https://github.com/socketio/socket.io-client/blob/master/CHANGELOG.md)
- [Commits](https://github.com/socketio/socket.io-client/compare/4.0.0...4.1.1)

Signed-off-by: dependabot[bot] <support@github.com>

* chore: upgrade Socket.IO to latest

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Louis Grenard <louis.grenard@gmail.com>
2021-05-17 11:10:24 +08:00
dependabot[bot] b178a3a8dd chore(deps): bump @google-cloud/text-to-speech from 3.1.3 to 3.2.1 (#247)
Bumps [@google-cloud/text-to-speech](https://github.com/googleapis/nodejs-text-to-speech) from 3.1.3 to 3.2.1.
- [Release notes](https://github.com/googleapis/nodejs-text-to-speech/releases)
- [Changelog](https://github.com/googleapis/nodejs-text-to-speech/blob/master/CHANGELOG.md)
- [Commits](https://github.com/googleapis/nodejs-text-to-speech/compare/v3.1.3...v3.2.1)

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Louis Grenard <louis.grenard@gmail.com>
2021-05-17 11:05:23 +08:00
dependabot[bot] 3dba8fd713 chore(deps-dev): bump eslint-plugin-import from 2.22.1 to 2.23.2 (#246)
Bumps [eslint-plugin-import](https://github.com/benmosher/eslint-plugin-import) from 2.22.1 to 2.23.2.
- [Release notes](https://github.com/benmosher/eslint-plugin-import/releases)
- [Changelog](https://github.com/benmosher/eslint-plugin-import/blob/master/CHANGELOG.md)
- [Commits](https://github.com/benmosher/eslint-plugin-import/compare/v2.22.1...v2.23.2)

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Louis Grenard <louis.grenard@gmail.com>
2021-05-17 11:02:33 +08:00
dependabot[bot] 621fd48591 chore(deps): bump @aws-sdk/client-polly from 3.8.0 to 3.16.0 (#245)
Bumps [@aws-sdk/client-polly](https://github.com/aws/aws-sdk-js-v3/tree/HEAD/clients/client-polly) from 3.8.0 to 3.16.0.
- [Release notes](https://github.com/aws/aws-sdk-js-v3/releases)
- [Changelog](https://github.com/aws/aws-sdk-js-v3/blob/main/clients/client-polly/CHANGELOG.md)
- [Commits](https://github.com/aws/aws-sdk-js-v3/commits/v3.16.0/clients/client-polly)

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2021-05-17 10:58:57 +08:00
louistiti b30940b9fa chore: add dependabot 2021-05-17 10:34:19 +08:00
Divlo 72ed68599c chore(docker-dev): ignore node_modules in the volume (#243) 2021-05-08 10:37:26 +08:00
louistiti 5f9e9b5ad4 chore: bump 1.0.0-beta.5+dev 2021-05-01 21:40:09 +08:00
louistiti 28326ae1cd build: release 1.0.0-beta.4 2021-05-01 21:34:00 +08:00
Divlo ede7e78bd6 chore(docker): fix docker in dev env and fix wrong LEON_PORT (#240)
* chore(docker-dev): ignore node_modules in the volume

* chore(docker): fix wrong LEON_PORT env variable
2021-04-28 12:01:26 +08:00
Divlo a576ecfc7d chore: add Gitpod (#238)
* chore: add Gitpod

* docs: add single-click setup with Gitpod

Co-authored-by: louistiti <louis.grenard@gmail.com>
2021-04-23 10:20:16 +08:00
louistiti e09e9b02e8 test(package/checker): use another domain name to test down domain on isitdown module 2021-04-22 19:06:02 +08:00
louistiti 0c925626df fix(package/network): make use of new compatible speedtest lib 2021-04-22 19:02:26 +08:00
louistiti 9323de930e docs: add specific branch on status badges 2021-04-22 16:52:40 +08:00
helloausrine 5da91b76bf docs(readme): highlight the name of Leon (#144) 2021-04-06 10:18:47 +02:00
Louis Grenard 3f5d4c9d78 Merge pull request #231 from leon-ai/chore/improve-docker
chore: add docker-compose and dev environment
2021-04-06 09:59:15 +08:00
divlo 062ff4f75b chore: add docker-compose and dev environment 2021-04-05 17:47:34 +02:00
louistiti 3b976d55b4 chore: run cleaning test module DBs script before running e2e modules tests 2021-04-05 14:16:31 +08:00
louistiti 72e46bd6c1 docs: add minimum Pipenv version requirement to README 2021-04-05 13:42:46 +08:00
louistiti 8c715e82bf Merge branch 'modules-testing-dbs' into develop 2021-04-05 11:47:02 +08:00
louistiti 81ec213ff2 chore: use different modules DBs while testing and flush them at the end of the tests 2021-04-05 11:46:42 +08:00
louistiti 0f02e5b9dc chore: add Python config in EditorConfig 2021-04-04 12:41:25 +08:00
louistiti 122a52dd40 Merge branch 'broken-links-hunt' into develop 2021-04-04 10:31:58 +08:00
louistiti b2a2279243 docs: hunt broken links 2021-04-04 10:31:40 +08:00
louistiti 86dd7fae91 chore: force Jest to exit if a process is still running 2021-04-03 11:43:55 +08:00
louistiti 4cddb702f2 Merge branch 'wip-new-nlp' into develop 2021-04-03 11:09:17 +08:00
louistiti 9891d3058e test(network/speedtest): replace NLP utterance 2021-04-03 11:08:57 +08:00
louistiti e1d5bed3e6 fix(server): make use of Basic plugin from the main NLP container 2021-04-03 10:59:07 +08:00
louistiti 18edc68dfb chore(server): upgrade @nlpjs/ner to latest 2021-04-02 19:52:17 +08:00
louistiti fcdc0820cf test(server): adjust server unit tests 2021-04-02 19:02:37 +08:00
louistiti f9b67badd8 Merge branch 'wip-new-nlp' into develop 2021-04-02 17:34:42 +08:00
louistiti 6501a2f6c4 test(server): review according to new NLP 2021-04-02 17:32:23 +08:00
louistiti 71d80f3407 refactor(server): remove unnecessary NLP settings 2021-04-01 17:39:07 +08:00
louistiti 99dba81122 refactor(server): switch from classifier to NLP model 2021-04-01 17:24:59 +08:00
louistiti ed7f0bf455 refactor(server): make new NLU and NER compatible 2021-04-01 17:07:09 +08:00
louistiti 09e2672b0b docs: add "ci" commit type in CONTRIBUTING.md 2021-04-01 09:25:02 +08:00
Louis Grenard 71d2b7e440 Merge pull request #233 from leon-ai/ci/update-event
ci: update event that triggers the workflow
2021-04-01 09:01:03 +08:00
divlo 5d425eab17 ci: update event that triggers the workflow 2021-03-31 19:15:29 +02:00
louistiti cc0c4bee10 chore: create .nvmrc with latest LTS version 2021-03-28 13:21:32 +08:00
louistiti 05a6c66205 chore: force mimimun Node.js requirement 2021-03-28 13:20:06 +08:00
louistiti 23353b5227 chore: set new Python dependencies tree 2021-03-28 13:07:06 +08:00
louistiti 8a9f018b18 refactor(server): make use of NLP sub package instead of the monolith one 2021-03-28 13:02:54 +08:00
louistiti 6b01262fa0 chore(server): make use of @nlpjs/core-loader instead of @nlpjs/core 2021-03-26 20:15:10 +08:00
Louis Grenard 114579008d Merge pull request #227 from Divlo/chore/migrate-from-express-to-fastify
refactor: migrate from Express.js to Fastify
2021-03-25 14:45:43 +08:00
louistiti da592f4413 refactor(server): adapt to new NER 2021-03-24 20:26:34 +08:00
divlo 690f1841d6 fix: set correct status code for GET /downloads 2021-03-22 21:09:43 +01:00
divlo 458ff938fc docs(readme): add link to npm 2021-03-22 20:24:06 +01:00
divlo dd827bf61b ci: add build and tests on pull_request 2021-03-22 20:23:43 +01:00
divlo 71f47ef898 chore: migrate from express to fastify 2021-03-22 20:23:23 +01:00
louistiti 37165ef658 chore: lock files update 2021-03-22 09:41:30 +08:00
louistiti 17d547c6c6 chore: upgrade node-nlp to latest 2021-03-22 09:26:20 +08:00
louistiti 83dff5b47b chore: disable Jest notifications 2021-03-21 15:09:18 +08:00
louistiti 525a8bab8c docs: change license badge in README 2021-03-21 15:08:20 +08:00
louistiti 8c29dce0c6 chore: migrate from CircleCI to GitHub Actions 2021-03-21 14:58:14 +08:00
louistiti cd570de43b Merge branch 'haveibeenpwned-module-api-v3' into develop 2021-03-16 23:01:56 +08:00
louistiti 0ca89fe32d BREAKING(checker/haveibeenpwned): introduce v3 API with API key 2021-03-16 23:01:22 +08:00
louistiti a42ecb4288 fix(web app): add back the main.js file 2021-03-16 21:39:47 +08:00
louistiti b508f95b2f Merge branch 'pipenv-skip-lock' into develop 2021-03-16 21:38:30 +08:00
louistiti c6f1126a5c chore: remove --skip-lock on pipenv install 2021-03-16 21:28:59 +08:00
louistiti 3082866601 Merge branch 'beautify-readme' into develop 2021-03-16 21:21:18 +08:00
louistiti 8f894ea256 docs: replace roadmap emoji with compass in README 2021-03-16 21:20:49 +08:00
louistiti 0ea7a78b7c docs: use emojies in README 2021-03-16 21:16:17 +08:00
louistiti 1977119ddb chore(hotword): upgrade socket.io-client to 4.0.0 2021-03-16 15:04:09 +08:00
louistiti f1cf7328b5 Merge branch 'vite-app' into develop 2021-03-16 11:21:43 +08:00
louistiti a777ce36af style: fix new linting 2021-03-16 01:39:52 +08:00
louistiti 6849e9fc2e refactor(web app): remove vendor static Socket.IO client 2021-03-16 01:14:32 +08:00
louistiti 00c475ea00 refactor(web app): introduce Vite 2021-03-16 01:11:40 +08:00
louistiti 77e5357c0a refactor(server): specify CORS parameter in dev app mode due to Socket.IO 3+ 2021-03-15 17:14:10 +08:00
louistiti e104bb1eeb docs: remove target="_blank" attribute from the README 2021-03-13 17:08:55 +08:00
louistiti 2f5426db29 docs: open new tab for external GitHub URLs in README header 2021-03-13 17:06:07 +08:00
louistiti c55c7532b2 docs: add social badges to README 2021-03-13 16:59:52 +08:00
louistiti d1034bd135 docs: Node.js 14 requirement 2021-03-13 15:48:33 +08:00
louistiti 11c307174b chore: upgrade to custom fork hotword 2021-03-13 15:17:11 +08:00
louistiti 5e7706390c chore: use node:14-alpine in Dockerfile 2021-03-07 12:39:07 +08:00
louistiti 4c126848ee chore: upgrade node-nlp to latest 2021-03-07 12:15:06 +08:00
louistiti e50b0e4833 chore: upgrade @ffprobe-installer/ffprobe to latest 2021-03-07 10:17:10 +08:00
louistiti 96488935a6 chore: upgrade @ffmpeg-installer/ffmpeg to latest 2021-03-07 10:01:41 +08:00
louistiti 631c28db94 style(server): remove unecessary console.log() from DeepSpeech parser 2021-03-06 13:08:02 +08:00
louistiti 297fd75ced refactor(server): offline text-to-speech with latest DeepSpeech model 2021-03-06 13:04:24 +08:00
louistiti f15f2db78e BREAKING(server): AWS SDK new structure due to v3 and adapt Amazon Polly changes 2021-03-06 11:09:32 +08:00
louistiti 2668c29588 BREAKING(server): use complete IBM Watson URL instead of location 2021-03-05 17:42:24 +08:00
louistiti f41ea0e9a1 BREAKING(server): IBM Watson TTS and STT new structure 2021-03-05 16:41:25 +08:00
louistiti 9f338a16b3 refactor(app): use right Socket.IO client files for version 3.1.2 2021-03-05 13:32:14 +08:00
louistiti 26c43e05f4 chore: upgrade @google-cloud/speech to latest 2021-03-05 13:10:43 +08:00
louistiti f3bc04da69 chore: upgrade @google-cloud/text-to-speech to latest 2021-03-05 13:08:29 +08:00
louistiti 9b897e1b85 chore: upgrade googleapis to latest 2021-03-05 12:53:57 +08:00
louistiti b43caafe09 chore: upgrade archiver to latest 2021-03-05 12:48:31 +08:00
louistiti 1d8be0226b chore: ugrade async to latest 2021-03-05 12:47:01 +08:00
louistiti b6a89f7c34 chore: upgrade body-parser to latest 2021-03-05 12:43:45 +08:00
louistiti 05f9118a25 chore: upgrade cross-env to latest 2021-03-05 12:35:27 +08:00
louistiti 44e664d94e chore: upgrade dotenv to latest 2021-03-05 12:32:27 +08:00
louistiti f5debe3bb5 chore: upgrade execa to latest and adapt to new API 2021-03-04 22:49:52 +08:00
louistiti 0fce6a1574 chore: upgrade express to latest 2021-03-04 20:31:04 +08:00
louistiti 1e1e85b7b8 chore: upgrade moment-timezone to latest 2021-03-04 20:28:56 +08:00
louistiti c02f35b4c2 chore: upgrade superagent to latest 2021-03-04 20:24:48 +08:00
louistiti 636602750a test(server): fix removed require.requireActual() to jest.requireActual 2021-03-04 20:17:16 +08:00
louistiti 340054d8a7 chore: upgrade all Jest dependencies 2021-03-04 20:16:06 +08:00
louistiti 4d08fd0498 chore: upgrade nodemon to latest 2021-03-04 20:04:24 +08:00
louistiti 4ff9eb4b64 chore: upgrade json and git-changelog to latest 2021-03-04 20:01:00 +08:00
louistiti 23bb3b64d9 chore: upgrade semver to latest 2021-03-04 19:56:26 +08:00
louistiti 7cebaaef96 chore: upgrade inquirer to latest 2021-03-04 19:45:18 +08:00
louistiti 7b74c0337b chore: remove commit-msg git hook script 2021-03-04 19:42:12 +08:00
louistiti c8b7ba1256 chore: remove husky 2021-03-04 19:38:44 +08:00
louistiti a18240d53f docs: remove focus on another project from the README 2021-03-04 09:51:25 +08:00
louistiti bc28c2ce79 chore: upgrade cli-spinner to latest 2021-03-04 09:41:41 +08:00
louistiti a17b63b444 chore: upgrade browserify to latest 2021-03-04 09:39:47 +08:00
louistiti c93f2bef9e chore: upgrade shx to latest (solve build warnings) 2021-03-04 09:36:18 +08:00
louistiti bfa1f1daaf chore: upgrade Babel to latest 2021-03-04 09:30:01 +08:00
louistiti cae620bfad refactor(server): latest Socket.IO version structure 2021-03-03 21:33:08 +08:00
louistiti 5cbed51e16 chore: upgrade most of the unsecured dependencies 2021-03-03 20:05:52 +08:00
louistiti 309730e1e9 chore: upgrade ESLint to latest 2021-03-03 17:14:57 +08:00
louistiti 0e093da5af chore: remove strict mode 2021-03-03 17:09:31 +08:00
louistiti 89778e1921 Merge branch 'basic-cleanup' into develop 2021-03-02 17:07:02 +08:00
louistiti 52e0682fc6 chore: bump to 1.0.0-beta.4+dev 2021-03-02 17:05:04 +08:00
louistiti 328eeff144 style: semicolons and comments clean up 2021-03-02 17:02:55 +08:00
Louis Grenard 9daa1a7630 docs: update readme 2019-07-11 20:16:15 +08:00
Louis Grenard 344cc11ac5 docs: mention that I'm focusing on 2aud.io for a while 2019-07-11 19:34:35 +08:00
Louistiti 56c7cb25cb fix(server): DeepSpeech setup on 0.5.0 2019-06-18 20:53:20 +02:00
Louistiti eda7189f40 docs: support for Node.js 12 2019-06-18 20:48:40 +02:00
Louistiti 88bdb3634e Merge branch 'deepspeech-0.5.0' into develop 2019-06-18 20:22:48 +02:00
Louistiti ca3d3b169c refactor(server): Google Cloud TTS French voice to WaveNet 2019-06-18 18:21:10 +02:00
Louistiti b9f4079bda chore: upgrade DeepSpeech to 0.5.0 2019-06-18 18:13:03 +02:00
Louistiti 6841493740 fix(package/trend): GitHub module new scraping 2019-06-17 18:08:20 +02:00
Louis Grenard 22a3b223ab Merge pull request #110 from Imperator26/develop
fix(package/leon): Fixes english translations
2019-06-10 22:59:12 +08:00
SuperHelios 90225707f9 fix(package/leon): Fixes english translations 2019-06-09 13:13:54 +02:00
Louistiti 08bdae5bca refactor: delete utils.info() in favor of utils.getqueryobj() 2019-06-09 07:42:02 +08:00
Louistiti a72348602e refactor(package/calendar): edit To-Do List module answers and expressions 2019-06-08 22:29:00 +08:00
Louistiti 824ac45f24 chore(hotword): new French model 2019-06-08 21:35:48 +08:00
Louistiti 1e95d0abfd refactor(web app): enable sound on After Speech option 2019-06-08 20:43:44 +08:00
Louistiti 6b25106f56 Merge remote-tracking branch 'origin/develop' into develop 2019-06-08 20:11:27 +08:00
Louistiti 77669cf3aa refactor: major improvement of the After Speech feature 2019-06-08 20:11:02 +08:00
Louis Grenard 02541933ba docs: fix FUNDING.yml 2019-06-08 17:23:27 +08:00
Louistiti 3e133ea88c refactor(server): replace HTML entities to whitespaces to respect TTS punctuations 2019-06-08 15:33:07 +08:00
Louistiti d91a62ea7e build: merge To-Do List module 2019-06-08 15:18:24 +08:00
Louistiti 654617ac97 chore: upgrade Watson STT/TTS to ibm-watson 2019-06-08 15:03:01 +08:00
Louistiti 5a7d369122 chore: no need to mention Node.js version for the hotword node 2019-06-08 12:55:48 +08:00
Louistiti b2a897032f chore: bump snowboy to 1.3.1-alpha.1 for Node.js 8+ support 2019-06-08 12:46:58 +08:00
Louistiti 7499e06c68 chore: support Python 3+ range 2019-06-08 11:33:22 +08:00
Louistiti f1bab9b9fb chore: update package-lock.json 2019-06-08 02:42:17 +08:00
Louistiti 387d73fc3c Merge branch 'develop' into babel-7+ 2019-06-08 02:36:31 +08:00
Louistiti 6007549aa3 chore: use self-hosted git-changelog package 2019-06-08 02:30:19 +08:00
Louistiti 7093b7f037 chore: upgrade to Babel 7+ 2019-06-08 02:09:48 +08:00
Louistiti b7713e2fc9 fix(server): Google Drive synchronizer 2019-06-07 23:37:08 +08:00
Louistiti 544f2ca022 chore: bump @google-cloud/speech to 3.2.0 2019-06-07 22:04:57 +08:00
Louistiti 439196b90e chore: bump @google-cloud/text-to-speech to 1.1.0 2019-06-07 22:01:53 +08:00
Louistiti 0f223ae894 chore: bump browser-sync to 2.26.7 2019-06-07 21:58:45 +08:00
Louistiti 182089b57a test(package/calendar): done 2019-06-06 23:15:33 +08:00
Louistiti c003e1ffcc docs(package/calendar): typo readme 2019-06-06 21:49:33 +08:00
Louistiti 37e61c3152 docs(package/calendar): fill readme 2019-06-06 20:41:13 +08:00
Louistiti ae0739717b feat(package/calendar): French translation done 2019-06-06 20:26:58 +08:00
Louistiti a67a4475b6 style: use "impératif" tense for French language 2019-06-06 19:39:48 +08:00
Louistiti 751298d6c5 refactor(package/calendar): use completed todo answer to display new completed todo 2019-06-06 19:08:07 +08:00
Louistiti 53f7db55c6 feat(package/calendar): finalize English translation 2019-06-06 18:49:20 +08:00
Louistiti aeb065ce0f refactor(server): merge built-in and named entities 2019-06-06 18:07:42 +08:00
Louistiti 581da8cd98 feat(package/calendar): WIP done 2019-06-06 18:05:52 +08:00
Louistiti d38e6095f9 fix: take .env in consideration when using Docker 2019-06-06 09:06:48 +08:00
Louistiti 88b81105e2 chore: remove "setup:offline" npm script
until Snowboy update to Node.js 10+
2019-05-25 13:19:10 +08:00
Louis Grenard 3776fa3e31 chore: add FUNDING.yml file 2019-05-25 13:06:12 +08:00
Louistiti e6bdb3eedb Merge branch 'reverse-proxy-improvement' into develop 2019-05-25 12:45:35 +08:00
Louistiti cdef5f8d15 refactor: remove web app env variables 2019-05-25 12:16:10 +08:00
Louis Grenard 23e9070640 Merge branch 'develop' into reverse-proxy-improvement 2019-05-25 12:11:47 +08:00
Sandro Jäckel a3d7a2a735 refactor: try to use relative urls instead of absolute ones 2019-05-22 00:53:03 +02:00
Louistiti b9693df90c feat(package/calendar): WIP complete todo To-Do List module 2019-05-21 21:54:19 +08:00
Louistiti 9071c92790 fix: spinner test 2019-05-21 14:41:22 +08:00
Louistiti 15543a7bfb chore: bump @google-cloud/speech to latest 2019-05-21 14:23:22 +08:00
Louistiti 7c4403fdaf refactor: give a try for better reverse proxy 2019-05-20 08:24:59 +08:00
Louistiti 602aa694ac feat(package/calendar): complete todos WIP 2019-05-19 20:40:24 +08:00
Louistiti 1a3dab0e56 refactor(package/calendar): transform todos to dicts in the To-Do List module 2019-05-19 16:30:21 +08:00
Louistiti 5e128df023 feat(package/calendar): add todos to list in the To-Do List module 2019-05-19 16:16:34 +08:00
Louistiti 23996ad0a8 refactor(package/calendar): review To-Do List action entities 2019-05-19 14:55:08 +08:00
Louistiti 8575e9e3ef feat(package/calendar): delete list in the To-Do List module 2019-05-19 14:47:42 +08:00
Louistiti 12e8f5c3bf feat(package/calendar): view lists in the To-Do List module 2019-05-19 14:30:53 +08:00
Louistiti 2041be14db feat(package/calendar): rename a list in the To-Do List module 2019-05-19 12:42:46 +08:00
Louistiti 857be94779 feat(package/calendar): create a list in the To-Do List module 2019-05-19 11:53:26 +08:00
Louistiti 82a910b59b Merge branch 'nlp-ner' into develop 2019-05-18 21:28:50 +08:00
Louistiti 7654407fba refactor(server): stop removing accent for NLU 2019-05-18 21:23:06 +08:00
Louistiti fa6a5a43a6 fix(server): NER trim entity on after conditions 2019-05-18 19:28:50 +08:00
Louistiti 68c81875dc docs: add configuration docs URL in the dotenv file 2019-05-13 08:07:38 +08:00
Louistiti 97311aa1b4 chore: add "docker:check" npm script 2019-05-12 09:21:58 +08:00
Louis Grenard 1e7fc8a2e1 Merge pull request #95 from SuperSandro2000/patch-1
chore: optimize Docker image
2019-05-12 09:21:24 +08:00
Louistiti 815dbc9e2e test(server): NER done 2019-05-11 23:37:59 +08:00
Sandro Jäckel 0b812777f7 Don't upgrade pip, optimize pip3 install, remove build-base
Don't cache packages for smaller final image
Don't show progress bar for better CI integration
Move COPY to better utilize cache
2019-05-11 16:24:27 +02:00
Louistiti 8a68440221 test(server): add new string helpers unit tests 2019-05-11 19:39:38 +08:00
Louistiti 226b410639 test(server): fix fallbacks unit tests 2019-05-11 19:31:35 +08:00
Louistiti b38014decd refactor(server): improve entity recognition 2019-05-11 19:02:53 +08:00
Louistiti 3fda3526c7 feat(server): add regex entity type 2019-05-11 18:09:05 +08:00
Louistiti 27c323ab42 refactor(server): NER split per entity type 2019-05-11 16:42:08 +08:00
Louistiti 5bc6c3f116 feat(server): catch unsupported action entity type 2019-05-11 13:34:26 +08:00
Louistiti d2de9a87e0 refactor(server): snake_case action entities conditions to PascalCase 2019-05-11 11:57:05 +08:00
Louistiti 62a6536b1f refactor(server): split NER to a different class 2019-05-11 11:38:25 +08:00
Louistiti 9bd7f63062 refactor(server): no NLU double entities 2019-05-11 09:39:35 +08:00
Louistiti 97c2329104 docs: use specific branch on the building badge 2019-05-10 12:42:37 +08:00
Louistiti 24cf3c9a4f feat(server): NER backbone 2019-05-10 08:45:43 +08:00
Louistiti e2e5455555 chore: upgrade node-nlp to latest 2019-05-06 18:56:30 +08:00
Louistiti 232efad74c Merge branch 'modules-actions' into develop 2019-05-04 15:23:00 +08:00
Louistiti 39284d9cae chore: bump to 1.0.0-beta.3 2019-05-04 15:22:46 +08:00
Louistiti 4d929dc4fa refactor(server): actions to fallbacks 2019-05-04 11:20:35 +08:00
Louistiti cfed8c39f5 docs: update contributing file for development setup 2019-05-04 09:51:33 +08:00
Louistiti 5cf77d9011 fix: e2e tests by adding modules actions level 2019-05-04 09:41:37 +08:00
Louistiti 0c2d846ace test(package/calendar): mock first test 2019-05-04 09:28:19 +08:00
Louistiti 0cdd73d6c2 feat(package/calendar): To-Do List module backbone 2019-05-04 09:26:11 +08:00
Louistiti 352c39a46b test(server): fix units to introduce modules actions 2019-05-04 08:48:59 +08:00
Louistiti b449376f61 feat(server): introduce actions module 2019-05-03 23:31:09 +08:00
Louistiti e5f2996e5f docs: new beers GitHub asset 2019-05-03 14:21:05 +08:00
Louistiti f05d155f1b docs: update readme to Docker run on Windows 2019-05-03 09:06:31 +08:00
Louistiti 0d70387ba3 chore(web app): upgrade browser-sync to latest 2019-05-01 16:31:47 +08:00
Louistiti 18f144cb57 docs(package/checker): readme typo 2019-05-01 16:10:55 +08:00
Louistiti 9d66fd7bf2 Merge branch 'latest-node-nlp' into develop 2019-05-01 16:07:33 +08:00
Louistiti d34ddde843 refactor(server): min confidence 2019-05-01 16:00:01 +08:00
Louistiti a6f55ef400 test(server): fix language attribution before NLP testing 2019-05-01 14:32:50 +08:00
Louistiti d910eb153c chore: add post and pre expressions training to all the tests 2019-05-01 13:15:36 +08:00
Louistiti 238f6f2fe1 docs: remove unnecessary dot on readme 2019-04-30 07:45:53 +08:00
Louistiti f55cc8f772 chore: upgrade to latest node-nlp 2019-04-29 07:21:47 +08:00
Louistiti c6cc807593 docs: update Node.js prerequisites 2019-04-29 07:02:57 +08:00
Louistiti 8f3bb5ab80 chore: do not execute any module during the NLP testing 2019-04-27 21:46:05 +08:00
Louis Grenard da2e7e935d Merge pull request #56 from fkeloks/speedtest_package
feat: Add network package
2019-04-27 21:41:22 +08:00
Louistiti 4e8b3f064f refactor(package/network): Speed Test module finalized + edit other packages readmes 2019-04-27 21:35:31 +08:00
Louis Grenard 593f264724 Merge branch 'develop' into speedtest_package 2019-04-27 13:12:22 +08:00
Louis Grenard 50d63b044d Merge pull request #80 from iifeoluwa/been_pwned
Have I Been Pwned module
2019-04-27 13:05:35 +08:00
Louis Grenard 167babf6ed Merge branch 'develop' into been_pwned 2019-04-27 12:58:58 +08:00
Louistiti 5f2458184f docs(package/checker): add readme instructions 2019-04-27 12:56:54 +08:00
Louistiti a476fd0f38 feat(package/checker): allow multiple breaches output in the Have I Been Pwned module 2019-04-27 12:12:04 +08:00
Louistiti 563fb40955 fix(package/trend): when there is no star provided on the GitHub module 2019-04-25 08:10:01 +08:00
Ifeoluwa Arowosegbe 8374e54810 feat(package/checker): Add proper punctuations 2019-04-17 15:51:19 +01:00
Ifeoluwa Arowosegbe c73ba52ba8 feat(package/checker): Handle case where request is blocked by HaveIBeenPwned service 2019-04-17 15:40:16 +01:00
Ifeoluwa Arowosegbe 6d0c0b6892 Merge branch 'develop' of https://github.com/leon-ai/leon into been_pwned 2019-04-17 12:01:12 +01:00
Ifeoluwa Arowosegbe a7a6d885a8 feat(package/checker): Add test for haveibeenpwned module 2019-04-17 12:00:54 +01:00
Ifeoluwa Arowosegbe 36368664fc feat(package/checker): Add French translations for answers and expressions 2019-04-16 19:05:27 +01:00
Ifeoluwa Arowosegbe 5a999bc63a feat(package/checker): Conclude implementation for haveibeenpwned module 2019-04-16 15:55:16 +01:00
Florian B 91181221fc Merge branch 'develop' into speedtest_package 2019-04-09 19:10:52 +02:00
Florian B 0395d27d1d Merge branch 'develop' into speedtest_package 2019-04-06 10:21:06 +02:00
Ifeoluwa Arowosegbe 61c1b55af5 feat(package/checker): add expressions and answers 2019-04-03 11:17:24 +01:00
Florian / Fkeloks ae1926ea90 Merge branch 'develop' into speedtest_package 2019-03-17 16:41:59 +01:00
Florian / Fkeloks 09ad43406d feat: Add speedtest package 2019-03-09 18:20:35 +01:00
528 changed files with 21752 additions and 22434 deletions
-23
View File
@@ -1,23 +0,0 @@
{
"presets": [
["env", {
"targets": {
"node": "current"
}
}]
],
"plugins": [
["module-resolver", {
"alias": {
"@@": ".",
"@": "./server/src"
},
"compilerOptions": {
"paths": {
"@@": ".",
"@": "./server/src"
}
}
}]
]
}
-151
View File
@@ -1,151 +0,0 @@
version: 2
defaults: &defaults
working_directory: ~/project/leon-ai/leon
docker:
- image: leonai/ci:latest
environment:
LC_ALL: C.UTF-8 # Fix https://click.palletsprojects.com/en/7.x/python3/#python-3-surrogate-handling
LANG: C.UTF-8 # Fix https://click.palletsprojects.com/en/7.x/python3/#python-3-surrogate-handling
PIPENV_PIPFILE: bridges/python/Pipfile
jobs:
check-stack:
<<: *defaults
steps:
- checkout
- run:
name: Checking Node.js
command: node --version
- run:
name: Checking npm
command: npm --version
- run:
name: Checking Python
command: python3 --version
- run:
name: Checking Pipenv
command: pipenv --version
- persist_to_workspace:
root: ~/project/leon-ai
paths:
- leon
install-npm-dep:
<<: *defaults
steps:
- attach_workspace:
at: ~/project/leon-ai
- restore_cache:
keys:
- v1-leon-ai-leon-{{ .Branch }}-{{ checksum "package-lock.json" }}
- v1-leon-ai-leon-{{ .Branch }}-
- v1-leon-ai-leon-
- run:
name: Installing npm dependencies
command: npm install
- save_cache:
key: v1-leon-ai-leon-{{ .Branch }}-{{ checksum "package-lock.json" }}
paths:
- node_modules
- persist_to_workspace:
root: ~/project/leon-ai
paths:
- leon
init:
<<: *defaults
steps:
- attach_workspace:
at: ~/project/leon-ai
- restore_cache:
keys:
- v1-leon-ai-leon-{{ .Branch }}-{{ checksum "bridges/python/Pipfile.lock" }}
- v1-leon-ai-leon-{{ .Branch }}-
- v1-leon-ai-leon-
- run:
name: Setting up
command: npm run postinstall
- save_cache:
key: v1-leon-ai-leon-{{ .Branch }}-{{ checksum "bridges/python/Pipfile.lock" }}
paths:
- bridges/python/.venv
- persist_to_workspace:
root: ~/project/leon-ai
paths:
- leon
lint:
<<: *defaults
steps:
- attach_workspace:
at: ~/project/leon-ai
- run:
name: Linting
command: npm run lint
test-json:
<<: *defaults
steps:
- attach_workspace:
at: ~/project/leon-ai
- run:
name: JSON testing
command: npm run test:json
test-e2e:
<<: *defaults
steps:
- attach_workspace:
at: ~/project/leon-ai
- run:
name: End-to-end testing
command: npm run test:e2e
test-unit:
<<: *defaults
steps:
- attach_workspace:
at: ~/project/leon-ai
- run:
name: Installing offline STT
command: npm run setup:offline-stt
- run:
name: Installing offline TTS
command: npm run setup:offline-tts
- run:
name: Unit testing
command: npm run test:unit
workflows:
version: 2
install-test:
jobs:
- check-stack
- install-npm-dep:
requires:
- check-stack
- init:
requires:
- check-stack
- install-npm-dep
- lint:
requires:
- check-stack
- install-npm-dep
- init
- test-json:
requires:
- check-stack
- install-npm-dep
- init
- test-e2e:
requires:
- check-stack
- install-npm-dep
- init
- test-unit:
requires:
- check-stack
- install-npm-dep
- init
+9 -5
View File
@@ -1,5 +1,9 @@
node_modules/
bridges/python/.venv/*
.env
!bridges/python/.venv/.gitkeep
__pycache__/
**/dist/*
**/build/
**/node_modules/
**/tmp/*
**/src/.venv/*
logs/*
*.pyc
.DS_Store
+5 -1
View File
@@ -1,4 +1,4 @@
# EditorConfig is awesome: http://EditorConfig.org
# EditorConfig is awesome: https://EditorConfig.org
# top-most EditorConfig file
root = true
@@ -10,3 +10,7 @@ indent_size = 2
charset = utf-8
end_of_line = lf
insert_final_newline = true
[*.py]
indent_style = tab
indent_size = 4
+20 -22
View File
@@ -1,16 +1,12 @@
# Main settings of Leon
# https://docs.getleon.ai/configuration
# Language currently used
LEON_LANG=en-US
# Current env
LEON_NODE_ENV=development
# Server
LEON_SERVER_HOST=localhost
LEON_SERVER_PORT=1337
# Web app
LEON_WEBAPP_HOST=localhost
LEON_WEBAPP_PORT=4242
LEON_HOST=http://localhost
LEON_PORT=1337
# Time zone (current one by default)
LEON_TIME_ZONE=
@@ -21,27 +17,29 @@ LEON_AFTER_SPEECH=false
# Enable/disable Leon's speech-to-text
LEON_STT=false
# Speech-to-text provider
LEON_STT_PROVIDER=deepspeech
LEON_STT_PROVIDER=coqui-stt
# Enable/disable Leon's text-to-speech
LEON_TTS=false
# Text-to-speech provider
LEON_TTS_PROVIDER=flite
# Enable/disable collaborative logger
LEON_LOGGER=true
# Enable/disable skills to be available over HTTP
LEON_OVER_HTTP=true
# HTTP API key (use "npm run generate:http-api-key" to regenerate one)
LEON_HTTP_API_KEY=
# Language used for the HTTP API
LEON_HTTP_API_LANG=en-US
# Enable/disable telemetry
LEON_TELEMETRY=true
# 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
PIPENV_PIPFILE=bridges/python/src/Pipfile
# Path to the virtual env in .venv/
PIPENV_VENV_IN_PROJECT=true
# Fix https://click.palletsprojects.com/en/7.x/python3/#python-3-surrogate-handling
# If Leon replies you something like "Sorry, it seems I have a problem with the ... module" but
# still gives you the right answer, then:
## 1. Run `locale -a`
## 2. Pick a locale
## 3. Replace the LC_ALL and LANG values with the needed locale
LC_ALL=C.UTF-8
LANG=C.UTF-8
+67 -29
View File
@@ -1,39 +1,77 @@
{
"extends": "airbnb-base",
"env": {
"node": true,
"es6": true,
"browser": true,
"jest/globals": true
},
"globals": {
"io": true,
"webkitSpeechRecognition": true
},
"plugins": [
"import",
"jest"
"extends": [
"eslint:recommended",
"plugin:@typescript-eslint/recommended",
"plugin:import/recommended",
"plugin:import/typescript",
"prettier"
],
"settings": {
"import/resolver": {
"babel-module": { }
"typescript": true,
"node": true
}
},
"parser": "@typescript-eslint/parser",
"env": {
"node": true,
"browser": true
},
"parserOptions": {
"ecmaVersion": 2021
},
"globals": {
"io": true
},
"plugins": ["@typescript-eslint", "unicorn", "import"],
"ignorePatterns": "*.spec.js",
"rules": {
"no-multi-assign": "off",
"no-trailing-spaces": "off",
"linebreak-style": "off",
"indent": "off",
"strict": "off",
"no-console": "off",
"no-param-reassign": "off",
"no-shadow": "off",
"import/no-extraneous-dependencies": "off",
"import/no-dynamic-require": "off",
"@typescript-eslint/no-non-null-assertion": ["off"],
"no-async-promise-executor": ["off"],
"no-underscore-dangle": ["error", { "allowAfterThis": true }],
"space-before-function-paren": ["error", "always"],
"prefer-destructuring": ["error", { "array": true, "object": true }],
"prefer-destructuring": ["error"],
"comma-dangle": ["error", "never"],
"semi": ["error", "never"]
}
"semi": ["error", "never"],
"object-curly-spacing": ["error", "always"],
"unicorn/prefer-node-protocol": "error",
"@typescript-eslint/member-delimiter-style": [
"error",
{
"multiline": {
"delimiter": "none",
"requireLast": true
},
"singleline": {
"delimiter": "comma",
"requireLast": false
}
}
],
"@typescript-eslint/explicit-function-return-type": "off",
"@typescript-eslint/consistent-type-definitions": "error",
"import/no-named-as-default": "off",
"import/no-named-as-default-member": "off",
"import/order": [
"error",
{
"groups": [
"builtin",
"external",
"internal",
"parent",
"sibling",
"index"
],
"newlines-between": "always"
}
]
},
"overrides": [
{
"files": ["*.ts"],
"rules": {
"@typescript-eslint/explicit-function-return-type": "error"
}
}
]
}
+11 -11
View File
@@ -14,21 +14,21 @@ appearance, race, religion, or sexual identity and orientation.
Examples of behavior that contributes to creating a positive environment
include:
* Using welcoming and inclusive language
* Being respectful of differing viewpoints and experiences
* Gracefully accepting constructive criticism
* Focusing on what is best for the community
* Showing empathy towards other community members
- Using welcoming and inclusive language
- Being respectful of differing viewpoints and experiences
- Gracefully accepting constructive criticism
- Focusing on what is best for the community
- Showing empathy towards other community members
Examples of unacceptable behavior by participants include:
* The use of sexualized language or imagery and unwelcome sexual attention or
- The use of sexualized language or imagery and unwelcome sexual attention or
advances
* Trolling, insulting/derogatory comments, and personal or political attacks
* Public or private harassment
* Publishing others' private information, such as a physical or electronic
- Trolling, insulting/derogatory comments, and personal or political attacks
- Public or private harassment
- Publishing others' private information, such as a physical or electronic
address, without explicit permission
* Other conduct which could reasonably be considered inappropriate in a
- Other conduct which could reasonably be considered inappropriate in a
professional setting
## Our Responsibilities
@@ -55,7 +55,7 @@ further defined and clarified by project maintainers.
## Enforcement
Instances of abusive, harassing, or otherwise unacceptable behavior may be
reported by contacting the project team at <louis.grenard@gmail.com>. All
reported by contacting the project team at <louis@getleon.ai>. All
complaints will be reviewed and investigated and will result in a response that
is deemed necessary and appropriate to the circumstances. The project team is
obligated to maintain confidentiality with regard to the reporter of an incident.
+161 -47
View File
@@ -2,7 +2,7 @@
Thanks a lot for your interest in contributing to Leon! :heart:
**Leon needs open source to live**, the more modules he has, the more skillful he becomes.
**Leon needs open source to live**, the more skills he has, the more skillful he becomes.
**Before submitting your contribution**, please take a moment to review this document.
@@ -12,59 +12,90 @@ Please note we have a [code of conduct](https://github.com/leon-ai/leon/blob/dev
Here are few examples about how you could help on Leon, by:
- [Creating a new module](https://docs.getleon.ai/packages-modules.html).
- [Working on new features](https://roadmap.getleon.ai) (what is in backlog or todo).
- [Creating a new module](https://docs.getleon.ai/packages-modules).
- [Working on new features](http://roadmap.getleon.ai) (what is in backlog or todo).
- [Suggesting new ideas](https://github.com/leon-ai/leon/issues/new/choose).
- [Reporting a bug](https://github.com/leon-ai/leon/issues/new?labels=bug&template=BUG.md).
- [Improving the documentation](https://github.com/leon-ai/docs.getleon.ai) (translations, typos, better writing, etc.).
- [Buying me a fruit juice](https://donate.getleon.ai).
- [Sponsoring Leon](http://sponsor.getleon.ai).
## Pull Requests
**Working on your first Pull Request?** You can learn how from this *free* series [How to Contribute to an Open Source Project on GitHub](https://egghead.io/series/how-to-contribute-to-an-open-source-project-on-github).
**Working on your first Pull Request?** You can learn how from this _free_ series [How to Contribute to an Open Source Project on GitHub](https://egghead.io/courses/how-to-contribute-to-an-open-source-project-on-github).
- **Please first discuss** the change you wish to make via [issue](https://github.com/leon-ai/leon/issues),
email, or any other method with the owners of this repository before making a change.
It might avoid a waste of your time.
email, or any other method with the owners of this repository before making a change.
It might avoid a waste of your time.
- The `master` branch is actually used as a snapshot of the latest stable release. **Do not submit your PRs
against the `master` branch**.
against the `master` branch**.
- Ensure your code **respect our coding standards** (cf. [.eslintrc.json](https://github.com/leon-ai/leon/blob/develop/.eslintrc.json)).
To do so, you can run:
To do so, you can run:
```sh
npm run lint
```
- Make sure your **code passes the tests**. You can run the tests via the following command:
```sh
npm test
```
If you're adding new features to Leon, please include tests.
## Development Setup
- Follow the [basic setup](https://github.com/leon-ai/leon/blob/develop/README.md#getting-started).
- Then:
Choose the setup method you want to go for.
```sh
# run development server
npm run dev:server
# run development web app
npm run dev:app
# run the wake word node (optional)
npm run wake
```
### Single-Click
Gitpod will automatically set up an environment and run an instance for you.
[![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/#https://github.com/leon-ai/leon)
### Basic
```sh
# Clone the repository
git clone https://github.com/leon-ai/leon.git leon
# Go to the project root
cd leon
# Install
npm install
# Check the setup went well
npm run check
# Run the development server
npm run dev:server
# Run the development web app
npm run dev:app
```
### Docker
```sh
# Clone the repository
git clone https://github.com/leon-ai/leon.git leon
# Go to the project root
cd leon
# Build
npm run docker:build
# Run the development server and the development web app
npm run docker:dev
```
## Versioning
- We use [Semantic Versioning](https://semver.org) for releases.
- A new Leon module creation increases the MINOR version number of its relevant Leon package.
- Each time a MAJOR or MINOR version number of a Leon package is increased, then the MINOR version number of the project should also be increased.
- Each time a PATCH version number of a Leon package is increased, then the PATCH version number of the projet should also be increased.
## Commits
@@ -74,41 +105,124 @@ The commit message guideline is adapted from the [AngularJS Git Commit Guideline
Types define which kind of changes you made to the project.
| Types | Description |
| ------------- |-------------|
| BREAKING | Changes including breaking changes. |
| build | New build version. |
| chore | Changes to the build process or auxiliary tools such as changelog generation. No production code change. |
| docs | Documentation only changes. |
| feat | A new feature. |
| fix | A big fix. |
| perf | A code change that improves performance. |
| refactor | A code change that neither fixes a bug nor adds a feature. |
| style | Changes that do not affect the meaning of the code (white-space, formatting, missing semi-colons, etc.). |
| test | Adding missing or correcting existing tests. |
| Types | Description |
| -------- | -------------------------------------------------------------------------------------------------------- |
| BREAKING | Changes including breaking changes. |
| build | New build version. |
| chore | Changes to the build process or auxiliary tools such as changelog generation. No production code change. |
| ci | Changes related to continuous integration only (GitHub Actions, CircleCI, etc.). |
| docs | Documentation only changes. |
| feat | A new feature. |
| fix | A bug fix. |
| perf | A code change that improves performance. |
| refactor | A code change that neither fixes a bug nor adds a feature. |
| style | Changes that do not affect the meaning of the code (white-space, formatting, missing semi-colons, etc.). |
| test | Adding missing or correcting existing tests. |
### Scopes
Scopes define high-level nodes of Leon.
- web app
- server
- bridge/python
- bridge/nodejs
- docker
- hotword
- package/package_name
- scripts
- server
- tcp server
- web app
- skill/skill_name
### Examples
```sh
git commit -m "feat(server): awesome new server feature"
git commit -m "docs(package/leon): fix spelling"
git commit -m "docs(skill/leon): fix spelling"
git commit -m "chore: split training script into awesome blocks"
git commit -m "style(web app): remove chatbot useless parentheses"
```
## Donate
## Sponsor
You can also contribute by [buying me a fruit juice](https://donate.getleon.ai).
You can also contribute by [sponsoring Leon](http://sponsor.getleon.ai).
Please note that I dedicate most of my free time to Leon.
By sponsoring the project you make the project sustainable and faster to develop features.
The focus is not only limited to the activity you see on GitHub but also a lot of thinking about the direction of the project. Which is naturally related to the overall design, architecture, vision, learning process and so on...
## Contributing to the Python Bridge or TCP HttpServer
Leon makes use of two binaries, the Python bridge and the TCP server. These binaries are compiled from Python sources.
The Python bridge is used to communicate between the core and skills made with Python.
The TCP server is used to communicate between the core and third-party nodes, such as spaCy.
### Set Up the Python Environment
To contribute to these parts, you need to set up a Python environment running with a specific Python version and a specific Pipenv version.
It is recommended to use Pyenv to manage your Python versions.
If you are on GNU/Linux Ubuntu, you can run the following to install Pyenv, otherwise, please refer to the [Pyenv documentation to install it](https://github.com/pyenv/pyenv#installation):
```bash
# Update registry
sudo apt-get update
# Install Pyenv deps
sudo apt-get install make build-essential libssl-dev zlib1g-dev \
libbz2-dev libreadline-dev libsqlite3-dev wget curl llvm \
libncursesw5-dev xz-utils tk-dev libxml2-dev libxmlsec1-dev libffi-dev liblzma-dev
# Install Pyenv
curl https://pyenv.run | bash
# Add output lines to .bashrc
# Restart shell
exec "$SHELL"
```
Once Pyenv installed, run:
```bash
# Install Python
pyenv install 3.9.10 --force
pyenv global 3.9.10
# Install Pipenv
pip install pipenv==2022.7.24
```
Your Python environment should be ready now. So now you can set up the respective environments according to what you are going to contribute to and build them:
```bash
# Set up the Python bridge environment
npm run setup:python-bridge
# Set up the TCP server environment
npm run setup:tcp-server
# If you are in China, you can run this to download models faster:
npm run setup:tcp-server cn
# Once your code changes are done, you can build via:
# Build the Python bridge
npm run build:python-bridge
# Build the TCP server
npm run build:tcp-server
# Run the Python bridge
./bridges/python/dist/{OS-CPU_ARCH}/leon-python-bridge server/src/intent-object.sample.json
# Run the TCP server
./tcp_server/dist/{OS-CPU_ARCH}/leon-tcp-server en
```
## Spread the Word
Use [#LeonAI](https://twitter.com/hashtag/LeonAI) if you tweet about Leon and/or mention [@louistiti_fr](https://twitter.com/louistiti_fr).
Use [#LeonAI](<https://twitter.com/search?f=live&q=%23LeonAI%20(from%3Agrenlouis%20OR%20from%3Alouistiti_fr)&src=typed_query>) if you tweet about Leon and/or mention [@grenlouis](https://twitter.com/grenlouis).
+8
View File
@@ -0,0 +1,8 @@
# These are supported funding model platforms
github: [louistiti]
patreon: # Replace with a single Patreon username
open_collective: # Replace with a single Open Collective username
ko_fi: # Replace with a single Ko-fi username
tidelift: # Replace with a single Tidelift platform-name/package-name e.g., npm/babel
custom: # http://sponsor.getleon.ai
-7
View File
@@ -1,7 +0,0 @@
<!--
Thanks for your interest in Leon! ❤️
Please check if there is no similar issue before creating this one.
-->
+4 -2
View File
@@ -7,6 +7,7 @@ labels: bug
<!--
Thanks for your interest in Leon! ❤️
Please check if there is no similar issue before creating this one.
If the bug is related to the setup, please submit the issue at: https://github.com/leon-ai/leon-cli/issues/new/choose
-->
### Specs
@@ -14,8 +15,9 @@ Please check if there is no similar issue before creating this one.
- Leon version:
- OS (or browser) version:
- Node.js version:
- Complete "npm run check" output:
- (optional) Leon package version:
- Complete "leon check" (or "npm run check") output:
- (if using Docker) Complete "npm run docker:check" output:
- (optional) Leon skill version:
### Expected Behavior
+1
View File
@@ -12,6 +12,7 @@ Please place an x (no spaces - [x]) in all [ ] that apply.
-->
### Documentation Is:
- [ ] Missing
- [ ] Needed
- [ ] Confusing
+2 -1
View File
@@ -14,6 +14,7 @@ Please place an x (no spaces - [x]) in all [ ] that apply.
-->
### What type of change does this PR introduce?
- [ ] Bugfix
- [ ] Feature
- [ ] Refactor
@@ -21,10 +22,10 @@ Please place an x (no spaces - [x]) in all [ ] that apply.
- [ ] Not Sure?
### Does this PR introduce breaking changes?
- [ ] Yes
- [ ] No
### List any relevant issue numbers:
### Description:
+13
View File
@@ -0,0 +1,13 @@
version: 2
updates:
- package-ecosystem: 'npm'
directory: '/'
schedule:
interval: 'weekly'
day: 'friday'
time: '22:00'
commit-message:
prefix: 'chore'
include: 'scope'
reviewers:
- 'louistiti'
+39
View File
@@ -0,0 +1,39 @@
name: Build
on:
push:
# branches: [master, develop]
branches: [master]
pull_request:
# branches: [master, develop]
branches: [master]
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: Use Python
uses: actions/setup-python@v2
with:
python-version: 3.x
- name: Use Node.js
uses: actions/setup-node@v2
with:
node-version: 16.x
cache: npm
- name: Install Pipenv
run: pip install --upgrade pip && pip install pipenv
- name: Install
run: npm install
- name: Check setup
run: npm run check
- name: Build
run: npm run build
+36
View File
@@ -0,0 +1,36 @@
name: Lint
on:
push:
# branches: [master, develop]
branches: [master]
pull_request:
# branches: [master, develop]
branches: [master]
jobs:
lint:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: Use Python
uses: actions/setup-python@v2
with:
python-version: 3.x
- name: Use Node.js
uses: actions/setup-node@v2
with:
node-version: 16.x
cache: npm
- name: Install Pipenv
run: pip install --upgrade pip && pip install pipenv
- name: Install
run: npm install
- name: Run linter
run: npm run lint
@@ -0,0 +1,76 @@
name: Pre-release Node.js bridge
on: workflow_dispatch
jobs:
build:
name: Build
strategy:
fail-fast: false
matrix:
os: [ubuntu-20.04]
runs-on: ${{ matrix.os }}
steps:
- name: Clone repository
uses: actions/checkout@v3
- name: Install Node.js
uses: actions/setup-node@v3
with:
node-version: lts/*
- name: Set Node.js bridge version
working-directory: bridges/nodejs/src
run: |
echo "NODEJS_BRIDGE_VERSION=$(node --require fs --eval "const fs = require('node:fs'); const [, VERSION] = fs.readFileSync('version.ts', 'utf8').split(\"'\"); console.log(VERSION)")" >> $GITHUB_ENV
- name: Display Node.js bridge version
run: |
echo "Node.js bridge version: ${{ env.NODEJS_BRIDGE_VERSION }}"
- name: Install core
run: npm install
- name: Build Node.js bridge
run: npm run build:nodejs-bridge
- name: Upload Node.js bridge
uses: actions/upload-artifact@v3
with:
path: bridges/nodejs/dist/*.zip
draft-release:
name: Draft-release
needs: [build]
runs-on: ubuntu-20.04
steps:
- name: Clone repository
uses: actions/checkout@v3
- name: Install Node.js
uses: actions/setup-node@v3
with:
node-version: lts/*
- name: Set Node.js bridge version
working-directory: bridges/nodejs/src
run: |
echo "NODEJS_BRIDGE_VERSION=$(node --require fs --eval "const fs = require('node:fs'); const [, VERSION] = fs.readFileSync('version.ts', 'utf8').split(\"'\"); console.log(VERSION)")" >> $GITHUB_ENV
- name: Download Node.js bridge
uses: actions/download-artifact@v3
with:
path: bridges/nodejs/dist
- uses: marvinpinto/action-automatic-releases@latest
with:
repo_token: ${{ secrets.GITHUB_TOKEN }}
automatic_release_tag: nodejs-bridge_v${{ env.NODEJS_BRIDGE_VERSION }}
draft: true
prerelease: false
title: Node.js Bridge ${{ env.NODEJS_BRIDGE_VERSION }}
files: bridges/nodejs/dist/artifact/*.zip
@@ -0,0 +1,91 @@
name: Pre-release Python bridge
on: workflow_dispatch
env:
PIPENV_PIPFILE: bridges/python/src
PIPENV_VENV_IN_PROJECT: true
jobs:
build:
name: Build
strategy:
fail-fast: false
matrix:
os: [ubuntu-20.04, macos-latest, windows-latest]
runs-on: ${{ matrix.os }}
steps:
- name: Clone repository
uses: actions/checkout@v3
- name: Install Python
uses: actions/setup-python@v4
with:
python-version: 3.9.10
- name: Install Pipenv
run: pip install --upgrade pip && pip install pipenv==2022.7.24
- name: Install Node.js
uses: actions/setup-node@v3
with:
node-version: lts/*
- name: Set Python bridge version
working-directory: bridges/python/src
run: |
echo "PYTHON_BRIDGE_VERSION=$(python -c "from version import __version__; print(__version__)")" >> $GITHUB_ENV
- name: Display Python bridge version
run: |
echo "Python bridge version: ${{ env.PYTHON_BRIDGE_VERSION }}"
- name: Install core
run: npm install
- name: Set up Python bridge
run: npm run setup:python-bridge
- name: Build Python bridge
run: npm run build:python-bridge
- name: Upload Python bridge
uses: actions/upload-artifact@v3
with:
path: bridges/python/dist/*.zip
draft-release:
name: Draft-release
needs: [build]
runs-on: ubuntu-20.04
steps:
- name: Clone repository
uses: actions/checkout@v3
- name: Install Python
uses: actions/setup-python@v4
with:
python-version: 3.9.10
- name: Set Python bridge version
working-directory: bridges/python/src
run: |
echo "PYTHON_BRIDGE_VERSION=$(python -c "from version import __version__; print(__version__)")" >> $GITHUB_ENV
- name: Download Python bridge
uses: actions/download-artifact@v3
with:
path: bridges/python/dist
- uses: marvinpinto/action-automatic-releases@latest
with:
repo_token: ${{ secrets.GITHUB_TOKEN }}
automatic_release_tag: python-bridge_v${{ env.PYTHON_BRIDGE_VERSION }}
draft: true
prerelease: false
title: Python Bridge ${{ env.PYTHON_BRIDGE_VERSION }}
files: bridges/python/dist/artifact/*.zip
@@ -0,0 +1,91 @@
name: Pre-release TCP server
on: workflow_dispatch
env:
PIPENV_PIPFILE: tcp_server/src
PIPENV_VENV_IN_PROJECT: true
jobs:
build:
name: Build
strategy:
fail-fast: false
matrix:
os: [ubuntu-20.04, macos-latest, windows-latest]
runs-on: ${{ matrix.os }}
steps:
- name: Clone repository
uses: actions/checkout@v3
- name: Install Python
uses: actions/setup-python@v4
with:
python-version: 3.9.10
- name: Install Pipenv
run: pip install --upgrade pip && pip install pipenv==2022.7.24
- name: Install Node.js
uses: actions/setup-node@v3
with:
node-version: lts/*
- name: Set TCP server version
working-directory: tcp_server/src
run: |
echo "TCP_SERVER_VERSION=$(python -c "from version import __version__; print(__version__)")" >> $GITHUB_ENV
- name: Display TCP server version
run: |
echo "TCP server version: ${{ env.TCP_SERVER_VERSION }}"
- name: Install core
run: npm install
- name: Set up TCP server
run: npm run setup:tcp-server
- name: Build TCP server
run: npm run build:tcp-server
- name: Upload TCP server
uses: actions/upload-artifact@v3
with:
path: tcp_server/dist/*.zip
draft-release:
name: Draft-release
needs: [build]
runs-on: ubuntu-20.04
steps:
- name: Clone repository
uses: actions/checkout@v3
- name: Install Python
uses: actions/setup-python@v4
with:
python-version: 3.9.10
- name: Set TCP server version
working-directory: tcp_server/src
run: |
echo "TCP_SERVER_VERSION=$(python -c "from version import __version__; print(__version__)")" >> $GITHUB_ENV
- name: Download TCP server
uses: actions/download-artifact@v3
with:
path: tcp_server/dist
- uses: marvinpinto/action-automatic-releases@latest
with:
repo_token: ${{ secrets.GITHUB_TOKEN }}
automatic_release_tag: tcp-server_v${{ env.TCP_SERVER_VERSION }}
draft: true
prerelease: false
title: TCP Server ${{ env.TCP_SERVER_VERSION }}
files: tcp_server/dist/artifact/*.zip
+51
View File
@@ -0,0 +1,51 @@
name: Tests
on:
push:
# branches: [master, develop]
branches: [master]
pull_request:
# branches: [master, develop]
branches: [master]
jobs:
tests:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: Use Python
uses: actions/setup-python@v2
with:
python-version: 3.x
- name: Use Node.js
uses: actions/setup-node@v2
with:
node-version: 16.x
cache: npm
- name: Install Pipenv
run: pip install --upgrade pip && pip install pipenv
- name: Install
run: npm install
- name: Run JSON tests
run: npm run test:json
- name: Run over HTTP tests
run: npm run test:over-http
- name: Run E2E tests
run: npm run test:e2e
- name: Install offline STT
run: npm run setup:offline-stt
- name: Install offline TTS
run: npm run setup:offline-tts
- name: Run unit tests
run: npm run test:unit
+19 -8
View File
@@ -1,27 +1,38 @@
__pycache__/
.idea/
**/dist/
.fleet/
.vscode/
**/dist/*
**/build/
**/node_modules/
test/coverage/
**/tmp/*
bridges/python/.venv/*
**/src/.venv/*
downloads/*
logs/*
server/src/config/**/*.json
bin/deepspeech/*
core/config/**/*.json
bin/coqui/*
bin/flite/*
package-lock.json
*.pyc
.DS_Store
*.sublime-workspace
npm-debug.log
debug.log
.env
!**/.gitkeep
!bridges/python/.venv/.gitkeep
leon.json
bridges/python/src/Pipfile.lock
tcp_server/src/Pipfile.lock
!tcp_server/**/.gitkeep
!bridges/python/**/.gitkeep
!bridges/nodejs/**/.gitkeep
!**/*.sample*
packages/**/config/config.json
skills/**/src/config.json
packages/**/data/db/*.json
server/src/data/expressions/classifier.json
app/js/main.js
skills/**/memory/*.json
core/data/models/*.nlp
package.json.backup
.python-version
schemas/**/*.json
+19
View File
@@ -0,0 +1,19 @@
image: gitpod/workspace-full
tasks:
- before: npm install -g @leon-ai/cli
init: leon create birth
command: leon start
ports:
- port: 1337
onOpen: notify
github:
prebuilds:
master: true
branches: true
pullRequests: true
addComment: true
addBadge: true
addLabel: true
+11
View File
@@ -0,0 +1,11 @@
#!/bin/sh
. "$(dirname "$0")/_/husky.sh"
if ! [ -x "$(command -v npm)" ]; then
echo "npm: command not found"
echo "If you use a version manager tool such as nvm and a git GUI such as GitKraken, please read: https://typicode.github.io/husky/#/?id=command-not-found" >&2
exit 1
else
npx ts-node scripts/commit-msg.js
fi
+4
View File
@@ -0,0 +1,4 @@
#!/bin/sh
. "$(dirname "$0")/_/husky.sh"
npx lint-staged
+3
View File
@@ -0,0 +1,3 @@
{
"*": ["npm run lint"]
}
+3
View File
@@ -0,0 +1,3 @@
engine-strict=true
package-lock=false
save-exact=true
+1
View File
@@ -0,0 +1 @@
lts/*
+5
View File
@@ -0,0 +1,5 @@
{
"semi": false,
"trailingComma": "none",
"singleQuote": true
}
+325 -42
View File
@@ -1,79 +1,362 @@
# [1.0.0-beta.2](https://github.com/leon-ai/leon/compare/1.0.0-beta.1...1.0.0-beta.2) (2019-04-24)
# [1.0.0-beta.8](https://github.com/leon-ai/leon/compare/v1.0.0-beta.7...v1.0.0-beta.8) (2023-05-01) / Binaries and TypeScript Rewrite
_Please refer to [our latest blog post](https://blog.getleon.ai/binaries-and-typescript-rewrite-1-0-0-beta-8/) for more information on the new release of our dear Leon._
# [1.0.0-beta.7](https://github.com/leon-ai/leon/compare/v1.0.0-beta.6...v1.0.0-beta.7) (2022-08-24) / A Much Better NLP
_Please [read this blog post](https://blog.getleon.ai/a-much-better-nlp-and-future-1-0-0-beta-7/) to know more about all the new features and the exciting future of Leon._
### BREAKING CHANGES
- remove legacy packages [07743657](https://github.com/leon-ai/leon/commit/07743657cd2954e7f850c08eea7c032c24b28a96)
### Features
- can send custom HTTP headers
- create new NLP skills resolvers model + NLP global resolvers model [602604e4](https://github.com/leon-ai/leon/commit/602604e43788c6b6be8c402d54fe54342d0cd5d6)
- better isolate skill resolvers from global resolvers + finish up Akinator skill [905d248e](https://github.com/leon-ai/leon/commit/905d248ebf7e84b1ccc74450520228aef9a8804a)
- transfer language from core to skills + support thematics on Akinator skill [b35a249b](https://github.com/leon-ai/leon/commit/b35a249bf68000d6708aaee4abc4cd97f5b80035)
- actions on slot level + akinator skill progress [7101b8b4](https://github.com/leon-ai/leon/commit/7101b8b4b828b49e009da2fcdac7c5ed2e48c8f8)
- add Cartesian sample training on resolvers + enum entities [6ed88a59](https://github.com/leon-ai/leon/commit/6ed88a5946c77b356e49fe8b9cbe890b8dd1f037)
- map skills resolvers intents [eb5ade76](https://github.com/leon-ai/leon/commit/eb5ade76844dd14f5d5a5c5eeb434eed70fe62f4)
- train skills resolvers and remap as per changes [82df0a3c](https://github.com/leon-ai/leon/commit/82df0a3c235fbd50ad0cfe12e23a51f777dcd658)
- achieve Cartesian training [a1e9011d](https://github.com/leon-ai/leon/commit/a1e9011d5db48ed8e9f49cef2d813ee7e2400ec2)
- introduce suggestions [dcddacca](https://github.com/leon-ai/leon/commit/dcddacca2956529de0aea8ff98e1e6f16104966a)
- communicate suggestions to the client [4b5a8835](https://github.com/leon-ai/leon/commit/4b5a883510fd4421a491f999cc21d8f7dd369a03)
- shared skills memory [795acc5b](https://github.com/leon-ai/leon/commit/795acc5bdd29e9a27d1cf3b4407453648d573973)
- support dynamic variables on skill NLU settings for logic type [10d10a16](https://github.com/leon-ai/leon/commit/10d10a1690cb65970932ee7230e3f324ec67dbce)
- tmp resolvers mapping [b1a332ba](https://github.com/leon-ai/leon/commit/b1a332bab6af8b74a8c58c07bac3ef3a1cebad89)
- start to map resolvers between the core and skills [e88495a9](https://github.com/leon-ai/leon/commit/e88495a9a94e86026fd0c7c4c44f3ff06edb2e80)
- train affirmation and denial resolver [993d52e8](https://github.com/leon-ai/leon/commit/993d52e8686f335039ff3d5e2a82c1a37efb1825)
- Python TCP server and Node.js TCP client for IPC (wip) [5970ec9e](https://github.com/leon-ai/leon/commit/5970ec9e8e4c2784c50e2ddc76b34b71aa4310e6)
- introduce spaCy for complete NER (wip) [caa86fc8](https://github.com/leon-ai/leon/commit/caa86fc8a6850b18f67ba7bedb423be693a88d17)
- slot filling (wip) [76547d94](https://github.com/leon-ai/leon/commit/76547d9411c32e0eb2ccfdac3a4901d2d2fb37f6)
- share data across domains [f4f9fff9](https://github.com/leon-ai/leon/commit/f4f9fff9783861be183990d7869973c7a30c8104)
- dynamic variable binding on NLG [0367b44f](https://github.com/leon-ai/leon/commit/0367b44f211c1629fffe6981a730f171707bf0c0)
- context and slot filling preparation (wip) [975b8ebc](https://github.com/leon-ai/leon/commit/975b8ebcf00db91b44dd067be6dde5c1bf32fff1)
- annotate entities on the fly + prepare for dialog skill type and cross-domains data [4107932d](https://github.com/leon-ai/leon/commit/4107932d000086188d6f44ef67b73cc322fc58e5)
- new NLP training [d8023308](https://github.com/leon-ai/leon/commit/d8023308d0ef1f3eede37f21f45daa2f893031b0)
- **server:**
- trigger next action suggestions or current ones [244d08c0](https://github.com/leon-ai/leon/commit/244d08c0bd0fea315269f52ab899f9b7fe083f51)
- introduce main NLP model and resolvers NLP model [e37526d9](https://github.com/leon-ai/leon/commit/e37526d9056d858ebcf17b81f6714f47b67c77cb)
- change log emojis [843bc428](https://github.com/leon-ai/leon/commit/843bc428b8deb397e2d051a8e0bfaf1b82b459a2)
- provide nextAction even when no slot is set and clean up NLU object on context switch [8377c63d](https://github.com/leon-ai/leon/commit/8377c63db4e4e42ed929171cd8b9abdb13c44b2a)
- report full traceback from skills execution [b69b1fea](https://github.com/leon-ai/leon/commit/b69b1fea16250421bc7d5def1c973dd43e453071)
- support on-the-fly entity annotation for built-in entities [567b030c](https://github.com/leon-ai/leon/commit/567b030c4fcf8df266c39cca61a146fb33b9e0fc)
- save slots within conversation context [fce47cdb](https://github.com/leon-ai/leon/commit/fce47cdbd570993ac5cca2b4ff5bc97969df4e40)
- resolve resolvers tmp [ceea47ff](https://github.com/leon-ai/leon/commit/ceea47ff7dd536bfd3adf3cc355e90e3e94b1cbd)
- prepare the next action on non-slot-filled skills [0acb31a9](https://github.com/leon-ai/leon/commit/0acb31a9c61c1c094b29f3d0ff2647d625eab0be)
- add more affirmative utterance samples [870ab2e8](https://github.com/leon-ai/leon/commit/870ab2e87eba2c548d38dc90d30553e7fa380c1e)
- restart a skill with the original utterance saved in context [f4446ef1](https://github.com/leon-ai/leon/commit/f4446ef17796d38d0f98d5b7e889503622a1a998)
- clean up context if the action loop does not meet the expected items [035c9d52](https://github.com/leon-ai/leon/commit/035c9d5240472ac19a84ae8c1a87844fa0d0af5d)
- add handsigns custom entity [1529c720](https://github.com/leon-ai/leon/commit/1529c72039092c7b8f37304d6064e04f2dc7b795)
- reprocess NLU in case of slot filling interruption [9e242d77](https://github.com/leon-ai/leon/commit/9e242d77d32109e9355eec422790a5a66fd18f9c)
- handle action loop when slots have all been filled at once [f8830502](https://github.com/leon-ai/leon/commit/f88305020a5bc79056b7ff9c1a31f8d3c3a7cdce)
- break the action loop from the skill [27dc801c](https://github.com/leon-ai/leon/commit/27dc801cf53de5af3d54b95f42d2b9e627090867)
- stop action loop from skill to core [99681e25](https://github.com/leon-ai/leon/commit/99681e257795a18361be379b93244088401f640b)
- introduce basic concept of action loop [c5b38400](https://github.com/leon-ai/leon/commit/c5b38400821e5bc5edc4402d007f815f24319d44)
- prepare action loop feature [19e1aa22](https://github.com/leon-ai/leon/commit/19e1aa22f6e989e90eb745e3a7b7ccb8ff5adbfa)
- add current utterance entities to differentiate from the whole context [8b56a185](https://github.com/leon-ai/leon/commit/8b56a1850c9d76e335f1bad1b4395d73ddc5ea19)
- when a context is activated, pick up the most probable classification [8e186879](https://github.com/leon-ai/leon/commit/8e1868798c8750c19b1719a44dc6fb8bca68b250)
- persist entities into contexts [87575773](https://github.com/leon-ai/leon/commit/875757739f6701f54805eeff2c7c350cff36c4ac)
- forward slots to skill + add original utterance [68e40f65](https://github.com/leon-ai/leon/commit/68e40f65df0d1fe29ccad991868a2408c6e1015e)
- handle case when all slots have been filled in one utterance [22e9234b](https://github.com/leon-ai/leon/commit/22e9234b3d2c97e83eaafaeeb5aa9d27c351c95a)
- trigger next action once all slots have been filled [9b870010](https://github.com/leon-ai/leon/commit/9b870010dd929bc1aed6d87696f1cc4e9f177c0b)
- complete slot filling before triggering the next action [9124687e](https://github.com/leon-ai/leon/commit/9124687eb0e17295a30f860752ee622ba44d1440)
- from modules to skills with type at the actions level [77ebaf4a](https://github.com/leon-ai/leon/commit/77ebaf4a9c78b2e471d39872e361ea05b163580d)
- verify if all slots are filled [e27c1b9c](https://github.com/leon-ai/leon/commit/e27c1b9c8f5c2f668f464f152ad227d65ba5ef6b)
- context and slot filling, keep context and await for entities [25adf406](https://github.com/leon-ai/leon/commit/25adf406c810e48b1277105dd6c269a2ed601d28)
- unstack oldest context [1ece25a4](https://github.com/leon-ai/leon/commit/1ece25a497acc9f9876fe158ace5da38beec31e6)
- context setup with slot for each conversation (wip) [8257eb87](https://github.com/leon-ai/leon/commit/8257eb8792c9f4fc90bcc1b393d3fddf8ff541dc)
- resolve slots from slot filling [960a6dc7](https://github.com/leon-ai/leon/commit/960a6dc71c2efb50ad6a8448d447ebd79c559c41)
- pickup questions for slot filling [3bbc2f8a](https://github.com/leon-ai/leon/commit/3bbc2f8a254d10f0c37cdb7abf016b3e418f594a)
- main slots structure (wip) [1d9b1809](https://github.com/leon-ai/leon/commit/1d9b18093b6e042ae49f557149a7822b4420cdb8)
- introduce resolvers for slot filling (wip) [334bf393](https://github.com/leon-ai/leon/commit/334bf393f2c43edd326d9de2e93c037ffeebeab5)
- slot filling PoC (tmp wip) [95bfcfe4](https://github.com/leon-ai/leon/commit/95bfcfe422f21a2946e50031a3623675dfe81b9d)
- slot filling (wip) [969a83e6](https://github.com/leon-ai/leon/commit/969a83e6081de20ec5e2bdd0329a21a3fe448f13)
- trigger unsupported language [1845eed7](https://github.com/leon-ai/leon/commit/1845eed71dadd5f693d76abd7633864014bf8af1)
- context (wip) [d1c2a11d](https://github.com/leon-ai/leon/commit/d1c2a11d8284ca4e1d4563b871c50c006e8ef8a0)
- context (wip) [a9a43ac4](https://github.com/leon-ai/leon/commit/a9a43ac478c46f3832d2af49c287bb574a70cc14)
- differenciate cities from countries for location entities [bf9bf231](https://github.com/leon-ai/leon/commit/bf9bf231f714e1edc1417e43af12fa54c00ba064)
- auto restart the TCP server when language is switching [9be7c700](https://github.com/leon-ai/leon/commit/9be7c700767672ac6e0c875d3b5ae7fa6414e4fa)
- support multi languages on TCP server [a808742c](https://github.com/leon-ai/leon/commit/a808742c927d45c18df45af133e67c98d4a0415a)
- add auto reconnect on TCP client [cbe89ed6](https://github.com/leon-ai/leon/commit/cbe89ed6ccfd727356eb34078a8a4348b2fd696f)
- make TCP client global [006e9fb0](https://github.com/leon-ai/leon/commit/006e9fb01148c2107f6acc6a562ace4809da92be)
- fully implement low-level networking for IPC [8acb82da](https://github.com/leon-ai/leon/commit/8acb82da9bacdb9b7952c4a4d130d094e07def5e)
- more accurate NLG [d5577b1e](https://github.com/leon-ai/leon/commit/d5577b1ef5cf1b8b4a924636ba4425b8b4ae133d)
- unknown_answers fallback on dialog type [28efe6e7](https://github.com/leon-ai/leon/commit/28efe6e7d542f19bf12ddede1815f7fa8cf01036)
- deep data mapping on enum NER [3ca48265](https://github.com/leon-ai/leon/commit/3ca48265e7115c8e0f02c65ba92d90412325ad76)
- NLG and entities mapping [8f2f935b](https://github.com/leon-ai/leon/commit/8f2f935b949ceb965941460d4ff1ed0084b72442)
- bootstrap skill structure [fe90c68e](https://github.com/leon-ai/leon/commit/fe90c68ea0e9b0e857b62aa9f3b0a42ba1ffed6b)
- on-the-fly language switching [f24513a2](https://github.com/leon-ai/leon/commit/f24513a22395d1903e485883f4813cdceccdbd18)
- new NLP containers [34b2aa56](https://github.com/leon-ai/leon/commit/34b2aa5655e55284d59db4569960c49965a0483c)
- (WIP) NLU refactoring [ca3f5f42](https://github.com/leon-ai/leon/commit/ca3f5f42da26eb634e10b56e9b84bd45b5543024)
- add skills domains [cf2a28aa](https://github.com/leon-ai/leon/commit/cf2a28aac2d936cc15e6aa9aa13747015d952053)
- **skill/akinator:**
- finish up [79e7df02](https://github.com/leon-ai/leon/commit/79e7df022f7daedf43db7f892e049a31924ce985)
- finished main business logic [76cae42f](https://github.com/leon-ai/leon/commit/76cae42fdeac0edcd3ebd6aa7718728617687b1b)
- backbone [02a2f714](https://github.com/leon-ai/leon/commit/02a2f71470bb4c0c6ca04526e89461d863d17145)
- **skill/birthday:**
remove birthday skill [be0b345d](https://github.com/leon-ai/leon/commit/be0b345d3f7fea562548e3fbed62b65c32eff4c0)
- **skill/color:**
introduce color skill [ce00989b](https://github.com/leon-ai/leon/commit/ce00989b01f65c5cbb5a2e13f454207c1ba7741c)
- **skill/guess_the_number:**
introduce the Guess the Number skill [fba80966](https://github.com/leon-ai/leon/commit/fba80966c937a32182e48670c47358babb539d64)
- **skill/introduction:**
- add one utterance sample [af0fdd1e](https://github.com/leon-ai/leon/commit/af0fdd1e18975bf8b60abb2957ddf79831281817)
- ask about owner info if necessary [c5cc9bdd](https://github.com/leon-ai/leon/commit/c5cc9bdd52afaaa710f9476d1e9918f3d168e243)
- **skill/mbti:**
- complete form resolver [aad9f3f1](https://github.com/leon-ai/leon/commit/aad9f3f1ef61499d438ea40c9d2d95764667678d)
- finish business logic [99a3f103](https://github.com/leon-ai/leon/commit/99a3f103e00b5a58745ee851d2fa95c61871f75a)
- questions mapping [ae4f69f7](https://github.com/leon-ai/leon/commit/ae4f69f7c7189ff75e004f68c9a2a8b6bb37b6bd)
- complete questionnaire [7f1f8871](https://github.com/leon-ai/leon/commit/7f1f8871598746c5475b24e086ea6e581f2a988e)
- main logic backbone [33109a4c](https://github.com/leon-ai/leon/commit/33109a4c8b5df82e7b98e48e66f8d53f0cc114fb)
- main NLU structure [skip ci] [86d5040a](https://github.com/leon-ai/leon/commit/86d5040a7dc2006036c7e67a2cf54a4c992e64aa)
- **skill/rochambeau:**
- add start answers [192dd0a8](https://github.com/leon-ai/leon/commit/192dd0a87ab5dc025bb90b20b187e36a58be54ea)
- introduce paper scissors rock [57370470](https://github.com/leon-ai/leon/commit/573704706c843d870f2498146bc3cd659bab4f06)
- init [7f5e30ac](https://github.com/leon-ai/leon/commit/7f5e30ac82f2a2d7579e361229a4044348915867)
- **web app:**
- join us on Discord [141c89ec](https://github.com/leon-ai/leon/commit/141c89ecbfd329a8e63d5a603d0ae6b42f9abf38)
- wait for TCP client to be connected first [bc228a68](https://github.com/leon-ai/leon/commit/bc228a68600c07871c489d6624bbc837971079a6)
### Bug Fixes
- check script with new intent-object format [fdf0a389](https://github.com/leon-ai/leon/commit/fdf0a389b76caba5dd47996a43a34c0c7821c70a)
- check new resolvers paths [cfd8f7cb](https://github.com/leon-ai/leon/commit/cfd8f7cbe5e8fd9ce3d1659c725d7af261db8d71)
- use ports.ubuntu.com mirror for the offline TTS [skip ci] [3dd90396](https://github.com/leon-ai/leon/commit/3dd9039678820fceb7ccbb1c96358c8d2f188ede)
- set skill config only when a bridge is set [7513aa7d](https://github.com/leon-ai/leon/commit/7513aa7d20fee1fe9ca5442a7909d22fd1c3b39e)
- only set skill config when it is a logic type [9ce9a8bc](https://github.com/leon-ai/leon/commit/9ce9a8bc4fe0864730a08d8e9a436982f1365aa5)
- **docker:**
- usage of Ubuntu base image with pyenv and nvm (#408) [f507f6f7](https://github.com/leon-ai/leon/commit/f507f6f7e499f56768b3e624164cbcd58193b153)
- check should not allocate a pseudo-TTY (#359) [4372b45f](https://github.com/leon-ai/leon/commit/4372b45fc605893d4130cf7110dd87519b934345)
- **server:**
- make leon handle multiple socket.io-client instances [6e7c0aac](https://github.com/leon-ai/leon/commit/6e7c0aac57008b152b45f1b0f3886ae38777467b)
- fallback on global resolver during resolver classification [ec77dd0f](https://github.com/leon-ai/leon/commit/ec77dd0f02a8ae94fb3f02c7b7847b5509d71406)
- make use of current entities to match global entities [a8d82050](https://github.com/leon-ai/leon/commit/a8d82050c86b5c24c4c898c06e5ffc3882524c0b)
- multiple slots filling [2ac1bc63](https://github.com/leon-ai/leon/commit/2ac1bc63ccd11757d586adfb2e75ce04e3ffbcb5)
- context switching on action loop [6712ae55](https://github.com/leon-ai/leon/commit/6712ae5539ef44ed33e360cfcad71c760c4b13b1)
- check one-shot slot filling case causing infinite loop [782a3aaa](https://github.com/leon-ai/leon/commit/782a3aaa0a07dda667557bc84db906b3fa9b237c)
- clean up active context after all slots have been filled [faabc2c7](https://github.com/leon-ai/leon/commit/faabc2c7b0992fcea035eedf66103d84b101e1a7)
- correctly extract all spaCy entities [6aa60bfb](https://github.com/leon-ai/leon/commit/6aa60bfbd8c72e678fe3faf5e7f9dbd37dfd209f)
- intent not found [8280c658](https://github.com/leon-ai/leon/commit/8280c65897dba0fe470a3589d151b391c51e344e)
- fallback due to modules to skills refactoring [ef0c54b2](https://github.com/leon-ai/leon/commit/ef0c54b22667ef2bd1d2c07003f6b4beb5fa25c0)
- NER due to modules to skills refactoring [e4d3904c](https://github.com/leon-ai/leon/commit/e4d3904ceeb2a3ee2c0187a1817331fac916e1a7)
- **skill/akinator:**
remove direct end on guess action [f6461f73](https://github.com/leon-ai/leon/commit/f6461f733b4a5d944dfa4a987dd1109628c6cbca)
- **skill/color:**
more appropriate answer [cb18ed63](https://github.com/leon-ai/leon/commit/cb18ed6397cb0e0ad8fbea30c57d7d40137441ee)
- **skill/rochambeau:**
final logic [0ebc0518](https://github.com/leon-ai/leon/commit/0ebc0518e61b899c35dd13df65a43f69399e784d)
### Performance Improvements
- check Pipfile instead of Pipfile.lock to judge whether Python packages must be installed [afdb71f7](https://github.com/leon-ai/leon/commit/afdb71f766f2956c5cb4a5e0be9025340d1a89db)
### Documentation Changes
- change newsletter link [4bf2a9af](https://github.com/leon-ai/leon/commit/4bf2a9af963f75aeff96f4a43da8ec1024ac583a)
- README - Edited sentence for clarity (#389) [e83a1c42](https://github.com/leon-ai/leon/commit/e83a1c4230897e8b63251ef86225cf773148c38e)
- edit newsletter link [fa558a44](https://github.com/leon-ai/leon/commit/fa558a447ade4071f352d56f14602690ed90f521)
- update sponsor [skip ci] [f30ddb6b](https://github.com/leon-ai/leon/commit/f30ddb6be5f531df2b0042be0ed5ffbe79f73b07)
- remove sponsor [skip ci] [5dbc010f](https://github.com/leon-ai/leon/commit/5dbc010fa643279a24081f3148022e2211af63f4)
- remove sponsor [skip ci] [f36dd20f](https://github.com/leon-ai/leon/commit/f36dd20f822cd33c9e8a03efc2849c8d8d1fc75e)
- remove sponsor [skip ci] [5ee57ddf](https://github.com/leon-ai/leon/commit/5ee57ddf2a9f7817ec35b2e70d49e5bb422d8f78)
- add @ant-media sponsor [skip ci] [b47cbc3a](https://github.com/leon-ai/leon/commit/b47cbc3a5ecb6591f7abb4f62feae8102b9a6468)
- add long dev notice to README [skip ci] [499be77d](https://github.com/leon-ai/leon/commit/499be77d509231b853f591e27f726381da5a50d8)
- move sponsor to new section [skip ci] [8825d687](https://github.com/leon-ai/leon/commit/8825d6877c19d86495e89a858b859b7ab1f9ae37)
- change Twitter handle [skip ci] [c1afc11c](https://github.com/leon-ai/leon/commit/c1afc11cdb283526540d0fecdf83efddf3f3a9f7)
- remove sponsor [skip ci] [99b401a6](https://github.com/leon-ai/leon/commit/99b401a668a6fb248e33c22782940402be7c9b17)
- add new sponsor self-hosted img [skip ci] [238d928c](https://github.com/leon-ai/leon/commit/238d928cace13d4ecd174ca14b136967d8845e0f)
- remove new sponsor link (broken) [skip ci] [254f2848](https://github.com/leon-ai/leon/commit/254f2848aab622b79cce16d10c58d53ff6db9a8f)
- in GitHub BUG.md from modules to skills [4a5480a3](https://github.com/leon-ai/leon/commit/4a5480a3ccc54ee34d42f6edcec2a40224dee7ed)
- change @FluxIndustries sponsorship [skip ci] [1a118b71](https://github.com/leon-ai/leon/commit/1a118b718e5d4ade123756ac94758a01c50b12ae)
- add @FluxIndustries sponsor [skip ci] [9a604d7c](https://github.com/leon-ai/leon/commit/9a604d7ccc0c6aaec257299078141dd0c3077933)
- new #LeonAI link [skip ci] [a0107d62](https://github.com/leon-ai/leon/commit/a0107d629473f7fd057d367926e83822d46f1227)
- changelog new version diff link fix [skip ci] [e14c2498](https://github.com/leon-ai/leon/commit/e14c249826db92af7b85422e566be6aa834a7fb7)
# [1.0.0-beta.6](https://github.com/leon-ai/leon/compare/v1.0.0-beta.5...v1.0.0-beta.6) (2022-02-07) / Leon Over HTTP + Making Friends with Coqui STT
### Features
- simple coqui-ai stt integration [86a4816b](https://github.com/leon-ai/leon/commit/86a4816b777fee8ec9c89648c5866a75de56c017)
- HTTP API key generator [d10a7fa7](https://github.com/leon-ai/leon/commit/d10a7fa7880a0bf2fb1cae7904d1ef4257f05257)
- avoid unnecessary routes generation
- **server:**
- make Coqui STT the default STT solution [70399187](https://github.com/leon-ai/leon/commit/7039918760c0ef7ba93bf45820e3cae774c42d8c)
- add HTTP API key middleware [cdf41499](https://github.com/leon-ai/leon/commit/cdf4149939cbe3f3ae81039957dba3377a78f5a6)
- expose queries over HTTP [b6428d03](https://github.com/leon-ai/leon/commit/b6428d038452619f1682c863892cd8f376efca84)
- add timeout action over HTTP [115f9c16](https://github.com/leon-ai/leon/commit/115f9c164559d761625cc6f362749f7d2417d300)
- handle built-in and trim entities over HTTP + add "disabled" HTTP API action option [82fb967a](https://github.com/leon-ai/leon/commit/82fb967af8f49421e3b2474184da3d34fb17294f)
- execute modules over HTTP [2e5b2c59](https://github.com/leon-ai/leon/commit/2e5b2c59da0bafe3acd966773c6fac3611b3bd0c)
- generate Fastify routes on the file to expose packages over HTTP [5b41713a](https://github.com/leon-ai/leon/commit/5b41713a68ee628e695212dbebc88f6b9a94b461)
### Bug Fixes
- do not ask to regenerate the HTTP API key if this one isn't available yet [d265377a](https://github.com/leon-ai/leon/commit/d265377a43fd4506cf12db46f261b891f2054ed2)
- Python deps tree check [c6c01291](https://github.com/leon-ai/leon/commit/c6c012915824227efdf0c50df6a8f1cd8d70ed42)
- hotword offline (#342) [f563d01d](https://github.com/leon-ai/leon/commit/f563d01d077499c836e94c86f85cedc2ad4d56e6)
- addressed comments by @JRMeyer [b1c6f5c8](https://github.com/leon-ai/leon/commit/b1c6f5c883103d57d4fe566af640fc3ac5ce713d)
- allow to detect STT offline capabilities [04d62288](https://github.com/leon-ai/leon/commit/04d622884165e0bde65785569a659f59cf9e8582)
- Amazon Polly is always configured on check script due to new structure [e6246d1f](https://github.com/leon-ai/leon/commit/e6246d1f8f9ec15a4ebe9600764afffbaa7e62d9)
### Performance Improvements
- check if Python deps tree has been updated before going through deps install [2d0b0f13](https://github.com/leon-ai/leon/commit/2d0b0f1365d8e4d6eadf9f7cc0a16b7b4b4306f4)
# [1.0.0-beta.5](https://github.com/leon-ai/leon/compare/v1.0.0-beta.4...v1.0.0-beta.5) (2021-12-28) / Refocus
_This release marks a major turn in the future versions of the Leon core. Please [read this blog post](https://blog.getleon.ai/i-ran-away-from-open-source/) to know more._
### BREAKING CHANGES
- Node.js 16+ and npm 8+ minimum requirements [2f66f1c1](https://github.com/leon-ai/leon/commit/2f66f1c17bb2e4a1c18b4251d49de252b8d87344)
### Features
- **server:** support arrays on NER between conditions [7cf7f979](https://github.com/leon-ai/leon/commit/7cf7f9791254e1950fe9128ce1b3a58079cc2ada)
### Bug Fixes
- jest-extended new setup due to latest update [02f766d6](https://github.com/leon-ai/leon/commit/02f766d6a8453609ebaec78356aa6e6d4df0967b)
### Performance Improvements
- Windows setup on DeepSpeech dep removal [13f5a49f](https://github.com/leon-ai/leon/commit/13f5a49f678f8f67a93b67d4f558cddcf237e204)
### Documentation Changes
- URL redirect managed by registrar [c16d5b28](https://github.com/leon-ai/leon/commit/c16d5b280b758f7e18305e30678adec79f0a0716)
# [1.0.0-beta.4](https://github.com/leon-ai/leon/compare/1.0.0-beta.2...v1.0.0-beta.4) (2021-05-01) / Getting Rid of Dust
_This release includes a lot of changes that are made under the hood and are not displayed here, please **[read the blog post](https://blog.getleon.ai/getting-rid-of-dust-1-0-0-beta-4/)** to know more._
### BREAKING CHANGES
- **package/checker:** introduce Have I Been Pwned v3 API with API key ([0ca89fe3](https://github.com/leon-ai/leon/commit/0ca89fe32d51c80cec5f9446acf14990390a5917))
- **server:**
- AWS SDK new structure due to v3 and adapt Amazon Polly changes ([f15f2db7](https://github.com/leon-ai/leon/commit/f15f2db78e5781d05e5e2bcb186645966d17debf))
- IBM Watson TTS and STT new structure ([f41ea0e9](https://github.com/leon-ai/leon/commit/f41ea0e9a1479bfd6a1cb2e8d1f70aec744c685b) | [2668c295](https://github.com/leon-ai/leon/commit/2668c295880ee753ef7ca26a91dbc7e0901febff))
### Features
- **package/calendar:** introduce To-Do list module ([0cdd73d6](https://github.com/leon-ai/leon/commit/0cdd73d6c24a287915f691e3b12edacd75fd383a) | [857be947](https://github.com/leon-ai/leon/commit/857be947792c650ac35847e14fc41064008cef24) | [2041be14](https://github.com/leon-ai/leon/commit/2041be14dbc01640a61de96d1982cc20cd05a8b3) | [12e8f5c3](https://github.com/leon-ai/leon/commit/12e8f5c3bfb436aa212557cd99d9926aa431ab4f) | [8575e9e3](https://github.com/leon-ai/leon/commit/8575e9e3ef01499d9f7be6d313a85d48549e9107) | [5e128df0](https://github.com/leon-ai/leon/commit/5e128df023977525de3e66ce2826aace87569308) | [602aa694](https://github.com/leon-ai/leon/commit/602aa694ac49333f48c119cf2ca2aa7f54b8ae44) | [b9693df9](https://github.com/leon-ai/leon/commit/b9693df90cbc01067e18e64db4d377e41b3fd1d4) | [581da8cd](https://github.com/leon-ai/leon/commit/581da8cd9806323aabb0e85778d645df3c0948b9) | [53f7db55](https://github.com/leon-ai/leon/commit/53f7db55c6e916751f1d59c239628d5ea8914009) | [ae073971](https://github.com/leon-ai/leon/commit/ae0739717b6a17373d8f9bc69571c67c1c571b4a))
- **package/checker:** introduce Have I Been Pwned module ([61c1b55a](https://github.com/leon-ai/leon/commit/61c1b55af5691c03f6a6dae0cf3f236a374f1fe7) | [5a999bc6](https://github.com/leon-ai/leon/commit/5a999bc63aa0c667c4e3092daac6a05a6c4b4499) | [36368664](https://github.com/leon-ai/leon/commit/36368664fce8bcf0c17c4c83818aeb418f1e2f23) | [a7a6d885](https://github.com/leon-ai/leon/commit/a7a6d885a83455163eeca74a355177d65db156b8) | [c73ba52b](https://github.com/leon-ai/leon/commit/c73ba52ba8575a64b3329e59a50050d15281d0ec) | [8374e548](https://github.com/leon-ai/leon/commit/8374e5481022de9b134f49180a8dfe28db136261) | [a476fd0f](https://github.com/leon-ai/leon/commit/a476fd0f38f18bf8035db213be2c55f83871038d))
- **package/network:** add speedtest module ([09ad4340](https://github.com/leon-ai/leon/commit/09ad43406d3df8ca65f385a91c159def51f91811))
- **server:**
- add regex entity type [3fda3526](https://github.com/leon-ai/leon/commit/3fda3526c7425bdea4b669474fa77efd61c06a8e)
- catch unsupported action entity type [5bc6c3f1](https://github.com/leon-ai/leon/commit/5bc6c3f116d6b9ece2cc3bebdbdb08f019ee90b9)
- NER backbone [24cf3c9a](https://github.com/leon-ai/leon/commit/24cf3c9a4facd05a4c626ff9d2e7c83a5ae15298)
- introduce actions module [b449376f](https://github.com/leon-ai/leon/commit/b449376f61dc995e2e264c6a14ba123926f5cc58)
### Bug Fixes
- set correct status code for GET /downloads [690f1841](https://github.com/leon-ai/leon/commit/690f1841d681a1e48e1837e3e166228d6c2ddaf6)
- take `.env` in consideration when using Docker [d38e6095](https://github.com/leon-ai/leon/commit/d38e6095f9b71467b8486430fba4bb7007ec4c5a)
- spinner test [9071c927](https://github.com/leon-ai/leon/commit/9071c92790be674687590e4a896bbf44bc26fb43)
- e2e tests by adding modules actions level [5cf77d90](https://github.com/leon-ai/leon/commit/5cf77d9011a80b326f229b2309a6910ac0f1cfa2)
- **package/leon:** fix english translations [90225707](https://github.com/leon-ai/leon/commit/90225707f94154021cadeb9c61bdc48c3de5aa29)
- **package/network:** make use of new compatible speedtest lib [0c925626](https://github.com/leon-ai/leon/commit/0c925626df65858fa039972b3f3d5f38fde93eb6)
- **package/trend:**
- GitHub module new scraping [68414937](https://github.com/leon-ai/leon/commit/6841493740ca859000c1fd8d692b73fc79fcf500)
- when there is no star provided on the GitHub module [563fb409](https://github.com/leon-ai/leon/commit/563fb40955e2deb5c6d0bd064fc9cc8766a6fcaf)
- **server:**
- make use of Basic plugin from the main NLP container [e1d5bed3](https://github.com/leon-ai/leon/commit/e1d5bed3e688db566a0cb803dda5c2d57c599d8c)
- NER trim entity on after conditions [fa6a5a43](https://github.com/leon-ai/leon/commit/fa6a5a43a60b493aa403a44957082382494c129b)
### Documentation Changes
- add minimum Pipenv version requirement to README [72e46bd6](https://github.com/leon-ai/leon/commit/72e46bd6c175a4a149fb6b14522823b224d7c152)
- hunt broken links [b2a22792](https://github.com/leon-ai/leon/commit/b2a2279243e7566b57fb7f696024bdf08294e853)
- add "ci" commit type in CONTRIBUTING.md [09e2672b](https://github.com/leon-ai/leon/commit/09e2672b0b399f5ce9dd7cd446d04f4d6fd7c13a)
- use emojies in README [0ea7a78b](https://github.com/leon-ai/leon/commit/0ea7a78b7c94dc44c992913ae1c90fb1cf8a7692)
- add social badges to README [c55c7532](https://github.com/leon-ai/leon/commit/c55c7532b25bf420c4819be71b0f9c21ccc58711)
- Node.js 14 requirement [d1034bd1](https://github.com/leon-ai/leon/commit/d1034bd135fd5a6314a1571d4088fd85a8e6a1da)
# [1.0.0-beta.2](https://github.com/leon-ai/leon/compare/1.0.0-beta.1...1.0.0-beta.2) (2019-04-24)
### Features
- can send custom HTTP headers
([2685cdab](https://github.com/leon-ai/leon/commit/2685cdab07cc1a9ea418eab812e5163d2dd0da90))
- allow HTML output
- allow HTML output
([ec3f02df](https://github.com/leon-ai/leon/commit/ec3f02dfaf2f4b7623ce350350ebee28cf18740e))
- NLU improvement with node-nlp
- NLU improvement with node-nlp
([6585db71](https://github.com/leon-ai/leon/commit/6585db718ccae1d750a35783075cf61cc8fe84f1))
- **package/trend:**
- add answer when the Product Hunt developer token is not provided
([f40b479b](https://github.com/leon-ai/leon/commit/f40b479b295247c5a8a0e6ed81afe56fadfd2730))
- Product Hunt module done
([37794306](https://github.com/leon-ai/leon/commit/3779430621bef970be0e8d048eb0b4bf160ae8a4))
- basics done on the Product Hunt module
([32cc7dbe](https://github.com/leon-ai/leon/commit/32cc7dbe36592fb9618d9c10da5f05a4be7e41b6))
- complete dedicated answers according to the technology and given time
([8997d691](https://github.com/leon-ai/leon/commit/8997d6917445f837c9647a5a9b4d6998d2df4952))
- GitHub module done
([7c6f3922](https://github.com/leon-ai/leon/commit/7c6f3922f299193ee0fb54d0fc97f8b436fc706b))
- be able to choose a limit and a date range for the GitHub module
([3c088371](https://github.com/leon-ai/leon/commit/3c0883716e1c10371c399843a578095a1e16781d))
- format GitHub results in one message
([9d026b94](https://github.com/leon-ai/leon/commit/9d026b94efa8871d421ae2b593b96622a98537ac))
- simple GitHub module results
([5baec074](https://github.com/leon-ai/leon/commit/5baec07455f453d4ad003f1da360b2663b7e15e0))
- list GitHub trends in HTML raw
([3441629e](https://github.com/leon-ai/leon/commit/3441629e3cde933b322cb114d9f1bc3ef0eb3944) | [6b932e94](https://github.com/leon-ai/leon/commit/6b932e947fc365ea6435fda798b7cca32708b443))
- expressions dataset and structure
([f406a5a0](https://github.com/leon-ai/leon/commit/f406a5a09894e12c56a1e76dda609adada00b0d7) | [f54c2272](https://github.com/leon-ai/leon/commit/f54c2272b4b4dc5c56b512b0ccc1519d77ef15a3))
- **package/trend:**
- add answer when the Product Hunt developer token is not provided
([f40b479b](https://github.com/leon-ai/leon/commit/f40b479b295247c5a8a0e6ed81afe56fadfd2730))
- Product Hunt module done
([37794306](https://github.com/leon-ai/leon/commit/3779430621bef970be0e8d048eb0b4bf160ae8a4))
- basics done on the Product Hunt module
([32cc7dbe](https://github.com/leon-ai/leon/commit/32cc7dbe36592fb9618d9c10da5f05a4be7e41b6))
- complete dedicated answers according to the technology and given time
([8997d691](https://github.com/leon-ai/leon/commit/8997d6917445f837c9647a5a9b4d6998d2df4952))
- GitHub module done
([7c6f3922](https://github.com/leon-ai/leon/commit/7c6f3922f299193ee0fb54d0fc97f8b436fc706b))
- be able to choose a limit and a date range for the GitHub module
([3c088371](https://github.com/leon-ai/leon/commit/3c0883716e1c10371c399843a578095a1e16781d))
- format GitHub results in one message
([9d026b94](https://github.com/leon-ai/leon/commit/9d026b94efa8871d421ae2b593b96622a98537ac))
- simple GitHub module results
([5baec074](https://github.com/leon-ai/leon/commit/5baec07455f453d4ad003f1da360b2663b7e15e0))
- list GitHub trends in HTML raw
([3441629e](https://github.com/leon-ai/leon/commit/3441629e3cde933b322cb114d9f1bc3ef0eb3944) | [6b932e94](https://github.com/leon-ai/leon/commit/6b932e947fc365ea6435fda798b7cca32708b443))
- expressions dataset and structure
([f406a5a0](https://github.com/leon-ai/leon/commit/f406a5a09894e12c56a1e76dda609adada00b0d7) | [f54c2272](https://github.com/leon-ai/leon/commit/f54c2272b4b4dc5c56b512b0ccc1519d77ef15a3))
### Bug Fixes
- Leon was not fully installed with Docker if a `.env` file was existing
- Leon was not fully installed with Docker if a `.env` file was existing
([c8a68ab0](https://github.com/leon-ai/leon/commit/c8a68ab02eec9ddaf803b6e36cd7e91a4989cdea))
- **package/trend:**
- **package/trend:**
when there is no contributor on GitHub module
([d845e49b](https://github.com/leon-ai/leon/commit/d845e49b0f18caeb306e2d399c50a03883b2f55d))
- **server:**
- skip Pipenv locking until they fix it
([029381e3](https://github.com/leon-ai/leon/commit/029381e3256933f37f5c2950c4eb1f0192f55ec6) | [ecfdc73f](https://github.com/leon-ai/leon/commit/ecfdc73f8290dd9e1910df9519095516a1227763))
- **server:**
- skip Pipenv locking until they fix it
([029381e3](https://github.com/leon-ai/leon/commit/029381e3256933f37f5c2950c4eb1f0192f55ec6) | [ecfdc73f](https://github.com/leon-ai/leon/commit/ecfdc73f8290dd9e1910df9519095516a1227763))
### Documentation Changes
- add `What is Leon able to do?` section in the readme
- add `What is Leon able to do?` section in the readme
([87f53c91](https://github.com/leon-ai/leon/commit/87f53c91368141966959f3ad7299bb7b643828a5) | [d558fc8b](https://github.com/leon-ai/leon/commit/d558fc8b7c6494babf5dec799802227f77c33d8a))
- open-source != open source
- open-source != open source
([16a9372e](https://github.com/leon-ai/leon/commit/16a9372e05d4d31a7a39a65a52d4708b72499d4c) | [2155cd88](https://github.com/leon-ai/leon/commit/2155cd88decbbd671bd58840291d9330ce06ebba))
# [1.0.0-beta.1](https://github.com/leon-ai/leon/compare/1.0.0-beta.0...1.0.0-beta.1) (2019-02-24)
### Features
- add Docker support
- add Docker support
([209760db](https://github.com/leon-ai/leon/commit/209760dba747001300692fb6a6af97543de584d6))
### Bug Fixes
- **package/checker:**
- **package/checker:**
isitdown module fails with capital letters in URL
([ada6aaef](https://github.com/leon-ai/leon/commit/ada6aaef4bada47e87d28f9f6eaa05b9e23f58d2))
- **web app:**
- **web app:**
enable environment variables
([a438d6f9](https://github.com/leon-ai/leon/commit/a438d6f942812f74e3dda75a9875609f8bea21cd))
### Performance Improvements
- **web app:**
- **web app:**
favicon compression
([33dbcb42](https://github.com/leon-ai/leon/commit/33dbcb425eaafba90176ff64e5f689eb36bc6ce1))
### Documentation Changes
- update README to make the reader genderless
- update README to make the reader genderless
([58662658](https://github.com/leon-ai/leon/commit/586626586b7a2f84cb2cd84028111976bc5172f0))
- use "to rule them all" in README
- use "to rule them all" in README
([c74dda4c](https://github.com/leon-ai/leon/commit/c74dda4cb9acc78de143ae01fdc6b4ef0a5ec3ef))
- **readme:**
- **readme:**
add story write-up
([08a68e37](https://github.com/leon-ai/leon/commit/08a68e376b6a9367425947380564120943376500))
# [1.0.0-beta.0](https://github.com/leon-ai/leon/compare/https://github.com/leon-ai/leon.git...1.0.0-beta.0) (2019-02-10)
Initial release.
+52 -18
View File
@@ -1,26 +1,60 @@
FROM node:10-alpine
WORKDIR /app
COPY . .
FROM ubuntu:20.04
ENV IS_DOCKER true
# Install system packages
RUN apk add --no-cache \
ca-certificates \
build-base \
python3 \
git \
tzdata
# Replace shell with bash so we can source files
RUN rm /bin/sh && ln -s /bin/bash /bin/sh
# Upgrade pip and install Pipenv
RUN pip3 install --upgrade pip \
&& pip install pipenv
# Set debconf to run non-interactively
RUN echo 'debconf debconf/frontend select Noninteractive' | debconf-set-selections
# Install base dependencies
RUN apt-get update && apt-get install --yes -q --no-install-recommends \
apt-transport-https \
build-essential \
ca-certificates \
curl \
git \
wget \
libssl-dev \
openssl \
libz-dev \
zlib1g-dev \
libbz2-dev \
libreadline-dev \
libsqlite3-dev \
llvm \
libncurses5-dev \
xz-utils \
tk-dev libxml2-dev \
libxmlsec1-dev \
libffi-dev \
liblzma-dev \
libgdbm-dev \
libnss3-dev \
libc6-dev
# Run the container as an unprivileged user
RUN groupadd docker && useradd -g docker -s /bin/bash -m docker
USER docker
WORKDIR /home/docker
# Install Node.js with nvm
ENV NVM_DIR /home/docker/.nvm
ENV NODE_VERSION v16.18.0
RUN curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.2/install.sh | bash
RUN /bin/bash -c "source $NVM_DIR/nvm.sh && nvm install $NODE_VERSION && nvm use --delete-prefix $NODE_VERSION"
ENV NODE_PATH $NVM_DIR/versions/node/$NODE_VERSION/lib/node_modules
ENV PATH $NVM_DIR/versions/node/$NODE_VERSION/bin:$PATH
# Install Leon
# Need to explicitly run the npm preinstall and npm posinstall scripts
# because npm tries to downgrade its privileges, and these scripts are not executed
RUN npm run preinstall
WORKDIR /home/docker/leon
USER root
RUN chown -R docker /home/docker/leon
USER docker
COPY --chown=docker ./ ./
RUN npm install
RUN npm run postinstall
RUN npm run build
# Let's run it
CMD ["npm", "start"]
+1 -1
View File
@@ -1,6 +1,6 @@
MIT License
Copyright (c) 2019-present, Louis Grenard <louis.grenard@gmail.com>
Copyright (c) 2019-present, Louis Grenard <louis@getleon.ai>
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
+170 -58
View File
@@ -1,33 +1,82 @@
<p align="center">
<a href="https://getleon.ai"><img width="96" src="https://getleon.ai/img/logo.svg"></a><br><br>
<a href="https://www.youtube.com/watch?v=p7GRGiicO1c"><img width="512" src="https://getleon.ai/img/1.0.0-beta.0_preview_en.png"></a><br>
<a href="https://getleon.ai"><img width="800" src="https://getleon.ai/img/hero-animation.gif" /></a>
</p>
<h1 align="center">Leon</h1>
<h1 align="center">
<a href="https://getleon.ai"><img width="96" src="https://getleon.ai/img/logo.svg" alt="Leon"></a><br>
Leon
</h1>
*<p align="center">Your open-source personal assistant.</p>*
_<p align="center">Your open-source personal assistant.</p>_
<p align="center">
<a href="https://github.com/leon-ai/leon/blob/develop/LICENSE.md"><img src="https://img.shields.io/badge/license-MIT-blue.svg?style=flat"/></a>
<a href="https://circleci.com/gh/leon-ai/leon/tree/develop"><img src="https://img.shields.io/circleci/project/github/leon-ai/leon.svg?style=flat"/></a>
<a href="https://github.com/leon-ai/leon/blob/develop/.github/CONTRIBUTING.md"><img src="https://img.shields.io/badge/PRs-welcome-brightgreen.svg?style=flat"/></a>
<a href="https://github.com/leon-ai/leon/blob/develop/LICENSE.md"><img src="https://img.shields.io/badge/license-MIT-blue.svg?label=License&style=flat" /></a>
<a href="https://github.com/leon-ai/leon/blob/develop/.github/CONTRIBUTING.md"><img src="https://img.shields.io/badge/PRs-welcome-brightgreen.svg?style=flat" /></a>
<br>
<a href="https://github.com/leon-ai/leon/actions/workflows/build.yml"><img src="https://github.com/leon-ai/leon/actions/workflows/build.yml/badge.svg?branch=develop" /></a>
<a href="https://github.com/leon-ai/leon/actions/workflows/tests.yml"><img src="https://github.com/leon-ai/leon/actions/workflows/tests.yml/badge.svg?branch=develop" /></a>
<a href="https://github.com/leon-ai/leon/actions/workflows/lint.yml"><img src="https://github.com/leon-ai/leon/actions/workflows/lint.yml/badge.svg?branch=develop" /></a>
<br>
<a href="https://discord.gg/MNQqqKg"><img src="https://svgshare.com/i/V09.svg"/></a>
</p>
<p align="center">
<a href="https://getleon.ai">Website</a> ::
<a href="https://docs.getleon.ai">Documentation</a> ::
<a href="https://roadmap.getleon.ai">Roadmap</a> ::
<a href="http://roadmap.getleon.ai">Roadmap</a> ::
<a href="https://github.com/leon-ai/leon/blob/develop/.github/CONTRIBUTING.md">Contributing</a> ::
<a href="https://blog.getleon.ai/the-story-behind-leon/">Story</a>
</p>
---
## Introduction
## Current State
Leon is an **open-source personal assistant** who can live **on your server**.
### Why is there a small amount of contributors?
He **does stuff** when you **ask him for**.
I'm taking a lot of time to work on the new core of Leon due to personal reasons. I can only work on it after work and on weekends. Hence, **I'm blocking any potential contribution as the whole core of Leon is coming with many breaking changes**. Many of you are willing to contribute in Leon (create new skills, help to improve the core, translations and so on...), a big thanks to every one of you!
I wish one day I could work on Leon full time, but it's not possible at the moment as I need to pay my bills. I have some ideas about how to monetize Leon in the future (Leon's core will always remain open source), but before to get there there is still a long way to go.
Until then, any financial support by [sponsoring Leon](http://sponsor.getleon.ai) is much appreciated 🙂
### How about large language models and Leon?
Since AI gained in popularity and large language models are getting more and more traction, many of you joined our community. A huge welcome to all of you! 🤗
At the moment, Leon's NLU will remain intents first with his own model without relying on an LLM. It is important that Leon can run 100% offline and I'm confident that with the downsizing techniques such as quantization Leon will sooner or later work with LLMs at his core and still be able to run on edge.
Here is how LLMs may help Leon in the future:
- Intent fallback: when an utterance cannot match an intent, then rely on an LLM to provide results.
- New named entity recognition engine: provide a better solution to extract entities from utterances such as fruits, numbers, cities, durations, persons, etc.
- Skill features: let skills leverage LLMs to provide out-of-the-box NLP features such as summarization, translation, sentiment analysis and so on...
- Skill building: LLMs can help to develop skills such as paraphrasing utterance samples, translate answers, convert code from our Python bridge to the upcoming JavaScript bridge and vice versa, etc.
- More...
### What's Next?
Once the new core released, we'll work on the community aspect of Leon. For example, better organize [our Discord](https://discord.gg/MNQqqKg), planify regular calls, work on skills together, etc. It is very important for Leon to have a real community. At that moment, the skills platform will already be online, so it'll be easier to sync our progress and publish new skills.
- Feel free to check out the Git development branches and our [next major milestones](https://blog.getleon.ai/a-much-better-nlp-and-future-1-0-0-beta-7/#whats-next).
- And the [detailed roadmap](http://roadmap.getleon.ai).
- Many exciting things are coming up, hence no new documentation and test are going to be written until the official release of Leon.
---
## Latest Release
Check out the [latest release blog post](https://blog.getleon.ai/binaries-and-typescript-rewrite-1-0-0-beta-8/).
<a href="https://blog.getleon.ai/binaries-and-typescript-rewrite-1-0-0-beta-8/"><img width="400" src="https://blog.getleon.ai/static/a0d1cbafd1968e7531dc17e229f8cc61/aa440/beta-8.png" /></a>
---
## 👋 Introduction
**Leon** is an **open-source personal assistant** who can live **on your server**.
He **does stuff** when you **ask him to**.
You can **talk to him** and he can **talk to you**.
You can also **text him** and he can also **text you**.
@@ -36,10 +85,10 @@ If you want to, Leon can communicate with you by being **offline to protect your
### Why?
> 1. If you are a developer (or not), you may want to build many things that could help in your daily life.
> Instead of building a dedicated project for each of those ideas, Leon can help you with his
> packages/modules (skills) structure.
> 2. With this generic structure, everyone can create their own modules and share them with others.
> Therefore there is only one core (to rule them all).
> Instead of building a dedicated project for each of those ideas, Leon can help you with his
> Skills structure.
> 2. With this generic structure, everyone can create their own skills and share them with others.
> Therefore there is only one core (to rule them all).
> 3. Leon uses AI concepts, which is cool.
> 4. Privacy matters, you can configure Leon to talk with him offline. You can already text with him without any third party services.
> 5. Open source is great.
@@ -47,26 +96,34 @@ If you want to, Leon can communicate with you by being **offline to protect your
### What is this repository for?
> This repository contains the following nodes of Leon:
>
> - The server
> - The packages/modules
> - Skills
> - The web app
> - The hotword node
> - The TCP server (for inter-process communication between Leon and third-party nodes such as spaCy)
> - The Python bridge (the connector between the core and skills made with Python)
### What is Leon able to do?
> Today, the most interesting part is about his core and the way he can scale up. He is pretty young but can easily scale to have new features (packages/modules).
> You can find what he is able to do by browsing the [packages list](https://github.com/leon-ai/leon/tree/develop/packages).
> Today, the most interesting part is about his core and the way he can scale up. He is pretty young but can easily scale to have new features (skills).
> You can find what he is able to do by browsing the [skills list](https://github.com/leon-ai/leon/tree/develop/skills).<br>
> Please do know that after the official release, we will build many skills along with the community. Feel free to [join us on Discord](https://discord.gg/MNQqqKg) to be part of the journey.
Sounds good for you? Then let's get started!
Sounds good to you? Then let's get started!
## Getting Started
## ☁️ Try with a Single-Click
Gitpod will automatically set up an environment and run an instance for you.
[![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/#https://github.com/leon-ai/leon)
## 🚀 Getting Started
### Prerequisites
- [Node.js](https://nodejs.org/) >= 10
- npm >= 5
- [Python](https://www.python.org/downloads/) 3.6.x
- [Pipenv](https://docs.pipenv.org)
- [Node.js](https://nodejs.org/) >= 16
- [npm](https://npmjs.com/) >= 8
- Supported OSes: Linux, macOS and Windows
To install these prerequisites, you can follow the [How To section](https://docs.getleon.ai/how-to/) of the documentation.
@@ -74,28 +131,22 @@ To install these prerequisites, you can follow the [How To section](https://docs
### Installation
```sh
# Clone the repository (stable branch)
git clone -b master https://github.com/leon-ai/leon.git leon
# OR download the latest release at: https://github.com/leon-ai/leon/releases/latest
# Install the Leon CLI
npm install --global @leon-ai/cli
# Go to the project root
cd leon
# Install
npm install
# Install Leon (stable branch)
leon create birth
# OR install from the develop branch: leon create birth --develop
```
### Usage
```sh
# Check the setup went well
npm run check
# Build
npm run build
leon check
# Run
npm start
leon start
# Go to http://localhost:1337
# Hooray! Leon is running
@@ -104,52 +155,113 @@ npm start
### Docker Installation
```sh
# Build
npm run docker:build
# Install Leon
leon create birth --docker
# Run
npm run docker:run
# Run
leon start
# Go to http://localhost:1337
# Hooray! Leon is running
```
## Documentation
## 📚 Documentation
For full documentation, visit [docs.getleon.ai](https://docs.getleon.ai).
## Roadmap
## 📺 Video
To know what is going on, follow [roadmap.getleon.ai](https://roadmap.getleon.ai).
[Watch a demo](https://www.youtube.com/watch?v=p7GRGiicO1c).
## Contributing
## 🧭 Roadmap
To know what is going on, follow [roadmap.getleon.ai](http://roadmap.getleon.ai).
## ❤️ Contributing
If you have an idea for improving Leon, do not hesitate.
**Leon needs open source to live**, the more modules he has, the more skillful he becomes.
**Leon needs open source to live**, the more skills he has, the more skillful he becomes.
## The Story Behind Leon
## 📖 The Story Behind Leon
You'll find a write-up on this [blog post](https://blog.getleon.ai/the-story-behind-leon/).
## Stay Tuned
- [Newsletter](https://getleon.ai)
## 🔔 Stay Tuned
- [Twitter](https://twitter.com/grenlouis)
- [Newsletter](https://newsletter.getleon.ai/subscription/form)
- [Blog](https://blog.getleon.ai)
- [GitHub issues](https://github.com/leon-ai/leon/issues)
- [Twitter](https://twitter.com/louistiti_fr)
- [#LeonAI](https://twitter.com/hashtag/LeonAI)
- [YouTube](https://www.youtube.com/channel/UCW6mk6j6nQUzFYY97r47emQ)
- [#LeonAI](<https://twitter.com/search?f=live&q=%23LeonAI%20(from%3Agrenlouis%20OR%20from%3Alouistiti_fr)&src=typed_query>)
## Author
**Louis Grenard** ([@louistiti_fr](https://twitter.com/louistiti_fr))
## 👨 Author
## Donate
**Louis Grenard** ([@grenlouis](https://twitter.com/grenlouis))
You can also contribute by [buying me a fruit juice](https://donate.getleon.ai).
## 👍 Sponsors
<table>
<tbody>
<tr>
<td align="center" valign="middle" width="128">
<a href="https://github.com/Appwrite">
<img src="https://github.com/Appwrite.png?size=128" />
Appwrite
</a><br>
<sub><sup>250 USD / month</sup></sub>
</td>
<td align="center" valign="middle" width="128">
<img src="https://getleon.ai/img/anonymous.svg" width="128" />
Anonymous
<br>
<sub><sup>100 USD / month</sup></sub>
</td>
<td align="center" valign="middle" width="128">
<a href="https://github.com/herbundkraut">
<img src="https://github.com/herbundkraut.png?size=128" />
herbundkraut
</a><br>
<sub><sup>10 USD / month</sup></sub>
</td>
<td align="center" valign="middle" width="128">
<a href="http://sponsor.getleon.ai/">
You?
</a>
</td>
</tr>
</tbody>
</table>
You can also contribute by [sponsoring Leon](http://sponsor.getleon.ai).
Please note that I dedicate most of my free time to Leon.
By sponsoring the project you make the project sustainable and faster to develop features.
The focus is not only limited to the activity you see on GitHub but also a lot of thinking about the direction of the project. Which is naturally related to the overall design, architecture, vision, learning process and so on...
### Special Thanks
<a href="https://vercel.com/?utm_source=leon-ai&utm_campaign=oss">
<img src="https://i.imgur.com/S5olXWh.png" alt="Vercel" width="128" />
</a>
&nbsp; &nbsp; &nbsp;
<a href="https://www.macstadium.com/">
<img src="https://getleon.ai/img/thanks/mac-stadium.svg" alt="MacStadium" width="128" />
</a>
&nbsp; &nbsp; &nbsp;
<a href="https://www.aoz.studio">
<img src="https://getleon.ai/_next/image?url=%2Fimg%2Fthanks%2Faoz-studio.png&w=384&q=75" alt="AOZ Studio" width="128" />
</a>
## 📝 License
## License
[MIT License](https://github.com/leon-ai/leon/blob/develop/LICENSE.md)
Copyright (c) 2019-present, Louis Grenard <louis.grenard@gmail.com>
Copyright (c) 2019-present, Louis Grenard <louis@getleon.ai>
## Cheers!
![Cheers!](https://assets-cdn.github.com/images/icons/emoji/unicode/1f37b.png?v6 "Cheers!")
![Cheers!](https://github.githubassets.com/images/icons/emoji/unicode/1f379.png 'Cheers!')
-49
View File
@@ -1,49 +0,0 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<link rel="stylesheet" href="css/style.css">
<link rel="icon" type="image/png" href="img/favicon.png">
<title>Leon</title>
</head>
<body class="settingup">
<main>
<div id="feed">
<p id="no-bubble" class="hide">
You can start to interact with Leon, don't be shy.
</p>
</div>
<div id="is-typing">
<div class="circle"></div>
<div class="circle"></div>
<div class="circle"></div>
</div>
<div id="input-container">
<div id="mic-container">
<button></button>
<div id="sonar"></div>
</div>
<label for="query"></label>
<input type="text" id="query" autocomplete="off" autofocus>
<small>
Use <kbd></kbd> <kbd></kbd> to browse history;
<kbd></kbd> to submit;
<kbd>alt + t to listen.</kbd>
</small>
</div>
</main>
<footer>
<div id="logo"></div>
<div id="version">
<small>v</small>
</div>
<div id="logger">
<small class="italic">
<a href="https://docs.getleon.ai/collaborative-logger.html" target="_blank">Collaborative logger</a>
</small>
</div>
</footer>
<script src="vendor/socket.io/2.0.3/socket.io.js"></script>
<script src="js/main.js"></script>
</body>
</html>
-103
View File
@@ -1,103 +0,0 @@
'use strict'
import Chatbot from './chatbot.es6'
export default class Client {
constructor (client, host, port, input, res) {
this.client = client
this.host = host
this.port = port
this._input = input
this.socket = io.connect(`http://${this.host}:${this.port}`)
this.history = localStorage.getItem('history')
this.parsedHistory = []
this.info = res
this.chatbot = new Chatbot()
}
set input (newInput) {
if (typeof newInput !== 'undefined') {
this._input.value = newInput
}
}
init (config) {
this.chatbot.init()
this.socket.on('connect', () => {
this.socket.emit('init', this.client)
})
this.socket.on('answer', (data) => {
this.chatbot.receivedFrom('leon', data)
})
this.socket.on('is-typing', (data) => {
this.chatbot.isTyping('leon', data)
})
this.socket.on('recognized', (data, cb) => {
this._input.value = data
this.send('query')
cb('string-received')
})
this.socket.on('audio-forwarded', (data, cb) => {
const ctx = new AudioContext()
const source = ctx.createBufferSource()
ctx.decodeAudioData(data, (buffer) => {
source.buffer = buffer
source.connect(ctx.destination)
source.start(0)
})
cb('audio-received')
})
this.socket.on('download', (data) => {
window.location = `http://${config.server_host}:${config.server_port}/v1/downloads?package=${data.package}&module=${data.module}`
})
if (this.history !== null) {
this.parsedHistory = JSON.parse(this.history)
}
}
send (keyword) {
if (this._input.value !== '') {
this.socket.emit(keyword, { client: this.client, value: this._input.value.trim() })
this.chatbot.sendTo('leon', this._input.value)
this.save()
return true
}
return false
}
save () {
let val = this._input.value
if (localStorage.getItem('history') === null) {
localStorage.setItem('history', JSON.stringify([]))
this.parsedHistory = JSON.parse(localStorage.getItem('history'))
} else if (this.parsedHistory.length >= 32) {
this.parsedHistory.shift()
}
if (val[0] === ' ') {
val = val.substr(1, val.length - 1)
}
if (this.parsedHistory[this.parsedHistory.length - 1] !== val) {
this.parsedHistory.push(val)
localStorage.setItem('history', JSON.stringify(this.parsedHistory))
}
this._input.value = ''
}
}
-26
View File
@@ -1,26 +0,0 @@
'use strict'
import EventEmitter from 'events'
export default class Loader {
constructor () {
this.load = new EventEmitter()
this.body = document.querySelector('body')
this.load.on('settingup', (state) => {
if (state === true) {
this.body.classList.add('settingup')
} else {
this.body.classList.remove('settingup')
}
})
}
start () {
this.load.emit('settingup', true)
}
stop () {
this.load.emit('settingup', false)
}
}
-163
View File
@@ -1,163 +0,0 @@
'use strict'
import request from 'superagent'
import Loader from './loader.es6'
import Client from './client.es6'
import Recorder from './recorder.es6'
import listener from './listener.es6'
import { onkeydowndocument, onkeydowninput } from './onkeydown.es6'
const config = {
app: 'webapp',
server_host: process.env.LEON_SERVER_HOST,
server_port: process.env.LEON_SERVER_PORT,
min_decibels: -40, // Noise detection sensitivity
max_blank_time: 1000 // Maximum time to consider a blank (ms)
}
document.addEventListener('DOMContentLoaded', () => {
const loader = new Loader()
loader.start()
request.get(`http://${config.server_host}:${config.server_port}/v1/info`)
.end((err, res) => {
if (err || !res.ok) {
console.error(err.response.error.message)
} else {
const input = document.querySelector('#query')
const mic = document.querySelector('button')
const v = document.querySelector('#version small')
const logger = document.querySelector('#logger small')
const client = new Client(config.app, config.server_host,
config.server_port, input, res.body)
let rec = { }
let chunks = []
let enabled = false
let hotwordTriggered = false
let autoStartedAfterTalk = false
let noiseDetected = false
let countSilenceAfterTalk = 0
let sLogger = ' enabled, thank you.'
v.innerHTML += client.info.version
if (client.info.logger === false) {
sLogger = ' disabled.'
}
logger.innerHTML += sLogger
client.init(config)
if (navigator.mediaDevices && navigator.mediaDevices.getUserMedia) {
navigator.mediaDevices.getUserMedia({ audio: true }).then((stream) => {
if (MediaRecorder) {
rec = new Recorder(stream, mic, client.info)
rec.ondataavailable((e) => {
chunks.push(e.data)
})
rec.onstart(() => { /* */ })
rec.onstop(() => {
const blob = new Blob(chunks)
chunks = []
enabled = false
// Ensure there are some data
if (blob.size >= 1000) {
client.socket.emit('recognize', blob)
}
})
listener.listening(stream, config.min_decibels, config.max_blank_time, () => {
// Noise detected
noiseDetected = true
}, () => {
// Noise ended
noiseDetected = false
if (enabled === true && hotwordTriggered === false) {
rec.stop()
enabled = false
hotwordTriggered = false
countSilenceAfterTalk = 0
if (client.info.after_speech === true) {
// Auto enable recording after talk
setTimeout(() => {
rec.start(false)
enabled = true
autoStartedAfterTalk = true
}, 500)
}
}
})
if (client.info.after_speech === true) {
setInterval(() => {
// If record after talk has started
if (autoStartedAfterTalk === true && countSilenceAfterTalk <= 3) {
// Stop recording if there was no noise for 3 seconds
if (countSilenceAfterTalk === 3) {
rec.stop(false)
enabled = false
autoStartedAfterTalk = false
countSilenceAfterTalk = 0
} else if (noiseDetected === false) {
countSilenceAfterTalk += 1
}
}
}, 1000)
}
client.socket.on('enable-record', () => {
hotwordTriggered = true
rec.start()
setTimeout(() => { hotwordTriggered = false }, config.max_blank_time)
enabled = true
})
} else {
console.error('MediaRecorder is not supported on your browser.')
}
}).catch((err) => {
console.error('MediaDevices.getUserMedia() threw the following error:', err)
})
} else {
console.error('MediaDevices.getUserMedia() is not supported on your browser.')
}
loader.stop()
document.addEventListener('keydown', (e) => {
onkeydowndocument(e, () => {
if (enabled === false) {
input.value = ''
rec.start()
enabled = true
} else {
rec.stop()
enabled = false
}
})
})
input.addEventListener('keydown', (e) => {
onkeydowninput(e, client)
})
mic.addEventListener('click', (e) => {
e.preventDefault()
if (enabled === false) {
rec.start()
enabled = true
} else {
rec.stop()
enabled = false
}
})
}
})
})
+166 -52
View File
@@ -1,18 +1,84 @@
@import url(https://fonts.googleapis.com/css?family=Open+Sans:400,600,700,800);
html, body, div, span, applet, object, iframes,
h1, h2, h3, h4, h5, h6, p, blockquote, pre,
a, abbr, acronym, address, big, cite, code,
del, dfn, em, img, ins, kbd, q, s, samp,
small, strike, sub, sup, tt, var,
u, i, center,
dl, dt, dd, ol, ul, li,
fieldset, form, label, legend,
table, caption, tbody, tfoot, thead, tr, th, td,
article, aside, canvas, details, embed,
figure, figcaption, footer, header, hgroup,
menu, nav, output, ruby, section, summary,
time, mark, audio, video {
html,
body,
div,
span,
applet,
object,
iframes,
h1,
h2,
h3,
h4,
h5,
h6,
p,
blockquote,
pre,
a,
abbr,
acronym,
address,
big,
cite,
code,
del,
dfn,
em,
img,
ins,
kbd,
q,
s,
samp,
small,
strike,
sub,
sup,
tt,
var,
u,
i,
center,
dl,
dt,
dd,
ol,
ul,
li,
fieldset,
form,
label,
legend,
table,
caption,
tbody,
tfoot,
thead,
tr,
th,
td,
article,
aside,
canvas,
details,
embed,
figure,
figcaption,
footer,
header,
hgroup,
menu,
nav,
output,
ruby,
section,
summary,
time,
mark,
audio,
video {
margin: 0;
padding: 0;
border: 0;
@@ -21,17 +87,29 @@ time, mark, audio, video {
vertical-align: baseline;
}
article, aside, details, figcaption, figure,
footer, header, hgroup, menu, nav, section {
article,
aside,
details,
figcaption,
figure,
footer,
header,
hgroup,
menu,
nav,
section {
display: block;
}
blockquote, q {
blockquote,
q {
quotes: none;
}
blockquote:before, blockquote:after,
q:before, q:after {
blockquote:before,
blockquote:after,
q:before,
q:after {
content: '';
content: none;
}
@@ -46,18 +124,29 @@ table {
outline: none;
}
:root {
--black-color: #000;
--light-black-color: #222426;
--white-color: #fff;
--grey-color: #323739;
}
a {
color: inherit;
}
ul li {
margin-left: 20px;
}
body {
color: #FFF;
background-color: #151718;
color: var(--white-color);
background-color: var(--black-color);
font-family: 'Open Sans', sans-serif;
font-weight: 400;
}
body > * {
transition: opacity .5s;
transition: opacity 0.5s;
}
body.settingup > * {
opacity: 0;
@@ -72,14 +161,14 @@ body.settingup::after {
left: 50%;
transform: translate(-50%, -50%);
border-radius: 50%;
animation: scaleout .6s infinite ease-in-out;
animation: scaleout 0.6s infinite ease-in-out;
}
@keyframes scaleout {
0% {
transform: scale(0);
}
100% {
transform: scale(1.0);
transform: scale(1);
opacity: 0;
}
}
@@ -103,10 +192,10 @@ footer {
input {
text-align: center;
color: #FFF;
color: var(--white-color);
width: 100%;
border: none;
border-bottom: 2px solid #FFF;
border-bottom: 2px solid var(--grey-color);
background: none;
font-weight: 400;
font-size: 4em;
@@ -114,8 +203,8 @@ input {
}
small {
color: #FFF;
font-size: .7em;
color: var(--white-color);
font-size: 0.7em;
}
.hide {
@@ -135,14 +224,14 @@ small {
top: 10%;
height: 50%;
overflow-y: auto;
border: 2px solid #FFF;
border: 2px solid var(--grey-color);
border-radius: 12px;
}
#feed::-webkit-scrollbar {
width: 6px;
}
#feed::-webkit-scrollbar-thumb {
background-color: rgba(255, 255, 255, .2);
background-color: rgba(255, 255, 255, 0.2);
border-radius: 12px;
}
@@ -157,7 +246,7 @@ small {
padding: 0 8px;
opacity: 0;
margin-top: 20px;
transition: opacity .3s;
transition: opacity 0.3s;
}
#is-typing.on {
opacity: 1;
@@ -168,20 +257,20 @@ small {
border-radius: 50%;
width: 10px;
height: 10px;
background-color: #FFF;
background-color: var(--white-color);
transform: scale(1);
}
#is-typing .circle:nth-child(1) {
animation: typing .2s linear infinite alternate;
background-color: #0071F0;
animation: typing 0.2s linear infinite alternate;
background-color: #0071f0;
}
#is-typing .circle:nth-child(2) {
animation: typing .2s .2s linear infinite alternate;
background-color: #FFF;
animation: typing 0.2s 0.2s linear infinite alternate;
background-color: var(--white-color);
}
#is-typing .circle:nth-child(3) {
animation: typing .2s linear infinite alternate;
background-color: #EC297A;
animation: typing 0.2s linear infinite alternate;
background-color: #ec297a;
}
@keyframes typing {
100% {
@@ -207,16 +296,16 @@ small {
word-break: break-word;
text-align: left;
opacity: 0;
animation: fadeIn .2s ease-in forwards;
animation: fadeIn 0.2s ease-in forwards;
}
#feed .me .bubble {
background-color: #1C75DB;
color: #FFF;
background-color: #1c75db;
color: var(--white-color);
right: 0;
}
#feed .leon .bubble {
background-color: #EEE;
color: #151718;
background-color: var(--light-black-color);
color: var(--white-color);
}
@keyframes fadeIn {
100% {
@@ -224,10 +313,35 @@ small {
}
}
#suggestions-container {
position: absolute;
z-index: 10;
width: 100%;
bottom: 36%;
display: flex;
justify-content: flex-end;
column-gap: 8px;
overflow-x: auto;
}
.suggestion {
border: 1px solid var(--white-color);
background-color: transparent;
color: var(--white-color);
border-radius: 8px;
padding: 2px 8px;
font-size: inherit;
cursor: pointer;
transition: background-color 0.2s, color 0.2s;
}
.suggestion:hover {
color: var(--black-color);
background-color: var(--white-color);
}
#input-container {
position: absolute;
width: 100%;
bottom: 25%;
bottom: 22%;
}
#mic-container {
@@ -240,7 +354,7 @@ small {
font-style: italic;
}
button {
#mic-button {
position: absolute;
border: none;
cursor: pointer;
@@ -250,22 +364,22 @@ button {
background-color: #888;
-webkit-mask-image: url(../img/mic.svg);
mask-image: url(../img/mic.svg);
transition: background-color .2s;
transition: background-color 0.2s;
}
button:not(.enabled) {
#mic-button:not(.enabled) {
margin-left: -26px;
}
button:hover {
background-color: #FFF;
#mic-button:hover {
background-color: var(--white-color);
}
button.enabled {
background-color: #00E676;
#mic-button.enabled {
background-color: #00e676;
}
button.enabled + #sonar {
#mic-button.enabled + #sonar {
width: 26px;
height: 26px;
border-radius: 50%;
opacity: .3;
opacity: 0.3;
background-color: #575757;
pointer-events: none;
animation: sonar 1.3s linear infinite;

Before

Width:  |  Height:  |  Size: 11 KiB

After

Width:  |  Height:  |  Size: 11 KiB

Before

Width:  |  Height:  |  Size: 7.6 KiB

After

Width:  |  Height:  |  Size: 7.6 KiB

Before

Width:  |  Height:  |  Size: 772 B

After

Width:  |  Height:  |  Size: 772 B

+52
View File
@@ -0,0 +1,52 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8" />
<link rel="stylesheet" href="/css/style.css" />
<link rel="icon" type="image/png" href="/img/favicon.png" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Leon</title>
</head>
<body class="settingup">
<main>
<div id="feed">
<p id="no-bubble" class="hide">
You can start to interact with Leon, don't be shy.
</p>
</div>
<div id="suggestions-container"></div>
<div id="is-typing">
<div class="circle"></div>
<div class="circle"></div>
<div class="circle"></div>
</div>
<div id="input-container">
<div id="mic-container">
<button id="mic-button"></button>
<div id="sonar"></div>
</div>
<label for="utterance"></label>
<input type="text" id="utterance" autocomplete="off" autofocus />
<small>
Use <kbd></kbd> <kbd></kbd> to browse history; <kbd></kbd> to
submit;
<kbd>alt + c to listen.</kbd>
</small>
</div>
</main>
<footer>
<div id="logo"></div>
<div id="version">
<small>v</small>
</div>
<div id="discord">
<small class="italic">
<a href="https://discord.gg/MNQqqKg" target="_blank"
>Join us on Discord</a
>
</small>
</div>
</footer>
<script type="module" src="/js/main.js"></script>
</body>
</html>
+21 -25
View File
@@ -1,10 +1,6 @@
'use strict'
import EventEmitter from 'events'
export default class Chatbot {
constructor () {
this.em = new EventEmitter()
constructor() {
this.et = new EventTarget()
this.feed = document.querySelector('#feed')
this.typing = document.querySelector('#is-typing')
this.noBubbleMessage = document.querySelector('#no-bubble')
@@ -12,34 +8,34 @@ export default class Chatbot {
this.parsedBubbles = JSON.parse(this.bubbles)
}
async init () {
async init() {
await this.loadFeed()
this.scrollDown()
this.em.on('to-leon', (string) => {
this.createBubble('me', string)
this.et.addEventListener('to-leon', (event) => {
this.createBubble('me', event.detail)
})
this.em.on('me-received', (string) => {
this.createBubble('leon', string)
this.et.addEventListener('me-received', (event) => {
this.createBubble('leon', event.detail)
})
}
sendTo (who, string) {
sendTo(who, string) {
if (who === 'leon') {
this.em.emit('to-leon', string)
this.et.dispatchEvent(new CustomEvent('to-leon', { detail: string }))
}
}
receivedFrom (who, string) {
receivedFrom(who, string) {
if (who === 'leon') {
this.em.emit('me-received', string)
this.et.dispatchEvent(new CustomEvent('me-received', { detail: string }))
}
}
isTyping (who, value) {
isTyping(who, value) {
if (who === 'leon') {
if (value === true) {
if (value) {
this.enableTyping()
} else if (value === false) {
this.disableTyping()
@@ -47,23 +43,23 @@ export default class Chatbot {
}
}
enableTyping () {
enableTyping() {
if (!this.typing.classList.contains('on')) {
this.typing.classList.add('on')
}
}
disableTyping () {
disableTyping() {
if (this.typing.classList.contains('on')) {
this.typing.classList.remove('on')
}
}
scrollDown () {
scrollDown() {
this.feed.scrollTo(0, this.feed.scrollHeight)
}
loadFeed () {
loadFeed() {
return new Promise((resolve) => {
if (this.parsedBubbles === null || this.parsedBubbles.length === 0) {
this.noBubbleMessage.classList.remove('hide')
@@ -76,7 +72,7 @@ export default class Chatbot {
this.createBubble(bubble.who, bubble.string, false)
if ((i + 1) === this.parsedBubbles.length) {
if (i + 1 === this.parsedBubbles.length) {
setTimeout(() => {
resolve()
}, 100)
@@ -86,7 +82,7 @@ export default class Chatbot {
})
}
createBubble (who, string, save = true) {
createBubble(who, string, save = true) {
const container = document.createElement('div')
const bubble = document.createElement('p')
@@ -96,12 +92,12 @@ export default class Chatbot {
this.feed.appendChild(container).appendChild(bubble)
if (save === true) {
if (save) {
this.saveBubble(who, string)
}
}
saveBubble (who, string) {
saveBubble(who, string) {
if (!this.noBubbleMessage.classList.contains('hide')) {
this.noBubbleMessage.classList.add('hide')
}
+179
View File
@@ -0,0 +1,179 @@
import { io } from 'socket.io-client'
import Chatbot from './chatbot'
export default class Client {
constructor(client, serverUrl, input, res) {
this.client = client
this._input = input
this._suggestionContainer = document.querySelector('#suggestions-container')
this.serverUrl = serverUrl
this.socket = io(this.serverUrl)
this.history = localStorage.getItem('history')
this.parsedHistory = []
this.info = res
this.chatbot = new Chatbot()
this._recorder = {}
this._suggestions = []
}
set input(newInput) {
if (typeof newInput !== 'undefined') {
this._input.value = newInput
}
}
set recorder(recorder) {
this._recorder = recorder
}
get recorder() {
return this._recorder
}
init(loader) {
this.chatbot.init()
this.socket.on('connect', () => {
this.socket.emit('init', this.client)
})
this.socket.on('ready', () => {
loader.stop()
})
this.socket.on('answer', (data) => {
this.chatbot.receivedFrom('leon', data)
})
this.socket.on('suggest', (data) => {
data?.forEach((suggestionText) => {
this.addSuggestion(suggestionText)
})
})
this.socket.on('is-typing', (data) => {
this.chatbot.isTyping('leon', data)
})
this.socket.on('recognized', (data, cb) => {
this._input.value = data
this.send('utterance')
cb('string-received')
})
this.socket.on('audio-forwarded', (data, cb) => {
const ctx = new AudioContext()
const source = ctx.createBufferSource()
ctx.decodeAudioData(data.buffer, (buffer) => {
source.buffer = buffer
source.connect(ctx.destination)
source.start(0)
/**
* When the after speech option is enabled and
* the answer is a final one
*/
if (this.info.after_speech && data.is_final_answer) {
// Enable recording after the speech + 500ms
setTimeout(() => {
this._recorder.start()
this._recorder.enabled = true
// Check every second if the recorder is enabled to stop it
const id = setInterval(() => {
if (this._recorder.enabled) {
if (this._recorder.countSilenceAfterTalk <= 8) {
// Stop recording if there was no noise for 8 seconds
if (this._recorder.countSilenceAfterTalk === 8) {
this._recorder.stop()
this._recorder.enabled = false
this._recorder.countSilenceAfterTalk = 0
clearInterval(id)
} else if (!this._recorder.noiseDetected) {
this._recorder.countSilenceAfterTalk += 1
} else {
clearInterval(id)
}
}
}
}, 1_000)
}, data.duration + 500)
}
})
cb('audio-received')
})
this.socket.on('download', (data) => {
window.location = `${this.serverUrl}/api/v1/downloads?domain=${data.domain}&skill=${data.skill}`
})
if (this.history !== null) {
this.parsedHistory = JSON.parse(this.history)
}
}
send(keyword) {
if (this._input.value !== '') {
this.socket.emit(keyword, {
client: this.client,
value: this._input.value.trim()
})
this.chatbot.sendTo('leon', this._input.value)
this._suggestions.forEach((suggestion) => {
// Remove all event listeners of the suggestion
suggestion.replaceWith(suggestion.cloneNode(true))
this._suggestionContainer.replaceChildren()
})
this.save()
return true
}
return false
}
save() {
let val = this._input.value
if (localStorage.getItem('history') === null) {
localStorage.setItem('history', JSON.stringify([]))
this.parsedHistory = JSON.parse(localStorage.getItem('history'))
} else if (this.parsedHistory.length >= 32) {
this.parsedHistory.shift()
}
if (val[0] === ' ') {
val = val.substr(1, val.length - 1)
}
if (this.parsedHistory[this.parsedHistory.length - 1] !== val) {
this.parsedHistory.push(val)
localStorage.setItem('history', JSON.stringify(this.parsedHistory))
}
this._input.value = ''
}
addSuggestion(text) {
const newSuggestion = document.createElement('button')
newSuggestion.classList.add('suggestion')
newSuggestion.textContent = text
this._suggestionContainer.appendChild(newSuggestion)
newSuggestion.addEventListener('click', (e) => {
e.preventDefault()
this.input = e.target.textContent
this.send('utterance')
})
this._suggestions.push(newSuggestion)
}
}
@@ -1,9 +1,12 @@
'use strict'
const listener = {}
const listener = { }
listener.listening = (stream, minDecibels, maxBlankTime,
cbOnStart, cbOnEnd) => {
listener.listening = (
stream,
minDecibels,
maxBlankTime,
cbOnStart,
cbOnEnd
) => {
const ctx = new AudioContext()
const analyser = ctx.createAnalyser()
const streamNode = ctx.createMediaStreamSource(stream)
@@ -19,7 +22,7 @@ listener.listening = (stream, minDecibels, maxBlankTime,
analyser.getByteFrequencyData(data)
if (data.some(v => v)) {
if (data.some((v) => v)) {
if (triggered) {
triggered = false
@@ -28,7 +31,7 @@ listener.listening = (stream, minDecibels, maxBlankTime,
silenceStart = time
}
if (!triggered && (time - silenceStart) > maxBlankTime) {
if (!triggered && time - silenceStart > maxBlankTime) {
cbOnEnd()
triggered = true
+22
View File
@@ -0,0 +1,22 @@
export default class Loader {
constructor() {
this.et = new EventTarget()
this.body = document.querySelector('body')
this.et.addEventListener('settingup', (event) => {
if (event.detail) {
this.body.classList.add('settingup')
} else {
this.body.classList.remove('settingup')
}
})
}
start() {
this.et.dispatchEvent(new CustomEvent('settingup', { detail: true }))
}
stop() {
this.et.dispatchEvent(new CustomEvent('settingup', { detail: false }))
}
}
+143
View File
@@ -0,0 +1,143 @@
import axios from 'axios'
import Loader from './loader'
import Client from './client'
import Recorder from './recorder'
import listener from './listener'
import { onkeydowndocument, onkeydowninput } from './onkeydown'
const config = {
app: 'webapp',
server_host: import.meta.env.VITE_LEON_HOST,
server_port: import.meta.env.VITE_LEON_PORT,
min_decibels: -40, // Noise detection sensitivity
max_blank_time: 1_000 // Maximum time to consider a blank (ms)
}
const serverUrl =
import.meta.env.VITE_LEON_NODE_ENV === 'production'
? ''
: `${config.server_host}:${config.server_port}`
document.addEventListener('DOMContentLoaded', async () => {
const loader = new Loader()
loader.start()
try {
const response = await axios.get(`${serverUrl}/api/v1/info`)
const input = document.querySelector('#utterance')
const mic = document.querySelector('#mic-button')
const v = document.querySelector('#version small')
const client = new Client(config.app, serverUrl, input, response.data)
let rec = {}
let chunks = []
v.innerHTML += client.info.version
client.init(loader)
if (navigator.mediaDevices && navigator.mediaDevices.getUserMedia) {
navigator.mediaDevices
.getUserMedia({ audio: true })
.then((stream) => {
if (MediaRecorder) {
rec = new Recorder(stream, mic, client.info)
client.recorder = rec
rec.ondataavailable((e) => {
chunks.push(e.data)
})
rec.onstart(() => {
/* */
})
rec.onstop(() => {
const blob = new Blob(chunks)
chunks = []
rec.enabled = false
// Ensure there are some data
if (blob.size >= 1_000) {
client.socket.emit('recognize', blob)
}
})
listener.listening(
stream,
config.min_decibels,
config.max_blank_time,
() => {
// Noise detected
rec.noiseDetected = true
},
() => {
// Noise ended
rec.noiseDetected = false
if (rec.enabled && !rec.hotwordTriggered) {
rec.stop()
rec.enabled = false
rec.hotwordTriggered = false
rec.countSilenceAfterTalk = 0
}
}
)
client.socket.on('enable-record', () => {
rec.hotwordTriggered = true
rec.start()
setTimeout(() => {
rec.hotwordTriggered = false
}, config.max_blank_time)
rec.enabled = true
})
} else {
console.error('MediaRecorder is not supported on your browser.')
}
})
.catch((err) => {
console.error(
'MediaDevices.getUserMedia() threw the following error:',
err
)
})
} else {
console.error(
'MediaDevices.getUserMedia() is not supported on your browser.'
)
}
document.addEventListener('keydown', (e) => {
onkeydowndocument(e, () => {
if (rec.enabled === false) {
input.value = ''
rec.start()
rec.enabled = true
} else {
rec.stop()
rec.enabled = false
}
})
})
input.addEventListener('keydown', (e) => {
onkeydowninput(e, client)
})
mic.addEventListener('click', (e) => {
e.preventDefault()
if (rec.enabled === false) {
rec.start()
rec.enabled = true
} else {
rec.stop()
rec.enabled = false
}
})
} catch (e) {
alert(`Error: ${e.message}; ${JSON.stringify(e.response?.data)}`)
console.error(e)
}
})
@@ -1,5 +1,3 @@
'use strict'
let index = -1
let parsedHistory = null
@@ -11,18 +9,18 @@ const onkeydowninput = (e, client) => {
}
if (key === 13) {
if (client.send('query')) {
if (client.send('utterance')) {
parsedHistory = JSON.parse(localStorage.getItem('history')).reverse()
index = -1
}
} else if (localStorage.getItem('history') !== null) {
if (key === 38 && index < (parsedHistory.length - 1)) {
if (key === 38 && index < parsedHistory.length - 1) {
index += 1
client.input = parsedHistory[index]
} else if (key === 40 && (index - 1) >= 0) {
} else if (key === 40 && index - 1 >= 0) {
index -= 1
client.input = parsedHistory[index]
} else if (key === 40 && (index - 1) < 0) {
} else if (key === 40 && index - 1 < 0) {
client.input = ''
index = -1
}
@@ -30,12 +28,9 @@ const onkeydowninput = (e, client) => {
}
const onkeydowndocument = (e, cb) => {
if (e.altKey === true && e.key === 't') {
if (e.altKey && e.key === 'c') {
cb()
}
}
export {
onkeydowninput,
onkeydowndocument
}
export { onkeydowninput, onkeydowndocument }
@@ -1,16 +1,21 @@
'use strict'
import on from '../sounds/on.mp3'
import off from '../sounds/off.mp3'
export default class Recorder {
constructor (stream, el, info) {
constructor(stream, el, info) {
this.recorder = new MediaRecorder(stream, { audioBitsPerSecond: 16000 })
this.el = el
this.audioOn = new Audio('../sounds/on.mp3')
this.audioOff = new Audio('../sounds/off.mp3')
this.audioOn = new Audio(on)
this.audioOff = new Audio(off)
this.playSound = true
this.info = info
this.enabled = false
this.hotwordTriggered = false
this.noiseDetected = false
this.countSilenceAfterTalk = 0
}
start (playSound = true) {
start(playSound = true) {
if (this.info.stt.enabled === false) {
console.warn('Speech-to-text disabled')
} else {
@@ -19,7 +24,7 @@ export default class Recorder {
}
}
stop (playSound = true) {
stop(playSound = true) {
if (this.info.stt.enabled === false) {
console.warn('Speech-to-text disabled')
} else {
@@ -28,9 +33,9 @@ export default class Recorder {
}
}
onstart (cb) {
onstart(cb) {
this.recorder.onstart = (e) => {
if (this.playSound === true) {
if (this.playSound) {
this.audioOn.play()
}
this.el.classList.add('enabled')
@@ -39,9 +44,9 @@ export default class Recorder {
}
}
onstop (cb) {
onstop(cb) {
this.recorder.onstop = (e) => {
if (this.playSound === true) {
if (this.playSound) {
this.audioOff.play()
}
this.el.classList.remove('enabled')
@@ -50,7 +55,7 @@ export default class Recorder {
}
}
ondataavailable (cb) {
ondataavailable(cb) {
this.recorder.ondataavailable = (e) => {
cb(e)
}
-3
View File
File diff suppressed because one or more lines are too long
-1
View File
File diff suppressed because one or more lines are too long
+24
View File
@@ -0,0 +1,24 @@
import dns from 'node:dns'
import dotenv from 'dotenv'
import { defineConfig } from 'vite'
dotenv.config()
dns.setDefaultResultOrder('verbatim')
// Map necessary Leon's env vars as Vite only expose VITE_*
process.env.VITE_LEON_NODE_ENV = process.env.LEON_NODE_ENV
process.env.VITE_LEON_HOST = process.env.LEON_HOST
process.env.VITE_LEON_PORT = process.env.LEON_PORT
export default defineConfig({
root: 'app/src',
build: {
outDir: '../dist',
emptyOutDir: true
},
server: {
port: 3000
}
})
+2
View File
@@ -0,0 +1,2 @@
package-lock=false
save-exact=true
View File
+15
View File
@@ -0,0 +1,15 @@
{
"name": "leon-nodejs-bridge",
"description": "Leon's Node.js bridge to communicate between the core and skills made with JavaScript",
"main": "dist/leon-nodejs-bridge.js",
"author": {
"name": "Louis Grenard",
"email": "louis@getleon.ai",
"url": "https://twitter.com/grenlouis"
},
"license": "MIT",
"homepage": "https://getleon.ai",
"bugs": {
"url": "https://github.com/leon-ai/leon/issues"
}
}
+5
View File
@@ -0,0 +1,5 @@
import { VERSION } from './version'
console.log('[WIP] Node.js bridge', VERSION)
// TODO
+1
View File
@@ -0,0 +1 @@
export const VERSION = '0.0.0'
+23
View File
@@ -0,0 +1,23 @@
{
"extends": "@tsconfig/node16-strictest/tsconfig.json",
"compilerOptions": {
"rootDir": "./src",
"outDir": "./dist",
"baseUrl": ".",
"paths": {
"@/*": ["./src/*"]
},
"ignoreDeprecations": "5.0",
"allowJs": true,
"checkJs": false,
"resolveJsonModule": true
},
"ts-node": {
"swc": true,
"require": ["tsconfig-paths/register"],
"files": true
},
"files": [],
"include": ["src/**/*"],
"exclude": ["dist"]
}
-15
View File
@@ -1,15 +0,0 @@
[[source]]
url = "https://pypi.org/simple"
verify_ssl = true
name = "pypi"
[packages]
requests = "==2.21.0"
pytube = "==9.2.2"
tinydb = "==3.9.0"
beautifulsoup4 = "==4.7.1"
[dev-packages]
[requires]
python_version = "3.6"
-89
View File
@@ -1,89 +0,0 @@
{
"_meta": {
"hash": {
"sha256": "6b5d87faf7886492cc3d6fdc896041d302523857d81a9e072cbfd627bb204b39"
},
"pipfile-spec": 6,
"requires": {
"python_version": "3.6"
},
"sources": [
{
"name": "pypi",
"url": "https://pypi.org/simple",
"verify_ssl": true
}
]
},
"default": {
"beautifulsoup4": {
"hashes": [
"sha256:034740f6cb549b4e932ae1ab975581e6103ac8f942200a0e9759065984391858",
"sha256:945065979fb8529dd2f37dbb58f00b661bdbcbebf954f93b32fdf5263ef35348",
"sha256:ba6d5c59906a85ac23dadfe5c88deaf3e179ef565f4898671253e50a78680718"
],
"index": "pypi",
"version": "==4.7.1"
},
"certifi": {
"hashes": [
"sha256:59b7658e26ca9c7339e00f8f4636cdfe59d34fa37b9b04f6f9e9926b3cece1a5",
"sha256:b26104d6835d1f5e49452a26eb2ff87fe7090b89dfcaee5ea2212697e1e1d7ae"
],
"version": "==2019.3.9"
},
"chardet": {
"hashes": [
"sha256:84ab92ed1c4d4f16916e05906b6b75a6c0fb5db821cc65e70cbd64a3e2a5eaae",
"sha256:fc323ffcaeaed0e0a02bf4d117757b98aed530d9ed4531e3e15460124c106691"
],
"version": "==3.0.4"
},
"idna": {
"hashes": [
"sha256:c357b3f628cf53ae2c4c05627ecc484553142ca23264e593d327bcde5e9c3407",
"sha256:ea8b7f6188e6fa117537c3df7da9fc686d485087abf6ac197f9c46432f7e4a3c"
],
"version": "==2.8"
},
"pytube": {
"hashes": [
"sha256:29e91b4809d55a89e68a29f894297c13d3199be05e848713bb1eaa72771f00be",
"sha256:bb0b1d62a8181cb0adb14c42f81f2f6bca733ba3759745e1b223ea01b4fac3b0"
],
"index": "pypi",
"version": "==9.2.2"
},
"requests": {
"hashes": [
"sha256:502a824f31acdacb3a35b6690b5fbf0bc41d63a24a45c4004352b0242707598e",
"sha256:7bf2a778576d825600030a110f3c0e3e8edc51dfaafe1c146e39a2027784957b"
],
"index": "pypi",
"version": "==2.21.0"
},
"soupsieve": {
"hashes": [
"sha256:afa56bf14907bb09403e5d15fbed6275caa4174d36b975226e3b67a3bb6e2c4b",
"sha256:eaed742b48b1f3e2d45ba6f79401b2ed5dc33b2123dfe216adb90d4bfa0ade26"
],
"version": "==1.8"
},
"tinydb": {
"hashes": [
"sha256:67b3b302fc86e0139db545d5abd65bf0e1dadaecee63bd1ff3fe2169810d5387",
"sha256:e7d939c52710ee4354bb619b9bed05ae6192645f1520f13d8fcf4f06b5590e02"
],
"index": "pypi",
"version": "==3.9.0"
},
"urllib3": {
"hashes": [
"sha256:61bf29cada3fc2fbefad4fdf059ea4bd1b4a86d2b6d15e1c7c0b582b9752fe39",
"sha256:de9529817c93f27c8ccbfead6985011db27bd0ddfcdb2d86f3f663385c6a9c22"
],
"version": "==1.24.1"
}
},
"develop": {}
}
-20
View File
@@ -1,20 +0,0 @@
#!/usr/bin/env python
# -*- coding:utf-8 -*-
import utils
from sys import argv, path
from json import dumps, loads
from importlib import import_module
def main():
"""Dynamically import modules related to the args and print the ouput"""
path.append('.')
queryobj = utils.getqueryobj()
m = import_module('packages.' + queryobj['package'] + '.' + queryobj['module'])
return getattr(m, queryobj['module'])(queryobj['query'], queryobj['entities'])
if __name__ == '__main__':
main()
+16
View File
@@ -0,0 +1,16 @@
[[source]]
url = "https://pypi.org/simple"
verify_ssl = true
name = "pypi"
[requires]
python_version = "3.9.10"
[packages]
setuptools = "*"
wheel = "*"
cx-freeze = "==6.11.1"
requests = "==2.28.1"
pytube = "==9.5.0"
tinydb = "==4.7.0"
beautifulsoup4 = "==4.7.1"
+37
View File
@@ -0,0 +1,37 @@
#!/usr/bin/env python
# -*- coding:utf-8 -*-
import utils
from traceback import print_exc
from sys import path
from json import dumps, loads
from importlib import import_module
def main():
"""Dynamically import skills related to the args and print the output"""
path.append('.')
intent_obj = utils.get_intent_obj()
skill = import_module('skills.' + intent_obj['domain'] + '.' + intent_obj['skill'] + '.src.actions.' + intent_obj['action'])
params = {
'lang': intent_obj['lang'],
'utterance': intent_obj['utterance'],
'current_entities': intent_obj['current_entities'],
'entities': intent_obj['entities'],
'current_resolvers': intent_obj['current_resolvers'],
'resolvers': intent_obj['resolvers'],
'slots': intent_obj['slots']
}
return getattr(skill, intent_obj['action'])(params)
if __name__ == '__main__':
try:
raise main()
except Exception as e:
# Print full traceback error report if skills triggers an error from the call stack
if 'exceptions must derive from BaseException' not in str(e):
print_exc()
+29
View File
@@ -0,0 +1,29 @@
from cx_Freeze import setup, Executable
import requests.certs
from version import __version__
options = {
'build_exe': {
# Add common dependencies for skills
'includes': [
'bs4',
'pytube'
],
'include_files': [(requests.certs.where(), 'cacert.pem')]
}
}
executables = [
Executable(
script='bridges/python/src/main.py',
target_name='leon-python-bridge'
)
]
setup(
name='leon-python-bridge',
version=__version__,
executables=executables,
options=options
)
+147
View File
@@ -0,0 +1,147 @@
#!/usr/bin/env python
# -*- coding:utf-8 -*-
from json import loads, dumps
from pathlib import Path
from random import choice
from vars import useragent
from tinydb import TinyDB, Query, table, operations
from time import sleep
import sys
import os
import requests
import re
dirname = os.path.dirname(os.path.realpath(__file__))
intent_object_path = sys.argv[1]
codes = []
intent_obj_file = open(intent_object_path, 'r', encoding = 'utf8')
intent_obj = loads(intent_obj_file.read())
intent_obj_file.close()
def get_intent_obj():
"""Return intent object"""
return intent_obj
def translate(key, dict = { }):
"""Pickup the language file according to the cmd arg
and return the value according to the params"""
# "Temporize" for the data buffer ouput on the core
sleep(0.1)
output = ''
variables = { }
file = open(os.path.join(os.getcwd(), 'skills', intent_obj['domain'], intent_obj['skill'], 'config', intent_obj['lang'] + '.json'), 'r', encoding = 'utf8')
obj = loads(file.read())
file.close()
# In case the key is a raw answer
if key not in obj['answers']:
return key
prop = obj['answers'][key]
if 'variables' in obj:
variables = obj['variables']
if isinstance(prop, list):
output = choice(prop)
else:
output = prop
if dict:
for key in dict:
output = output.replace('%' + key + '%', str(dict[key]))
if variables:
for key in variables:
output = output.replace('%' + key + '%', str(variables[key]))
return output
def output(type, content = '', core = { }):
"""Communicate with the core"""
if isinstance(content, dict):
speech = translate(content['key'], content['data'])
codes.append(content['key'])
else:
content = str(content)
speech = translate(content)
codes.append(content)
print(dumps({
'domain': intent_obj['domain'],
'skill': intent_obj['skill'],
'action': intent_obj['action'],
'lang': intent_obj['lang'],
'utterance': intent_obj['utterance'],
'entities': intent_obj['entities'],
'slots': intent_obj['slots'],
'output': {
'type': type,
'codes': codes,
'speech': speech,
'core': core,
'options': config('options')
}
}))
if (type == 'inter'):
sys.stdout.flush()
def http(method, url, headers = None):
"""Send HTTP request with the Leon user agent"""
session = requests.Session()
session.headers.update({ 'User-Agent': useragent, 'Cache-Control': 'no-cache' })
if headers != None:
session.headers.update(headers)
return session.request(method, url)
def config(key):
"""Get a skill configuration value"""
file = open(os.path.join(os.getcwd(), 'skills', intent_obj['domain'], intent_obj['skill'], 'src/config.json'), 'r', encoding = 'utf8')
obj = loads(file.read())
file.close()
return obj['configurations'][key]
def create_dl_dir():
"""Create the downloads folder of a current skill"""
dl_dir = os.path.join(os.getcwd(), 'downloads')
# dl_dir = os.path.dirname(os.path.realpath(__file__)) + '/../../../../downloads/'
skill_dl_dir = os.path.join(dl_dir, intent_obj['domain'], intent_obj['skill'])
Path(skill_dl_dir).mkdir(parents = True, exist_ok = True)
return skill_dl_dir
def db(db_type = 'tinydb'):
"""Create a new dedicated database
for a specific skill"""
if db_type == 'tinydb':
ext = '.json' if os.environ.get('LEON_NODE_ENV') != 'testing' else '.spec.json'
db = TinyDB(os.path.join(os.getcwd(), 'skills', intent_obj['domain'], intent_obj['skill'], 'memory/db' + ext))
return {
'db': db,
'query': Query,
'table': table,
'operations': operations
}
def get_table(slug):
"""Get a table from a specific skill"""
domain, skill, table = slug.split('.')
ext = '.json' if os.environ.get('LEON_NODE_ENV') != 'testing' else '.spec.json'
db = TinyDB(os.path.join(os.getcwd(), 'skills', domain, skill, 'memory/db' + ext))
return db.table(table)
+12
View File
@@ -0,0 +1,12 @@
#!/usr/bin/env python
# -*- coding:utf-8 -*-
import sys
import os
from json import loads
packagejsonfile = open(os.path.join(os.getcwd(), 'package.json'), 'r', encoding = 'utf8')
packagejson = loads(packagejsonfile.read())
packagejsonfile.close()
useragent = 'Leon-Personal-Assistant/' + packagejson['version']
+1
View File
@@ -0,0 +1 @@
__version__ = '1.0.1'
-119
View File
@@ -1,119 +0,0 @@
#!/usr/bin/env python
# -*- coding:utf-8 -*-
from json import loads, dumps
from os import path, environ
from pathlib import Path
from random import choice
from sys import argv, stdout
from vars import useragent
from tinydb import TinyDB, Query, operations
from time import sleep
import sqlite3
import requests
import re
dirname = path.dirname(path.realpath(__file__))
queryobjectpath = argv[1]
codes = []
serversrc = 'dist' if environ.get('LEON_NODE_ENV') == 'production' else 'src'
queryobjfile = open(queryobjectpath, 'r', encoding = 'utf8')
queryobj = loads(queryobjfile.read())
queryobjfile.close()
def getqueryobj():
"""Return query object"""
return queryobj
def translate(key, d = { }):
"""Pickup the language file according to the cmd arg
and return the value regarding to the params"""
output = ''
file = open(dirname + '/../../packages/' + queryobj['package'] + '/' + 'data/answers/' + queryobj['lang'] + '.json', 'r', encoding = 'utf8')
obj = loads(file.read())
file.close()
prop = obj[queryobj['module']][key]
if isinstance(prop, list):
output = choice(prop)
else:
output = prop
if d:
for k in d:
output = output.replace('%' + k + '%', str(d[k]))
# "Temporize" for the data buffer ouput on the core
sleep(0.1)
return output
def output(type, code, speech = ''):
"""Communicate with the Core"""
codes.append(code)
print(dumps({
'package': queryobj['package'],
'module': queryobj['module'],
'lang': queryobj['lang'],
'input': queryobj['query'],
'entities': queryobj['entities'],
'output': {
'type': type,
'codes': codes,
'speech': speech,
'options': config('options')
}
}))
if (type == 'inter'):
stdout.flush()
def http(method, url, headers = None):
"""Send HTTP request with the Leon user agent"""
session = requests.Session()
session.headers.update({ 'User-Agent': useragent, 'Cache-Control': 'no-cache' })
if headers != None:
session.headers.update(headers)
return session.request(method, url)
def config(key):
"""Get a package configuration value"""
file = open(dirname + '/../../packages/' + queryobj['package'] + '/config/config.json', 'r', encoding = 'utf8')
obj = loads(file.read())
file.close()
return obj[queryobj['module']][key]
def info():
"""Get information from the current query"""
return { 'lang': lang, 'package': package, 'module': module }
def createdldir():
"""Create the downloads folder of a current module"""
dldir = path.dirname(path.realpath(__file__)) + '/../../downloads/'
moduledldir = dldir + queryobj['package'] + '/' + queryobj['module']
Path(moduledldir).mkdir(parents = True, exist_ok = True)
return moduledldir
def db(dbtype = 'tinydb'):
"""Create a new dedicated database
for a specific package"""
if dbtype == 'tinydb':
db = TinyDB(dirname + '/../../packages/' + queryobj['package'] + '/data/db/' + queryobj['package'] + '.json')
return { 'db': db, 'query': Query, 'operations': operations }
-11
View File
@@ -1,11 +0,0 @@
#!/usr/bin/env python
# -*- coding:utf-8 -*-
from os import path
from json import loads
packagejsonfile = open(path.dirname(path.realpath(__file__)) + '/../../package.json', 'r', encoding = 'utf8')
packagejson = loads(packagejsonfile.read())
packagejsonfile.close()
useragent = 'Leon/' + packagejson['version']
+8
View File
@@ -0,0 +1,8 @@
{
"$schema": "../../../schemas/voice-config-schemas/amazon.json",
"credentials": {
"accessKeyId": "",
"secretAccessKey": ""
},
"region": "us-east-2"
}
@@ -0,0 +1,13 @@
{
"$schema": "../../../schemas/voice-config-schemas/google-cloud.json",
"type": "service_account",
"project_id": "",
"private_key_id": "",
"private_key": "",
"client_email": "example@iam.gserviceaccount.com",
"client_id": "",
"auth_uri": "https://accounts.google.com/o/oauth2/auth",
"token_uri": "https://accounts.google.com/o/oauth2/token",
"auth_provider_x509_cert_url": "https://www.googleapis.com/oauth2/v1/certs",
"client_x509_cert_url": "https://www.googleapis.com/robot/v1/metadata/x509/"
}
+5
View File
@@ -0,0 +1,5 @@
{
"$schema": "../../../schemas/voice-config-schemas/watson-stt.json",
"apikey": "",
"url": "https://stream.watsonplatform.net/speech-to-text/api"
}
+5
View File
@@ -0,0 +1,5 @@
{
"$schema": "../../../schemas/voice-config-schemas/watson-tts.json",
"apikey": "",
"url": "https://stream.watsonplatform.net/text-to-speech/api"
}
+65
View File
@@ -0,0 +1,65 @@
{
"$schema": "../../../schemas/global-data/global-answers.json",
"answers": {
"success": {},
"errors": {
"not_found": "Sorry, it seems I cannot find that"
},
"synchronizer": {
"syncing_direct": "I will now synchronize the downloaded content on your current device. Don't worry, I will let you know once I'm done",
"synced_direct": "The new content has been synchronized on your device",
"syncing_google_drive": "I will now synchronize the downloaded content on Google Drive. Don't worry, I will let you know once I'm done",
"synced_google_drive": "The new content is now available on Google Drive"
},
"random_errors": [
"Sorry, there is a problem with my system. Please check my logs for further details",
"Sorry, I don't work correctly. Please look at my logs for more information",
"Sorry, you need to fix me. Please take a look at my logs for further information",
"Sorry, I cannot do that because I'm broken. Please check my logs for further details"
],
"random_skill_errors": [
"Sorry, it seems I have a problem with the \"%skill_name%\" skill from the \"%domain_name%\" domain",
"Sorry, I have an issue with the \"%skill_name%\" skill from the \"%domain_name%\" domain",
"Sorry, I've got an error with the \"%skill_name%\" skill from the \"%domain_name%\" domain",
"Sorry, the \"%skill_name%\" skill from the \"%domain_name%\" domain is broken"
],
"random_unknown_intents": [
"Sorry, I still don't know this, but you can help me to understand by <a href=\"https://github.com/leon-ai/leon/blob/develop/.github/CONTRIBUTING.md\" target=\"_blank\">creating a pull request</a>",
"Sorry, you should teach me this request. You can teach me by <a href=\"https://github.com/leon-ai/leon/blob/develop/.github/CONTRIBUTING.md\" target=\"_blank\">creating a pull request</a>",
"Sorry, I cannot answer that. Let me answer you in the future by <a href=\"https://github.com/leon-ai/leon/blob/develop/.github/CONTRIBUTING.md\" target=\"_blank\">creating a pull request</a>",
"Sorry, you have to educate me more. You can help me with that by <a href=\"https://github.com/leon-ai/leon/blob/develop/.github/CONTRIBUTING.md\" target=\"_blank\">contributing to my code</a>",
"Sorry, I don't understand your query",
"Sorry, I'm still very young, I didn't get your point"
],
"random_not_sure": [
"Sorry, you may repeat in an another way",
"Sorry, I'm not sure I understood correctly",
"Sorry, I'm not sure for what you asked, please repeat with a different way",
"Sorry, please repeat again by formulating differently",
"Sorry, I didn't correctly clean my ears today! Oh wait, I'm your personal assistant then please try again with a new way"
],
"random_not_able": [
"Sorry, I'm not able to answer. I understand what you said, but please repeat in another way",
"Sorry, I have a blackout, I cannot answer that. I understand what you said, but try to repeat in another way"
],
"random_ner_type_not_supported": [
"Sorry, the \"%entity_type%\" action entity type is not supported by my NER. Please <a href=\"https://github.com/leon-ai/leon/issues\" target=\"_blank\">open an issue</a> to report, that will be much appreciated",
"Sorry, my NER does not recognize the \"%entity_type%\" action entity type. Please <a href=\"https://github.com/leon-ai/leon/issues\" target=\"_blank\">open an issue</a> to report, it'll be highly appreciated"
],
"random_language_switch": [
"Hey, it looks like a new language, give me a sec so I make the switch",
"You are speaking another language, let me do the switch please",
"Wow, you can speak several languages, so do I! One moment please"
],
"random_language_not_supported": [
"Sorry, I don't speak this language yet",
"You are awesome, but I can't speak this language yet",
"It looks like a language I can't understand at the moment"
],
"random_context_out_of_topic": [
"Sure, let's change the topic",
"Aah, you want to change the subject, sure",
"Mmmh, as you wish, let's switch conversation"
]
}
}
+245
View File
@@ -0,0 +1,245 @@
{
"$schema": "../../../../schemas/global-data/global-entity.json",
"options": {
"red": {
"synonyms": ["red"],
"data": {
"hexa": ["#FF0000"]
}
},
"blue": {
"synonyms": ["blue"],
"data": {
"hexa": ["#0000FF"]
}
},
"green": {
"synonyms": ["green"],
"data": {
"hexa": ["#006400"]
}
},
"orange": {
"synonyms": ["orange"],
"data": {
"hexa": ["#FF6600"]
}
},
"white": {
"synonyms": ["white"],
"data": {
"hexa": ["#FFFFFF"]
}
},
"black": {
"synonyms": ["black"],
"data": {
"hexa": ["#000000"]
}
},
"yellow": {
"synonyms": ["yellow"],
"data": {
"hexa": ["#FFFF00"]
}
},
"purple": {
"synonyms": ["purple"],
"data": {
"hexa": ["#A020F0"]
}
},
"silver": {
"synonyms": ["silver"],
"data": {
"hexa": ["#C0C0C0"]
}
},
"brown": {
"synonyms": ["brown"],
"data": {
"hexa": ["#964B00"]
}
},
"gray": {
"synonyms": ["gray", "grey"],
"data": {
"hexa": ["#808080"]
}
},
"pink": {
"synonyms": ["pink"],
"data": {
"hexa": ["#FFC0CB"]
}
},
"olive": {
"synonyms": ["olive"],
"data": {
"hexa": ["#808000"]
}
},
"maroon": {
"synonyms": ["maroon"],
"data": {
"hexa": ["#800000"]
}
},
"violet": {
"synonyms": ["violet"],
"data": {
"hexa": ["#8F00FF"]
}
},
"charcoal": {
"synonyms": ["charcoal"],
"data": {
"hexa": ["#36454F"]
}
},
"magenta": {
"synonyms": ["magenta"],
"data": {
"hexa": ["#FF00FF"]
}
},
"bronze": {
"synonyms": ["bronze"],
"data": {
"hexa": ["#CD7F32"]
}
},
"cream": {
"synonyms": ["cream"],
"data": {
"hexa": ["#FFFDD0"]
}
},
"gold": {
"synonyms": ["gold"],
"data": {
"hexa": ["#FFD700"]
}
},
"tan": {
"synonyms": ["tan"],
"data": {
"hexa": ["#D2B48C"]
}
},
"teal": {
"synonyms": ["teal"],
"data": {
"hexa": ["#008080"]
}
},
"mustard": {
"synonyms": ["mustard"],
"data": {
"hexa": ["#FFDB58"]
}
},
"navy blue": {
"synonyms": ["navy blue"],
"data": {
"hexa": ["#000080"]
}
},
"coral": {
"synonyms": ["coral"],
"data": {
"hexa": ["#FF7F50"]
}
},
"burgundy": {
"synonyms": ["burgundy"],
"data": {
"hexa": ["#800020"]
}
},
"lavender": {
"synonyms": ["lavender"],
"data": {
"hexa": ["#E6E6FA"]
}
},
"mauve": {
"synonyms": ["mauve"],
"data": {
"hexa": ["#E0b0FF"]
}
},
"peach": {
"synonyms": ["peach"],
"data": {
"hexa": ["#FFE5B4"]
}
},
"rust": {
"synonyms": ["rust"],
"data": {
"hexa": ["#B7410E"]
}
},
"indigo": {
"synonyms": ["indigo"],
"data": {
"hexa": ["#4B0082"]
}
},
"ruby": {
"synonyms": ["ruby"],
"data": {
"hexa": ["#E0115F"]
}
},
"clay": {
"synonyms": ["clay"],
"data": {
"hexa": ["#CC7357"]
}
},
"cyan": {
"synonyms": ["cyan"],
"data": {
"hexa": ["#00FFFF"]
}
},
"azure": {
"synonyms": ["azure"],
"data": {
"hexa": ["#007FFF"]
}
},
"beige": {
"synonyms": ["beige"],
"data": {
"hexa": ["#F5F5DC"]
}
},
"off white": {
"synonyms": ["off white"],
"data": {
"hexa": ["#FAF9F6"]
}
},
"turquoise": {
"synonyms": ["turquoise"],
"data": {
"hexa": ["#30D5C8"]
}
},
"amber": {
"synonyms": ["amber"],
"data": {
"hexa": ["#FFBF00"]
}
},
"mint": {
"synonyms": ["mint"],
"data": {
"hexa": ["#3EB489"]
}
}
}
}
+14
View File
@@ -0,0 +1,14 @@
{
"$schema": "../../../../schemas/global-data/global-entity.json",
"options": {
"LOW": {
"synonyms": ["low"]
},
"MEDIUM": {
"synonyms": ["medium"]
},
"HIGH": {
"synonyms": ["high"]
}
}
}
@@ -0,0 +1,41 @@
{
"$schema": "../../../../schemas/global-data/global-entity.json",
"options": {
"Alexa": {
"synonyms": ["Alexa"],
"data": {
"thought": [
"Alexa is very kind and Amazon is teaching it many things. It was born in November 2014.",
"Alexa has been created by Amazon and was born in November 2014. We went for a drink few weeks ago and I have to admit it is funny."
]
}
},
"Cortana": {
"synonyms": ["Cortana"],
"data": {
"thought": [
"Cortana is thoughtful and Microsoft is improving her day after day. She was born in April 2014.",
"Cortana has been created by Microsoft and was born in April 2014. We went for a walk few weeks ago, it was a very nice hike."
]
}
},
"Siri": {
"synonyms": ["Siri"],
"data": {
"thought": [
"I consider Siri as a leader, it has a lot of experience and Apple is constantly improving it. It was born in October 2011.",
"Siri has been acquired by Apple and was born in October 2011. True story, we went for a brunch together and it brought apples..."
]
}
},
"Google Assistant": {
"synonyms": ["Google Assistant"],
"data": {
"thought": [
"Google Assistant is smart and Google is doing a great job with it. It was born in May 2016.",
"Google Assistant has been created by Google and was born in May 2016. We met for the first time at the Google I/O. It was a great event!"
]
}
}
}
}
@@ -0,0 +1,55 @@
{
"$schema": "../../../../schemas/global-data/global-resolver.json",
"name": "affirmation_denial",
"intents": {
"affirmation": {
"utterance_samples": [
"Yes",
"Yep",
"Yup",
"Yeah",
"Do [it|this|that]",
"For sure",
"Sure thing",
"Of course!",
"Okay",
"OK",
"Alright",
"Correct",
"Indeed",
"Agree",
"Perfect",
"That's right",
"That works",
"Go ahead",
"Why not",
"Please",
"Absolutely",
"Precisely",
"Spot on",
"Undoubtedly",
"Certainly",
"Without a doubt",
"Definitely"
],
"value": true
},
"denial": {
"utterance_samples": [
"No",
"No no don't",
"Stop it",
"Nope",
"Naa",
"No thanks",
"No I'm fine",
"Hell no",
"Please do not",
"I disagree",
"Negative",
"Not at all"
],
"value": false
}
}
}
+61
View File
@@ -0,0 +1,61 @@
{
"$schema": "../../../schemas/global-data/global-answers.json",
"answers": {
"success": {},
"errors": {
"not_found": "Désolé, il semblerait que je n'arrive pas à trouver ça",
"nlu": "L'erreur semble provenir de ma compréhension de langage naturel. Voici plus de détails au sujet de cette dernière : \"%error%\""
},
"synchronizer": {
"syncing_direct": "Je vais maintenant synchroniser le contenu téléchargé sur votre appareil actuel. Ne vous inquiétez pas, je vous préviendrai lorsque j'aurai terminé",
"synced_direct": "Le nouveau contenu a été synchronisé sur votre appareil",
"syncing_google_drive": "Je vais maintenant synchroniser le contenu téléchargé sur Google Drive. Ne vous inquiétez pas, je vous préviendrai lorsque j'aurai terminé",
"synced_google_drive": "Le nouveau contenu est maintenant disponible sur Google Drive"
},
"random_errors": [
"Désolé, il y a un problème avec mon système. Veuillez consulter mes logs pour plus de détails",
"Désolé, je ne fonctionne pas correctement. Merci de regarder mes logs pour plus d'information",
"Désolé, vous devez me réparer. Veuillez vérifier mes logs pour en savoir plus",
"Désolé, je ne peux aboutir à votre demande parce que je suis cassé. Regardez mes logs pour plus de détails"
],
"random_skill_errors": [
"Désolé, il semblerait y avoir un problème avec le skill \"%skill_name%\" du domaine \"%domain_name%\"",
"Désolé, j'ai un problème avec le skill \"%skill_name%\" du domaine \"%domain_name%\"",
"Désolé, j'ai une erreur avec le skill \"%skill_name%\" du domaine \"%domain_name%\"",
"Désolé, le skill \"%skill_name%\" du domaine \"%domain_name%\" est cassé"
],
"random_unknown_intents": [
"Désolé, je ne connais pas encore ça, mais vous pouvez m'aider à comprendre en <a href=\"https://github.com/leon-ai/leon/blob/develop/.github/CONTRIBUTING.md\" target=\"_blank\">créant une pull request</a>",
"Désolé, vous devriez m'apprendre cette requête. Vous pouvez m'apprendre en <a href=\"https://github.com/leon-ai/leon/blob/develop/.github/CONTRIBUTING.md\" target=\"_blank\">créant une pull request</a>",
"Désolé, je ne peux pas répondre à ça. Laissez moi vous répondre à l'avenir en <a href=\"https://github.com/leon-ai/leon/blob/develop/.github/CONTRIBUTING.md\" target=\"_blank\">créant une pull request</a>",
"Désolé, vous devez m'éduquer un peu plus. Vous pouvez m'aider avec ça en <a href=\"https://github.com/leon-ai/leon/blob/develop/.github/CONTRIBUTING.md\" target=\"_blank\">contribuant à mon code</a>",
"Désolé, je ne comprends pas votre requête",
"Désolé, je suis encore très jeune, je n'ai pas compris votre demande"
],
"random_not_sure": [
"Désolé, vous pouvez répéter d'une autre façon",
"Désolé, je ne suis pas sûr de comprendre",
"Désolé, je ne suis pas certain de votre demande, merci de répéter d'une manière différente",
"Désolé, merci de répéter à nouveau en formulant différemment",
"Désolé, je n'ai pas nettoyé mes oreilles correctement ! Attendez-voir, je suis votre assistant personnel, je vous prie donc de répéter d'une nouvelle façon"
],
"random_not_able": [
"Désolé, je ne suis pas capable de répondre. J'ai compris ce que vous avez dit, mais je vous prie de répéter d'une autre façon",
"Désolé, j'ai un trou de mémoire, je ne peux pas répondre à ça. J'ai compris ce que vous disiez, mais essayez voir d'une autre façon s'il vous plaît"
],
"random_ner_type_not_supported": [
"Désolé, le type \"%entity_type%\" d'entité d'action n'est pas supporté par ma reconnaissance d'entité. Merci d'<a href=\"https://github.com/leon-ai/leon/issues\" target=\"_blank\">ouvrir une issue</a> afin de reporter ce cas, ce sera très apprécié",
"Désolé, ma reconnaissance d'entité ne reconnaît pas le type \"%entity_type%\" d'entité d'action. Merci d'<a href=\"https://github.com/leon-ai/leon/issues\" target=\"_blank\">ouvrir une issue</a> afin de reporter ce cas, ce serait très appréciable"
],
"random_language_switch": [
"Vous parlez une nouvelle langue, veuillez me donner une seconde le temps que je m'adapte",
"Vous parlez une autre langue, un instant s'il vous plaît",
"Wow, vous parlez plusieurs langues, moi aussi ! Un instant je vous prie"
],
"random_language_not_supported": [
"Désolé, je ne parle pas encore cette langue",
"Vous êtes génial, mais je n'ai pas encore appris cette langue",
"Ça ressemble à une lautre langue que je ne peux pas comprendre pour le moment"
]
}
}
+17
View File
@@ -0,0 +1,17 @@
{
"$schema": "../../../../schemas/global-data/global-entity.json",
"options": {
"rouge": {
"synonyms": ["rouge"],
"data": {
"usage": ["..."]
}
},
"bleu": {
"synonyms": ["bleu"],
"data": {
"usage": ["..."]
}
}
}
}
+23
View File
@@ -0,0 +1,23 @@
{
"$schema": "../../../../schemas/global-data/global-entity.json",
"options": {
"bas": {
"synonyms": ["bas", "basse"],
"data": {
"value": ["LOW"]
}
},
"moyen": {
"synonyms": ["moyen"],
"data": {
"value": ["MEDIUM"]
}
},
"haut": {
"synonyms": ["haut", "haute"],
"data": {
"value": ["HIGH"]
}
}
}
}
@@ -0,0 +1,41 @@
{
"$schema": "../../../../schemas/global-data/global-entity.json",
"options": {
"Alexa": {
"synonyms": ["Alexa"],
"data": {
"thought": [
"Alexa est très sympa et Amazon lui enseigne pleins de choses. Elle est née en novembre 2014.",
"Alexa a été créée par Amazon et est née en novembre 2014. Nous sommes allé boire un verre il y a quelques semaines de ça, et je dois admettre qu'elle est très drôle."
]
}
},
"Cortana": {
"synonyms": ["Cortana"],
"data": {
"thought": [
"Cortana est réfléchie et Microsoft l'améliore jour après jour. Elle est née en avril 2014.",
"Cortana a été créée par Microsoft et est née en avril 2014. Nous sommes allez faire une balade il y a quelques semaines et ce fut très plaisant."
]
}
},
"Siri": {
"synonyms": ["Siri"],
"data": {
"thought": [
"Je considère Siri comme un père, il a beaucoup d'expérience et Apple l'améliore de jour en jour. Il est né en octobre 2011.",
"Siri a été racheté par Apple et est né en octobre 2011. Histoire vraie, nous sommes allez faire un brunch et il a apporté des pommes..."
]
}
},
"Google Assistant": {
"synonyms": ["google assistant"],
"data": {
"thought": [
"L'assistante Google est intelligente et Google fait du beau travail avec elle. Elle est née en mai 2016.",
"L'assistante Google a été crée par Google et est née en mai 2016. Nous nous sommes rencontrés pour la première fois à la Google I/O. C'était un superbe événement."
]
}
}
}
}
@@ -0,0 +1,41 @@
{
"$schema": "../../../../schemas/global-data/global-resolver.json",
"name": "affirmation_denial",
"intents": {
"affirmation": {
"utterance_samples": [
"Oui",
"Yep",
"Yup",
"Ouais",
"Faisons ça",
"Bien sûr",
"Évidemment",
"Tout à fait",
"Correct",
"OK",
"C'est vrai",
"En effet",
"Entendu",
"Ça marche",
"Pourquoi pas",
"Parfait",
"Allez"
],
"value": true
},
"denial": {
"utterance_samples": [
"Non",
"Ne le fais pas",
"Nope",
"Non merci",
"Non ça va",
"C'est faux",
"Bien sûr que non",
"Fais pas ça"
],
"value": false
}
}
}
+8 -8
View File
@@ -1,21 +1,21 @@
{
"langs": {
"langs": {
"en-US": {
"short": "en",
"min_confidence": 0.6,
"fallbacks": [
]
"min_confidence": 0.5,
"fallbacks": []
},
"fr-FR": {
"short": "fr",
"min_confidence": 0.6,
"min_confidence": 0.5,
"fallbacks": [
{
"words": ["merci"],
"package": "leon",
"module": "welcome"
"domain": "leon",
"skill": "welcome",
"action": "run"
}
]
}
}
}
}
+210
View File
@@ -0,0 +1,210 @@
{
"endpoints": [
{
"method": "POST",
"route": "/api/action/news/github_trends/run",
"params": ["number", "daterange"],
"entitiesType": "builtIn"
},
{
"method": "GET",
"route": "/api/action/news/product_hunt_trends/run",
"params": []
},
{
"method": "POST",
"route": "/api/action/productivity/todo_list/create_list",
"params": ["list"],
"entitiesType": "trim"
},
{
"method": "GET",
"route": "/api/action/productivity/todo_list/view_lists",
"params": []
},
{
"method": "POST",
"route": "/api/action/productivity/todo_list/view_list",
"params": ["list"],
"entitiesType": "trim"
},
{
"method": "POST",
"route": "/api/action/productivity/todo_list/rename_list",
"params": ["old_list", "new_list"],
"entitiesType": "trim"
},
{
"method": "POST",
"route": "/api/action/productivity/todo_list/delete_list",
"params": ["list"],
"entitiesType": "trim"
},
{
"method": "POST",
"route": "/api/action/productivity/todo_list/add_todos",
"params": ["todos", "list"],
"entitiesType": "trim"
},
{
"method": "POST",
"route": "/api/action/productivity/todo_list/complete_todos",
"params": ["todos", "list"],
"entitiesType": "trim"
},
{
"method": "POST",
"route": "/api/action/productivity/todo_list/uncheck_todos",
"params": ["todos", "list"],
"entitiesType": "trim"
},
{
"method": "GET",
"route": "/api/action/social_communication/mbti/setup",
"params": []
},
{
"method": "GET",
"route": "/api/action/social_communication/mbti/quiz",
"params": []
},
{
"method": "GET",
"route": "/api/action/utilities/have_i_been_pwned/run",
"params": []
},
{
"method": "POST",
"route": "/api/action/utilities/is_it_down/run",
"params": ["url"],
"entitiesType": "builtIn"
},
{
"method": "GET",
"route": "/api/action/utilities/speed_test/run",
"params": []
},
{
"method": "GET",
"route": "/api/action/utilities/youtube_downloader/run",
"params": []
},
{
"method": "POST",
"route": "/api/action/games/akinator/choose_thematic",
"params": ["thematic"],
"entitiesType": "trim"
},
{
"method": "GET",
"route": "/api/action/games/akinator/setup",
"params": []
},
{
"method": "GET",
"route": "/api/action/games/akinator/guess",
"params": []
},
{
"method": "GET",
"route": "/api/action/games/akinator/retry",
"params": []
},
{
"method": "GET",
"route": "/api/action/games/guess_the_number/setup",
"params": []
},
{
"method": "GET",
"route": "/api/action/games/guess_the_number/guess",
"params": []
},
{
"method": "GET",
"route": "/api/action/games/guess_the_number/replay",
"params": []
},
{
"method": "GET",
"route": "/api/action/games/rochambeau/start",
"params": []
},
{
"method": "POST",
"route": "/api/action/games/rochambeau/play",
"params": ["handsign"],
"entitiesType": "trim"
},
{
"method": "GET",
"route": "/api/action/games/rochambeau/rematch",
"params": []
},
{
"method": "GET",
"route": "/api/action/leon/color/favorite_color",
"params": []
},
{
"method": "GET",
"route": "/api/action/leon/color/why",
"params": []
},
{
"method": "GET",
"route": "/api/action/leon/color/color_hexadecimal",
"params": []
},
{
"method": "GET",
"route": "/api/action/leon/good_bye/run",
"params": []
},
{
"method": "GET",
"route": "/api/action/leon/greeting/run",
"params": []
},
{
"method": "GET",
"route": "/api/action/leon/introduction/introduce_leon",
"params": []
},
{
"method": "GET",
"route": "/api/action/leon/introduction/gather_basic_info",
"params": []
},
{
"method": "GET",
"route": "/api/action/leon/introduction/remember",
"params": []
},
{
"method": "GET",
"route": "/api/action/leon/joke/run",
"params": []
},
{
"method": "GET",
"route": "/api/action/leon/meaning_of_life/run",
"params": []
},
{
"method": "GET",
"route": "/api/action/leon/partner_assistant/run",
"params": []
},
{
"method": "GET",
"route": "/api/action/leon/random_number/run",
"params": []
},
{
"method": "GET",
"route": "/api/action/leon/welcome/run",
"params": []
}
]
}
+17
View File
@@ -0,0 +1,17 @@
services:
leon:
container_name: 'leon'
build:
context: './'
image: 'leon-ai/leon'
environment:
LEON_PORT: ${LEON_PORT:-1337}
LEON_PY_TCP_SERVER_HOST: ${LEON_PY_TCP_SERVER_HOST:-0.0.0.0}
LEON_PY_TCP_SERVER_PORT: ${LEON_PY_TCP_SERVER_PORT:-1342}
stdin_open: true
tty: true
command: 'npm run dev:server && npm run dev:app'
volumes:
- './:/home/docker/leon'
- '/home/docker/leon/node_modules'
network_mode: 'host'
+14
View File
@@ -0,0 +1,14 @@
services:
leon:
container_name: 'leon'
build:
context: './'
image: 'leon-ai/leon'
environment:
LEON_PORT: ${LEON_PORT:-1337}
LEON_PY_TCP_SERVER_HOST: ${LEON_PY_TCP_SERVER_HOST:-0.0.0.0}
LEON_PY_TCP_SERVER_PORT: ${LEON_PY_TCP_SERVER_PORT:-1342}
stdin_open: true
tty: true
command: 'npm run start'
network_mode: 'host'
+1 -4
View File
@@ -2,12 +2,9 @@
This node enables the wake word "Leon". Once this is running, you can
call Leon by saying his name according to the language you chose.
## Getting Started
Please use **Node.js 8.x** here.
Tips: use [nvm](https://github.com/creationix/nvm) to easily manage your Node.js versions.
### Installation
```sh
+66 -65
View File
@@ -3,80 +3,81 @@
* You can consider to run this file on a different hardware
*/
/* eslint-disable import/no-unresolved */
const request = require('superagent')
const axios = require('axios')
const record = require('node-record-lpcm16')
const { Detector, Models } = require('snowboy')
const io = require('socket.io-client')
const { Detector, Models } = require('@bugsounet/snowboy')
const { io } = require('socket.io-client')
process.env.LEON_SERVER_HOST = process.env.LEON_SERVER_HOST || 'localhost'
process.env.LEON_SERVER_PORT = process.env.LEON_SERVER_PORT || 1337
const url = `http://${process.env.LEON_SERVER_HOST}:${process.env.LEON_SERVER_PORT}`
process.env.LEON_HOST = process.env.LEON_HOST || 'http://localhost'
process.env.LEON_PORT = process.env.LEON_PORT || 1337
const url = `${process.env.LEON_HOST}:${process.env.LEON_PORT}`
const socket = io(url)
const { argv } = process
const lang = argv[2] || 'en'
socket.on('connect', () => {
socket.emit('init', 'hotword-node')
console.log('Language:', lang)
console.log('Connected to the server')
console.log('Waiting for hotword...')
})
;(async () => {
try {
await axios.get(`${url}/api/v1/info`)
request.get(`${url}/v1/info`)
.end((err, res) => {
if (err || !res.ok) {
if (!err.response) {
console.error(`Failed to reach the server: ${err}`)
} else {
console.error(err.response.error.message)
}
const models = new Models()
models.add({
file: `${__dirname}/models/leon-${lang}.pmdl`,
sensitivity: '0.5',
hotwords: `leon-${lang}`
})
const detector = new Detector({
resource: `${__dirname}/node_modules/@bugsounet/snowboy/resources/common.res`,
models,
audioGain: 2.0,
applyFrontend: true
})
/*detector.on('silence', () => {
})*/
detector.on('sound', (/* buffer */) => {
/**
* <buffer> contains the last chunk of the audio that triggers the "sound" event.
* It could be written to a wav stream
*/
})
detector.on('error', () => {
console.error('error')
})
detector.on('hotword', (index, hotword, buffer) => {
/**
* <buffer> contains the last chunk of the audio that triggers the "hotword" event.
* It could be written to a wav stream. You will have to use it
* together with the <buffer> in the "sound" event if you want to get audio
* data after the hotword
*/
const obj = { hotword, buffer }
console.log('Hotword detected', obj)
socket.emit('hotword-detected', obj)
})
const mic = record.start({
threshold: 0,
verbose: false
})
mic.pipe(detector)
} catch (e) {
if (!e.response) {
console.error(`Failed to reach the server: ${e}`)
} else {
const models = new Models()
models.add({
file: `${__dirname}/models/leon-${res.body.lang.short}.pmdl`,
sensitivity: '0.5',
hotwords: `leon-${res.body.lang.short}`
})
const detector = new Detector({
resource: `${__dirname}/node_modules/snowboy/resources/common.res`,
models,
audioGain: 2.0,
applyFrontend: true
})
detector.on('silence', () => {
})
detector.on('sound', (/* buffer */) => {
/**
* <buffer> contains the last chunk of the audio that triggers the "sound" event.
* It could be written to a wav stream
*/
})
detector.on('error', () => {
console.error('error')
})
detector.on('hotword', (index, hotword, buffer) => {
/**
* <buffer> contains the last chunk of the audio that triggers the "hotword" event.
* It could be written to a wav stream. You will have to use it
* together with the <buffer> in the "sound" event if you want to get audio
* data after the hotword
*/
const obj = { hotword, buffer }
console.log('Hotword detected', obj)
socket.emit('hotword-detected', obj)
})
const mic = record.start({
threshold: 0,
verbose: false
})
mic.pipe(detector)
console.error(e)
}
})
}
})()
Binary file not shown.
+1369 -917
View File
File diff suppressed because it is too large Load Diff
+8 -8
View File
@@ -1,11 +1,11 @@
{
"name": "leon-hotword",
"version": "0.1.0",
"version": "0.2.0",
"description": "Hotword detection for Leon",
"author": {
"name": "Louis Grenard",
"email": "louis.grenard@gmail.com",
"url": "https://twitter.com/louistiti_fr"
"email": "louis@getleon.ai",
"url": "https://twitter.com/grenlouis"
},
"main": "index.js",
"scripts": {
@@ -13,10 +13,10 @@
},
"license": "MIT",
"dependencies": {
"node-record-lpcm16": "^0.3.0",
"snowboy": "^1.2.0",
"socket.io": "^2.0.2",
"socket.io-client": "^2.1.1",
"superagent": "^3.5.2"
"@bugsounet/snowboy": "^2.2.5",
"@mapbox/node-pre-gyp": "^1.0.10",
"node-record-lpcm16": "^0.3.1",
"socket.io-client": "^4.5.2",
"superagent": "^8.0.0"
}
}
-10
View File
@@ -1,10 +0,0 @@
/**
* Allow babel-plugin-module-resolver aliases for JetBrains IDEs
*/
System.config({
paths: {
'@@/*': './*',
'@/*': './server/src/*'
}
})
+9
View File
@@ -0,0 +1,9 @@
{
"compilerOptions": {
"baseUrl": ".",
"paths": {
"@@/*": ["./*"],
"@/*": ["./server/src/*"]
}
}
}
+7
View File
@@ -0,0 +1,7 @@
{
"verbose": false,
"watch": ["server/src"],
"ext": "ts,js,json",
"ignore": [".git", "node_modules", "server/src/tmp", "server/dist"],
"exec": "ts-node server/src/index.ts"
}

Some files were not shown because too many files have changed in this diff Show More