clwoz-models
Version:
Models for ConversationLearner
244 lines • 10.2 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
var ModelUtils_1 = require("./ModelUtils");
exports.filledEntityValueAsString = function (fe) { return exports.memoryValuesAsString(fe.values); };
exports.memoryValuesAsString = function (memories) {
// Print out list in friendly manner
var group = '';
for (var key in memories) {
var index = +key;
var prefix = '';
if (memories.length !== 1 && index === memories.length - 1) {
prefix = ' and ';
}
else if (index !== 0) {
prefix = ', ';
}
var value = memories[key];
var text = value.displayText ? value.displayText : value.userText;
group += "" + prefix + text;
}
return group;
};
// In future will refactor to remove FilledEntityMap, but this method provides abstraction
// or isolation to methods that would normally consume filledEntityMap to reduce coupling
// and make code more flexible
exports.getEntityDisplayValueMap = function (filledEntityMap) {
return Object.keys(filledEntityMap.map).reduce(function (m, key) {
var entityDisplayValue = filledEntityMap.ValueAsString(key);
if (entityDisplayValue) {
m.set(key, entityDisplayValue);
}
// Entity is missing. Provide readable error message
else {
// Default to showing key
var missingValue = key;
// If key is an entityId, try to get value from name key
if (filledEntityMap.map[key].entityId === key) {
for (var _i = 0, _a = Object.keys(filledEntityMap.map); _i < _a.length; _i++) {
var k = _a[_i];
if (k !== key && filledEntityMap.map[k].entityId === key) {
missingValue = k;
}
}
}
m.set(key, "[$" + missingValue + "]");
}
return m;
}, new Map());
};
var FilledEntityMap = /** @class */ (function () {
function FilledEntityMap(init) {
this.map = {};
Object.assign(this, init);
}
FilledEntityMap.FromFilledEntities = function (filledEntities, entities) {
var filledEntityMap = new FilledEntityMap();
var _loop_1 = function (filledEntity) {
var entity = entities.find(function (e) { return e.entityId === filledEntity.entityId; });
if (entity) {
filledEntityMap.map[entity.entityName] = filledEntity;
}
};
for (var _i = 0, filledEntities_1 = filledEntities; _i < filledEntities_1.length; _i++) {
var filledEntity = filledEntities_1[_i];
_loop_1(filledEntity);
}
return filledEntityMap;
};
// Flips entity name based map to entityId based map
FilledEntityMap.prototype.EntityMapToIdMap = function () {
var filledEntityMap = new FilledEntityMap();
for (var entityName in this.map) {
var filledEntity = this.map[entityName];
filledEntityMap.map[filledEntity.entityId] = filledEntity;
}
return filledEntityMap;
};
// Provided an update (diff), update the filled entity list
FilledEntityMap.prototype.UpdateFilledEntities = function (filledEntities, entities) {
var _loop_2 = function (filledEntity) {
var entity = entities.find(function (e) { return e.entityId === filledEntity.entityId; });
if (entity) {
this_1.map[entity.entityName] = filledEntity;
}
};
var this_1 = this;
for (var _i = 0, filledEntities_2 = filledEntities; _i < filledEntities_2.length; _i++) {
var filledEntity = filledEntities_2[_i];
_loop_2(filledEntity);
}
};
FilledEntityMap.prototype.ToMemory = function () {
var memory = [];
for (var entityName in this.map) {
var entityValues = this.map[entityName] ? this.map[entityName].values : [];
memory.push({ entityName: entityName, entityValues: entityValues });
}
return memory;
};
FilledEntityMap.prototype.ValueAsList = function (entityName) {
if (!this.map[entityName]) {
return [];
}
return this.map[entityName].values.filter(function (v) { return typeof v.userText === 'string'; }).map(function (v) { return v.userText; });
};
FilledEntityMap.prototype.ValueAsString = function (entityName) {
if (!this.map[entityName]) {
return null;
}
if (this.map[entityName].values.length === 0) {
return null;
}
// Print out[] list in friendly manner
return exports.filledEntityValueAsString(this.map[entityName]);
};
FilledEntityMap.prototype.ValueAsNumber = function (entityName) {
var textObj = this.ValueAsString(entityName);
var number = Number(textObj);
if (isNaN(number)) {
return null;
}
return number;
};
FilledEntityMap.prototype.ValueAsBoolean = function (entityName) {
var textObj = this.ValueAsString(entityName);
if (textObj) {
if (textObj.toLowerCase() === 'true') {
return true;
}
if (textObj.toLowerCase() === 'false') {
return false;
}
}
return null;
};
FilledEntityMap.prototype.ValueAsObject = function (entityName) {
var textObj = this.ValueAsString(entityName);
if (textObj) {
return JSON.parse(textObj);
}
return null;
};
FilledEntityMap.prototype.Values = function (entityName) {
if (!this.map[entityName]) {
return [];
}
return this.map[entityName].values;
};
FilledEntityMap.prototype.Forget = function (entityName, entityValue, isBucket) {
if (entityValue === void 0) { entityValue = null; }
if (isBucket === void 0) { isBucket = false; }
// Check if entity buckets values
if (isBucket) {
// Entity might not be in memory
if (!this.map[entityName]) {
return;
}
// If no entity Value provide, clear the entity
if (!entityValue) {
delete this.map[entityName];
}
else {
// Find case insensitive index
var lowerCaseNames = this.map[entityName].values.filter(function (mv) { return mv.userText; }).map(function (mv) { return mv.userText.toLowerCase(); });
var index = lowerCaseNames.indexOf(entityValue.toLowerCase());
if (index > -1) {
this.map[entityName].values.splice(index, 1);
if (this.map[entityName].values.length === 0) {
delete this.map[entityName];
}
}
}
}
else {
delete this.map[entityName];
}
};
// Remember multiple values for an entity
FilledEntityMap.prototype.RememberMany = function (entityName, entityId, entityValues, isBucket, builtinType, resolution) {
if (isBucket === void 0) { isBucket = false; }
if (builtinType === void 0) { builtinType = null; }
if (resolution === void 0) { resolution = null; }
// Filter out empty strings
var values = entityValues.filter(function (s) { return s !== ""; });
// If no non-empty values, acts as delete
if (values.length === 0) {
this.Forget(entityName);
return;
}
for (var _i = 0, values_1 = values; _i < values_1.length; _i++) {
var entityValue = values_1[_i];
this.Remember(entityName, entityId, entityValue, isBucket, builtinType, resolution);
}
};
// Remember value for an entity
FilledEntityMap.prototype.Remember = function (entityName, entityId, entityValue, isBucket, builtinType, resolution, enumValueId) {
if (isBucket === void 0) { isBucket = false; }
if (builtinType === void 0) { builtinType = null; }
if (resolution === void 0) { resolution = null; }
if (enumValueId === void 0) { enumValueId = undefined; }
// If setting to an empty string is actually a delete
if (entityValue === "") {
this.Forget(entityName);
return;
}
// If we don't already have entry in map for this item, create one
if (!this.map[entityName]) {
this.map[entityName] = {
entityId: entityId,
values: []
};
}
var displayText = builtinType && resolution ? ModelUtils_1.ModelUtils.PrebuiltDisplayText(builtinType, resolution, entityValue) : entityValue;
var newFilledEntityValue = {
userText: entityValue,
displayText: displayText,
builtinType: builtinType,
resolution: resolution,
enumValueId: enumValueId
};
var filledEntity = this.map[entityName];
// Check if entity buckets values
if (isBucket) {
// Add if not a duplicate
var containsDuplicateValue = filledEntity.values.some(function (memoryValue) { return memoryValue.userText === entityValue; });
if (!containsDuplicateValue) {
filledEntity.values.push(newFilledEntityValue);
}
}
else {
filledEntity.values = [newFilledEntityValue];
}
};
/** Return FilledEntity array for items I've remembered */
FilledEntityMap.prototype.FilledEntities = function () {
return Object.values(this.map);
};
FilledEntityMap.Split = function (action) {
return action.split(/[\s,:.?!\[\]]+/);
};
return FilledEntityMap;
}());
exports.FilledEntityMap = FilledEntityMap;
//# sourceMappingURL=FilledEntity.js.map