ekms 8.0.0-beta.4 → 8.0.0-beta.40

Sign up to get free protection for your applications and to get access to all the features.
Files changed (96) 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/math.instance.json +176 -1168
  47. package/common/math.js +11 -11
  48. package/common/meta.js +22 -29
  49. package/common/nameable.instance.json +2 -0
  50. package/common/nameable.js +136 -0
  51. package/common/nameable.test.json +2121 -0
  52. package/common/negation.instance.json +2 -0
  53. package/common/negation.js +38 -0
  54. package/common/negation.test.json +308 -0
  55. package/common/numbers.js +3 -3
  56. package/common/ordering.instance.json +340 -228
  57. package/common/ordering.js +5 -5
  58. package/common/people.instance.json +2066 -1014
  59. package/common/people.js +4 -5
  60. package/common/percentages.instance.json +2 -0
  61. package/common/percentages.js +57 -0
  62. package/common/percentages.test.json +751 -0
  63. package/common/pipboy.instance.json +7974 -6300
  64. package/common/pipboy.js +29 -32
  65. package/common/pokemon.instance.json +4207 -2069
  66. package/common/pokemon.js +4 -4
  67. package/common/pos.js +1 -1
  68. package/common/pressure.instance.json +1341 -1189
  69. package/common/pressure.js +2 -2
  70. package/common/properties.instance.json +130 -60
  71. package/common/properties.js +54 -125
  72. package/common/punctuation.js +2 -2
  73. package/common/reports.instance.json +595 -557
  74. package/common/reports.js +58 -76
  75. package/common/scorekeeper.js +14 -22
  76. package/common/sdefaults.js +13 -3
  77. package/common/sizeable.js +2 -2
  78. package/common/spock.instance.json +583 -289
  79. package/common/spock.js +2 -2
  80. package/common/stgame.js +13 -9
  81. package/common/stm.js +136 -19
  82. package/common/stm.test.json +1734 -1
  83. package/common/tell.js +10 -10
  84. package/common/temperature.instance.json +1484 -1204
  85. package/common/temperature.js +2 -2
  86. package/common/tester.js +2 -2
  87. package/common/testing.js +5 -5
  88. package/common/time.js +7 -7
  89. package/common/tokenize.js +1 -1
  90. package/common/ui.instance.json +257 -258
  91. package/common/ui.js +9 -9
  92. package/common/weight.instance.json +5212 -4233
  93. package/common/weight.js +2 -2
  94. package/common/yesno.js +1 -1
  95. package/main.js +57 -46
  96. package/package.json +24 -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,39 +55,76 @@ 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, condition = (() => true) } = {}) {
69
+ const findPrevious = !!context.stm_previous
70
+
50
71
  // care about value first
72
+ let findCounter = 0
51
73
  for (let m of this._objects.mentioned) {
52
- if (context.value && context.value == m.marker) {
53
- return m
74
+ if (context.value && (context.value == m.marker || context.value == m.value)) {
75
+ findCounter += 1
76
+ if (findPrevious && findCounter < 2) {
77
+ continue
78
+ }
79
+ if (condition()) {
80
+ return m
81
+ }
54
82
  }
55
83
  }
56
84
 
57
85
  if (!useHierarchy) {
58
86
  return
59
87
  }
88
+
60
89
  // care about marker second
90
+ findCounter = 0
61
91
  for (let m of this._objects.mentioned) {
62
92
  if (context.marker != 'unknown' && this.isA(m.marker, context.marker)) {
63
- return m
93
+ findCounter += 1
94
+ if (findPrevious && findCounter < 2) {
95
+ continue
96
+ }
97
+ if (condition(m)) {
98
+ return m
99
+ }
64
100
  }
65
101
  // if (context.types && context.types.includes(m.marker)) {
66
102
  if (context.types) {
67
103
  for (let parent of context.types) {
68
104
  if (parent != 'unknown' && this.isA(m.marker, parent)) {
69
- return m
105
+ findCounter += 1
106
+ if (findPrevious && findCounter < 2) {
107
+ continue
108
+ }
109
+ if (condition(m)) {
110
+ return m
111
+ }
70
112
  }
71
113
  }
72
114
  }
73
115
  }
74
116
 
117
+ findCounter = 0
75
118
  if (context.types && context.types.length == 1) {
76
119
  for (let m of this._objects.mentioned) {
77
120
  if (context.unknown) {
78
- return m
121
+ findCounter += 1
122
+ if (findPrevious && findCounter < 2) {
123
+ continue
124
+ }
125
+ if (condition(m)) {
126
+ return m
127
+ }
79
128
  }
80
129
  }
81
130
  }
@@ -85,7 +134,7 @@ class API {
85
134
  if (!name) {
86
135
  return
87
136
  }
88
- let valueNew = this.mentions({ marker: name, value: name }, false) || name
137
+ let valueNew = this.mentions({ context: { marker: name, value: name }, useHierarchy: false }) || name
89
138
  if (valueNew && valueNew.value) {
90
139
  valueNew = valueNew.value
91
140
  }
@@ -93,29 +142,97 @@ class API {
93
142
  }
94
143
 
95
144
  setVariable(name, value) {
96
- this.mentioned({ marker: name }, value)
145
+ this.mentioned({ context: { marker: name }, value })
97
146
  }
98
147
  }
99
148
 
100
149
  const api = new API()
101
150
 
102
- let createConfig = () => {
103
- const config = new Config({ name: 'stm' }, module)
151
+ const configStruct = {
152
+ name: 'stm',
153
+ operators: [
154
+ "([stm_previous|previous] ([memorable]))",
155
+ "(([memorable]) [stm_before|before])",
156
+ "([remember] (memorable/*))",
157
+ ],
158
+ words: {
159
+ literals: {
160
+ "m1": [{"id": "memorable", development: true, "initial": "{ value: 'm1' }" }],
161
+ "m2": [{"id": "memorable", development: true, "initial": "{ value: 'm2' }" }],
162
+ },
163
+ },
164
+ bridges: [
165
+ {
166
+ id: 'memorable',
167
+ isA: ['theAble'],
168
+ words: helpers.words('memorable')
169
+ },
170
+ {
171
+ id: 'remember',
172
+ bridge: "{ ...next(operator), postModifiers: ['rememberee'], rememberee: after[0] }",
173
+ isA: ['verby'],
174
+ semantic: async ({context, api, e}) => {
175
+ let value = (await e(context.rememberee)).evalue
176
+ if (value == context.rememberee.value) {
177
+ value = context.rememberee
178
+ }
179
+ api.mentioned({ context: value })
180
+ },
181
+ },
182
+ {
183
+ id: 'stm_previous',
184
+ bridge: '{ ...after[0], modifiers: ["stm_previous"], stm_previous: operator, pullFromContext: true }',
185
+ },
186
+ {
187
+ id: 'stm_before',
188
+ isA: ['adjective'],
189
+ bridge: '{ ...before[0], postModifiers: ["stm_previous"], stm_previous: operator, pullFromContext: true }',
190
+ },
191
+ ],
192
+ semantics: [
193
+ {
194
+ where: where(),
195
+ notes: 'pull from context',
196
+ // match: ({context}) => context.marker == 'it' && context.pullFromContext, // && context.value,
197
+ match: ({context, callId}) => context.pullFromContext && !context.same, // && context.value,
198
+ apply: async ({callId, context, kms, e, log, retry}) => {
199
+ context.value = kms.stm.api.mentions({ context })
200
+ if (!context.value) {
201
+ // retry()
202
+ context.value = { marker: 'answerNotKnown' }
203
+ return
204
+ }
205
+
206
+ const instance = await e(context.value)
207
+ if (instance.evalue && !instance.edefault) {
208
+ context.value = instance.evalue
209
+ }
210
+ if (context.evaluate) {
211
+ context.evalue = context.value
212
+ }
213
+ },
214
+ },
215
+ ],
216
+ }
217
+
218
+ let createConfig = async () => {
219
+ const config = new Config(configStruct, module)
104
220
  config.stop_auto_rebuild()
105
221
 
106
- config.initializer( ({config}) => {
222
+ await config.initializer( ({config}) => {
107
223
  config.addArgs(({kms}) => ({
108
- mentioned: (context) => {
109
- kms.stm.api.mentioned(context)
224
+ mentioned: ({ context }) => {
225
+ kms.stm.api.mentioned({ context })
110
226
  },
111
- mentions: (context) => {
112
- return kms.stm.api.mentions(context)
227
+ mentions: ({ context }) => {
228
+ return kms.stm.api.mentions({ context })
113
229
  },
114
230
  }))
115
231
  })
116
- config.api = api
232
+ await config.setApi(api)
233
+ await config.add(evaluate, articles)
117
234
 
118
- config.restart_auto_rebuild()
235
+ await config.restart_auto_rebuild()
119
236
  return config
120
237
  }
121
238
 
@@ -127,7 +244,7 @@ knowledgeModule( {
127
244
  name: './stm.test.json',
128
245
  contents: stm_tests,
129
246
  checks: {
130
- context: defaultContextCheck,
247
+ context: [...defaultContextCheck, 'pullFromContext', 'stm_id'],
131
248
  objects: ['mentioned'],
132
249
  },
133
250
  },