AI request node: fix prompts validation

This commit is contained in:
Dmytro Skarzhynets 2025-08-13 18:26:53 +03:00
parent 052b5cddb8
commit a1cebcc54c
No known key found for this signature in database
GPG Key ID: 2B51652F224037DF
10 changed files with 40 additions and 32 deletions

View File

@ -34,12 +34,11 @@ public class TbAiNodeConfiguration implements NodeConfiguration<TbAiNodeConfigur
@NotNull
private AiModelId modelId;
@Pattern(regexp = ".*\\S.*", message = "must not be blank")
@Length(min = 1, max = 10000)
@Length(min = 1, max = 500_000)
private String systemPrompt;
@NotBlank
@Length(min = 1, max = 10000)
@Length(min = 1, max = 500_000)
private String userPrompt;
@NotNull

View File

@ -193,10 +193,9 @@ class TbAiNodeTest {
}
static Stream<Arguments> invalidSystemPrompts() {
String tooLongString = "a".repeat(10_001);
String tooLongString = "a".repeat(500_001);
return Stream.of(
Arguments.of(""),
Arguments.of(" "),
Arguments.of(tooLongString)
);
}
@ -213,12 +212,17 @@ class TbAiNodeTest {
}
static Stream<Arguments> validSystemPrompts() {
String longString = "a".repeat(10_000);
String longString = "a".repeat(500_000);
return Stream.of(
Arguments.of((String) null),
Arguments.of("a"),
Arguments.of("Test system prompt"),
Arguments.of(longString)
Arguments.of(longString),
Arguments.of("""
first sentence
second sentence
""")
);
}
@ -239,7 +243,7 @@ class TbAiNodeTest {
}
static Stream<Arguments> invalidUserPrompts() {
String tooLongString = "a".repeat(10_001);
String tooLongString = "a".repeat(500_001);
return Stream.of(
Arguments.of((String) null),
Arguments.of(""),
@ -260,11 +264,16 @@ class TbAiNodeTest {
}
static Stream<Arguments> validUserPrompts() {
String longString = "a".repeat(10_000);
String longString = "a".repeat(500_000);
return Stream.of(
Arguments.of("a"),
Arguments.of("Test user prompt"),
Arguments.of(longString)
Arguments.of(longString),
Arguments.of("""
first sentence
second sentence
""")
);
}

View File

@ -51,8 +51,8 @@ export class AiConfigComponent extends RuleNodeConfigurationComponent {
protected onConfigurationSet(configuration: RuleNodeConfiguration) {
this.aiConfigForm = this.fb.group({
modelId: [configuration?.modelId ?? null, [Validators.required]],
systemPrompt: [configuration?.systemPrompt ?? '', [Validators.maxLength(10000), Validators.pattern(/.*\S.*/)]],
userPrompt: [configuration?.userPrompt ?? '', [Validators.required, Validators.maxLength(10000), Validators.pattern(/.*\S.*/)]],
systemPrompt: [configuration?.systemPrompt ?? '', [Validators.maxLength(500_000), Validators.pattern(/.*\S.*/)]],
userPrompt: [configuration?.userPrompt ?? '', [Validators.required, Validators.maxLength(500_000), Validators.pattern(/.*\S.*/)]],
responseFormat: this.fb.group({
type: [configuration?.responseFormat?.type ?? ResponseFormat.JSON, []],
schema: [configuration?.responseFormat?.schema ?? null, [jsonRequired]],

View File

@ -5436,11 +5436,11 @@
"prompt-settings": "Promptindstillinger",
"prompt-settings-hint": "Den valgfrie systemprompt angiver AI'ens generelle rolle og begrænsninger, mens brugerprompten definerer den specifikke opgave. Begge felter understøtter også skabelonfunktionalitet.",
"system-prompt": "Systemprompt",
"system-prompt-max-length": "Systemprompt må højst være 10000 tegn.",
"system-prompt-max-length": "Systemprompt må højst være 500000 tegn.",
"system-prompt-blank": "Systemprompt må ikke være tom.",
"user-prompt": "Brugerprompt",
"user-prompt-required": "Brugerprompt er påkrævet.",
"user-prompt-max-length": "Brugerprompt må højst være 10000 tegn.",
"user-prompt-max-length": "Brugerprompt må højst være 500000 tegn.",
"user-prompt-blank": "Brugerprompt må ikke være tom.",
"response-format": "Svarformat",
"response-text": "Tekst",

View File

@ -5436,11 +5436,11 @@
"prompt-settings": "Prompt-Einstellungen",
"prompt-settings-hint": "Der optionale System-Prompt definiert die allgemeine Rolle und Einschränkungen der KI, während der Benutzer-Prompt die spezifische Aufgabe beschreibt. Beide Felder unterstützen auch die Verwendung von Templates.",
"system-prompt": "System-Prompt",
"system-prompt-max-length": "Der System-Prompt darf maximal 10.000 Zeichen lang sein.",
"system-prompt-max-length": "Der System-Prompt darf maximal 500.000 Zeichen lang sein.",
"system-prompt-blank": "Der System-Prompt darf nicht leer sein.",
"user-prompt": "Benutzer-Prompt",
"user-prompt-required": "Benutzer-Prompt ist erforderlich.",
"user-prompt-max-length": "Der Benutzer-Prompt darf maximal 10.000 Zeichen lang sein.",
"user-prompt-max-length": "Der Benutzer-Prompt darf maximal 500.000 Zeichen lang sein.",
"user-prompt-blank": "Der Benutzer-Prompt darf nicht leer sein.",
"response-format": "Antwortformat",
"response-text": "Text",

View File

@ -5436,11 +5436,11 @@
"prompt-settings": "Ρυθμίσεις prompt",
"prompt-settings-hint": "Το προαιρετικό system prompt ορίζει τον γενικό ρόλο και τους περιορισμούς του AI, ενώ το user prompt καθορίζει το συγκεκριμένο έργο προς εκτέλεση. Και τα δύο πεδία υποστηρίζουν χρήση προτύπων.",
"system-prompt": "System prompt",
"system-prompt-max-length": "Το system prompt πρέπει να είναι έως 10000 χαρακτήρες.",
"system-prompt-max-length": "Το system prompt πρέπει να είναι έως 500000 χαρακτήρες.",
"system-prompt-blank": "Το system prompt δεν πρέπει να είναι κενό.",
"user-prompt": "User prompt",
"user-prompt-required": "Απαιτείται user prompt.",
"user-prompt-max-length": "Το user prompt πρέπει να είναι έως 10000 χαρακτήρες.",
"user-prompt-max-length": "Το user prompt πρέπει να είναι έως 500000 χαρακτήρες.",
"user-prompt-blank": "Το user prompt δεν πρέπει να είναι κενό.",
"response-format": "Μορφή απόκρισης",
"response-text": "Κείμενο",

View File

@ -5446,11 +5446,11 @@
"prompt-settings": "Prompt settings",
"prompt-settings-hint": "The optional system prompt sets the AI's general role and constraints, while the user prompt defines the specific task to perform. Both fields also support templatization.",
"system-prompt": "System prompt",
"system-prompt-max-length": "System prompt must be 10000 characters or less.",
"system-prompt-max-length": "System prompt must be 500000 characters or less.",
"system-prompt-blank": "System prompt must not be blank.",
"user-prompt": "User prompt",
"user-prompt-required": "User prompt is required.",
"user-prompt-max-length": "User prompt must be 10000 characters or less.",
"user-prompt-max-length": "User prompt must be 500000 characters or less.",
"user-prompt-blank": "User prompt must not be blank.",
"response-format": "Response format",
"response-text": "Text",

View File

@ -5436,11 +5436,11 @@
"prompt-settings": "Configuración del prompt",
"prompt-settings-hint": "El prompt del sistema (opcional) define el rol general y las restricciones de la IA, mientras que el prompt del usuario define la tarea específica a realizar. Ambos campos admiten plantillas.",
"system-prompt": "Prompt del sistema",
"system-prompt-max-length": "El prompt del sistema debe tener 10.000 caracteres o menos.",
"system-prompt-max-length": "El prompt del sistema debe tener 500.000 caracteres o menos.",
"system-prompt-blank": "El prompt del sistema no debe estar vacío.",
"user-prompt": "Prompt del usuario",
"user-prompt-required": "Se requiere el prompt del usuario.",
"user-prompt-max-length": "El prompt del usuario debe tener 10.000 caracteres o menos.",
"user-prompt-max-length": "El prompt del usuario debe tener 500.000 caracteres o menos.",
"user-prompt-blank": "El prompt del usuario no debe estar vacío.",
"response-format": "Formato de respuesta",
"response-text": "Texto",

View File

@ -5436,11 +5436,11 @@
"prompt-settings": "Paramètres de prompt",
"prompt-settings-hint": "Le prompt système optionnel définit le rôle général et les contraintes de l'IA, tandis que le prompt utilisateur précise la tâche à exécuter. Les deux champs prennent en charge la modélisation par modèle (templatization).",
"system-prompt": "Prompt système",
"system-prompt-max-length": "Le prompt système doit comporter 10 000 caractères ou moins.",
"system-prompt-max-length": "Le prompt système doit comporter 500 000 caractères ou moins.",
"system-prompt-blank": "Le prompt système ne doit pas être vide.",
"user-prompt": "Prompt utilisateur",
"user-prompt-required": "Le prompt utilisateur est requis.",
"user-prompt-max-length": "Le prompt utilisateur doit comporter 10 000 caractères ou moins.",
"user-prompt-max-length": "Le prompt utilisateur doit comporter 500 000 caractères ou moins.",
"user-prompt-blank": "Le prompt utilisateur ne doit pas être vide.",
"response-format": "Format de réponse",
"response-text": "Texte",

View File

@ -5436,11 +5436,11 @@
"prompt-settings": "İstem ayarları",
"prompt-settings-hint": "İsteğe bağlı sistem istemi, yapay zekanın genel rolünü ve kısıtlamalarını belirlerken, kullanıcı istemi gerçekleştirilmesi gereken belirli görevi tanımlar. Her iki alan da şablonlaştırmayı destekler.",
"system-prompt": "Sistem istemi",
"system-prompt-max-length": "Sistem istemi en fazla 10000 karakter olmalıdır.",
"system-prompt-max-length": "Sistem istemi en fazla 500000 karakter olmalıdır.",
"system-prompt-blank": "Sistem istemi boş olmamalıdır.",
"user-prompt": "Kullanıcı istemi",
"user-prompt-required": "Kullanıcı istemi gereklidir.",
"user-prompt-max-length": "Kullanıcı istemi en fazla 10000 karakter olmalıdır.",
"user-prompt-max-length": "Kullanıcı istemi en fazla 500000 karakter olmalıdır.",
"user-prompt-blank": "Kullanıcı istemi boş olmamalıdır.",
"response-format": "Yanıt formatı",
"response-text": "Metin",