Skip to content
This repository was archived by the owner on Jan 15, 2025. It is now read-only.
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
26 changes: 17 additions & 9 deletions packages/lu/src/parser/lubuild/builder.ts
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,8 @@ export class Builder {
files: string[],
culture: string,
suffix: string,
region: string) {
region: string,
schema?: string) {
let multiRecognizers = new Map<string, MultiLanguageRecognizer>()
let settings = new Map<string, Settings>()
let recognizers = new Map<string, Recognizer>()
Expand Down Expand Up @@ -76,12 +77,15 @@ export class Builder {
const multiRecognizerPath = path.join(fileFolder, `${fileName}.lu.dialog`)
if (!multiRecognizers.has(fileName)) {
let multiRecognizerContent = {}
let multiRecognizerSchema = schema
if (fs.existsSync(multiRecognizerPath)) {
multiRecognizerContent = JSON.parse(await fileHelper.getContentFromFile(multiRecognizerPath)).recognizers
let multiRecognizerObject = JSON.parse(await fileHelper.getContentFromFile(multiRecognizerPath))
multiRecognizerContent = multiRecognizerObject.recognizers
multiRecognizerSchema = multiRecognizerSchema || multiRecognizerObject.$schema
this.handler(`${multiRecognizerPath} loaded\n`)
}

multiRecognizers.set(fileName, new MultiLanguageRecognizer(multiRecognizerPath, multiRecognizerContent))
multiRecognizers.set(fileName, new MultiLanguageRecognizer(multiRecognizerPath, multiRecognizerContent, multiRecognizerSchema as string))
}

const settingsPath = path.join(fileFolder, `luis.settings.${suffix}.${region}.json`)
Expand All @@ -105,7 +109,11 @@ export class Builder {
this.handler(`${dialogFile} loaded\n`)
}

let recognizer = Recognizer.load(content.path, content.name, dialogFile, settings.get(fileFolder) as Settings, existingDialogObj)
if (existingDialogObj && schema) {
existingDialogObj.$schema = schema
}

let recognizer = Recognizer.load(content.path, content.name, dialogFile, settings.get(fileFolder) as Settings, existingDialogObj, schema)
recognizers.set(content.name, recognizer)
}

Expand Down Expand Up @@ -221,7 +229,7 @@ export class Builder {
return dialogContents
}

async writeDialogAssets(contents: any[], force: boolean, out: string, dialogType: string, luconfig: string) {
async writeDialogAssets(contents: any[], force: boolean, out: string, dialogType: string, luconfig: string, schema: string) {
let writeDone = false

let writeContents = contents.filter(c => c.id.endsWith('.dialog'))
Expand All @@ -248,7 +256,7 @@ export class Builder {
}

this.handler(`Writing to ${outFilePath}\n`)
await this.writeDialog(content.content, outFilePath, dialogType)
await this.writeDialog(content.content, outFilePath, dialogType, schema)
writeDone = true
}
}
Expand All @@ -260,7 +268,7 @@ export class Builder {
}

this.handler(`Writing to ${content.path}\n`)
await this.writeDialog(content.content, content.path, dialogType)
await this.writeDialog(content.content, content.path, dialogType, schema)
writeDone = true
}
}
Expand Down Expand Up @@ -411,7 +419,7 @@ export class Builder {
}
}

