ekms 7.12.4-beta.1 → 7.12.4-beta.3
Sign up to get free protection for your applications and to get access to all the features.
- package/common/animals.instance.json +44 -0
- package/common/crew.instance.json +384 -252
- package/common/dialogues.js +41 -0
- package/common/dialogues.test.json +780 -0
- package/common/edible.instance.json +1380 -0
- package/common/fastfood.instance.json +26857 -222
- package/common/fastfood.js +183 -10
- package/common/fastfood.test.json +44675 -2031
- package/common/help.test.json +26 -8
- package/common/helpers/concept.js +10 -1
- package/common/hierarchy.js +1 -1
- package/common/kirk.instance.json +16 -0
- package/common/length.instance.json +180 -0
- package/common/mathTemplate.instance.json +60 -0
- package/common/ordering.instance.json +52 -0
- package/common/people.instance.json +96 -0
- package/common/pokemon.instance.json +260 -0
- package/common/pressure.instance.json +32 -0
- package/common/reports.instance.json +17 -1
- package/common/scorekeeper.test.json +299 -124
- package/common/spock.instance.json +16 -0
- package/common/temperature.instance.json +92 -0
- package/common/ui.instance.json +8 -0
- package/common/weight.instance.json +252 -0
- package/package.json +2 -2
package/common/fastfood.js
CHANGED
@@ -30,6 +30,8 @@ const fastfood_instance = require('./fastfood.instance.json')
|
|
30
30
|
double hamburger
|
31
31
|
number 1 and 2
|
32
32
|
number 1 2 and 3
|
33
|
+
combo 1 through 5
|
34
|
+
|
33
35
|
*/
|
34
36
|
|
35
37
|
const template = {
|
@@ -348,6 +350,18 @@ const template = {
|
|
348
350
|
{
|
349
351
|
where: where(),
|
350
352
|
oneShot: false,
|
353
|
+
onNevermind: ({verbatim, ...args}) => {
|
354
|
+
// this is cross km boundaries from the dialogues km to this one so the api if for dialogs.
|
355
|
+
// i need to get the one for fastfood here.
|
356
|
+
const api = args.kms.fastfood.api
|
357
|
+
const needsDrink = askAbout({ args, api })
|
358
|
+
if (needsDrink.length > 1) {
|
359
|
+
verbatim("The drinks must be specified")
|
360
|
+
} else {
|
361
|
+
verbatim("The drink must be specified")
|
362
|
+
}
|
363
|
+
return false
|
364
|
+
},
|
351
365
|
matchq: (args) => askAbout(args).length > 0 && args.context.marker == 'controlEnd',
|
352
366
|
applyq: (args) => {
|
353
367
|
args.context.cascade = true
|
@@ -411,7 +425,7 @@ const template = {
|
|
411
425
|
const to = state.getIdCombo(context.to)
|
412
426
|
for (const item of api.items()) {
|
413
427
|
if (item.id == from.id) {
|
414
|
-
api.modify(item, { id: to.id })
|
428
|
+
api.modify(item, { id: to.id, food: context.to })
|
415
429
|
}
|
416
430
|
}
|
417
431
|
}
|
@@ -432,6 +446,35 @@ const template = {
|
|
432
446
|
{ context: [['combo', 2], ['list', 0], ['combo', 1], ['withModification', 1]], ordered: true, choose: [3] },
|
433
447
|
],
|
434
448
|
},
|
449
|
+
{
|
450
|
+
operators: [
|
451
|
+
"([remove|remove,delete,drop,ditch,forget,no] (food/*))",
|
452
|
+
"([reset|reset,restart,clear])",
|
453
|
+
],
|
454
|
+
bridges: [
|
455
|
+
{
|
456
|
+
id: 'remove',
|
457
|
+
isA: ['verby'],
|
458
|
+
bridge: "{ ...next(operator), remove: after[0], postModifiers: ['remove'] }",
|
459
|
+
semantic: ({context, api}) => {
|
460
|
+
const state = api.state
|
461
|
+
for (const item of api.items()) {
|
462
|
+
if (state.match(context.remove, item)) {
|
463
|
+
api.remove(item)
|
464
|
+
}
|
465
|
+
}
|
466
|
+
}
|
467
|
+
},
|
468
|
+
{
|
469
|
+
id: 'reset',
|
470
|
+
isA: ['verby'],
|
471
|
+
bridge: "{ ...next(operator) }",
|
472
|
+
semantic: ({context, api}) => {
|
473
|
+
api.reset()
|
474
|
+
}
|
475
|
+
},
|
476
|
+
],
|
477
|
+
},
|
435
478
|
],
|
436
479
|
}
|
437
480
|
|
@@ -441,28 +484,53 @@ class API {
|
|
441
484
|
this._objects.items = []
|
442
485
|
this._objects.notAvailable = []
|
443
486
|
this._objects.notAvailableModification = []
|
487
|
+
this._objects.item_id_counter = 0
|
444
488
|
}
|
445
489
|
|
446
490
|
show() {
|
447
491
|
this._objects.show = this._objects.items
|
448
492
|
}
|
449
493
|
|
494
|
+
toItem(item_id) {
|
495
|
+
if (Array.isArray(item_id)) {
|
496
|
+
return this._objects.items[item_id[0]].modifications[item_id[1]]
|
497
|
+
} else {
|
498
|
+
return this._objects.items[item_id]
|
499
|
+
}
|
500
|
+
}
|
501
|
+
|
502
|
+
new_item_id() {
|
503
|
+
const item_id = this._objects.item_id_counter
|
504
|
+
this._objects.item_id_counter += 1
|
505
|
+
return item_id
|
506
|
+
}
|
507
|
+
|
450
508
|
// returns an item id so things can be updated if needed
|
451
509
|
add(item) {
|
452
|
-
item.item_id = this.
|
510
|
+
item.item_id = this.new_item_id()
|
453
511
|
if (!item.modifications) {
|
454
512
|
item.modifications = []
|
455
513
|
}
|
514
|
+
item.modifications.forEach((modification, index) => {
|
515
|
+
modification.item_id = [item.item_id, index]
|
516
|
+
})
|
456
517
|
this._objects.items.push(item)
|
457
|
-
|
518
|
+
}
|
519
|
+
|
520
|
+
reset() {
|
521
|
+
this._objects.items = []
|
458
522
|
}
|
459
523
|
|
460
524
|
get(item_id) {
|
461
|
-
return this.
|
525
|
+
return this.toItem(item_id)
|
462
526
|
}
|
463
527
|
|
464
528
|
modify(item, changes) {
|
465
|
-
Object.assign(this.
|
529
|
+
Object.assign(this.toItem(item.item_id), changes)
|
530
|
+
}
|
531
|
+
|
532
|
+
remove(item) {
|
533
|
+
this._objects.items = this._objects.items.filter( (i) => i.item_id !== item.item_id )
|
466
534
|
}
|
467
535
|
|
468
536
|
items() {
|
@@ -470,8 +538,9 @@ class API {
|
|
470
538
|
}
|
471
539
|
|
472
540
|
addDrink(item_id, drink) {
|
473
|
-
this.
|
474
|
-
|
541
|
+
const item = this.toItem(item_id)
|
542
|
+
item.modifications.push(drink)
|
543
|
+
item.needsDrink = false
|
475
544
|
}
|
476
545
|
|
477
546
|
say(response) {
|
@@ -638,6 +707,27 @@ class API {
|
|
638
707
|
}
|
639
708
|
return map[number]
|
640
709
|
}
|
710
|
+
|
711
|
+
canBeCombo(id) {
|
712
|
+
return this.getComboNumber(id) > 0
|
713
|
+
}
|
714
|
+
|
715
|
+
getComboNumber(id) {
|
716
|
+
const combos = [
|
717
|
+
'single',
|
718
|
+
'double',
|
719
|
+
'triple',
|
720
|
+
'baconator',
|
721
|
+
'bacon_deluxe',
|
722
|
+
'spicy',
|
723
|
+
'homestyle',
|
724
|
+
'asiago_range_chicken_club',
|
725
|
+
'ultimate_chicken_grill',
|
726
|
+
'chicken_nugget',
|
727
|
+
'premium_cod',
|
728
|
+
]
|
729
|
+
return combos.findIndex((e) => e == id) + 1
|
730
|
+
}
|
641
731
|
}
|
642
732
|
|
643
733
|
const api = new API()
|
@@ -665,7 +755,7 @@ class State {
|
|
665
755
|
}
|
666
756
|
combo = true
|
667
757
|
} else if (food.marker == 'combo') {
|
668
|
-
id = food.type
|
758
|
+
id = food.type?.value
|
669
759
|
combo = true
|
670
760
|
} else {
|
671
761
|
id = food.value
|
@@ -679,6 +769,18 @@ class State {
|
|
679
769
|
return { id, combo }
|
680
770
|
}
|
681
771
|
|
772
|
+
match(pattern, item) {
|
773
|
+
Object.assign(pattern, this.getIdCombo(pattern))
|
774
|
+
if (pattern.id == item.id) {
|
775
|
+
return true
|
776
|
+
}
|
777
|
+
if (!pattern.id) {
|
778
|
+
if (pattern.combo == item.combo) {
|
779
|
+
return true
|
780
|
+
}
|
781
|
+
}
|
782
|
+
}
|
783
|
+
|
682
784
|
add(food) {
|
683
785
|
let quantity = 1
|
684
786
|
if (food.quantity) {
|
@@ -746,7 +848,66 @@ class State {
|
|
746
848
|
for (let i = 0; i < quantity; ++i) {
|
747
849
|
const item = addSize(food, { id, combo, modifications, pieces, food })
|
748
850
|
if (!this.api.isAvailable(item)) {
|
749
|
-
|
851
|
+
const available = []
|
852
|
+
for (const descendant of this.api.args.hierarchy.descendants(food.marker)) {
|
853
|
+
if (this.api.isAvailable({ id: descendant })) {
|
854
|
+
available.push(descendant)
|
855
|
+
}
|
856
|
+
}
|
857
|
+
|
858
|
+
// this sentence runs but it doesnt setup the hierarchy: 'combo 1, 2, 3, 4, 5, 6, 7, 9, 10, and 11 are combos'
|
859
|
+
// i made a wrong design choice when i setup the phrase 'combo 1 etc'. I should have mapped that to the 'single_combo'
|
860
|
+
// but instead had it be a combo with a comboNumber property. That means the language layer doesnt know about the mapping
|
861
|
+
// so that phrase doesnt work. if I set it up the other way that phrase would work. This is just a demo and I have other
|
862
|
+
// demoes to write so i am not fixin that and instead will do || is a combo
|
863
|
+
|
864
|
+
if (available.length > 0 || food.marker == 'combo') {
|
865
|
+
this.api.args.ask([
|
866
|
+
{
|
867
|
+
where: where(),
|
868
|
+
oneShot: true,
|
869
|
+
matchq: ({context}) => context.marker == 'controlEnd',
|
870
|
+
applyq: () => {
|
871
|
+
// args.context.cascade = true
|
872
|
+
const word = food.word
|
873
|
+
return `What kind of ${word}?`
|
874
|
+
},
|
875
|
+
semanticsr: [
|
876
|
+
// stuipid hack one because i didnt put combo fully into the NLI layer
|
877
|
+
{
|
878
|
+
where: where(),
|
879
|
+
match: ({context, callId, isA, api}) => {
|
880
|
+
return api.canBeCombo(context.marker)
|
881
|
+
},
|
882
|
+
apply: ({context}) => {
|
883
|
+
const comboNumber = {
|
884
|
+
value: api.getComboNumber(context.marker)
|
885
|
+
}
|
886
|
+
food.comboNumber = comboNumber
|
887
|
+
this.add(food)
|
888
|
+
}
|
889
|
+
},
|
890
|
+
{
|
891
|
+
where: where(),
|
892
|
+
match: ({context, isA}) => isA(context.marker, food.marker),
|
893
|
+
apply: ({context}) => {
|
894
|
+
this.add(Object.assign(food, context))
|
895
|
+
}
|
896
|
+
},
|
897
|
+
{
|
898
|
+
where: where(),
|
899
|
+
match: ({context, isA}) => isA(context.marker, `${food.marker}_modifier`),
|
900
|
+
apply: ({context}) => {
|
901
|
+
const value = `${context.value}_${food.value}`
|
902
|
+
this.add(Object.assign(food, { value }))
|
903
|
+
}
|
904
|
+
},
|
905
|
+
]
|
906
|
+
},
|
907
|
+
])
|
908
|
+
} else {
|
909
|
+
this.api.addAskedForButNotAvailable(food)
|
910
|
+
}
|
750
911
|
return
|
751
912
|
}
|
752
913
|
|
@@ -844,7 +1005,19 @@ knowledgeModule( {
|
|
844
1005
|
checks: {
|
845
1006
|
objects: [
|
846
1007
|
'show',
|
847
|
-
{
|
1008
|
+
{
|
1009
|
+
property: 'items',
|
1010
|
+
filter: [
|
1011
|
+
'combo',
|
1012
|
+
'pieces',
|
1013
|
+
'size',
|
1014
|
+
'item_id',
|
1015
|
+
'id',
|
1016
|
+
{ property: 'food', filter: [ 'marker', 'value', 'text' ] },
|
1017
|
+
{ property: 'modifications', filter: [ 'id', 'item_id', 'food' ] },
|
1018
|
+
'needsDrink'
|
1019
|
+
],
|
1020
|
+
},
|
848
1021
|
'changes',
|
849
1022
|
'response',
|
850
1023
|
{ property: 'notAvailable', filter: [ 'marker', 'value', 'text' ] },
|