Skip to content
This repository was archived by the owner on Jan 15, 2025. It is now read-only.

Commit a02f217

Browse files
authored
[R10] fix replace api issue (#786)
* fix qnamaker multiturn bug * fix typo in qnamaker README * support multi turn qna replace
1 parent d4b719f commit a02f217

File tree

4 files changed

+25
-16
lines changed

4 files changed

+25
-16
lines changed

packages/lu/src/parser/qnabuild/builder.ts

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -170,10 +170,10 @@ export class Builder {
170170
// otherwise create a new kb
171171
if (recognizer.getKBId() && recognizer.getKBId() !== '') {
172172
// To see if need update the model
173-
needPublish = await this.updateKB(currentKB, content.content, qnaBuildCore, recognizer, currentKB.name, delayDuration)
173+
needPublish = await this.updateKB(currentKB, qnaBuildCore, recognizer, delayDuration)
174174
} else {
175175
// create a new kb
176-
needPublish = await this.createKB(content.content, qnaBuildCore, recognizer, currentKB.name, delayDuration)
176+
needPublish = await this.createKB(currentKB, qnaBuildCore, recognizer, delayDuration)
177177
}
178178

179179
if (needPublish) {
@@ -315,36 +315,36 @@ export class Builder {
315315
return {kb: currentQna.kb, alterations: currentQna.alterations}
316316
}
317317

318-
async updateKB(currentKB: any, qnaContent: string, qnaBuildCore: QnaBuildCore, recognizer: Recognizer, kbName: string, delayDuration: number) {
318+
async updateKB(currentKB: any, qnaBuildCore: QnaBuildCore, recognizer: Recognizer, delayDuration: number) {
319319
await delay(delayDuration)
320320
const existingKB = await qnaBuildCore.exportKB(recognizer.getKBId(), 'Prod')
321321

322322
// compare models
323323
const isKBEqual = qnaBuildCore.isKBEqual(currentKB, existingKB)
324324
if (!isKBEqual) {
325325
try {
326-
this.handler(`Updating to new version for kb ${kbName}...\n`)
326+
this.handler(`Updating to new version for kb ${currentKB.name}...\n`)
327327
await delay(delayDuration)
328-
await qnaBuildCore.replaceKB(recognizer.getKBId(), qnaContent)
328+
await qnaBuildCore.replaceKB(recognizer.getKBId(), currentKB)
329329

330-
this.handler(`Updating finished for kb ${kbName}\n`)
330+
this.handler(`Updating finished for kb ${currentKB.name}\n`)
331331
} catch (err) {
332332
err.text = `Updating knowledge base failed: \n${err.text}`
333333
throw err
334334
}
335335

336336
return true
337337
} else {
338-
this.handler(`kb ${kbName} has no changes\n`)
338+
this.handler(`kb ${currentKB.name} has no changes\n`)
339339
return false
340340
}
341341
}
342342

343-
async createKB(qnaContent: string, qnaBuildCore: QnaBuildCore, recognizer: Recognizer, kbName: string, delayDuration: number) {
344-
this.handler(`Creating qnamaker KB: ${kbName}...\n`)
343+
async createKB(currentKB: any, qnaBuildCore: QnaBuildCore, recognizer: Recognizer, delayDuration: number) {
344+
this.handler(`Creating qnamaker KB: ${currentKB.name}...\n`)
345345
await delay(delayDuration)
346346
const emptyKBJson = {
347-
name: kbName,
347+
name: currentKB.name,
348348
qnaList: [],
349349
urls: [],
350350
files: []
@@ -356,9 +356,9 @@ export class Builder {
356356
const opResult = await this.getKBOperationStatus(qnaBuildCore, operationId, delayDuration)
357357
recognizer.setKBId(opResult.resourceLocation.split('/')[2])
358358
await delay(delayDuration)
359-
await qnaBuildCore.replaceKB(recognizer.getKBId(), qnaContent)
359+
await qnaBuildCore.replaceKB(recognizer.getKBId(), currentKB)
360360

361-
this.handler(`Creating finished for kb ${kbName}\n`)
361+
this.handler(`Creating finished for kb ${currentKB.name}\n`)
362362
} catch (err) {
363363
err.text = `Creating knowledge base failed: \n${err.text}`
364364
throw err

packages/lu/src/parser/qnabuild/core.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -137,7 +137,7 @@ export class QnaBuildCore {
137137
id: qna.id,
138138
answer: qna.answer,
139139
source: qna.source,
140-
questions: qna.questions,
140+
questions: qna.questions.slice(),
141141
metadata: qna.metadata,
142142
context: qna.context
143143
}

packages/qnamaker/README.md

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -149,8 +149,7 @@ OPTIONS
149149
150150
EXAMPLE
151151
152-
$ bf qnamaker:build --in {INPUT_FILE_OR_FOLDER} --subscriptionKey {SUBSCRIPTION_KEY} --botName {BOT_NAME}
153-
--dialog
152+
$ bf qnamaker:build --in {INPUT_FILE_OR_FOLDER} --subscriptionKey {SUBSCRIPTION_KEY} --botName {BOT_NAME}
154153
```
155154

156155
_See code: [src/commands/qnamaker/build.ts](https://github.com/microsoft/botframework-cli/tree/master/packages/qnamaker/src/commands/qnamaker/build.ts)_

packages/qnamaker/src/commands/qnamaker/kb/replace.ts

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,10 +4,14 @@
44
*/
55

66
import {CLIError, Command, flags} from '@microsoft/bf-cli-command'
7+
import {Inputs, processInputs} from '../../../utils/qnamakerbase'
78

9+
const qnaBuilderVerbose = require('@microsoft/bf-lu/lib/parser/qna/qnamaker/kbCollate')
10+
const qnaMakerBuilder = require('@microsoft/bf-lu/lib/parser/qna/qnamaker/qnaMakerBuilder')
11+
const fileHelper = require('@microsoft/bf-lu/lib/utils/filehelper')
12+
const fileExtEnum = require('@microsoft/bf-lu/lib/parser/utils/helpers').FileExtTypeEnum
813
const qnamaker = require('./../../../../utils/index')
914
const replaceKbJSON = require('./../../../../utils/payloads/replacekb')
10-
import {Inputs, processInputs} from '../../../utils/qnamakerbase'
1115

1216
export default class QnamakerKbReplace extends Command {
1317
static description = 'Replace a knowledgebase contents with new contents'
@@ -32,6 +36,12 @@ export default class QnamakerKbReplace extends Command {
3236
if (input.requestBody.qnaDocuments && !input.requestBody.qnaList) {
3337
input.requestBody.qnaList = input.requestBody.qnaDocuments
3438
delete input.requestBody.qnaDocuments
39+
} else if (flags.qnaFormat) {
40+
const qnaFiles = await fileHelper.getLuObjects(stdin, flags.in, false, fileExtEnum.QnAFile)
41+
const result = await qnaBuilderVerbose.build(qnaFiles)
42+
const qnamaker = await qnaMakerBuilder.fromContent(result.parseToQnAContent())
43+
input.requestBody = qnamaker ? JSON.parse(JSON.stringify(qnamaker.kb)) : undefined
44+
flags.qnaFormat = false
3545
}
3646

3747
const result = await qnamaker(input.config, input.serviceManifest, flags, input.requestBody)

0 commit comments

Comments
 (0)