Merge pull request #840 from Hexastack/feat/add-doc-field-nlp-values

feat: add description attribute for nlu values
This commit is contained in:
Med Marrouchi 2025-03-24 10:19:24 +01:00 committed by GitHub
commit 13cf35b828
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
9 changed files with 54 additions and 9 deletions

View File

@ -1,5 +1,5 @@
/*
* Copyright © 2024 Hexastack. All rights reserved.
* Copyright © 2025 Hexastack. All rights reserved.
*
* Licensed under the GNU Affero General Public License v3.0 (AGPLv3) with the following additional terms:
* 1. The name "Hexabot" is a trademark of Hexastack. You may not use this name in derivative works without express written permission.
@ -379,6 +379,7 @@ describe('NlpSampleController', () => {
expressions: [],
builtin: false,
entity: priceValueEntity!.id,
doc: '',
};
const textSample = {
text: 'How much does a BMW cost?',

View File

@ -1,5 +1,5 @@
/*
* Copyright © 2024 Hexastack. All rights reserved.
* Copyright © 2025 Hexastack. All rights reserved.
*
* Licensed under the GNU Affero General Public License v3.0 (AGPLv3) with the following additional terms:
* 1. The name "Hexabot" is a trademark of Hexastack. You may not use this name in derivative works without express written permission.
@ -157,6 +157,7 @@ describe('NlpValueController', () => {
expressions: ['synonym1', 'synonym2'],
metadata: { firstkey: 'firstvalue', secondKey: 1995 },
builtin: false,
doc: '',
};
const result = await nlpValueController.create(value);
expect(result).toEqualPayload(value);
@ -223,6 +224,7 @@ describe('NlpValueController', () => {
value: 'updated',
expressions: [],
builtin: true,
doc: '',
};
const result = await nlpValueController.updateOne(
positiveValue!.id,
@ -241,6 +243,7 @@ describe('NlpValueController', () => {
value: 'updated',
expressions: [],
builtin: true,
doc: '',
}),
).rejects.toThrow(getUpdateOneError(NlpValue.name, jhonNlpValue!.id));
});

View File

@ -93,7 +93,9 @@ export class NlpValueController extends BaseController<
@Get('count')
async filterCount(
@Query(
new SearchFilterPipe<NlpValue>({ allowedFields: ['entity', 'value'] }),
new SearchFilterPipe<NlpValue>({
allowedFields: ['entity', 'value', 'doc'],
}),
)
filters?: TFilterQuery<NlpValue>,
) {
@ -142,7 +144,7 @@ export class NlpValueController extends BaseController<
@Query(PopulatePipe) populate: string[],
@Query(
new SearchFilterPipe<NlpValue>({
allowedFields: ['entity', 'value'],
allowedFields: ['entity', 'value', 'doc'],
}),
)
filters: TFilterQuery<NlpValue>,

View File

@ -1,5 +1,5 @@
/*
* Copyright © 2024 Hexastack. All rights reserved.
* Copyright © 2025 Hexastack. All rights reserved.
*
* Licensed under the GNU Affero General Public License v3.0 (AGPLv3) with the following additional terms:
* 1. The name "Hexabot" is a trademark of Hexastack. You may not use this name in derivative works without express written permission.
@ -39,6 +39,11 @@ export class NlpValueCreateDto {
@IsObject()
metadata?: Record<string, any>;
@ApiPropertyOptional({ description: 'Nlp Value Description', type: String })
@IsString()
@IsOptional()
doc?: string;
@ApiPropertyOptional({ description: 'Nlp value is builtin', type: Boolean })
@IsOptional()
@IsBoolean()
@ -77,6 +82,11 @@ export class NlpValueUpdateDto {
@IsObjectId({ message: 'Entity must be a valid ObjectId' })
entity?: string | null;
@ApiPropertyOptional({ description: 'Nlp Value Description', type: String })
@IsString()
@IsOptional()
doc?: string;
@ApiPropertyOptional({ description: 'Nlp value is builtin', type: Boolean })
@IsOptional()
@IsBoolean()

View File

@ -1,5 +1,5 @@
/*
* Copyright © 2024 Hexastack. All rights reserved.
* Copyright © 2025 Hexastack. All rights reserved.
*
* Licensed under the GNU Affero General Public License v3.0 (AGPLv3) with the following additional terms:
* 1. The name "Hexabot" is a trademark of Hexastack. You may not use this name in derivative works without express written permission.
@ -46,6 +46,12 @@ export class NlpValueStub extends BaseSchema {
@Prop({ type: JSON, default: {} })
metadata: Record<string, any>;
/**
* Description of the entity's value purpose.
*/
@Prop({ type: String, default: '' })
doc?: string;
/**
* Either or not this value a built-in (either fixtures or shipped along with the 3rd party ai).
*/

