ekms 8.0.0-beta.4 → 8.0.0-beta.41

Sign up to get free protection for your applications and to get access to all the features.
Files changed (98) hide show
  1. package/common/animals.instance.json +2855 -1363
  2. package/common/animals.js +2 -2
  3. package/common/articles.js +108 -0
  4. package/common/articles.test.json +310 -0
  5. package/common/avatar.js +2 -2
  6. package/common/characters.js +9 -11
  7. package/common/colors.instance.json +6980 -3523
  8. package/common/colors.js +2 -2
  9. package/common/colors.test.json +345 -780
  10. package/common/comparable.js +2 -15
  11. package/common/concept.js +17 -11
  12. package/common/countable.js +5 -5
  13. package/common/crew.instance.json +13032 -6570
  14. package/common/crew.js +4 -4
  15. package/common/crew.test.json +714 -452
  16. package/common/currency.js +7 -7
  17. package/common/dialogues.js +117 -238
  18. package/common/dimension.instance.json +265 -264
  19. package/common/dimension.js +13 -13
  20. package/common/dimension.test.json +446 -1640
  21. package/common/edible.instance.json +19910 -9988
  22. package/common/edible.js +2 -2
  23. package/common/emotions.instance.json +146 -128
  24. package/common/emotions.js +4 -4
  25. package/common/evaluate.instance.json +2 -0
  26. package/common/evaluate.js +55 -0
  27. package/common/evaluate.test.json +574 -0
  28. package/common/events.js +6 -6
  29. package/common/fastfood.instance.json +221110 -111293
  30. package/common/fastfood.js +25 -25
  31. package/common/formulas.instance.json +241 -255
  32. package/common/formulas.js +14 -14
  33. package/common/gdefaults.js +19 -19
  34. package/common/help.js +4 -4
  35. package/common/help.test.json +22 -22
  36. package/common/helpers/concept.js +9 -6
  37. package/common/helpers/dialogues.js +2 -3
  38. package/common/helpers/properties.js +48 -58
  39. package/common/helpers.js +1 -1
  40. package/common/hierarchy.js +12 -16
  41. package/common/javascript.js +8 -8
  42. package/common/kirk.instance.json +583 -289
  43. package/common/kirk.js +2 -2
  44. package/common/length.instance.json +5530 -4754
  45. package/common/length.js +2 -2
  46. package/common/listener.js +54 -0
  47. package/common/listener.test.json +104 -0
  48. package/common/math.instance.json +176 -1168
  49. package/common/math.js +11 -11
  50. package/common/meta.js +22 -29
  51. package/common/nameable.instance.json +2 -0
  52. package/common/nameable.js +142 -0
  53. package/common/nameable.test.json +2121 -0
  54. package/common/negation.instance.json +2 -0
  55. package/common/negation.js +38 -0
  56. package/common/negation.test.json +308 -0
  57. package/common/numbers.js +3 -3
  58. package/common/ordering.instance.json +340 -228
  59. package/common/ordering.js +5 -5
  60. package/common/people.instance.json +2066 -1014
  61. package/common/people.js +4 -5
  62. package/common/percentages.instance.json +2 -0
  63. package/common/percentages.js +57 -0
  64. package/common/percentages.test.json +751 -0
  65. package/common/pipboy.instance.json +7974 -6300
  66. package/common/pipboy.js +29 -32
  67. package/common/pokemon.instance.json +4207 -2069
  68. package/common/pokemon.js +4 -4
  69. package/common/pos.js +1 -1
  70. package/common/pressure.instance.json +1341 -1189
  71. package/common/pressure.js +2 -2
  72. package/common/properties.instance.json +130 -60
  73. package/common/properties.js +54 -125
  74. package/common/punctuation.js +2 -2
  75. package/common/reports.instance.json +595 -557
  76. package/common/reports.js +58 -76
  77. package/common/scorekeeper.js +14 -22
  78. package/common/sdefaults.js +13 -3
  79. package/common/sizeable.js +2 -2
  80. package/common/spock.instance.json +583 -289
  81. package/common/spock.js +2 -2
  82. package/common/stgame.js +13 -9
  83. package/common/stm.js +162 -19
  84. package/common/stm.test.json +1734 -1
  85. package/common/tell.js +10 -10
  86. package/common/temperature.instance.json +1484 -1204
  87. package/common/temperature.js +2 -2
  88. package/common/tester.js +2 -2
  89. package/common/testing.js +5 -5
  90. package/common/time.js +7 -7
  91. package/common/tokenize.js +1 -1
  92. package/common/ui.instance.json +257 -258
  93. package/common/ui.js +9 -9
  94. package/common/weight.instance.json +5212 -4233
  95. package/common/weight.js +2 -2
  96. package/common/yesno.js +1 -1
  97. package/main.js +59 -46
  98. package/package.json +27 -6
