theprogrammablemind 7.5.8-beta.5 → 7.5.8-beta.51
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.
- package/client.js +127 -55
- package/index.js +1 -0
- package/package.json +1 -1
- package/src/config.js +461 -214
- package/src/flatten.js +9 -1
- package/src/helpers.js +3 -1
- package/src/semantics.js +6 -1
package/client.js
CHANGED
@@ -15,14 +15,16 @@ const sortJson = runtime.sortJson
|
|
15
15
|
|
16
16
|
const getAsk = (config) => (uuid) => (asks) => {
|
17
17
|
for (let ask of asks) {
|
18
|
-
config.
|
18
|
+
config.addSemantic({
|
19
19
|
uuid,
|
20
|
+
oneShot: true,
|
20
21
|
match: (args) => ask.matchr(args),
|
21
22
|
apply: (args) => ask.applyr(args)
|
22
23
|
})
|
23
24
|
}
|
24
|
-
config.
|
25
|
+
config.addSemantic({
|
25
26
|
uuid,
|
27
|
+
oneShot: true,
|
26
28
|
match: ({context}) => context.marker == 'controlEnd' || context.marker == 'controlBetween',
|
27
29
|
apply: (args) => {
|
28
30
|
for (let ask of asks) {
|
@@ -37,7 +39,7 @@ const getAsk = (config) => (uuid) => (asks) => {
|
|
37
39
|
}
|
38
40
|
}
|
39
41
|
if (matchq(args)) {
|
40
|
-
args.context.motivationKeep = true
|
42
|
+
// args.context.motivationKeep = true
|
41
43
|
args.context.verbatim = applyq(args)
|
42
44
|
args.context.isResponse = true;
|
43
45
|
delete args.context.controlRemove;
|
@@ -58,7 +60,6 @@ const vimdiff = (actualJSON, expectedJSON) => {
|
|
58
60
|
// console.log(`vimdiff ${path}/actual.json ${path}/expected.json`)
|
59
61
|
{
|
60
62
|
const editor = runtime.process.env.EDITOR || 'vimdiff'
|
61
|
-
debugger
|
62
63
|
// const child = runtime.child_process.spawn(editor, [`${path}/expected.json`, `${path}/actual.json`], { stdio: 'inherit' })
|
63
64
|
console.log(`${editor} ${path}/expected.json ${path}/actual.json`)
|
64
65
|
runtime.child_process.execSync(`${editor} ${path}/expected.json ${path}/actual.json`, {stdio: 'inherit'})
|
@@ -109,11 +110,12 @@ class ErrorReason extends Error {
|
|
109
110
|
|
110
111
|
const setupArgs = (args, config, logs, hierarchy) => {
|
111
112
|
config.setArgs(args)
|
112
|
-
args.calls = new InitCalls(config.name)
|
113
|
+
args.calls = new InitCalls(args.isInstance ? `${args.isInstance}#${config.name}` : config.name)
|
113
114
|
if (global.theprogrammablemind && global.theprogrammablemind.loadForTesting) {
|
114
115
|
args.calls = new InitCalls(Object.keys(global.theprogrammablemind.loadForTesting)[0])
|
115
116
|
}
|
116
117
|
args.km = (name) => config.getConfig(name)
|
118
|
+
args.api = (name) => config.getConfig(name).api
|
117
119
|
args.error = (context) => {
|
118
120
|
throw new ErrorReason(context)
|
119
121
|
}
|
@@ -143,7 +145,6 @@ const setupArgs = (args, config, logs, hierarchy) => {
|
|
143
145
|
apis: getAPIs(uuid)
|
144
146
|
}
|
145
147
|
}
|
146
|
-
args.motivation = (m) => config.addMotivation(m)
|
147
148
|
args.breakOnSemantics = false
|
148
149
|
args.theDebugger = {
|
149
150
|
breakOnSemantics: (value) => args.breakOnSemantics = value
|
@@ -157,10 +158,10 @@ const setupArgs = (args, config, logs, hierarchy) => {
|
|
157
158
|
}
|
158
159
|
args.e = (c) => config.getEvaluator(args.s, args.calls, logs, c)
|
159
160
|
args.log = (message) => logs.push(message)
|
160
|
-
// config.getAddedArgs(args)
|
161
161
|
args.gs = gs(args.g)
|
162
162
|
args.gsp = gs(args.gp)
|
163
163
|
args.gsr = gs(args.gr)
|
164
|
+
config.getAddedArgs(args)
|
164
165
|
}
|
165
166
|
|
166
167
|
const gs = (g) => (contexts, separator, lastSeparator) => {
|
@@ -298,7 +299,6 @@ const writeTest = (fn, query, objects, generated, paraphrases, responses, contex
|
|
298
299
|
}
|
299
300
|
associations.sort()
|
300
301
|
// tests[query] = sortJson({ paraphrases, responses, contexts, objects: convertToStable(objects), associations, metadata, config, developerTest: saveDeveloper }, { depth: 25 })
|
301
|
-
debugger
|
302
302
|
results = sortJson({
|
303
303
|
query,
|
304
304
|
paraphrases,
|
@@ -367,7 +367,7 @@ const setupContexts = (rawContexts) => {
|
|
367
367
|
return contexts
|
368
368
|
}
|
369
369
|
|
370
|
-
const processContextsB = ({ config, hierarchy, semantics, generators, json, isTest, query, data, retries, url, commandLineArgs }) => {
|
370
|
+
const processContextsB = ({ config, hierarchy, semantics, generators, json, isTest, isInstance, query, data, retries, url, commandLineArgs }) => {
|
371
371
|
// TODO fix this name to contextsPrime
|
372
372
|
const contextsPrime = []
|
373
373
|
const generatedPrime = []
|
@@ -378,7 +378,7 @@ const processContextsB = ({ config, hierarchy, semantics, generators, json, isTe
|
|
378
378
|
const contexts = setupContexts(json.contexts)
|
379
379
|
|
380
380
|
const objects = config.get('objects')
|
381
|
-
const args = { objects, isResponse: true, response: json, isTest, getObjects: getObjects(objects) }
|
381
|
+
const args = { objects, isResponse: true, response: json, isTest, isInstance, getObjects: getObjects(objects), isInstance }
|
382
382
|
if (!json.logs) {
|
383
383
|
json.logs = []
|
384
384
|
}
|
@@ -418,19 +418,18 @@ const processContextsB = ({ config, hierarchy, semantics, generators, json, isTe
|
|
418
418
|
if (json.has_errors) {
|
419
419
|
throw new Error('There are errors in the logs. Run with the -d flag and grep for Error')
|
420
420
|
}
|
421
|
+
const generateParenthesized = isTest || (commandLineArgs && commandLineArgs.save)
|
421
422
|
if (!config.get('skipSemantics')) {
|
422
|
-
|
423
|
-
|
424
|
-
|
425
|
-
|
426
|
-
|
427
|
-
|
428
|
-
|
429
|
-
e.message += `\nThe most called semantic was:\nnotes: ${mostCalled.notes}\nmatch: ${mostCalled.matcher.toString()}\napply: ${mostCalled._apply.toString()}\n`
|
430
|
-
}
|
431
|
-
// contextPrime = semantics.apply(args, { marker: 'error', context, error: e })
|
432
|
-
contextPrime = semantics.apply(args, { marker: 'error', context, reason: e.reason })
|
423
|
+
const semantics = config.getSemantics(json.logs)
|
424
|
+
try {
|
425
|
+
contextPrime = semantics.apply(args, context)
|
426
|
+
} catch( e ) {
|
427
|
+
if (e.message == 'Maximum call stack size exceeded') {
|
428
|
+
const mostCalled = semantics.getMostCalled()
|
429
|
+
e.message += `\nThe most called semantic was:\nnotes: ${mostCalled.notes}\nmatch: ${mostCalled.matcher.toString()}\napply: ${mostCalled._apply.toString()}\n`
|
433
430
|
}
|
431
|
+
// contextPrime = semantics.apply(args, { marker: 'error', context, error: e })
|
432
|
+
contextPrime = semantics.apply(args, { marker: 'error', context, reason: e.reason })
|
434
433
|
}
|
435
434
|
}
|
436
435
|
if (contextPrime.controlRemove) {
|
@@ -439,7 +438,7 @@ const processContextsB = ({ config, hierarchy, semantics, generators, json, isTe
|
|
439
438
|
let assumed = { isResponse: true };
|
440
439
|
const generated = contextPrime.isResponse ? config.getGenerators(json.logs).apply(args, contextPrime, assumed)[0] : ''
|
441
440
|
let generatedParenthesized = []
|
442
|
-
if (
|
441
|
+
if (generateParenthesized) {
|
443
442
|
config.parenthesized = true
|
444
443
|
generatedParenthesized = contextPrime.isResponse ? config.getGenerators(json.logs).apply(args, contextPrime, assumed)[0] : ''
|
445
444
|
config.parenthesized = false
|
@@ -452,12 +451,12 @@ const processContextsB = ({ config, hierarchy, semantics, generators, json, isTe
|
|
452
451
|
args.gs = gs(args.g)
|
453
452
|
args.gsp = gs(args.gsp)
|
454
453
|
args.gsr = gs(args.gr)
|
455
|
-
if (
|
454
|
+
if (generateParenthesized) {
|
456
455
|
config.parenthesized = false
|
457
456
|
}
|
458
457
|
const paraphrases = config.getGenerators(json.logs).apply(args, contextPrime, assumed)[0]
|
459
458
|
let paraphrasesParenthesized = []
|
460
|
-
if (
|
459
|
+
if (generateParenthesized) {
|
461
460
|
config.parenthesized = true
|
462
461
|
paraphrasesParenthesized = config.getGenerators(json.logs).apply(args, contextPrime, assumed)[0]
|
463
462
|
config.parenthesized = false
|
@@ -471,7 +470,7 @@ const processContextsB = ({ config, hierarchy, semantics, generators, json, isTe
|
|
471
470
|
contextsPrime.push(contextPrime)
|
472
471
|
generatedPrime.push(generated)
|
473
472
|
paraphrasesPrime.push(paraphrases)
|
474
|
-
if (
|
473
|
+
if (generateParenthesized) {
|
475
474
|
paraphrasesParenthesizedPrime.push(paraphrasesParenthesized)
|
476
475
|
generatedParenthesizedPrime.push(generatedParenthesized)
|
477
476
|
}
|
@@ -549,8 +548,11 @@ const setupProcessB = ({ config, initializer, allowDelta=false } = {}) => {
|
|
549
548
|
// console.log('config', config)
|
550
549
|
data.delta = config.delta()
|
551
550
|
} else {
|
552
|
-
|
551
|
+
config.toData(data)
|
552
|
+
// Object.assign(data, config.config)
|
553
553
|
}
|
554
|
+
|
555
|
+
// config.toServer(data)
|
554
556
|
|
555
557
|
if (data.namespaces) {
|
556
558
|
for (const uuid of Object.keys(data.namespaces)) {
|
@@ -574,7 +576,7 @@ const setupProcessB = ({ config, initializer, allowDelta=false } = {}) => {
|
|
574
576
|
}
|
575
577
|
|
576
578
|
// instance template
|
577
|
-
const
|
579
|
+
const loadInstance = (config, instance) => {
|
578
580
|
const transitoryMode = global.transitoryMode
|
579
581
|
global.transitoryMode = false
|
580
582
|
const { /* data, generators, semantics, */ hierarchy } = setupProcessB({ config })
|
@@ -584,15 +586,15 @@ const processInstance = (config, instance) => {
|
|
584
586
|
if (results.extraConfig) {
|
585
587
|
// config.addInternal(results, useOldVersion = true, skipObjects = false, includeNamespaces = true, allowNameToBeNull = false)
|
586
588
|
// config.addInternal(config.template.queries[i], { handleCalculatedProps: true } )
|
587
|
-
config.addInternal(instance.template.queries[i], { handleCalculatedProps: true } )
|
589
|
+
config.addInternal(instance.template.queries[i], { addFirst: true, handleCalculatedProps: true } )
|
588
590
|
} else {
|
589
|
-
processContextsB({ config, hierarchy, json: results/*, generators, semantics */, commandLineArgs: {} })
|
591
|
+
processContextsB({ config, hierarchy, json: results/*, generators, semantics */, commandLineArgs: {}, isInstance: `instance${i}` })
|
590
592
|
}
|
591
593
|
}
|
592
594
|
global.transitoryMode = transitoryMode
|
593
595
|
}
|
594
596
|
|
595
|
-
const _process = async (config, query, { initializer, commandLineArgs, credentials, writeTests, isTest, saveDeveloper, testConfig, testsFN, errorHandler = defaultErrorHandler } = {}) => {
|
597
|
+
const _process = async (config, query, { initializer, commandLineArgs, credentials, writeTests, isTest, saveDeveloper, rebuildingTemplate, testConfig, testsFN, errorHandler = defaultErrorHandler } = {}) => {
|
596
598
|
if (credentials) {
|
597
599
|
config.server(credentials.server, credentials.key)
|
598
600
|
}
|
@@ -616,6 +618,9 @@ const _process = async (config, query, { initializer, commandLineArgs, credentia
|
|
616
618
|
if (commandLineArgs && commandLineArgs.checkForLoop) {
|
617
619
|
data.checkForLoop = true
|
618
620
|
}
|
621
|
+
if (rebuildingTemplate) {
|
622
|
+
data.errors_ignore_contextual_priorities_non_existant_ops = true
|
623
|
+
}
|
619
624
|
let queries = query.split('\\n')
|
620
625
|
|
621
626
|
try {
|
@@ -694,7 +699,12 @@ const _process = async (config, query, { initializer, commandLineArgs, credentia
|
|
694
699
|
|
695
700
|
if (writeTests) {
|
696
701
|
const actual_config = getConfigForTest(config, testConfig)
|
697
|
-
|
702
|
+
const saveObjects = {...config.config.objects}
|
703
|
+
saveObjects.nameToUUID = {}
|
704
|
+
for (let km of config.configs) {
|
705
|
+
saveObjects.nameToUUID[km.name] = km.uuid
|
706
|
+
}
|
707
|
+
writeTest(testsFN, query, saveObjects, response.generated, response.paraphrases, response.responses, response.contexts, response.associations, response.metadata, actual_config, saveDeveloper, response.paraphrasesParenthesized, response.generatedParenthesized)
|
698
708
|
}
|
699
709
|
|
700
710
|
return response
|
@@ -760,7 +770,6 @@ const runTest = async (config, expected, { args, verbose, afterTest, testConfig,
|
|
760
770
|
testConfigName = testConfig.testModuleName
|
761
771
|
}
|
762
772
|
config.beforeQuery({ query: test, isModule: false, objects })
|
763
|
-
// config.resetMotivations()
|
764
773
|
try {
|
765
774
|
const result = await _process(config, test, { errorHandler, isTest: true })
|
766
775
|
result.query = test
|
@@ -778,12 +787,17 @@ const runTest = async (config, expected, { args, verbose, afterTest, testConfig,
|
|
778
787
|
delete expected_objects.nameToUUID
|
779
788
|
const actual_objects = sortJson(convertToStable(config.config.objects), { depth: 25 })
|
780
789
|
const failed_paraphrases = !matching(result.paraphrases, expected.paraphrases)
|
781
|
-
|
782
|
-
|
790
|
+
let failed_paraphrasesParenthesized = !matching(result.paraphrasesParenthesized, expected.paraphrasesParenthesized)
|
791
|
+
let failed_generatedParenthesized = !matching(result.generatedParenthesized, expected.generatedParenthesized)
|
783
792
|
const failed_responses = !matching(result.responses, expected.responses)
|
784
793
|
const failed_contexts = !matching(result.contexts, expected.contexts)
|
785
794
|
const failed_objects = !matching(actual_objects, expected_objects)
|
786
795
|
|
796
|
+
if (args.testNoParenthesized) {
|
797
|
+
failed_paraphrasesParenthesized = false
|
798
|
+
failed_generatedParenthesized = false
|
799
|
+
}
|
800
|
+
|
787
801
|
const pickEm = (getObjects) => {
|
788
802
|
const picked = {}
|
789
803
|
for (let prop of (testConfig.check || [])) {
|
@@ -809,6 +823,11 @@ const runTest = async (config, expected, { args, verbose, afterTest, testConfig,
|
|
809
823
|
}
|
810
824
|
return expected.objects.namespaced[expected.objects.nameToUUID[name]]
|
811
825
|
}
|
826
|
+
try {
|
827
|
+
sortJson(pickEm(expectedGetObjects), { depth: 25 })
|
828
|
+
} catch ( e ) {
|
829
|
+
debugger
|
830
|
+
}
|
812
831
|
const expected_checked = sortJson(pickEm(expectedGetObjects), { depth: 25 })
|
813
832
|
const actualGetObjects = (name) => {
|
814
833
|
if (!name) {
|
@@ -935,7 +954,6 @@ const runTests = async (config, testFile, juicyBits) => {
|
|
935
954
|
const saveTest = async (testFile, config, test, expected, testConfig, saveDeveloper) => {
|
936
955
|
config.rebuild()
|
937
956
|
const objects = getObjects(config.config.objects)(config.uuid)
|
938
|
-
//config.resetMotivations()
|
939
957
|
config.beforeQuery({ query: test, isModule: false, objects })
|
940
958
|
console.log(test)
|
941
959
|
const result = await _process(config, test, { isTest: true })
|
@@ -1118,10 +1136,11 @@ const defaultErrorHandler = async (error) => {
|
|
1118
1136
|
doErrorExit = true
|
1119
1137
|
}
|
1120
1138
|
|
1121
|
-
if (doErrorExit) {
|
1139
|
+
if (typeof runtime.process.exit == 'function' && doErrorExit) {
|
1122
1140
|
runtime.process.exit(-1)
|
1123
1141
|
}
|
1124
|
-
|
1142
|
+
|
1143
|
+
throw error
|
1125
1144
|
}
|
1126
1145
|
|
1127
1146
|
const defaultInnerProcess = (config, errorHandler, responses) => {
|
@@ -1142,6 +1161,37 @@ const defaultInnerProcess = (config, errorHandler, responses) => {
|
|
1142
1161
|
} else {
|
1143
1162
|
console.log('objects', runtime.util.inspect(config.get('objects'), { depth: Infinity, sorted: true }))
|
1144
1163
|
}
|
1164
|
+
|
1165
|
+
const pickEm = () => {
|
1166
|
+
const picked = {}
|
1167
|
+
const namespaced = config.get('objects')['namespaced']
|
1168
|
+
for (let prop of (config.testConfig.check || [])) {
|
1169
|
+
if (prop.km) {
|
1170
|
+
/*
|
1171
|
+
const objects = namespaced[prop.km]]
|
1172
|
+
picked[prop.km] = {}
|
1173
|
+
for (let p of c.testConfig.check) {
|
1174
|
+
if (p.km) {
|
1175
|
+
continue
|
1176
|
+
}
|
1177
|
+
picked[p] = objects[p]
|
1178
|
+
}
|
1179
|
+
*/
|
1180
|
+
console.log('TODO implement this if needed')
|
1181
|
+
} else {
|
1182
|
+
const objects = namespaced[config.uuid]
|
1183
|
+
picked[prop] = objects[prop]
|
1184
|
+
}
|
1185
|
+
}
|
1186
|
+
return picked
|
1187
|
+
}
|
1188
|
+
|
1189
|
+
const picked = pickEm()
|
1190
|
+
if (!_.isEmpty(picked)) {
|
1191
|
+
console.log('--- checked object properties ---')
|
1192
|
+
console.log(JSON.stringify(picked, null, 2))
|
1193
|
+
}
|
1194
|
+
|
1145
1195
|
console.log('--- The contexts are ----------')
|
1146
1196
|
console.log(JSON.stringify(sortJson(responses.contexts, { depth: 25 }), null, 2))
|
1147
1197
|
console.log('')
|
@@ -1207,7 +1257,8 @@ entodicton.knowledgeModule( {
|
|
1207
1257
|
`
|
1208
1258
|
*/
|
1209
1259
|
|
1210
|
-
|
1260
|
+
// loadTemplate BuiltTemplate
|
1261
|
+
const rebuildTemplate = async ({ config, target, template, errorHandler = defaultErrorHandler }) => {
|
1211
1262
|
const accumulators = {
|
1212
1263
|
resultss: [],
|
1213
1264
|
fragments: [],
|
@@ -1231,8 +1282,6 @@ const build = async ({ config, target, template, errorHandler = defaultErrorHand
|
|
1231
1282
|
if (property == 'fragments') {
|
1232
1283
|
global.transitoryMode = true
|
1233
1284
|
}
|
1234
|
-
// greg32
|
1235
|
-
// config.addInternal( query )
|
1236
1285
|
if (hierarchy) {
|
1237
1286
|
for (let edge of hierarchy) {
|
1238
1287
|
if (Array.isArray(edge)) {
|
@@ -1244,7 +1293,7 @@ const build = async ({ config, target, template, errorHandler = defaultErrorHand
|
|
1244
1293
|
}
|
1245
1294
|
|
1246
1295
|
try {
|
1247
|
-
const results = await _process(config, query.query, {initializer})
|
1296
|
+
const results = await _process(config, query.query, {initializer, rebuildingTemplate: true})
|
1248
1297
|
if (config.config.debug) {
|
1249
1298
|
// TODO pass in the error handler like the other ones
|
1250
1299
|
defaultInnerProcess(config, defaultErrorHandler, results)
|
@@ -1274,6 +1323,12 @@ const build = async ({ config, target, template, errorHandler = defaultErrorHand
|
|
1274
1323
|
// it will just get added to the config
|
1275
1324
|
const extraConfig = queryOrExtraConfig
|
1276
1325
|
console.log('config', extraConfig)
|
1326
|
+
try {
|
1327
|
+
config.addInternal(_.cloneDeep(extraConfig), { handleCalculatedProps: true } )
|
1328
|
+
} catch ( e ) {
|
1329
|
+
const where = extraConfig.where ? ` ${extraConfig.where}` : ''
|
1330
|
+
throw new Error(`Error processing extra config${where}: ${e.stack}}`)
|
1331
|
+
}
|
1277
1332
|
accumulators[property].push({ extraConfig: true, ...extraConfig })
|
1278
1333
|
await looper(queries)
|
1279
1334
|
}
|
@@ -1349,9 +1404,15 @@ const knowledgeModule = async ({
|
|
1349
1404
|
beforeTests = () => {},
|
1350
1405
|
afterTests = () => {},
|
1351
1406
|
beforeTest = () => {},
|
1352
|
-
afterTest = () => {}
|
1407
|
+
afterTest = () => {},
|
1408
|
+
...rest
|
1353
1409
|
} = {}) => {
|
1354
1410
|
|
1411
|
+
const unknownArgs = Object.keys(rest)
|
1412
|
+
if (unknownArgs.length > 0) {
|
1413
|
+
throw new Error(`Unknown arguments to knowledgeModule: ${unknownArgs.join()}`)
|
1414
|
+
}
|
1415
|
+
|
1355
1416
|
config.beforeQuery = beforeQuery
|
1356
1417
|
config.beforeTests = beforeTests
|
1357
1418
|
config.afterTests = afterTests
|
@@ -1431,7 +1492,8 @@ const knowledgeModule = async ({
|
|
1431
1492
|
if (!isProcess) {
|
1432
1493
|
if (template) {
|
1433
1494
|
if (config.needsRebuild(template.template, template.instance)) {
|
1434
|
-
|
1495
|
+
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.`
|
1496
|
+
throw new Error(error)
|
1435
1497
|
}
|
1436
1498
|
try {
|
1437
1499
|
config.load(template.template, template.instance)
|
@@ -1446,9 +1508,10 @@ const knowledgeModule = async ({
|
|
1446
1508
|
description: 'Entodicton knowledge module'
|
1447
1509
|
})
|
1448
1510
|
|
1449
|
-
const helpDebugAssociation = 'In order to get a debug break when a specific association is created set the DEBUG_ASSOCIATION environment variable to the JSON of the association to break on. For example DEBUG_ASSOCIATION=\'["the
|
1450
|
-
const helpDebugHierarchy = 'In order to get a debug break when a specific hierarchy is created set the DEBUG_HIERARCHY environment variable to the JSON of the child-parent pair to break on. For example DEBUG_HIERARCHY=\'["cat
|
1451
|
-
const helpDebugPriority = 'In order to get a debug break when a specific set of priorities is created set set DEBUG_PRIORITY environment variable to the JSON of the priorities that you want to break on. For example DEBUG_PRIORITY=\'["verb
|
1511
|
+
const helpDebugAssociation = 'In order to get a debug break when a specific association is created set the DEBUG_ASSOCIATION environment variable to the JSON of the association to break on. For example DEBUG_ASSOCIATION=\'[["the", 0], ["mammal", 1]]\' })'
|
1512
|
+
const helpDebugHierarchy = 'In order to get a debug break when a specific hierarchy is created set the DEBUG_HIERARCHY environment variable to the JSON of the child-parent pair to break on. For example DEBUG_HIERARCHY=\'[["cat", 1], ["mammel", 1]]\' })'
|
1513
|
+
const helpDebugPriority = 'In order to get a debug break when a specific set of priorities is created set set DEBUG_PRIORITY environment variable to the JSON of the priorities that you want to break on. For example DEBUG_PRIORITY=\'[["verb", 0], ["article", 0]]\' })'
|
1514
|
+
const helpDebugContextualPriority = 'In order to get a debug break when a specific set of contextual priorities is created set set DEBUG_CONTEXTUAL_PRIORITY environment variable to the JSON of the priorities that you want to break on. For example DEBUG_CONTEXTUAL_PRIORITY=\'{ context: [["verb", 0], ["article", 0], select: 1}\' })'
|
1452
1515
|
const helpDebugBridge = 'In order to get a debug break when a specific bridge is created set the DEBUG_BRIDGE environment variable to id/level to break on. For example DEBUG_BRIDGE=\'id#level\' })'
|
1453
1516
|
const helpDebugOperator = 'In order to get a debug break when a specific hierarcy is created set the DEBUG_OPERATOR environment variable to debug any config loaded. For example DEBUG_OPERATOR=\'([operator] ([arg]))\' })'
|
1454
1517
|
|
@@ -1457,6 +1520,7 @@ const knowledgeModule = async ({
|
|
1457
1520
|
parser.add_argument('-t', '--test', { action: 'store_true', help: 'Run the tests. Create tests by running with the --query + --save flag' })
|
1458
1521
|
parser.add_argument('-tv', '--testVerbose', { action: 'store_true', help: 'Run the tests in verbose mode. Create tests by running with the --query or --loop with the --save flag' })
|
1459
1522
|
parser.add_argument('-tva', '--testAllVerbose', { action: 'store_true', help: 'Run the tests in verbose mode. All the tests will be run instead of stopping at first failure. Create tests by running with the --query or --loop with the --save flag' })
|
1523
|
+
parser.add_argument('-tnp', '--testNoParenthesized', { action: 'store_true', help: 'Don\' check parenthesized differences for the tests' })
|
1460
1524
|
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' })
|
1461
1525
|
// 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.' })
|
1462
1526
|
parser.add_argument('-rt', '--rebuildTemplate', { action: 'store_true', help: 'Force a template rebuild' })
|
@@ -1483,6 +1547,7 @@ const knowledgeModule = async ({
|
|
1483
1547
|
parser.add_argument('-da', '--debugAssociation', { help: helpDebugAssociation })
|
1484
1548
|
parser.add_argument('-dh', '--debugHierarchy', { help: helpDebugHierarchy })
|
1485
1549
|
parser.add_argument('-dp', '--debugPriority', { help: helpDebugPriority })
|
1550
|
+
parser.add_argument('-dcp', '--debugContextualPriority', { help: helpDebugContextualPriority })
|
1486
1551
|
parser.add_argument('-db', '--debugBridge', { help: helpDebugBridge })
|
1487
1552
|
parser.add_argument('-do', '--debugOperator', { help: helpDebugOperator })
|
1488
1553
|
|
@@ -1712,11 +1777,13 @@ const knowledgeModule = async ({
|
|
1712
1777
|
if (JSON.stringify(result.expected.paraphrases) !== JSON.stringify(result.actual.paraphrases)) {
|
1713
1778
|
hasError = true
|
1714
1779
|
}
|
1715
|
-
if (
|
1716
|
-
|
1717
|
-
|
1718
|
-
|
1719
|
-
|
1780
|
+
if (!args.testNoParenthesized) {
|
1781
|
+
if (JSON.stringify(result.expected.paraphrasesParenthesized) !== JSON.stringify(result.actual.paraphrasesParenthesized)) {
|
1782
|
+
hasError = true
|
1783
|
+
}
|
1784
|
+
if (JSON.stringify(result.expected.generatedParenthesized) !== JSON.stringify(result.actual.generatedParenthesized)) {
|
1785
|
+
hasError = true
|
1786
|
+
}
|
1720
1787
|
}
|
1721
1788
|
if (JSON.stringify(result.expected.responses) !== JSON.stringify(result.actual.responses)) {
|
1722
1789
|
hasError = true
|
@@ -1742,9 +1809,13 @@ const knowledgeModule = async ({
|
|
1742
1809
|
}
|
1743
1810
|
}
|
1744
1811
|
show('paraphrases', result.expected.paraphrases, result.actual.paraphrases)
|
1745
|
-
|
1812
|
+
if (!args.testNoParenthesized) {
|
1813
|
+
show('paraphrases parenthesized', result.expected.paraphrasesParenthesized, result.actual.paraphrasesParenthesized)
|
1814
|
+
}
|
1746
1815
|
show('responses', result.expected.responses, result.actual.responses)
|
1747
|
-
|
1816
|
+
if (!args.testNoParenthesized) {
|
1817
|
+
show('responses parenthesized', result.expected.generatedParenthesized, result.actual.generatedParenthesized)
|
1818
|
+
}
|
1748
1819
|
/*
|
1749
1820
|
if (JSON.stringify(result.expected.paraphrases) !== JSON.stringify(result.actual.paraphrases)) {
|
1750
1821
|
if (!headerShown) {
|
@@ -1918,7 +1989,7 @@ module.exports = {
|
|
1918
1989
|
w,
|
1919
1990
|
// submitBug,
|
1920
1991
|
ensureTestFile,
|
1921
|
-
|
1992
|
+
rebuildTemplate,
|
1922
1993
|
processContext,
|
1923
1994
|
processContexts,
|
1924
1995
|
runTests,
|
@@ -1930,8 +2001,9 @@ module.exports = {
|
|
1930
2001
|
Digraph,
|
1931
2002
|
analyzeMetaData,
|
1932
2003
|
processContextsB,
|
1933
|
-
|
2004
|
+
loadInstance,
|
1934
2005
|
gs,
|
1935
2006
|
flattens,
|
1936
2007
|
writeTest
|
1937
2008
|
}
|
2009
|
+
|
package/index.js
CHANGED