View File

@ -1,5 +1,5 @@
/*
* Copyright © 2024 Hexastack. All rights reserved.
* Copyright © 2025 Hexastack. All rights reserved.
*
* Licensed under the GNU Affero General Public License v3.0 (AGPLv3) with the following additional terms:
* 1. The name "Hexabot" is a trademark of Hexastack. You may not use this name in derivative works without express written permission.
@ -19,30 +19,35 @@ export const nlpValueFixtures: NlpValueCreateDto[] = [
value: 'positive',
expressions: [],
builtin: true,
doc: '',
},
{
entity: '0',
value: 'negative',
expressions: [],
builtin: true,
doc: '',
},
{
entity: '1',
value: 'jhon',
expressions: ['john', 'joohn', 'jhonny'],
builtin: true,
doc: '',
},
{
entity: '0',
value: 'greeting',
expressions: ['heello', 'Hello', 'hi', 'heyy'],
builtin: true,
doc: '',
},
{
entity: '0',
value: 'goodbye',
expressions: ['bye', 'bye bye'],
builtin: true,
doc: '',
},
];

View File

@ -55,7 +55,7 @@ export const NlpValues = ({ entityId }: { entityId: string }) => {
const canHaveSynonyms = nlpEntity?.lookups?.[0] === NlpLookups.keywords;
const { onSearch, searchPayload } = useSearch<INlpValue>({
$eq: [{ entity: entityId }],
$iLike: ["value"],
$or: ["doc", "value"]
});
const { dataGridProps } = useFind(
{ entity: EntityType.NLP_VALUE },
@ -125,6 +125,14 @@ export const NlpValues = ({ entityId }: { entityId: string }) => {
disableColumnMenu: true,
renderHeader,
},
{
flex: 3,
field: "doc",
headerName: t("label.doc"),
sortable: true,
disableColumnMenu: true,
renderHeader,
},
...(shouldIncludeSynonyms ? [synonymsColumn] : []),
{
maxWidth: 140,

View File

@ -61,6 +61,7 @@ export const NlpValueForm: FC<
>({
defaultValues: {
value: data?.value || "",
doc: data?.doc || "",
expressions: data?.expressions || [],
},
});
@ -84,6 +85,7 @@ export const NlpValueForm: FC<
reset({
value: data.value,
expressions: data.expressions,
doc: data.doc,
});
} else {
reset();
@ -102,6 +104,13 @@ export const NlpValueForm: FC<
{...register("value", validationRules.value)}
/>
</ContentItem>
<ContentItem>
<Input
label={t("label.doc")}
{...register("doc")}
multiline={true}
/>
</ContentItem>
{canHaveSynonyms ? (
<ContentItem>

View File

@ -1,5 +1,5 @@
/*
* Copyright © 2024 Hexastack. All rights reserved.
* Copyright © 2025 Hexastack. All rights reserved.
*
* Licensed under the GNU Affero General Public License v3.0 (AGPLv3) with the following additional terms:
* 1. The name "Hexabot" is a trademark of Hexastack. You may not use this name in derivative works without express written permission.
@ -15,6 +15,7 @@ export interface INlpValueAttributes {
entity: string;
foreign_id?: string;
value: string;
doc?: string;
expressions?: string[];
metadata?: Record<string, any>;
builtin?: boolean;