theprogrammablemind 7.4.1-beta.1 → 7.4.1-beta.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (3) hide show
  1. package/client.js +50 -9
  2. package/package.json +1 -1
  3. package/src/config.js +45 -7
package/client.js CHANGED
@@ -470,13 +470,22 @@ const doWithRetries = async (n, url, queryParams, data) => {
470
470
  }
471
471
  }
472
472
 
473
- const setupProcessB = ({ config }) => {
473
+ const setupProcessB = ({ config, allowDelta=false } = {}) => {
474
474
  const key = config._key
475
475
 
476
- const data = Object.assign({ key, version: '3' }, config.config)
477
- for (const uuid of Object.keys(data.namespaces)) {
478
- const km = config.configs.find((km) => km.uuid === uuid)
479
- data.namespaces[uuid].name = km.name
476
+ const data = Object.assign({ key, version: '3' }, { uuid: config._uuid })
477
+ if (allowDelta && config.allowDelta && config.hasDelta()) {
478
+ // console.log('config', config)
479
+ data.delta = config.delta()
480
+ } else {
481
+ Object.assign(data, config.config)
482
+ }
483
+
484
+ if (data.namespaces) {
485
+ for (const uuid of Object.keys(data.namespaces)) {
486
+ const km = config.configs.find((km) => km.uuid === uuid)
487
+ data.namespaces[uuid].name = km.name
488
+ }
480
489
  }
481
490
 
482
491
  // const generators = new Generators((data.generators || []).map((g) => new Generator(normalizeGenerator(g))))
@@ -529,7 +538,7 @@ const _process = async (config, query, { credentials, writeTests, isTest, saveDe
529
538
  throw error
530
539
  }
531
540
 
532
- const { data, /* generators, semantics, */ hierarchy } = setupProcessB({ config })
541
+ let { data, /* generators, semantics, */ hierarchy } = setupProcessB({ config, allowDelta: true })
533
542
  let queries = query.split('\\n')
534
543
 
535
544
  try {
@@ -553,8 +562,28 @@ const _process = async (config, query, { credentials, writeTests, isTest, saveDe
553
562
  if (queries.length === 0) {
554
563
  break;
555
564
  }
565
+
556
566
  data.utterance = queries[0]
557
- const json = await doWithRetries(retries, url, queryParams, data)
567
+ let json = await doWithRetries(retries, url, queryParams, data)
568
+ let resetData = false
569
+ if (json.code == 'NOT_IN_CACHE') {
570
+ resetData = true
571
+ const setupB = setupProcessB({ config, allowDelta: false })
572
+ data = setupB.data
573
+ hierarchy = setupB.hierarchy
574
+ data.utterance = queries[0]
575
+ json = await doWithRetries(retries, url, queryParams, data)
576
+ }
577
+ if (json.cacheKey) {
578
+ config.cacheKey = json.cacheKey
579
+ if (resetData) {
580
+ if (queries.length > 1) {
581
+ const setupB = setupProcessB({ config, allowDelta: true })
582
+ data = setupB.data
583
+ hierarchy = setupB.hierarchy
584
+ }
585
+ }
586
+ }
558
587
  json.contexts = json.results
559
588
  delete json.results
560
589
  if (json.status !== 200) {
@@ -1329,7 +1358,7 @@ const knowledgeModule = async ({
1329
1358
  }
1330
1359
  }
1331
1360
  if (args.print.includes('c')) {
1332
- const { data } = setupProcessB({ config })
1361
+ const { data } = setupProcessB({ config })
1333
1362
  console.log("Config as sent to server")
1334
1363
  console.log(JSON.stringify(data, null, 2));
1335
1364
  }
@@ -1488,7 +1517,19 @@ const knowledgeModule = async ({
1488
1517
  if (!('then' in promise)) {
1489
1518
  throw 'Return a promise from process in the definition of knowledgeModule'
1490
1519
  }
1491
- promise.then(() => f()).catch( (e) => f() )
1520
+ promise
1521
+ .then(() => {
1522
+ f()
1523
+ })
1524
+ .catch( (e) => {
1525
+ if (e.errno == 'ECONNREFUSED') {
1526
+ console.log(e)
1527
+ readline.close()
1528
+ } else {
1529
+ console.log(e)
1530
+ f()
1531
+ }
1532
+ })
1492
1533
  })
1493
1534
  f()
1494
1535
  } else if (args.query) {
package/package.json CHANGED
@@ -61,6 +61,6 @@
61
61
  "json-stable-stringify": "^1.0.1",
62
62
  "node-fetch": "^2.6.1"
63
63
  },
64
- "version": "7.4.1-beta.1",
64
+ "version": "7.4.1-beta.3",
65
65
  "license": "ISC"
66
66
  }
package/src/config.js CHANGED
@@ -572,6 +572,7 @@ class Config {
572
572
  }
573
573
  }
574
574
  this.config.associations.positive.push(association)
575
+ this._delta.json.associations.push({ action: 'add', association })
575
576
  }
576
577
 
577
578
  // TODO add more error checking to these like addHierarchy has
@@ -580,6 +581,7 @@ class Config {
580
581
  this.config.priorities = []
581
582
  }
582
583
  this.config.priorities.push(priorities)
584
+ this._delta.json.priorities.push({ action: 'add', priorities })
583
585
  }
584
586
 
585
587
  addHierarchy (child, parent) {
@@ -630,6 +632,7 @@ class Config {
630
632
  }
631
633
 
632
634
  this.config.hierarchy.push([child, parent])
635
+ this._delta.json.hierarchy.push([child, parent])
633
636
  }
634
637
 
635
638
  getBridge (id, level) {
@@ -659,6 +662,7 @@ class Config {
659
662
  }
660
663
  bridges.push(def)
661
664
  this.checkBridges();
665
+ this._delta.json.bridges.push({ action: 'add', bridge: def })
662
666
  }
663
667
 
664
668
  addGenerator (match, apply) {
@@ -735,17 +739,19 @@ class Config {
735
739
 
736
740
  operators.unshift(operator)
737
741
  this.checkOperators()
742
+
743
+ this._delta.json.operators.push({ action: 'add', operator })
738
744
  }
739
745
 
740
746
  addWord (word, def) {
741
- this.addWordInternal(this.config, word, def)
747
+ this.addWordInternal(word, def)
742
748
  }
743
749
 
744
- addWordInternal (config, word, def) {
745
- if (!config.words) {
746
- config.words = {}
750
+ addWordInternal (word, def) {
751
+ if (!this.config.words) {
752
+ this.config.words = {}
747
753
  }
748
- const words = config.words
754
+ const words = this.config.words
749
755
  def = Object.assign({}, def, { uuid: this._uuid })
750
756
  if (words[word]) {
751
757
  if (!words[word].some((e) => helpers.safeEquals(e, def))) {
@@ -754,6 +760,8 @@ class Config {
754
760
  } else {
755
761
  words[word] = [def]
756
762
  }
763
+
764
+ this._delta.json.words.push({ action: 'add', word, def })
757
765
  }
758
766
 
759
767
  getAPI (uuid) {
@@ -970,6 +978,9 @@ class Config {
970
978
  throw 'Excepted the config argument to be a hash not a Config object'
971
979
  }
972
980
 
981
+ this.allowDelta = false
982
+ this.resetDelta()
983
+
973
984
  this.addedArgss = []
974
985
  let isProcess = require.main === module
975
986
  if (global.theprogrammablemind && config) {
@@ -1072,11 +1083,11 @@ class Config {
1072
1083
  if (bridge.words) {
1073
1084
  for (let def of bridge.words) {
1074
1085
  if (typeof def == 'string') {
1075
- this.addWordInternal(this.config, def, {"id": bridge.id, "initial": "{}" })
1086
+ this.addWordInternal(def, {"id": bridge.id, "initial": "{}" })
1076
1087
  } else {
1077
1088
  const word = def.word
1078
1089
  def = { initial: JSON.stringify(def), id: bridge.id, word: undefined }
1079
- this.addWordInternal(this.config, word, def)
1090
+ this.addWordInternal(word, def)
1080
1091
  }
1081
1092
  }
1082
1093
  }
@@ -1174,6 +1185,32 @@ class Config {
1174
1185
  }
1175
1186
  }
1176
1187
 
1188
+ hasDelta () {
1189
+ return this._delta.json
1190
+ }
1191
+
1192
+ delta () {
1193
+ return { cacheKey: this._delta.cacheKey, json: this._delta.json }
1194
+ }
1195
+
1196
+ resetDelta (cacheKey) {
1197
+ this._delta = {
1198
+ cacheKey,
1199
+ json: {
1200
+ words: [],
1201
+ operators: [],
1202
+ bridges: [],
1203
+ associations: [],
1204
+ priorities: [],
1205
+ hierarchy: [],
1206
+ }
1207
+ }
1208
+ }
1209
+
1210
+ set cacheKey (cacheKey) {
1211
+ this.resetDelta(cacheKey)
1212
+ }
1213
+
1177
1214
  get api () {
1178
1215
  if (this._api && this._api.multiApi) {
1179
1216
  return this._api.api(this._api)
@@ -1646,6 +1683,7 @@ class Config {
1646
1683
 
1647
1684
  // rebuild ({ isModule: mainIsModule = false } = {}) {
1648
1685
  rebuild ({ isModule: mainIsModule } = {}) {
1686
+ this.resetDelta()
1649
1687
  const debug = this.config.debug;
1650
1688
  this.config = _.cloneDeep(this.initConfig)
1651
1689
  if (debug) {