Skip to content

Commit 0eb924b

Browse files
committed
Merge branch 'main' into southworks/update/generators
2 parents 5f062fb + 81e2d98 commit 0eb924b

14 files changed

+774
-48
lines changed

libraries/botbuilder-ai/etc/botbuilder-ai.api.md

+3-2
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ import { DialogTurnResult } from 'botbuilder-dialogs';
2323
import { EnumExpression } from 'adaptive-expressions';
2424
import { Expression } from 'adaptive-expressions';
2525
import { IntExpression } from 'adaptive-expressions';
26-
import { LUISRuntimeModels } from '@azure/cognitiveservices-luis-runtime';
26+
import * as msRest from '@azure/ms-rest-js';
2727
import { NumberExpression } from 'adaptive-expressions';
2828
import { ObjectExpression } from 'adaptive-expressions';
2929
import { Recognizer } from 'botbuilder-dialogs';
@@ -290,7 +290,7 @@ export class LuisComponentRegistration extends ComponentRegistration {
290290
}
291291

292292
// @public
293-
export interface LuisPredictionOptions extends LUISRuntimeModels.PredictionResolveOptionalParams {
293+
export interface LuisPredictionOptions extends msRest.RequestOptionsBase {
294294
bingSpellCheckSubscriptionKey?: string;
295295
includeAllIntents?: boolean;
296296
includeInstanceData?: boolean;
@@ -300,6 +300,7 @@ export interface LuisPredictionOptions extends LUISRuntimeModels.PredictionResol
300300
staging?: boolean;
301301
telemetryClient?: BotTelemetryClient;
302302
timezoneOffset?: number;
303+
verbose?: boolean;
303304
}
304305

305306
// @public

libraries/botbuilder-ai/package.json

+1-1
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@
2727
}
2828
},
2929
"dependencies": {
30-
"@azure/cognitiveservices-luis-runtime": "2.0.0",
30+
"@azure/cognitiveservices-luis-runtime": "^4.0.0",
3131
"@azure/ms-rest-js": "^2.7.0",
3232
"adaptive-expressions": "4.1.6",
3333
"botbuilder-core": "4.1.6",

libraries/botbuilder-ai/src/luisRecognizer.ts

+6-2
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
* Copyright (c) Microsoft Corporation. All rights reserved.
66
* Licensed under the MIT License.
77
*/
8-
import { LUISRuntimeModels as LuisModels } from '@azure/cognitiveservices-luis-runtime';
8+
import * as msRest from '@azure/ms-rest-js';
99

1010
import Url from 'url-parse';
1111
import { BotTelemetryClient, NullTelemetryClient, RecognizerResult, TurnContext } from 'botbuilder-core';
@@ -41,7 +41,11 @@ export interface LuisApplication {
4141
*
4242
* Options per LUIS prediction.
4343
*/
44-
export interface LuisPredictionOptions extends LuisModels.PredictionResolveOptionalParams {
44+
export interface LuisPredictionOptions extends msRest.RequestOptionsBase {
45+
/**
46+
* If true, return all intents instead of just the top scoring intent.
47+
*/
48+
verbose?: boolean;
4549
/**
4650
* (Optional) Bing Spell Check subscription key.
4751
*/

libraries/botbuilder-ai/src/luisRecognizerOptionsV2.ts

+25-30
Original file line numberDiff line numberDiff line change
@@ -9,13 +9,10 @@
99
import * as msRest from '@azure/ms-rest-js';
1010
import * as os from 'os';
1111
import { LuisApplication, LuisRecognizerOptionsV2 } from './luisRecognizer';
12+
import { CompositeChildModel, CompositeEntityModel, EntityModel, LuisResult } from './luisV2-models/luisResult';
13+
import { LUISRuntimeClientV2 as LuisClient } from './luisV2-models/luisRuntimeClientV2';
1214
import { LuisRecognizerInternal } from './luisRecognizerOptions';
1315
import { NullTelemetryClient, TurnContext, RecognizerResult } from 'botbuilder-core';
14-
15-
import {
16-
LUISRuntimeClient as LuisClient,
17-
LUISRuntimeModels as LuisModels,
18-
} from '@azure/cognitiveservices-luis-runtime';
1916
import { DialogContext } from 'botbuilder-dialogs';
2017

2118
// eslint-disable-next-line @typescript-eslint/no-var-requires
@@ -116,7 +113,7 @@ export class LuisRecognizerV2 extends LuisRecognizerInternal {
116113

117114
const luisPredictionOptions = this.options;
118115

119-
const luisResult: LuisModels.LuisResult = await this.luisClient.prediction.resolve(
116+
const luisResult: LuisResult = await this.luisClient.prediction.resolve(
120117
this.application.applicationId,
121118
utterance,
122119
{
@@ -155,7 +152,7 @@ export class LuisRecognizerV2 extends LuisRecognizerInternal {
155152
}
156153

157154
// Get Intents from a LuisResult object.
158-
private getIntents(luisResult: LuisModels.LuisResult): Record<string, Record<'score', number>> {
155+
private getIntents(luisResult: LuisResult): Record<string, Record<'score', number>> {
159156
const intents: { [name: string]: { score: number } } = {};
160157
if (luisResult.intents) {
161158
luisResult.intents.reduce((prev, curr) => {
@@ -171,8 +168,8 @@ export class LuisRecognizerV2 extends LuisRecognizerInternal {
171168
}
172169

173170
private getEntitiesAndMetadata(
174-
entities: LuisModels.EntityModel[],
175-
compositeEntities: LuisModels.CompositeEntityModel[] | undefined,
171+
entities: EntityModel[],
172+
compositeEntities: CompositeEntityModel[] | undefined,
176173
verbose: boolean
177174
// eslint-disable-next-line @typescript-eslint/no-explicit-any
178175
): any {
@@ -183,14 +180,14 @@ export class LuisRecognizerV2 extends LuisRecognizerInternal {
183180
// We start by populating composite entities so that entities covered by them are removed from the entities list
184181
if (compositeEntities) {
185182
compositeEntityTypes = compositeEntities.map(
186-
(compositeEntity: LuisModels.CompositeEntityModel) => compositeEntity.parentType
183+
(compositeEntity: CompositeEntityModel) => compositeEntity.parentType
187184
);
188-
compositeEntities.forEach((compositeEntity: LuisModels.CompositeEntityModel) => {
185+
compositeEntities.forEach((compositeEntity: CompositeEntityModel) => {
189186
entities = this.populateCompositeEntity(compositeEntity, entities, entitiesAndMetadata, verbose);
190187
});
191188
}
192189

193-
entities.forEach((entity: LuisModels.EntityModel) => {
190+
entities.forEach((entity: EntityModel) => {
194191
// we'll address composite entities separately
195192
if (compositeEntityTypes.indexOf(entity.type) > -1) {
196193
return;
@@ -213,35 +210,33 @@ export class LuisRecognizerV2 extends LuisRecognizerInternal {
213210
}
214211

215212
private populateCompositeEntity(
216-
compositeEntity: LuisModels.CompositeEntityModel,
217-
entities: LuisModels.EntityModel[],
213+
compositeEntity: CompositeEntityModel,
214+
entities: EntityModel[],
218215
entitiesAndMetadata: any, // eslint-disable-line @typescript-eslint/no-explicit-any
219216
verbose: boolean
220-
): LuisModels.EntityModel[] {
217+
): EntityModel[] {
221218
// eslint-disable-next-line @typescript-eslint/no-explicit-any
222219
const childrenEntities: any = verbose ? { $instance: {} } : {};
223220
// eslint-disable-next-line @typescript-eslint/no-explicit-any
224221
let childrenEntitiesMetadata: any = {};
225222

226223
// This is now implemented as O(n^2) search and can be reduced to O(2n) using a map as an optimization if n grows
227-
const compositeEntityMetadata: LuisModels.EntityModel | undefined = entities.find(
228-
(entity: LuisModels.EntityModel) => {
229-
// For now we are matching by value, which can be ambiguous if the same composite entity shows up with the same text
230-
// multiple times within an utterance, but this is just a stop gap solution till the indices are included in composite entities
231-
return entity.type === compositeEntity.parentType && entity.entity === compositeEntity.value;
232-
}
233-
);
224+
const compositeEntityMetadata: EntityModel | undefined = entities.find((entity: EntityModel) => {
225+
// For now we are matching by value, which can be ambiguous if the same composite entity shows up with the same text
226+
// multiple times within an utterance, but this is just a stop gap solution till the indices are included in composite entities
227+
return entity.type === compositeEntity.parentType && entity.entity === compositeEntity.value;
228+
});
234229

235-
const filteredEntities: LuisModels.EntityModel[] = [];
230+
const filteredEntities: EntityModel[] = [];
236231
if (verbose) {
237232
childrenEntitiesMetadata = this.getEntityMetadata(compositeEntityMetadata);
238233
}
239234

240235
// This is now implemented as O(n*k) search and can be reduced to O(n + k) using a map as an optimization if n or k grow
241236
const coveredSet = new Set();
242-
compositeEntity.children.forEach((childEntity: LuisModels.CompositeChildModel) => {
237+
compositeEntity.children.forEach((childEntity: CompositeChildModel) => {
243238
for (let i = 0; i < entities.length; i++) {
244-
const entity: LuisModels.EntityModel = entities[i];
239+
const entity: EntityModel = entities[i];
245240
if (
246241
!coveredSet.has(i) &&
247242
childEntity.type === entity.type &&
@@ -291,7 +286,7 @@ export class LuisRecognizerV2 extends LuisRecognizerInternal {
291286
}
292287

293288
// eslint-disable-next-line @typescript-eslint/no-explicit-any
294-
private getEntityValue(entity: LuisModels.EntityModel): any {
289+
private getEntityValue(entity: EntityModel): any {
295290
if (entity.type.startsWith('builtin.geographyV2.')) {
296291
return {
297292
type: entity.type.substring(20),
@@ -359,7 +354,7 @@ export class LuisRecognizerV2 extends LuisRecognizerInternal {
359354
}
360355
}
361356

362-
private getEntityMetadata(entity: LuisModels.EntityModel): Record<string, string | number> {
357+
private getEntityMetadata(entity: EntityModel): Record<string, string | number> {
363358
const res: Record<string, string | number> = {
364359
startIndex: entity.startIndex,
365360
endIndex: entity.endIndex + 1,
@@ -374,7 +369,7 @@ export class LuisRecognizerV2 extends LuisRecognizerInternal {
374369
return res;
375370
}
376371

377-
private getNormalizedEntityName(entity: LuisModels.EntityModel): string {
372+
private getNormalizedEntityName(entity: EntityModel): string {
378373
// Type::Role -> Role
379374
let type = entity.type.split(':').pop();
380375
if (type.startsWith('builtin.datetimeV2.')) {
@@ -405,7 +400,7 @@ export class LuisRecognizerV2 extends LuisRecognizerInternal {
405400
}
406401
}
407402

408-
private getSentiment(luis: LuisModels.LuisResult): Record<'label' | 'score', unknown> | undefined {
403+
private getSentiment(luis: LuisResult): Record<'label' | 'score', unknown> | undefined {
409404
if (luis.sentimentAnalysis) {
410405
return {
411406
label: luis.sentimentAnalysis.label,
@@ -427,7 +422,7 @@ export class LuisRecognizerV2 extends LuisRecognizerInternal {
427422

428423
private emitTraceInfo(
429424
context: TurnContext,
430-
luisResult: LuisModels.LuisResult,
425+
luisResult: LuisResult,
431426
recognizerResult: RecognizerResult
432427
): Promise<unknown> {
433428
const traceInfo = {

libraries/botbuilder-ai/src/luisRecognizerOptionsV3.ts

+2-2
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,8 @@
88

99
import fetch from 'node-fetch';
1010
import { RequestInfo, RequestInit } from 'node-fetch';
11-
import { LUISRuntimeModels as LuisModels } from '@azure/cognitiveservices-luis-runtime';
1211
import { LuisApplication, LuisRecognizerOptionsV3 } from './luisRecognizer';
12+
import { LuisResult } from './luisV2-models/luisResult';
1313
import { LuisRecognizerInternal } from './luisRecognizerOptions';
1414
import { NullTelemetryClient, TurnContext, RecognizerResult } from 'botbuilder-core';
1515
import { DialogContext } from 'botbuilder-dialogs';
@@ -239,7 +239,7 @@ export class LuisRecognizerV3 extends LuisRecognizerInternal {
239239

240240
private emitTraceInfo(
241241
context: TurnContext,
242-
luisResult: LuisModels.LuisResult,
242+
luisResult: LuisResult,
243243
recognizerResult: RecognizerResult,
244244
options: LuisRecognizerOptionsV3
245245
): Promise<unknown> {

0 commit comments

Comments
 (0)