async writeDialog(content: string, filePath: string, dialogType: string) {
async writeDialog(content: string, filePath: string, dialogType: string, schema: string) {
await fs.writeFile(filePath, content, 'utf-8')
const contentObj = JSON.parse(content)
if (dialogType === recognizerType.CROSSTRAINED && contentObj.$kind === 'Microsoft.MultiLanguageRecognizer') {
Expand All @@ -427,7 +435,7 @@ export class Builder {
content = JSON.stringify(existingCRDialog, null, 4)
} else {
const recognizers = [fileName + '.lu']
content = new CrossTrainedRecognizer(crossTrainedFilePath, recognizers).save()
content = new CrossTrainedRecognizer(crossTrainedFilePath, recognizers, schema).save()
}

await fs.writeFile(crossTrainedFilePath, content, 'utf-8')
Expand Down
10 changes: 8 additions & 2 deletions packages/lu/src/parser/lubuild/cross-trained-recognizer.ts
Original file line number Diff line number Diff line change
Expand Up @@ -6,18 +6,24 @@
export class CrossTrainedRecognizer {
public recognizers: any
private readonly dialogPath: string
private readonly $schema: string | undefined

constructor(dialogPath: string, recognizers: any) {
constructor(dialogPath: string, recognizers: any, schema?: string) {
this.dialogPath = dialogPath
this.recognizers = recognizers
this.$schema = schema
}

save(): string {
let output = {
let output: any = {
$kind: 'Microsoft.CrossTrainedRecognizerSet',
recognizers: this.recognizers
}

if (this.$schema) {
output = {$schema: this.$schema, ...output}
}

return JSON.stringify(output, null, 4)
}

Expand Down
10 changes: 8 additions & 2 deletions packages/lu/src/parser/lubuild/multi-language-recognizer.ts
Original file line number Diff line number Diff line change
Expand Up @@ -6,18 +6,24 @@
export class MultiLanguageRecognizer {
public recognizers: any
private readonly dialogPath: string
private readonly $schema: string | undefined

constructor(dialogPath: string, recognizers: any) {
constructor(dialogPath: string, recognizers: any, schema?: string) {
this.dialogPath = dialogPath
this.recognizers = recognizers
this.$schema = schema
}

save(): string {
let output = {
let output: any = {
$kind: 'Microsoft.MultiLanguageRecognizer',
recognizers: this.recognizers
}

if (this.$schema) {
output = {$schema: this.$schema, ...output}
}

return JSON.stringify(output, null, 4)
}

Expand Down
22 changes: 14 additions & 8 deletions packages/lu/src/parser/lubuild/recognizer.ts
Original file line number Diff line number Diff line change
Expand Up @@ -7,45 +7,51 @@ import {Settings} from './settings'
import * as path from 'path'

export class Recognizer {
static load(luFile: string, targetFileName: string, dialogPath: string, luisSettings: Settings, existingRecognizer: any): Recognizer {
static load(luFile: string, targetFileName: string, dialogPath: string, luisSettings: Settings, existingRecognizer: any, schema?: string): Recognizer {
if (existingRecognizer) {
let recognizer = new Recognizer(luFile, targetFileName)
let recognizer = new Recognizer(luFile, targetFileName, schema)
recognizer.dialogPath = dialogPath
Object.assign(recognizer, existingRecognizer)
recognizer.setAppId(luisSettings.luis[path.basename(luFile).split('.').join('_')])

return recognizer
}

let recognizer = new Recognizer(luFile, targetFileName)
let recognizer = new Recognizer(luFile, targetFileName, schema)
recognizer.dialogPath = dialogPath

return recognizer
}

versionId: string
readonly applicationId: string | undefined
readonly endpoint: string | undefined
readonly endpointKey: string | undefined
private readonly applicationId: string | undefined
private readonly endpoint: string | undefined
private readonly endpointKey: string | undefined
private readonly $schema: string | undefined
private appId: string
private dialogPath: string | undefined

constructor(private readonly luFile: string, targetFileName: string) {
constructor(private readonly luFile: string, targetFileName: string, schema?: string) {
this.appId = ''
this.applicationId = `=settings.luis.${targetFileName.split('.').join('_').replace(/-/g, '_')}`
this.endpoint = '=settings.luis.endpoint'
this.endpointKey = '=settings.luis.endpointKey'
this.versionId = '0.1'
this.$schema = schema
}

save(): string {
let output = {
let output: any = {
$kind: 'Microsoft.LuisRecognizer',
applicationId: this.applicationId,
endpoint: this.endpoint,
endpointKey: this.endpointKey
}

if (this.$schema) {
output = {$schema: this.$schema, ...output}
}

return JSON.stringify(output, null, 4)
}

Expand Down
24 changes: 16 additions & 8 deletions packages/lu/src/parser/qnabuild/builder.ts
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,8 @@ export class Builder {
botName: string,
suffix: string,
region: string,
culture: string) {
culture: string,
schema?: string) {
let multiRecognizer: any
let settings: any
let recognizers = new Map<string, Recognizer>()
Expand Down Expand Up @@ -73,12 +74,15 @@ export class Builder {
if (multiRecognizer === undefined) {
const multiRecognizerPath = path.join(fileFolder, `${botName}.qna.dialog`)
let multiRecognizerContent = {}
let multiRecognizerSchema = schema
if (fs.existsSync(multiRecognizerPath)) {
multiRecognizerContent = JSON.parse(await fileHelper.getContentFromFile(multiRecognizerPath)).recognizers
let multiRecognizerObject = JSON.parse(await fileHelper.getContentFromFile(multiRecognizerPath))
multiRecognizerContent = multiRecognizerObject.recognizers
multiRecognizerSchema = multiRecognizerSchema || multiRecognizerObject.$schema
this.handler(`${multiRecognizerPath} loaded\n`)
}

multiRecognizer = new MultiLanguageRecognizer(multiRecognizerPath, multiRecognizerContent)
multiRecognizer = new MultiLanguageRecognizer(multiRecognizerPath, multiRecognizerContent, multiRecognizerSchema as string)
}

if (settings === undefined) {
Expand All @@ -102,7 +106,11 @@ export class Builder {
this.handler(`${dialogFile} loaded\n`)
}

let recognizer = Recognizer.load(content.path, content.name, dialogFile, settings, existingDialogObj)
if (existingDialogObj && schema) {
existingDialogObj.$schema = schema
}

let recognizer = Recognizer.load(content.path, content.name, dialogFile, settings, existingDialogObj, schema)
recognizers.set(content.name, recognizer)
qnaContents.set(content.name, content)
} else {
Expand Down Expand Up @@ -294,7 +302,7 @@ export class Builder {
return kbToLuContent
}

async writeDialogAssets(contents: any[], force: boolean, out: string, dialogType: string, files: string[]) {
async writeDialogAssets(contents: any[], force: boolean, out: string, dialogType: string, files: string[], schema: string) {
let writeDone = false

for (const content of contents) {
Expand All @@ -307,7 +315,7 @@ export class Builder {

if (force || !fs.existsSync(outFilePath)) {
this.handler(`Writing to ${outFilePath}\n`)
await this.writeDialog(content.content, outFilePath, dialogType, files)
await this.writeDialog(content.content, outFilePath, dialogType, files, schema)
writeDone = true
}
}
Expand Down Expand Up @@ -473,7 +481,7 @@ export class Builder {
this.handler(`Publishing finished for kb ${kbName}\n`)
}

async writeDialog(content: string, filePath: string, dialogType: string, files: string[]) {
async writeDialog(content: string, filePath: string, dialogType: string, files: string[], schema: string) {
await fs.writeFile(filePath, content, 'utf-8')
const contentObj = JSON.parse(content)
if (dialogType === recognizerType.CROSSTRAINED && contentObj.$kind === 'Microsoft.MultiLanguageRecognizer') {
Expand All @@ -500,7 +508,7 @@ export class Builder {
content = JSON.stringify(existingCRDialog, null, 4)
} else {
let recognizers = [fileName]
content = new CrossTrainedRecognizer(crossTrainedFilePath, recognizers).save()
content = new CrossTrainedRecognizer(crossTrainedFilePath, recognizers, schema).save()
}

await fs.writeFile(crossTrainedFilePath, content, 'utf-8')
Expand Down
10 changes: 8 additions & 2 deletions packages/lu/src/parser/qnabuild/cross-trained-recognizer.ts
Original file line number Diff line number Diff line change
Expand Up @@ -6,18 +6,24 @@
export class CrossTrainedRecognizer {
public recognizers: any
private readonly dialogPath: string
private readonly $schema: string | undefined

constructor(dialogPath: string, recognizers: any) {
constructor(dialogPath: string, recognizers: any, schema?: string) {
this.dialogPath = dialogPath
this.recognizers = recognizers
this.$schema = schema
}

save(): string {
let output = {
let output: any = {
$kind: 'Microsoft.CrossTrainedRecognizerSet',
recognizers: this.recognizers
}

if (this.$schema) {
output = {$schema: this.$schema, ...output}
}

return JSON.stringify(output, null, 4)
}

Expand Down
10 changes: 8 additions & 2 deletions packages/lu/src/parser/qnabuild/multi-language-recognizer.ts
Original file line number Diff line number Diff line change
Expand Up @@ -6,18 +6,24 @@
export class MultiLanguageRecognizer {
public recognizers: any
private readonly dialogPath: string
private readonly $schema: string | undefined

constructor(dialogPath: string, recognizers: any) {
constructor(dialogPath: string, recognizers: any, schema?: string) {
this.dialogPath = dialogPath
this.recognizers = recognizers
this.$schema = schema
}

save(): string {
let output = {
let output: any = {
$kind: 'Microsoft.MultiLanguageRecognizer',
recognizers: this.recognizers
}

if (this.$schema) {
output = {$schema: this.$schema, ...output}
}

return JSON.stringify(output, null, 4)
}

Expand Down
25 changes: 15 additions & 10 deletions packages/lu/src/parser/qnabuild/recognizer.ts
Original file line number Diff line number Diff line change
Expand Up @@ -7,47 +7,52 @@ import {Settings} from './settings'
import * as path from 'path'

export class Recognizer {
static load(qnaFile: string, targetFileName: string, dialogPath: string, qnaSettings: Settings, existingRecognizer: any): Recognizer {
static load(qnaFile: string, targetFileName: string, dialogPath: string, qnaSettings: Settings, existingRecognizer: any, schema?: string): Recognizer {
if (existingRecognizer) {
let recognizer = new Recognizer(qnaFile, targetFileName)
let recognizer = new Recognizer(qnaFile, targetFileName, schema)
recognizer.dialogPath = dialogPath
Object.assign(recognizer, existingRecognizer)
recognizer.setKBId(qnaSettings.qna[path.basename(qnaFile).split('.').join('_')])

return recognizer
}

let recognizer = new Recognizer(qnaFile, targetFileName)
let recognizer = new Recognizer(qnaFile, targetFileName, schema)
recognizer.dialogPath = dialogPath

return recognizer
}

readonly id: string
readonly knowledgeBaseId: string | undefined
readonly hostname: string | undefined
readonly endpointKey: string | undefined

private readonly id: string
private readonly knowledgeBaseId: string | undefined
private readonly hostname: string | undefined
private readonly endpointKey: string | undefined
private readonly $schema: string | undefined
private kbId: string
private dialogPath: string | undefined

constructor(private readonly qnaFile: string, targetFileName: string) {
constructor(private readonly qnaFile: string, targetFileName: string, schema?: string) {
this.kbId = ''
this.id = `QnA_${targetFileName.split('.')[0]}`
this.knowledgeBaseId = `=settings.qna.${targetFileName.split('.').join('_').replace(/-/g, '_')}`
this.hostname = '=settings.qna.hostname'
this.endpointKey = '=settings.qna.endpointKey'
this.$schema = schema
}

save(): string {
let output = {
let output: any = {
$kind: 'Microsoft.QnAMakerRecognizer',
id: this.id,
knowledgeBaseId: this.knowledgeBaseId,
hostname: this.hostname,
endpointKey: this.endpointKey
}

if (this.$schema) {
output = {$schema: this.$schema, ...output}
}

return JSON.stringify(output, null, 4)
}

Expand Down
Loading