From 46202a0b649075198549baa072ef2296ff4e5154 Mon Sep 17 00:00:00 2001 From: maverickstuder Date: Mon, 14 Oct 2024 12:30:14 +0200 Subject: [PATCH] RED-10072: AI description field and toggle for entities --- .../add-edit-entity.component.html | 18 ++++++++++++++++++ .../add-edit-entity.component.ts | 8 +++++++- apps/red-ui/src/assets/i18n/redact/de.json | 6 +++--- apps/red-ui/src/assets/i18n/redact/en.json | 6 +++--- apps/red-ui/src/assets/i18n/scm/de.json | 6 +++--- apps/red-ui/src/assets/i18n/scm/en.json | 6 +++--- .../src/lib/dictionaries/dictionary.model.ts | 4 ++++ .../src/lib/dictionaries/dictionary.ts | 8 ++++++++ 8 files changed, 49 insertions(+), 13 deletions(-) diff --git a/apps/red-ui/src/app/modules/shared/components/add-edit-entity/add-edit-entity.component.html b/apps/red-ui/src/app/modules/shared/components/add-edit-entity/add-edit-entity.component.html index d5790c69f..01e6d4a67 100644 --- a/apps/red-ui/src/app/modules/shared/components/add-edit-entity/add-edit-entity.component.html +++ b/apps/red-ui/src/app/modules/shared/components/add-edit-entity/add-edit-entity.component.html @@ -78,6 +78,24 @@ > +
+ + {{ 'add-edit-entity.form.ai-creation-enabled' | translate }} + +
+ +
+ + +
+
{{ 'add-edit-entity.form.has-dictionary' | translate }} diff --git a/apps/red-ui/src/app/modules/shared/components/add-edit-entity/add-edit-entity.component.ts b/apps/red-ui/src/app/modules/shared/components/add-edit-entity/add-edit-entity.component.ts index a45e20c63..545d63f57 100644 --- a/apps/red-ui/src/app/modules/shared/components/add-edit-entity/add-edit-entity.component.ts +++ b/apps/red-ui/src/app/modules/shared/components/add-edit-entity/add-edit-entity.component.ts @@ -9,7 +9,7 @@ import { MatSelect } from '@angular/material/select'; import { MatSlideToggle } from '@angular/material/slide-toggle'; import { marker as _ } from '@biesbjerg/ngx-translate-extract-marker'; import { RoundCheckboxComponent } from '@common-ui/inputs/round-checkbox/round-checkbox.component'; -import { BaseFormComponent, getConfig, HasScrollbarDirective, LoadingService, Toaster } from '@iqser/common-ui'; +import { BaseFormComponent, getConfig, isIqserDevMode, HasScrollbarDirective, LoadingService, Toaster } from '@iqser/common-ui'; import { TranslateModule } from '@ngx-translate/core'; import { Dictionary, IDictionary } from '@red/domain'; import { DictionariesMapService } from '@services/entity-services/dictionaries-map.service'; @@ -18,6 +18,7 @@ import { toSnakeCase } from '@utils/functions'; import { ColorPickerModule } from 'ngx-color-picker'; import { Observable } from 'rxjs'; import { map, startWith } from 'rxjs/operators'; +import { log } from '@common-ui/utils'; const REDACTION_FIELDS = ['defaultReason']; @@ -62,6 +63,7 @@ export class AddEditEntityComponent extends BaseFormComponent implements OnInit colors: Color[]; readonly isDocumine = getConfig().IS_DOCUMINE; + readonly isIqserDevMode = isIqserDevMode(); constructor( private readonly _dictionariesMapService: DictionariesMapService, @@ -158,6 +160,8 @@ export class AddEditEntityComponent extends BaseFormComponent implements OnInit skippedHexColor: [this.entity?.skippedHexColor, [Validators.required, Validators.minLength(7)]], type: [this.entity?.type], description: [this.entity?.description], + aiCreationEnabled: [this.entity?.aiCreationEnabled], + aiDescription: [this.entity?.aiDescription], rank: [{ value: this.entity?.rank, disabled: this.#isSystemManaged }, Validators.required], hint: [{ value: !!this.entity?.hint, disabled: this.#isSystemManaged }], hasDictionary: [ @@ -250,6 +254,8 @@ export class AddEditEntityComponent extends BaseFormComponent implements OnInit dossierTemplateId: this.dossierTemplateId, type: this.form.get('type').value, description: this.form.get('description').value, + aiCreationEnabled: this.form.get('aiCreationEnabled').value, + aiDescription: this.form.get('aiDescription').value, hint: this.#isHint, rank: this.form.get('rank').value, caseInsensitive: !this.form.get('caseSensitive').value, diff --git a/apps/red-ui/src/assets/i18n/redact/de.json b/apps/red-ui/src/assets/i18n/redact/de.json index fb5ee644d..df3f3f25c 100644 --- a/apps/red-ui/src/assets/i18n/redact/de.json +++ b/apps/red-ui/src/assets/i18n/redact/de.json @@ -112,9 +112,6 @@ } }, "add-edit-dossier-attribute": { - "error": { - "generic": "Speichern des Attributs fehlgeschlagen." - }, "form": { "label": "Name des Attributs", "label-placeholder": "Namen eingeben", @@ -138,6 +135,9 @@ }, "add-edit-entity": { "form": { + "ai-creation-enabled": "AI Erzeugung aktivieren", + "ai-description": "AI Beschreibung", + "ai-description-placeholder": "AI Beschreibung eingeben", "case-sensitive": "Groß-/Kleinschreibung beachten", "color": "Farbe {type, select, redaction{Schwärzung} hint{Hinweis} recommendation{Empfehlung} skipped{Ingorierte Schwärzung} ignored{Ignorierter Hinweis} other{}}", "color-placeholder": "#", diff --git a/apps/red-ui/src/assets/i18n/redact/en.json b/apps/red-ui/src/assets/i18n/redact/en.json index b4b07efe4..8c1736655 100644 --- a/apps/red-ui/src/assets/i18n/redact/en.json +++ b/apps/red-ui/src/assets/i18n/redact/en.json @@ -112,9 +112,6 @@ } }, "add-edit-dossier-attribute": { - "error": { - "generic": "Failed to save attribute." - }, "form": { "label": "Attribute name", "label-placeholder": "Enter name", @@ -138,6 +135,9 @@ }, "add-edit-entity": { "form": { + "ai-creation-enabled": "Enable AI creation", + "ai-description": "AI Description", + "ai-description-placeholder": "Enter AI description", "case-sensitive": "Case-sensitive", "color": "{type, select, redaction{Redaction} hint{Hint} recommendation{Recommendation} skipped{Skipped redaction} ignored{Ignored hint} other{}} color", "color-placeholder": "#", diff --git a/apps/red-ui/src/assets/i18n/scm/de.json b/apps/red-ui/src/assets/i18n/scm/de.json index 570840332..6c31ddea3 100644 --- a/apps/red-ui/src/assets/i18n/scm/de.json +++ b/apps/red-ui/src/assets/i18n/scm/de.json @@ -112,9 +112,6 @@ } }, "add-edit-dossier-attribute": { - "error": { - "generic": "Speichern des Attributs fehlgeschlagen." - }, "form": { "label": "Name des Attributs", "label-placeholder": "Namen eingeben", @@ -138,6 +135,9 @@ }, "add-edit-entity": { "form": { + "ai-creation-enabled": "AI Erzeugung aktivieren", + "ai-description": "AI Beschreibung", + "ai-description-placeholder": "AI Beschreibung eingeben", "case-sensitive": "Groß-/Kleinschreibung beachten", "color": "Farbe {type, select, redaction{Annotation} hint{Hinweis} recommendation{Empfehlung} skipped{Übersprungene Annotation} ignored{Ignorierter Hinweis} other{}}", "color-placeholder": "#", diff --git a/apps/red-ui/src/assets/i18n/scm/en.json b/apps/red-ui/src/assets/i18n/scm/en.json index 5b74c260d..f751bf400 100644 --- a/apps/red-ui/src/assets/i18n/scm/en.json +++ b/apps/red-ui/src/assets/i18n/scm/en.json @@ -112,9 +112,6 @@ } }, "add-edit-dossier-attribute": { - "error": { - "generic": "Failed to save attribute!" - }, "form": { "label": "Attribute name", "label-placeholder": "Enter name", @@ -138,6 +135,9 @@ }, "add-edit-entity": { "form": { + "ai-creation-enabled": "Enable AI creation", + "ai-description": "AI Description", + "ai-description-placeholder": "Enter AI description", "case-sensitive": "Case-sensitive", "color": "{type, select, redaction{Annotation} hint{Hint} recommendation{Recommendation} skipped{Skipped annotation} ignored{Ignored hint} other{}} Color", "color-placeholder": "#", diff --git a/libs/red-domain/src/lib/dictionaries/dictionary.model.ts b/libs/red-domain/src/lib/dictionaries/dictionary.model.ts index 4c33e7840..86e40c4e3 100644 --- a/libs/red-domain/src/lib/dictionaries/dictionary.model.ts +++ b/libs/red-domain/src/lib/dictionaries/dictionary.model.ts @@ -7,6 +7,8 @@ export class Dictionary extends Entity implements IDictionary { readonly addToDictionaryAction: boolean; readonly caseInsensitive: boolean; readonly description: string; + readonly aiCreationEnabled: boolean; + readonly aiDescription: string; readonly dossierTemplateId?: string; readonly hexColor?: string; readonly recommendationHexColor?: string; @@ -33,6 +35,8 @@ export class Dictionary extends Entity implements IDictionary { this.addToDictionaryAction = !!entity.addToDictionaryAction; this.caseInsensitive = !!entity.caseInsensitive; this.description = entity.description ?? ''; + this.aiCreationEnabled = !!entity.aiCreationEnabled; + this.aiDescription = entity.aiDescription ?? ''; this.dossierTemplateId = entity.dossierTemplateId; this.entries = entity.entries ?? []; this.falsePositiveEntries = entity.falsePositiveEntries ?? []; diff --git a/libs/red-domain/src/lib/dictionaries/dictionary.ts b/libs/red-domain/src/lib/dictionaries/dictionary.ts index d146393bf..6f01105fc 100644 --- a/libs/red-domain/src/lib/dictionaries/dictionary.ts +++ b/libs/red-domain/src/lib/dictionaries/dictionary.ts @@ -16,6 +16,14 @@ export interface IDictionary { * The description of the dictionary type */ readonly description?: string; + /** + * True if the entries in this type should also be created via AI, default is false. + */ + readonly aiCreationEnabled?: boolean; + /** + * The AI description of the dictionary type + */ + readonly aiDescription?: string; /** * The DossierTemplate Id for this type */