Skip to content

Commit

Permalink
Add luis:train:run (#382)
Browse files Browse the repository at this point in the history
* Add luis:train:run

* Add flags typoe
  • Loading branch information
JSpru authored and munozemilio committed Nov 25, 2019
1 parent ecbfe12 commit b385c72
Show file tree
Hide file tree
Showing 2 changed files with 94 additions and 0 deletions.
48 changes: 48 additions & 0 deletions packages/luis/src/commands/luis/train/run.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
/*!
* Copyright (c) Microsoft Corporation. All rights reserved.
* Licensed under the MIT License.
*/

import {CLIError, Command, flags} from '@microsoft/bf-cli-command'

const utils = require('../../../utils/index')

export default class LuisTrainRun extends Command {
static description = 'Issues asynchronous training request for LUIS application'

static examples = [`
$ bf luis:train:run --appId {APPLICATION_ID} --versionId {VERSION_ID} --endpoint {ENDPOINT} --subscriptionKey {SUBSCRIPTION_KEY}
`]

static flags: any = {
help: flags.help({char: 'h'}),
endpoint: flags.string({description: 'LUIS endpoint hostname'}),
subscriptionKey: flags.string({description: 'LUIS cognitive services subscription key (mandatory, default: config:LUIS:subscriptionKey)'}),
appId: flags.string({description: 'LUIS application Id (mandatory, defaults to config:LUIS:appId)'}),
versionId: flags.string({description: 'Version to show training status (mandatory, defaults to config:LUIS:versionId)'}),
}

async run() {
const {flags} = this.parse(LuisTrainRun)
const flagLabels = Object.keys(LuisTrainRun.flags)
const configDir = this.config.configDir

let {endpoint, subscriptionKey, appId, versionId} = await utils.processInputs(flags, flagLabels, configDir)

const requiredProps = {endpoint, subscriptionKey, appId, versionId}
utils.validateRequiredProps(requiredProps)

const client = utils.getLUISClient(subscriptionKey, endpoint)

try {
const trainingRequestStatus = await client.train.trainVersion(appId, versionId)
if (trainingRequestStatus) {
await utils.writeToConsole(trainingRequestStatus)
this.log('\nTraining request successfully issued')
}
} catch (err) {
throw new CLIError(`Failed to issue training request: ${err}`)
}
}

}
46 changes: 46 additions & 0 deletions packages/luis/test/commands/luis/train/run.test.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
import {expect, test} from '@oclif/test'
const sinon = require('sinon')
const uuidv1 = require('uuid/v1')
const utils = require('../../../../src/utils/index')
const fs = require('fs-extra')
import * as rimraf from 'rimraf'

describe('luis:train:run', () => {

beforeEach(() => {
sinon.stub(utils, 'processInputs').returnsArg(0)
})

afterEach(() => {
sinon.restore();
});

test
.stdout()
.command(['luis:train:run', '--help'])
.it('should print the help contents when --help is passed as an argument', ctx => {
expect(ctx.stdout).to.contain('Issues asynchronous training request for LUIS application')
})

test
.stdout()
.stderr()
.command(['luis:train:run', '--appId', uuidv1(), '--endpoint', 'https://westus.api.cognitive.microsoft.com', '--versionId', '0.1'])
.it('displays an error if any required input parameters are missing', ctx => {
expect(ctx.stderr).to.contain(`Required input property 'subscriptionKey' missing.`)
})

test
.nock('https://westus.api.cognitive.microsoft.com', api => api
.post(uri => uri.includes('train'))
.reply(202, {"statusId": 2,"status": "UpToDate"})
)
.stdout()
.command(['luis:train:run', '--appId', uuidv1(), '--versionId', '0.1', '--subscriptionKey', uuidv1(), '--endpoint', 'https://westus.api.cognitive.microsoft.com'])
.it('issues an asynchronous training request', ctx => {
expect(ctx.stdout).to.contain('Training request successfully issued')
expect(ctx.stdout).to.contain('statusId')
expect(ctx.stdout).to.contain('status')
})

})

0 comments on commit b385c72

Please sign in to comment.