package/common/spock.js CHANGED
@@ -10,9 +10,9 @@ const template = {
10
10
  ]
11
11
  };
12
12
 
13
- const createConfig = () => {
13
+ const createConfig = async () => {
14
14
  const config = new Config({ name: 'spock', }, module)
15
- config.add(crew())
15
+ await config.add(crew)
16
16
  return config
17
17
  }
18
18
 
package/common/stgame.js CHANGED
@@ -62,22 +62,26 @@ class SpockAPI {
62
62
  }
63
63
 
64
64
 
65
- const createConfig = () => {
66
- const characters = createCharacters()
67
- const kirk = createKirk()
68
- const spock = createSpock()
69
- characters.api = new KirkAPI(kirk);
70
- characters.api = new SpockAPI(spock);
65
+ const createConfig = async () => {
71
66
  const config = new Config({
72
67
  name: 'stgame',
73
68
  operators: [ "([a])" ],
74
69
  bridges: [ { id: 'a', level: 0, bridge: "{ ...next(operator) }" } ],
75
70
  words: {"?": [{"id": "a", "initial": "{}" }]},
76
71
  }, module)
72
+
73
+ const createCharactersHelper = async () => {
74
+ const characters = await createCharacters()
75
+ const kirk = await createKirk()
76
+ const spock = await createSpock()
77
+ await characters.setApi(new KirkAPI(kirk))
78
+ await characters.setApi(new SpockAPI(spock))
79
+ return characters
80
+ }
77
81
  config.stop_auto_rebuild()
78
- config.api = api
79
- config.add(characters)
80
- config.restart_auto_rebuild()
82
+ await config.setApi(api)
83
+ await config.add(createCharactersHelper)
84
+ await config.restart_auto_rebuild()
81
85
  return config
82
86
  }
83
87
 
package/common/stm.js CHANGED
@@ -1,5 +1,8 @@
1
1
  const { Config, knowledgeModule, where } = require('./runtime').theprogrammablemind
2
2
  const { defaultContextCheck } = require('./helpers')
3
+ const helpers = require('./helpers')
4
+ const articles = require('./articles')
5
+ const evaluate = require('./evaluate')
3
6
  const stm_tests = require('./stm.test.json')
4
7
 
5
8
  class API {
@@ -10,6 +13,11 @@ class API {
10
13
  ]
11
14
  this._objects.mentioned = []
12
15
  this._objects.variables = {}
16
+ this.idCounter = 0
17
+ }
18
+
19
+ getId() {
20
+ return ++this.idCounter
13
21
  }
14
22
 
15
23
  addIsA(isA) {
@@ -27,7 +35,11 @@ class API {
27
35
  return false
28
36
  }
29
37
 
30
- mentioned(concept, value = undefined) {
38
+ getByType(type) {
39
+ return this._objects.mentioned.filter( (context) => this.isA(context.marker, type) )
40
+ }
41
+
42
+ mentioned({ context:concept, value=null } = {}) {
31
43
  // TODO value should perhaps have been called id as in concept id and then value could be value
32
44
  if (value) {
33
45
  concept = { ...concept, pullFromContext: false }
@@ -43,49 +55,112 @@ class API {
43
55
  concept.value = value
44
56
  }
45
57
  concept.fromSTM = true
58
+ if (!concept.stm) {
59
+ concept.stm = {}
60
+ }
61
+ if (!concept.stm.id) {
62
+ concept.stm.id = this.getId()
63
+ }
64
+ this._objects.mentioned = this._objects.mentioned.filter( (context) => context.stm && context.stm.id != concept.stm.id )
46
65
  this._objects.mentioned.unshift(concept)
47
66
  }
48
67
 
49
- mentions(context, useHierarchy=true) {
68
+ mentions({ context, useHierarchy=true, all, condition = (() => true) } = {}) {
69
+ const findPrevious = !!context.stm_previous
70
+ const forAll = []
71
+ const addForAll = (context) => {
72
+ if (!forAll.find( (c) => c.stm.id == context.stm.id)) {
73
+ forAll.push(context)
74
+ }
75
+ }
76
+
50
77
  // care about value first
78
+ let findCounter = 0
51
79
  for (let m of this._objects.mentioned) {
52
- if (context.value && context.value == m.marker) {
53
- return m
80
+ if (context.value && (context.value == m.marker || context.value == m.value)) {
81
+ findCounter += 1
82
+ if (findPrevious && findCounter < 2) {
83
+ continue
84
+ }
85
+ if (condition()) {
86
+ if (all) {
87
+ allForAll(m)
88
+ } else {
89
+ return m
90
+ }
91
+ }
54
92
  }
55
93
  }
56
94
 
57
95
  if (!useHierarchy) {
58
96
  return
59
97
  }
98
+
60
99
  // care about marker second
100
+ findCounter = 0
61
101
  for (let m of this._objects.mentioned) {
62
102
  if (context.marker != 'unknown' && this.isA(m.marker, context.marker)) {
63
- return m
103
+ findCounter += 1
104
+ if (findPrevious && findCounter < 2) {
105
+ continue
106
+ }
107
+ if (condition(m)) {
108
+ if (all) {
109
+ addForAll(m)
110
+ } else {
111
+ return m
112
+ }
113
+ }
64
114
  }
65
115
  // if (context.types && context.types.includes(m.marker)) {
66
116
  if (context.types) {
67
117
  for (let parent of context.types) {
68
118
  if (parent != 'unknown' && this.isA(m.marker, parent)) {
69
- return m
119
+ findCounter += 1
120
+ if (findPrevious && findCounter < 2) {
121
+ continue
122
+ }
123
+ if (condition(m)) {
124
+ if (all) {
125
+ addForAll(m)
126
+ } else {
127
+ return m
128
+ }
129
+ }
70
130
  }
71
131
  }
72
132
  }
73
133
  }
74
134
 
135
+ findCounter = 0
75
136
  if (context.types && context.types.length == 1) {
76
137
  for (let m of this._objects.mentioned) {
77
138
  if (context.unknown) {
78
- return m
139
+ findCounter += 1
140
+ if (findPrevious && findCounter < 2) {
141
+ continue
142
+ }
143
+ if (condition(m)) {
144
+ if (all) {
145
+ addForAll(m)
146
+ } else {
147
+ return m
148
+ }
149
+ }
79
150
  }
80
151
  }
81
152
  }
153
+
154
+ if (all) {
155
+ return forAll
156
+ }
82
157
  }
83
158
 
84
159
  getVariable(name) {
85
160
  if (!name) {
86
161
  return
87
162
  }
88
- let valueNew = this.mentions({ marker: name, value: name }, false) || name
163
+ let valueNew = this.mentions({ context: { marker: name, value: name }, useHierarchy: false }) || name
89
164
  if (valueNew && valueNew.value) {
90
165
  valueNew = valueNew.value
91
166
  }
@@ -93,29 +168,97 @@ class API {
93
168
  }
94
169
 
95
170
  setVariable(name, value) {
96
- this.mentioned({ marker: name }, value)
171
+ this.mentioned({ context: { marker: name }, value })
97
172
  }
98
173
  }
99
174
 
100
175
  const api = new API()
101
176
 
102
- let createConfig = () => {
103
- const config = new Config({ name: 'stm' }, module)
177
+ const configStruct = {
178
+ name: 'stm',
179
+ operators: [
180
+ "([stm_previous|previous] ([memorable]))",
181
+ "(([memorable]) [stm_before|before])",
182
+ "([remember] (memorable/*))",
183
+ ],
184
+ words: {
185
+ literals: {
186
+ "m1": [{"id": "memorable", development: true, "initial": "{ value: 'm1' }" }],
187
+ "m2": [{"id": "memorable", development: true, "initial": "{ value: 'm2' }" }],
188
+ },
189
+ },
190
+ bridges: [
191
+ {
192
+ id: 'memorable',
193
+ isA: ['theAble'],
194
+ words: helpers.words('memorable')
195
+ },
196
+ {
197
+ id: 'remember',
198
+ bridge: "{ ...next(operator), postModifiers: ['rememberee'], rememberee: after[0] }",
199
+ isA: ['verby'],
200
+ semantic: async ({context, api, e}) => {
201
+ let value = (await e(context.rememberee)).evalue
202
+ if (value == context.rememberee.value) {
203
+ value = context.rememberee
204
+ }
205
+ api.mentioned({ context: value })
206
+ },
207
+ },
208
+ {
209
+ id: 'stm_previous',
210
+ bridge: '{ ...after[0], modifiers: ["stm_previous"], stm_previous: operator, pullFromContext: true }',
211
+ },
212
+ {
213
+ id: 'stm_before',
214
+ isA: ['adjective'],
215
+ bridge: '{ ...before[0], postModifiers: ["stm_previous"], stm_previous: operator, pullFromContext: true }',
216
+ },
217
+ ],
218
+ semantics: [
219
+ {
220
+ where: where(),
221
+ notes: 'pull from context',
222
+ // match: ({context}) => context.marker == 'it' && context.pullFromContext, // && context.value,
223
+ match: ({context, callId}) => context.pullFromContext && !context.same, // && context.value,
224
+ apply: async ({callId, context, kms, e, log, retry}) => {
225
+ context.value = kms.stm.api.mentions({ context })
226
+ if (!context.value) {
227
+ // retry()
228
+ context.value = { marker: 'answerNotKnown' }
229
+ return
230
+ }
231
+
232
+ const instance = await e(context.value)
233
+ if (instance.evalue && !instance.edefault) {
234
+ context.value = instance.evalue
235
+ }
236
+ if (context.evaluate) {
237
+ context.evalue = context.value
238
+ }
239
+ },
240
+ },
241
+ ],
242
+ }
243
+
244
+ let createConfig = async () => {
245
+ const config = new Config(configStruct, module)
104
246
  config.stop_auto_rebuild()
105
247
 
106
- config.initializer( ({config}) => {
248
+ await config.initializer( ({config}) => {
107
249
  config.addArgs(({kms}) => ({
108
- mentioned: (context) => {
109
- kms.stm.api.mentioned(context)
250
+ mentioned: ({ context }) => {
251
+ kms.stm.api.mentioned({ context })
110
252
  },
111
- mentions: (context) => {
112
- return kms.stm.api.mentions(context)
253
+ mentions: ({ context }) => {
254
+ return kms.stm.api.mentions({ context })
113
255
  },
114
256
  }))
115
257
  })
116
- config.api = api
258
+ await config.setApi(api)
259
+ await config.add(evaluate, articles)
117
260
 
118
- config.restart_auto_rebuild()
261
+ await config.restart_auto_rebuild()
119
262
  return config
120
263
  }
121
264
 
@@ -127,7 +270,7 @@ knowledgeModule( {
127
270
  name: './stm.test.json',
128
271
  contents: stm_tests,
129
272
  checks: {
130
- context: defaultContextCheck,
273
+ context: [...defaultContextCheck, 'pullFromContext', 'stm_id'],
131
274
  objects: ['mentioned'],
132
275
  },
133
276
  },