theprogrammablemind 7.5.8-beta.14 → 7.5.8-beta.16
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 +11 -7
- package/package.json +1 -1
- package/src/config.js +130 -2
package/client.js
CHANGED
@@ -109,7 +109,7 @@ class ErrorReason extends Error {
|
|
109
109
|
|
110
110
|
const setupArgs = (args, config, logs, hierarchy) => {
|
111
111
|
config.setArgs(args)
|
112
|
-
args.calls = new InitCalls(config.name)
|
112
|
+
args.calls = new InitCalls(args.isInstance ? `${args.isInstance}#${config.name}` : config.name)
|
113
113
|
if (global.theprogrammablemind && global.theprogrammablemind.loadForTesting) {
|
114
114
|
args.calls = new InitCalls(Object.keys(global.theprogrammablemind.loadForTesting)[0])
|
115
115
|
}
|
@@ -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
|
}
|
@@ -551,6 +551,8 @@ const setupProcessB = ({ config, initializer, allowDelta=false } = {}) => {
|
|
551
551
|
} else {
|
552
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)) {
|
@@ -586,7 +588,7 @@ const processInstance = (config, instance) => {
|
|
586
588
|
// config.addInternal(config.template.queries[i], { handleCalculatedProps: true } )
|
587
589
|
config.addInternal(instance.template.queries[i], { 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
|
@@ -1447,9 +1449,10 @@ const knowledgeModule = async ({
|
|
1447
1449
|
description: 'Entodicton knowledge module'
|
1448
1450
|
})
|
1449
1451
|
|
1450
|
-
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
|
1451
|
-
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
|
1452
|
-
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
|
1452
|
+
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]]\' })'
|
1453
|
+
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]]\' })'
|
1454
|
+
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]]\' })'
|
1455
|
+
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}\' })'
|
1453
1456
|
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\' })'
|
1454
1457
|
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]))\' })'
|
1455
1458
|
|
@@ -1484,6 +1487,7 @@ const knowledgeModule = async ({
|
|
1484
1487
|
parser.add_argument('-da', '--debugAssociation', { help: helpDebugAssociation })
|
1485
1488
|
parser.add_argument('-dh', '--debugHierarchy', { help: helpDebugHierarchy })
|
1486
1489
|
parser.add_argument('-dp', '--debugPriority', { help: helpDebugPriority })
|
1490
|
+
parser.add_argument('-dcp', '--debugContextualPriority', { help: helpDebugContextualPriority })
|
1487
1491
|
parser.add_argument('-db', '--debugBridge', { help: helpDebugBridge })
|
1488
1492
|
parser.add_argument('-do', '--debugOperator', { help: helpDebugOperator })
|
1489
1493
|
|
package/package.json
CHANGED
package/src/config.js
CHANGED
@@ -22,6 +22,82 @@ const indent = (string, indent) => {
|
|
22
22
|
return string.replace(/^/gm, ' '.repeat(indent));
|
23
23
|
}
|
24
24
|
|
25
|
+
const config_toServer = (config) => {
|
26
|
+
if (config.contextual_priorities) {
|
27
|
+
config.contextual_priorities = config.contextual_priorities.map((cp) => {
|
28
|
+
return [cp.context, cp.choose]
|
29
|
+
})
|
30
|
+
}
|
31
|
+
}
|
32
|
+
|
33
|
+
const contextual_priorities_toServer = (cp) => {
|
34
|
+
if (cp.context && cp.choose) {
|
35
|
+
return [cp.context, cp.choose]
|
36
|
+
}
|
37
|
+
return cp
|
38
|
+
}
|
39
|
+
|
40
|
+
const contextual_priorities_toClient = (cp) => {
|
41
|
+
if (cp.context && cp.choose) {
|
42
|
+
return cp
|
43
|
+
}
|
44
|
+
return { context: cp[0], choose: cp[1] }
|
45
|
+
}
|
46
|
+
|
47
|
+
const operatorKey_valid = (key) => {
|
48
|
+
if (
|
49
|
+
!_.isArray(key) ||
|
50
|
+
key.length != 2 ||
|
51
|
+
!_.isString(key[0]) ||
|
52
|
+
!_.isInteger(key[1]) ||
|
53
|
+
key[1] < 0
|
54
|
+
) {
|
55
|
+
|
56
|
+
let details = ''
|
57
|
+
if (!_.isArray(key)) {
|
58
|
+
details = "Expected an array."
|
59
|
+
} else if (key.length != 2) {
|
60
|
+
details = "Expected an array of length two."
|
61
|
+
} else if (!_.isString(key[0])) {
|
62
|
+
details = "Expected element zero to be a string that is an operator id."
|
63
|
+
} else if (!_.isInteger(key[1])) {
|
64
|
+
details = "Expected element one to be a number that is an operator level."
|
65
|
+
} else if (key[1] < 0) {
|
66
|
+
details = "Expected element one to be a number that is an operator level which is greater than zero."
|
67
|
+
}
|
68
|
+
throw new Error(`${JSON.stringify(key)} is not a valid operator key. Values are of the form [<operatorId>, <operatorLevel>]. ${details}`)
|
69
|
+
}
|
70
|
+
}
|
71
|
+
|
72
|
+
const elist = (list, check, prefix) => {
|
73
|
+
for ([index, element] of list.entries()) {
|
74
|
+
try {
|
75
|
+
check(element)
|
76
|
+
} catch( e ) {
|
77
|
+
throw new Error(prefix(index, e))
|
78
|
+
}
|
79
|
+
}
|
80
|
+
}
|
81
|
+
const contextual_priorities_valid = (cps) => {
|
82
|
+
elist(cps, (cp) => contextual_priority_valid(cp), (index, e) => `contextual_priorities has an invalid contextual priority at position ${index}. ${e}`)
|
83
|
+
}
|
84
|
+
|
85
|
+
const contextual_priority_valid = (cp) => {
|
86
|
+
if (!cp.context) {
|
87
|
+
throw new Error(`The contextual priority ${JSON.stringify(cp)} is missing the "context" property. That is a list of the operator keys that are to be prioritized differently.`)
|
88
|
+
}
|
89
|
+
if (!_.isArray(cp.context)) {
|
90
|
+
throw new Error(`The contextual priority ${JSON.stringify(cp)} has an invalid "context" value. That is a list of the operator keys that are to be prioritized differently.`)
|
91
|
+
}
|
92
|
+
elist(cp.context, (element) => operatorKey_valid(element), (index, e) => `The contextual priority ${JSON.stringify(cp)} has an invalid operator key at position ${index}. ${e}`)
|
93
|
+
if (!cp.choose && cp.choose !== 0) {
|
94
|
+
throw new Error(`The contextual priority ${JSON.stringify(cp)} is missing the "choose" property. That is an index into the "context" property of the operator that is to be prioritized.`)
|
95
|
+
}
|
96
|
+
if (!_.isInteger(cp.choose) || cp.choose < 0 || cp.choose >= cp.context.length) {
|
97
|
+
throw new Error(`The contextual priority ${JSON.stringify(cp)} is missing the "choose" property. That is an index into the "context" property of the operator that is to be prioritized. Valid values are between 0 and ${cp.context.length-1}.`)
|
98
|
+
}
|
99
|
+
}
|
100
|
+
|
25
101
|
const handleBridgeProps = (config, bridge) => {
|
26
102
|
ecatch(`While processing the bridge for ${bridge.id}#${bridge.level}`,
|
27
103
|
() => {
|
@@ -171,6 +247,10 @@ if (runtime.process.env.DEBUG_PRIORITY) {
|
|
171
247
|
global.entodictonDebugPriority = JSON.parse(runtime.process.env.DEBUG_PRIORITY)
|
172
248
|
}
|
173
249
|
|
250
|
+
if (runtime.process.env.DEBUG_CONTEXTUAL_PRIORITY) {
|
251
|
+
global.entodictonDebugContextualPriority = JSON.parse(runtime.process.env.DEBUG_CONTEXTUAL_PRIORITY)
|
252
|
+
}
|
253
|
+
|
174
254
|
if (runtime.process.env.DEBUG_ASSOCIATION) {
|
175
255
|
global.entodictonDebugAssociation = JSON.parse(runtime.process.env.DEBUG_ASSOCIATION)
|
176
256
|
}
|
@@ -489,6 +569,10 @@ const multiApiImpl = (initializer) => {
|
|
489
569
|
|
490
570
|
class Config {
|
491
571
|
|
572
|
+
toServer (config) {
|
573
|
+
return config_toServer(config)
|
574
|
+
}
|
575
|
+
|
492
576
|
inDevelopmentMode (call) {
|
493
577
|
config.developmentModeOn += 1
|
494
578
|
try {
|
@@ -548,6 +632,7 @@ class Config {
|
|
548
632
|
},
|
549
633
|
eqClasses: [],
|
550
634
|
priorities: [], // Done
|
635
|
+
contextual_priorities: [],
|
551
636
|
version: '3',
|
552
637
|
debug: false,
|
553
638
|
associations: { // Done
|
@@ -586,6 +671,7 @@ class Config {
|
|
586
671
|
'namespaces',
|
587
672
|
'eqClasses',
|
588
673
|
'priorities',
|
674
|
+
'contextual_priorities',
|
589
675
|
'associations',
|
590
676
|
'words',
|
591
677
|
'floaters',
|
@@ -825,6 +911,22 @@ class Config {
|
|
825
911
|
this._delta.json.priorities.push({ action: 'add', priorities })
|
826
912
|
}
|
827
913
|
|
914
|
+
// [ operators: <list of [id, level]>, select: <index of prioritized operator> ]
|
915
|
+
addContextualPriority(contextual_priority) {
|
916
|
+
if (!this.config.contextual_priorities) {
|
917
|
+
this.config.contextual_priorities = []
|
918
|
+
}
|
919
|
+
if (global.entodictonDebugContextualPriority) {
|
920
|
+
if (helpers.safeEquals(entodictonDebugContextualPriority, contextual_priorities)) {
|
921
|
+
debugger; // debug hierarchy hit
|
922
|
+
}
|
923
|
+
}
|
924
|
+
contextual_priority_valid(contextual_priority)
|
925
|
+
const cpServer = contextual_priorities_toServer(contextual_priority)
|
926
|
+
this.config.contextual_priorities.push(cpServer)
|
927
|
+
this._delta.json.contextual_priorities.push({ action: 'add', contextual_priority: cpServer })
|
928
|
+
}
|
929
|
+
|
828
930
|
addHierarchy (child, parent) {
|
829
931
|
if (child && parent || !child || Array.isArray(child) || (typeof child == 'string' && !parent)) {
|
830
932
|
this.addHierarchyChildParent(child, parent)
|
@@ -1233,6 +1335,7 @@ class Config {
|
|
1233
1335
|
'operators',
|
1234
1336
|
'words',
|
1235
1337
|
'priorities',
|
1338
|
+
'contextual_priorities',
|
1236
1339
|
'associations',
|
1237
1340
|
'name',
|
1238
1341
|
'version',
|
@@ -1262,6 +1365,7 @@ class Config {
|
|
1262
1365
|
config.hierarchy = config.hierarchy || []
|
1263
1366
|
config.associations = config.associations || { negative: [], positive: [] }
|
1264
1367
|
config.priorities = config.priorities || []
|
1368
|
+
config.contextual_priorities = config.contextual_priorities || []
|
1265
1369
|
}
|
1266
1370
|
|
1267
1371
|
this.maxDepth = 20 // for generators and semantics
|
@@ -1315,6 +1419,10 @@ class Config {
|
|
1315
1419
|
}
|
1316
1420
|
}
|
1317
1421
|
|
1422
|
+
if (config && config.contextual_priorities) {
|
1423
|
+
contextual_priorities_valid(config.contextual_priorities)
|
1424
|
+
}
|
1425
|
+
|
1318
1426
|
normalizeConfig(config)
|
1319
1427
|
|
1320
1428
|
// set the default server so stuff just works
|
@@ -1385,7 +1493,10 @@ class Config {
|
|
1385
1493
|
}
|
1386
1494
|
|
1387
1495
|
delta () {
|
1388
|
-
return {
|
1496
|
+
return {
|
1497
|
+
cacheKey: this._delta.cacheKey,
|
1498
|
+
json: this._delta.json
|
1499
|
+
}
|
1389
1500
|
}
|
1390
1501
|
|
1391
1502
|
resetDelta (cacheKey) {
|
@@ -1397,6 +1508,7 @@ class Config {
|
|
1397
1508
|
bridges: [],
|
1398
1509
|
associations: [],
|
1399
1510
|
priorities: [],
|
1511
|
+
contextual_priorities: [],
|
1400
1512
|
hierarchy: [],
|
1401
1513
|
}
|
1402
1514
|
}
|
@@ -2051,6 +2163,7 @@ class Config {
|
|
2051
2163
|
bridges: this.config.bridges,
|
2052
2164
|
hierarchy: this.config.hierarchy,
|
2053
2165
|
priorities: this.config.priorities,
|
2166
|
+
contextual_priorities: this.config.contextual_priorities,
|
2054
2167
|
associations: this.config.associations,
|
2055
2168
|
words: this.config.words
|
2056
2169
|
}
|
@@ -2059,6 +2172,7 @@ class Config {
|
|
2059
2172
|
this.config.bridges = []
|
2060
2173
|
this.config.hierarchy = []
|
2061
2174
|
this.config.priorities = []
|
2175
|
+
this.config.contextual_priorities = []
|
2062
2176
|
this.config.associations = { positive: [], negative: [] }
|
2063
2177
|
this.config.words = {}
|
2064
2178
|
|
@@ -2279,6 +2393,18 @@ class Config {
|
|
2279
2393
|
config.priorities = priorities
|
2280
2394
|
}
|
2281
2395
|
|
2396
|
+
if (config.contextual_priorities) {
|
2397
|
+
let contextual_priorities = config.contextual_priorities
|
2398
|
+
contextual_priorities = contextual_priorities.map((cp) => {
|
2399
|
+
const [ context, choose ] = cp
|
2400
|
+
const contextPrime = context.map((id) => {
|
2401
|
+
return [toNS(id[0]), id[1]]
|
2402
|
+
})
|
2403
|
+
return [ contextPrime, choose ]
|
2404
|
+
})
|
2405
|
+
config.contextual_priorities = contextual_priorities
|
2406
|
+
}
|
2407
|
+
|
2282
2408
|
for (const bag of bags) {
|
2283
2409
|
if (config[bag]) {
|
2284
2410
|
config[bag] = config[bag].map((b) => {
|
@@ -2708,5 +2834,7 @@ class Config {
|
|
2708
2834
|
}
|
2709
2835
|
|
2710
2836
|
module.exports = {
|
2711
|
-
Config
|
2837
|
+
Config,
|
2838
|
+
config_toServer,
|
2839
|
+
operatorKey_valid,
|
2712
2840
|
}
|