Skip to content

Commit

Permalink
fix: add locale to lu cross train config (microsoft#2542)
Browse files Browse the repository at this point in the history
* add locale to lu cross train config

* add some comments

Co-authored-by: Chris Whitten <christopher.whitten@microsoft.com>
Co-authored-by: Dong Lei <donglei@microsoft.com>
  • Loading branch information
3 people authored Apr 8, 2020
1 parent 60326bb commit 56ac846
Show file tree
Hide file tree
Showing 3 changed files with 52 additions and 23 deletions.
8 changes: 4 additions & 4 deletions Composer/packages/client/__tests__/utils/luUtil.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -52,10 +52,10 @@ describe('getReferredFiles', () => {
const luFiles = [{ id: 'main.en-us' }, { id: 'dia1.en-us' }, { id: 'dia2.en-us' }, { id: 'dia3.en-us' }];
const config = createCrossTrainConfig(dialogs as DialogInfo[], luFiles as LuFile[]);
expect(config.rootIds.length).toEqual(1);
expect(config.rootIds[0]).toEqual('main.lu');
expect(config.triggerRules['main.lu']['dia1.lu']).toEqual('dia1_trigger');
expect(config.triggerRules['dia1.lu']['dia3.lu']).toEqual('dia3_trigger');
expect(config.triggerRules['dia1.lu']['dia4.lu']).toBeUndefined();
expect(config.rootIds[0]).toEqual('main.en-us.lu');
expect(config.triggerRules['main.en-us.lu']['dia1.en-us.lu']).toEqual('dia1_trigger');
expect(config.triggerRules['dia1.en-us.lu']['dia3.en-us.lu']).toEqual('dia3_trigger');
expect(config.triggerRules['dia1.en-us.lu']['dia4.en-us.lu']).toBeUndefined();
});

it('check the lu files before publish', () => {
Expand Down
63 changes: 47 additions & 16 deletions Composer/packages/client/src/utils/luUtil.ts
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,8 @@ import keys from 'lodash/keys';
import { createSingleMessage } from '@bfc/indexers';
import { LuFile, DialogInfo } from '@bfc/shared';

import { getBaseName } from './fileUtil';
import { getBaseName, getExtension } from './fileUtil';

export * from '@bfc/indexers/lib/utils/luUtil';

export function getReferredFiles(luFiles: LuFile[], dialogs: DialogInfo[]) {
Expand All @@ -24,28 +25,61 @@ function createConfigId(fileId) {
return `${fileId}.lu`;
}

function getLuFilesByDialogId(dialogId: string, luFiles: LuFile[]) {
return luFiles.filter(lu => getBaseName(lu.id) === dialogId).map(lu => createConfigId(lu.id));
}

function getFileLocale(fileName: string) {
//file name = 'a.en-us.lu'
return getExtension(getBaseName(fileName));
}

//replace the dialogId with luFile's name
function addLocaleToConfig(config: ICrossTrainConfig, luFiles: LuFile[]) {
const { rootIds, triggerRules } = config;
config.rootIds = rootIds.reduce((result: string[], id: string) => {
return [...result, ...getLuFilesByDialogId(id, luFiles)];
}, []);
config.triggerRules = keys(triggerRules).reduce((result, key) => {
const fileNames = getLuFilesByDialogId(key, luFiles);
return {
...result,
...fileNames.reduce((result, name) => {
const locale = getFileLocale(name);
const triggers = triggerRules[key];
keys(triggers).forEach(id => {
if (!result[name]) result[name] = {};
result[name][`${id}.${locale}.lu`] = triggers[id];
});
return result;
}, {}),
};
}, {});
return config;
}

interface ICrossTrainConfig {
rootIds: string[];
triggerRules: { [key: string]: any };
intentName: string;
verbose: boolean;
}

//generate the cross-train config
//generate the cross-train config without locale
/* the config is like
{
rootIds: [
'main.lu',
'main.en-us.lu',
'main.fr-fr.lu'
],
triggerRules: {
'main.lu': {
'dia1.lu': 'dia1_trigger',
'dia2.lu': 'dia2_trigger'
'main.en-us.lu': {
'dia1.en-us.lu': 'dia1_trigger',
'dia2.en-us.lu': 'dia2_trigger'
},
'dia2.lu': {
'dia3.lu': 'dia3_trigger',
'dia4.lu': 'dia4_trigger'
'dia2.en-us.lu': {
'dia3.en-us.lu': 'dia3_trigger',
'dia4.en-us.lu': 'dia4_trigger'
},
'main.fr-fr.lu': {
'dia1.fr-fr.lu': 'dia1_trigger'
Expand All @@ -69,7 +103,7 @@ export function createCrossTrainConfig(dialogs: DialogInfo[], luFiles: LuFile[])
if (dialog.isRoot) rootId = dialog.id;

const { intentTriggers } = dialog;
const fileId = createConfigId(dialog.id);
const fileId = dialog.id;
if (intentTriggers.length) {
//find the trigger's dialog that use a recognizer
intentTriggers.forEach(item => {
Expand All @@ -82,8 +116,7 @@ export function createCrossTrainConfig(dialogs: DialogInfo[], luFiles: LuFile[])
});
if (used.length) {
const result = used.reduce((result, temp) => {
const id = createConfigId(temp);
result[id] = item.intent;
result[temp] = item.intent;
return result;
}, {});
triggerRules[fileId] = { ...triggerRules[fileId], ...result };
Expand All @@ -98,11 +131,9 @@ export function createCrossTrainConfig(dialogs: DialogInfo[], luFiles: LuFile[])
intentName: '_Interruption',
verbose: true,
};
crossTrainConfig.rootIds = keys(countMap)
.filter(key => (countMap[key] === 0 || key === rootId) && triggerRules[createConfigId(key)])
.map(item => createConfigId(item));
crossTrainConfig.rootIds = keys(countMap).filter(key => (countMap[key] === 0 || key === rootId) && triggerRules[key]);
crossTrainConfig.triggerRules = triggerRules;
return crossTrainConfig;
return addLocaleToConfig(crossTrainConfig, luFiles);
}

function generateErrorMessage(invalidLuFile: LuFile[]) {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,3 +1 @@
{
"old": "value"
}
{"old":"value"}

0 comments on commit 56ac846

Please sign in to comment.