theprogrammablemind_4wp 7.7.0-beta.0 → 7.7.0-beta.2
Sign up to get free protection for your applications and to get access to all the features.
- package/client.js +66 -24
- package/package.json +2 -1
- package/src/config.js +28 -10
- package/src/generators.js +0 -1
package/client.js
CHANGED
@@ -179,11 +179,23 @@ const setupArgs = (args, config, logs, hierarchy) => {
|
|
179
179
|
args.log = (message) => logs.push(message)
|
180
180
|
|
181
181
|
args.addAssumedScoped = (args, assumed) => {
|
182
|
+
const addAssumed = (args, ...moreAssumed) => {
|
183
|
+
return { ...args, assumed: Object.assign({}, (args.assumed || {}), ...moreAssumed) }
|
184
|
+
}
|
185
|
+
|
182
186
|
args.s = (c) => config.getSemantics(logs).apply(args, c)
|
183
|
-
args.g = (c) =>
|
184
|
-
|
185
|
-
|
186
|
-
args.
|
187
|
+
args.g = (c, a = {}) => {
|
188
|
+
return config.getGenerators(logs).apply(addAssumed(args, a), c, a)
|
189
|
+
}
|
190
|
+
args.gp = (c, a = {}) => {
|
191
|
+
return config.getGenerators(logs).apply(addAssumed(args, a, {paraphrase: true, isResponse: false, response: false}), c, {paraphrase: true, isResponse: false, response: false})
|
192
|
+
}
|
193
|
+
args.gr = (c, a = {}) => {
|
194
|
+
return config.getGenerators(logs).apply(addAssumed(args, a, {paraphrase: false, isResponse: true}), { ...c, paraphrase: false, isResponse: true })
|
195
|
+
}
|
196
|
+
args.e = (c) => {
|
197
|
+
return config.getEvaluator(args.s, args.calls, logs, c)
|
198
|
+
}
|
187
199
|
args.gs = gs(args.g)
|
188
200
|
args.gsp = gs(args.gp)
|
189
201
|
args.gsr = gs(args.gr)
|
@@ -467,8 +479,6 @@ const processContextsB = ({ config, hierarchy, semantics, generators, json, isTe
|
|
467
479
|
}
|
468
480
|
// assumed = { paraphrase: true, response: false };
|
469
481
|
assumed = { paraphrase: true, isResponse: false, response: false };
|
470
|
-
// args.g = (c) => config.getGenerators(json.logs).apply({...args, assumed}, c, assumed)
|
471
|
-
// args.gs = gs(args.g)
|
472
482
|
if (generateParenthesized) {
|
473
483
|
config.parenthesized = false
|
474
484
|
}
|
@@ -479,8 +489,6 @@ const processContextsB = ({ config, hierarchy, semantics, generators, json, isTe
|
|
479
489
|
paraphrasesParenthesized = config.getGenerators(json.logs).apply({...args, assumed}, contextPrime, assumed)
|
480
490
|
config.parenthesized = false
|
481
491
|
}
|
482
|
-
// args.g = (c) => config.getGenerators(json.logs).apply(args, c)
|
483
|
-
// args.gs = gs(args.g)
|
484
492
|
contextsPrime.push(contextPrime)
|
485
493
|
generatedPrime.push(generated)
|
486
494
|
paraphrasesPrime.push(paraphrases)
|
@@ -617,7 +625,12 @@ const loadInstance = (config, instance) => {
|
|
617
625
|
if (results.skipSemantics) {
|
618
626
|
config.config.skipSemantics = results.skipSemantics
|
619
627
|
}
|
620
|
-
|
628
|
+
const args = { config, hierarchy, json: results, commandLineArgs: {} }
|
629
|
+
if (instance.queries) {
|
630
|
+
args.isInstance = `instance${i}`
|
631
|
+
args.instance = instance.queries[i]
|
632
|
+
}
|
633
|
+
processContextsB(args)
|
621
634
|
if (results.skipSemantics) {
|
622
635
|
config.config.skipSemantics = null
|
623
636
|
}
|
@@ -1241,7 +1254,7 @@ const defaultProcess = ({ config, errorHandler }) => async (promise) => {
|
|
1241
1254
|
}
|
1242
1255
|
|
1243
1256
|
// builtTemplate saveInstance
|
1244
|
-
const rebuildTemplate = async ({ config, target, template, errorHandler = defaultErrorHandler }) => {
|
1257
|
+
const rebuildTemplate = async ({ config, target, previousResultss, startOfChanges, template, errorHandler = defaultErrorHandler }) => {
|
1245
1258
|
const accumulators = {
|
1246
1259
|
resultss: [],
|
1247
1260
|
fragments: [],
|
@@ -1254,7 +1267,7 @@ const rebuildTemplate = async ({ config, target, template, errorHandler = defaul
|
|
1254
1267
|
finish()
|
1255
1268
|
return
|
1256
1269
|
}
|
1257
|
-
const { property, hierarchy, query: queryOrExtraConfig, initializer, skipSemantics } = queries.shift()
|
1270
|
+
const { property, hierarchy, query: queryOrExtraConfig, previousResults, initializer, skipSemantics } = queries.shift()
|
1258
1271
|
// queries are strings or { query: "blah", development: true/false }
|
1259
1272
|
if (typeof queryOrExtraConfig === 'string' || queryOrExtraConfig.query) {
|
1260
1273
|
let query = queryOrExtraConfig;
|
@@ -1276,7 +1289,15 @@ const rebuildTemplate = async ({ config, target, template, errorHandler = defaul
|
|
1276
1289
|
}
|
1277
1290
|
}
|
1278
1291
|
try {
|
1279
|
-
|
1292
|
+
let results
|
1293
|
+
let prMessage = ''
|
1294
|
+
if (previousResults && previousResults.query == query.query) {
|
1295
|
+
results = previousResults
|
1296
|
+
prMessage = ' Using previous results. use -rtf for a hard rebuild of everything on the server side.'
|
1297
|
+
loadInstance(config, { resultss: [results] })
|
1298
|
+
} else {
|
1299
|
+
results = await _process(config, query.query, {initializer, rebuildingTemplate: true})
|
1300
|
+
}
|
1280
1301
|
if (config.config.debug) {
|
1281
1302
|
// TODO pass in the error handler like the other ones
|
1282
1303
|
defaultInnerProcess(config, defaultErrorHandler, results)
|
@@ -1285,9 +1306,9 @@ const rebuildTemplate = async ({ config, target, template, errorHandler = defaul
|
|
1285
1306
|
console.log(`query "${query.query}". There is ${results.contexts.length} contexts in the results. Make sure its producing the results that you expect.`)
|
1286
1307
|
throw new Error(`query "${query.query}". There is ${results.contexts.length} contexts in the results. Make sure its producing the results that you expect.`)
|
1287
1308
|
} else if (results.paraphrases[0] != query.query) {
|
1288
|
-
console.log(`query "${query.query}". The paraphrase is different from the query "${results.paraphrases[0]}"
|
1309
|
+
console.log(`query "${query.query}". The paraphrase is different from the query "${results.paraphrases[0]}".${prMessage}`)
|
1289
1310
|
} else {
|
1290
|
-
console.log(`query ${query.query}`)
|
1311
|
+
console.log(`query "${query.query}".${prMessage}`)
|
1291
1312
|
}
|
1292
1313
|
global.transitoryMode = transitoryMode
|
1293
1314
|
config.config.skipSemantics = null
|
@@ -1375,7 +1396,13 @@ const rebuildTemplate = async ({ config, target, template, errorHandler = defaul
|
|
1375
1396
|
}
|
1376
1397
|
let todo = []
|
1377
1398
|
todo = todo.concat((template.initializers || []).map((query) => { return { initializer: true, property: 'resultss', query, skipSemantics: false || query.skipSemantics } }))
|
1378
|
-
todo = todo.concat((template.queries || []).map((query) => {
|
1399
|
+
todo = todo.concat((template.queries || []).map((query, index) => {
|
1400
|
+
let pr
|
1401
|
+
if (index < startOfChanges) {
|
1402
|
+
pr = previousResultss[index]
|
1403
|
+
}
|
1404
|
+
return { property: 'resultss', query, previousResults: pr, skipSemantics: false || query.skipSemantics}
|
1405
|
+
}))
|
1379
1406
|
todo = todo.concat((template.fragments || []).map((query) => { return Object.assign({}, toProperties(query), { property: 'fragments', skipSemantics: false }) }))
|
1380
1407
|
todo = todo.concat((template.semantics || []).map((definition) => { return { property: 'semantics', query: `${definition.from}\n${definition.to}`, skipSemantics: true } }))
|
1381
1408
|
await looper(Object.assign([], todo))
|
@@ -1490,13 +1517,14 @@ const knowledgeModuleImpl = async ({
|
|
1490
1517
|
parser.add_argument('-tnp', '--testNoParenthesized', { action: 'store_true', help: 'Don\' check parenthesized differences for the tests' })
|
1491
1518
|
parser.add_argument('-n', '--count', { help: 'Number of times to run the tests. Default is one. Use this to check for flakey test. If possible the system will print out a message with the word "hint" suggesting how to fix the problem' })
|
1492
1519
|
// parser.add_argument('-b', '--build', { help: 'Specify the template file name of the form <kmName>. There should be a file called <baseKmName>.<kmName>.template.json with the queries to run. For example { queries: [...] }. The template file will be run and generate an instantiation called <baseKmName>.<kmName>.instance.json and a file called <kmName>.js that will load the template file (this is file generated only if not already existing) and a test file called <KmName>.tests.json. This can then be loaded into an instance of the current knowledge module to setup initial conditions.' })
|
1493
|
-
parser.add_argument('-rt', '--rebuildTemplate', { action: 'store_true', help: 'Force a template rebuild' })
|
1520
|
+
parser.add_argument('-rt', '--rebuildTemplate', { action: 'store_true', help: 'Force a template rebuild. Using optimization where if the query/config has not changed it will use the previous value. One there is a change all subsequence query/configs will be run.' })
|
1521
|
+
parser.add_argument('-rtf', '--rebuildTemplateFull', { action: 'store_true', help: 'Force a template rebuild. Skip the optimization' })
|
1494
1522
|
parser.add_argument('-l', '--loop', { action: 'store_true', help: 'Run a loop so that multiply queries may be run' })
|
1495
1523
|
parser.add_argument('-i', '--info', { action: 'store_true', help: 'Print meta-data for the module' })
|
1496
1524
|
parser.add_argument('-v', '--vimdiff', { action: 'store_true', help: 'For failures run vimdiff' })
|
1497
1525
|
parser.add_argument('-g', '--greg', { action: 'store_true', help: 'Set the server to be localhost so I can debug stuff' })
|
1498
1526
|
parser.add_argument('-cl', '--checkForLoop', { nargs: "?", help: 'Check for loops in the priorities, Optional argument is list of operator keys to consider. For example [["banana", 0], ["food", 1]]' })
|
1499
|
-
parser.add_argument('-r', '--
|
1527
|
+
parser.add_argument('-r', '--reset', { action: 'store_true', help: 'Get the server to bypass the cache and rebuild everything' })
|
1500
1528
|
parser.add_argument('-q', '--query', { help: 'Run the specified query' })
|
1501
1529
|
parser.add_argument('-ip ', '--server', { help: 'Server to run against' })
|
1502
1530
|
parser.add_argument('-qp ', '--queryParams', { help: 'Query params for the server call' })
|
@@ -1521,6 +1549,10 @@ const knowledgeModuleImpl = async ({
|
|
1521
1549
|
const args = parser.parse_args()
|
1522
1550
|
args.count = args.count || 1
|
1523
1551
|
|
1552
|
+
if (args.rebuildTemplateFull) {
|
1553
|
+
args.rebuildTemplate = true
|
1554
|
+
}
|
1555
|
+
|
1524
1556
|
if (args.parenthesized) {
|
1525
1557
|
config.parenthesized = true
|
1526
1558
|
}
|
@@ -1711,23 +1743,33 @@ const knowledgeModuleImpl = async ({
|
|
1711
1743
|
checkTemplate(template)
|
1712
1744
|
|
1713
1745
|
if (template) {
|
1714
|
-
|
1715
|
-
if (
|
1746
|
+
let needsRebuild
|
1747
|
+
if (args.rebuildTemplate && !args.rebuildTemplateFull) {
|
1748
|
+
// get the startOfChanges for the partial rebuild
|
1749
|
+
needsRebuild = config.needsRebuild(template.template, template.instance, { ...options, rebuild: false })
|
1750
|
+
} else {
|
1751
|
+
// do a check or full rebuild
|
1752
|
+
needsRebuild = config.needsRebuild(template.template, template.instance, options)
|
1753
|
+
}
|
1754
|
+
|
1755
|
+
if (needsRebuild.needsRebuild) {
|
1756
|
+
if (needsRebuild.previousResultss) {
|
1757
|
+
console.log("Rebuild using the optimization to use previous results until a change is hit. For a full rebuild use -rtf")
|
1758
|
+
}
|
1716
1759
|
console.log(`This module "${config.name}" needs rebuilding all other arguments will be ignored. Try again after the template is rebuilt.`)
|
1717
1760
|
options.rebuild = true
|
1718
1761
|
config.config.rebuild = true
|
1719
1762
|
}
|
1720
1763
|
try {
|
1721
|
-
config.load(template.template, template.instance, { rebuild: needsRebuild })
|
1764
|
+
config.load(template.template, template.instance, { rebuild: needsRebuild.needsRebuild || options.rebuild, previousResultss: needsRebuild.previousResultss, startOfChanges: needsRebuild.startOfChanges })
|
1722
1765
|
} catch( e ) {
|
1723
|
-
debugger
|
1724
1766
|
console.error(`Error loading template for ${config.name}. ${e.error ? e.error : e}`)
|
1725
1767
|
runtime.process.exit(-1)
|
1726
1768
|
}
|
1727
1769
|
if (!args.query) {
|
1728
1770
|
printConfig()
|
1729
1771
|
}
|
1730
|
-
if (needsRebuild) {
|
1772
|
+
if (needsRebuild.needsRebuild) {
|
1731
1773
|
return
|
1732
1774
|
}
|
1733
1775
|
}
|
@@ -1890,7 +1932,7 @@ const knowledgeModuleImpl = async ({
|
|
1890
1932
|
if (!(useTestConfig.check && useTestConfig.check.length > 0)) {
|
1891
1933
|
console.log('use -v arg to write files expected.json and actual.json in the current directory for detailed comparison. Or do -s and then git diff the changes.')
|
1892
1934
|
// console.log(JSON.stringify(contexts))
|
1893
|
-
console.log('**************************** ERRORS ************************')
|
1935
|
+
console.log('**************************** THERE WERE ERRORS ************************')
|
1894
1936
|
}
|
1895
1937
|
}
|
1896
1938
|
}
|
@@ -1976,7 +2018,7 @@ const knowledgeModuleImpl = async ({
|
|
1976
2018
|
}
|
1977
2019
|
|
1978
2020
|
if (template) {
|
1979
|
-
if (config.needsRebuild(template.template, template.instance, { isModule: !isProcess })) {
|
2021
|
+
if (config.needsRebuild(template.template, template.instance, { isModule: !isProcess }).needsRebuild) {
|
1980
2022
|
const error = `This module "${config.name}" cannot be used because the instance file needs rebuilding. Run on the command line with no arguments or the -rt argument to rebuild.`
|
1981
2023
|
throw new Error(error)
|
1982
2024
|
}
|
package/package.json
CHANGED
@@ -12,6 +12,7 @@
|
|
12
12
|
"scripts": {
|
13
13
|
"to:debug": "node inspect node_modules/.bin/jest --runInBand -t NEO23",
|
14
14
|
"test:debug": "node inspect node_modules/.bin/jest --runInBand --config ./jest.config.json",
|
15
|
+
"td": "node inspect node_modules/.bin/jest --runInBand --config ./jest.config.json",
|
15
16
|
"tod": "node inspect node_modules/.bin/jest --runInBand -t NEO23",
|
16
17
|
"lint:fix": "eslint \"**/*.js\" --fix",
|
17
18
|
"lint": "eslint \"**/*.js\"",
|
@@ -64,6 +65,6 @@
|
|
64
65
|
"json-stable-stringify": "^1.0.1",
|
65
66
|
"node-fetch": "^2.6.1"
|
66
67
|
},
|
67
|
-
"version": "7.7.0-beta.
|
68
|
+
"version": "7.7.0-beta.2",
|
68
69
|
"license": "ISC"
|
69
70
|
}
|
package/src/config.js
CHANGED
@@ -965,7 +965,7 @@ class Config {
|
|
965
965
|
}
|
966
966
|
|
967
967
|
// { rebuild: false, isModule: false }
|
968
|
-
needsRebuild(template, instance, options) {
|
968
|
+
needsRebuild (template, instance, options) {
|
969
969
|
if (options.rebuild) {
|
970
970
|
return true
|
971
971
|
}
|
@@ -1058,7 +1058,21 @@ class Config {
|
|
1058
1058
|
return elements.map( toCanonicalQuery )
|
1059
1059
|
}
|
1060
1060
|
|
1061
|
-
const
|
1061
|
+
const templateQueries = toCanonicalQueries(template.queries || []).map(helpers.updateQueries)
|
1062
|
+
const instanceQueries = toCanonicalQueries(instance.queries || [])
|
1063
|
+
let sameQueries = true
|
1064
|
+
let startOfChanges;
|
1065
|
+
for (let iq = 0; iq < templateQueries.length; ++iq) {
|
1066
|
+
if (!helpers.safeEquals(templateQueries[iq], instanceQueries[iq])) {
|
1067
|
+
sameQueries = false
|
1068
|
+
startOfChanges = iq
|
1069
|
+
}
|
1070
|
+
}
|
1071
|
+
// things were deleted case
|
1072
|
+
if (templateQueries.length < instanceQueries.length) {
|
1073
|
+
startOfChanges = instanceQueries.length
|
1074
|
+
}
|
1075
|
+
// const sameQueries = helpers.safeEquals(toCanonicalQueries(template.queries || []).map(helpers.updateQueries), toCanonicalQueries(instance.queries || []))
|
1062
1076
|
|
1063
1077
|
const debug = false
|
1064
1078
|
if (debug) {
|
@@ -1067,16 +1081,20 @@ class Config {
|
|
1067
1081
|
debugger
|
1068
1082
|
debugger
|
1069
1083
|
}
|
1070
|
-
console.log("instance", instance)
|
1084
|
+
// console.log("instance", instance)
|
1071
1085
|
console.log("sameQueries", sameQueries)
|
1072
1086
|
console.log("sameFragments", sameFragments)
|
1073
|
-
console.log("templateFragments", templateFragments)
|
1074
|
-
console.log("instanceFragments", instanceFragments)
|
1075
|
-
console.log('template.queries', JSON.stringify(toCanonicalQueries(template.queries || []).map(helpers.updateQueries), null, 2))
|
1076
|
-
console.log("instance.queries", JSON.stringify(toCanonicalQueries(instance.queries || []), null, 2))
|
1087
|
+
// console.log("templateFragments", templateFragments)
|
1088
|
+
// console.log("instanceFragments", instanceFragments)
|
1089
|
+
// console.log('template.queries', JSON.stringify(toCanonicalQueries(template.queries || []).map(helpers.updateQueries), null, 2))
|
1090
|
+
// console.log("instance.queries", JSON.stringify(toCanonicalQueries(instance.queries || []), null, 2))
|
1077
1091
|
}
|
1078
1092
|
}
|
1079
|
-
|
1093
|
+
if (startOfChanges || instance.resultss) {
|
1094
|
+
return { needsRebuild: !(instance && sameQueries && sameFragments), startOfChanges, previousResultss: instance.resultss }
|
1095
|
+
} else {
|
1096
|
+
return { needsRebuild: !(instance && sameQueries && sameFragments) }
|
1097
|
+
}
|
1080
1098
|
}
|
1081
1099
|
|
1082
1100
|
validifyTemplate (template) {
|
@@ -1097,7 +1115,7 @@ class Config {
|
|
1097
1115
|
}
|
1098
1116
|
|
1099
1117
|
// loadTemplate
|
1100
|
-
load (template, instance, options = { rebuild: false } ) {
|
1118
|
+
load (template, instance, options = { rebuild: false, previousResultss: undefined, startOfChanges: undefined } ) {
|
1101
1119
|
this.validifyTemplate(template)
|
1102
1120
|
instance.template = template
|
1103
1121
|
this.logs.push(`loading template for ${this.name}`)
|
@@ -1105,7 +1123,7 @@ class Config {
|
|
1105
1123
|
// TODO fix beforeQuery
|
1106
1124
|
template = { fragments: [], queries: [], ...template }
|
1107
1125
|
template.fragments = template.fragments.concat(this.dynamicFragments)
|
1108
|
-
client.rebuildTemplate({ config: this, target: this.name, beforeQuery: () => {}, template, ...options })
|
1126
|
+
client.rebuildTemplate({ config: this, target: this.name, previousResultss: options.previousResultss, startOfChanges: options.startOfChanges, beforeQuery: () => {}, template, ...options })
|
1109
1127
|
} else {
|
1110
1128
|
// no change
|
1111
1129
|
// this.initInstances.push({ ...instance, name: config.name })
|
package/src/generators.js
CHANGED