lexica-dialog-core
Version:
Core server for Lexica dialog agent.
70 lines • 2.95 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
const lodash_1 = require("lodash");
const Api_1 = require("./Api");
const immutable_1 = require("immutable");
const intl_messageformat_1 = require("intl-messageformat");
const Intent_1 = require("lexica-dialog-model/dist/Intent");
function intentResponsesToBotResponses(responses, features, locale) {
return responses
.map(response => intentResponseToBotResponse(response, features, locale))
.reduce((a, b) => a.concat(b), immutable_1.List())
.toList();
}
exports.intentResponsesToBotResponses = intentResponsesToBotResponses;
function intentResponseToBotResponse(response, features, locale) {
let results;
if (response.type === Intent_1.ResponseType.TEXT && !lodash_1.isNil(response.messages)) {
const message = extractMessage(response.messages, features, locale);
const responses = message.split('[^LEXICA^]').map(msg => ({
message: msg,
type: Intent_1.ResponseType.TEXT,
}));
results = immutable_1.List(responses);
}
else if (response.type === Intent_1.ResponseType.OPTIONS && !lodash_1.isNil(response.options)) {
const options = response.options.map(option => ({
command: option.command,
features: option.features,
message: this.extractMessage(option.messages, features, locale),
textOnlyIndicator: option.textOnlyIndicator,
}));
results = immutable_1.List([
{
forceShow: response.forceShow,
message: this.extractMessage(response.messages, features, locale),
options,
type: Intent_1.ResponseType.OPTIONS,
},
]);
}
else if (response.type === Intent_1.ResponseType.ITEMS && !lodash_1.isNil(response.items)) {
const items = response.items.map(item => ({
message: this.extractMessage(item.messages, features, locale),
type: item.type,
url: item.url,
}));
results = immutable_1.List([
{
items,
message: this.extractMessage(response.messages, features, locale),
type: Intent_1.ResponseType.ITEMS,
},
]);
}
else {
throw new Api_1.BotError(Api_1.BotErrorCode.INVALID_RESPONSE_TYPE);
}
return results;
}
exports.intentResponseToBotResponse = intentResponseToBotResponse;
function extractMessage(messages, feature, locale) {
const text = messages[Math.floor(Math.random() * messages.length)];
return new intl_messageformat_1.default(text[locale], locale).format(feature.toObject());
}
exports.extractMessage = extractMessage;
function toConfigMap(configs) {
return configs.reduce((map, config) => map.set(config.key.toString(), config), immutable_1.Map());
}
exports.toConfigMap = toConfigMap;
//# sourceMappingURL=Utils.js.map