AI request node: fix prompts validation
This commit is contained in:
		
							parent
							
								
									052b5cddb8
								
							
						
					
					
						commit
						a1cebcc54c
					
				@ -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
 | 
			
		||||
 | 
			
		||||
@ -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
 | 
			
		||||
                        """)
 | 
			
		||||
        );
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -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]],
 | 
			
		||||
 | 
			
		||||
@ -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",
 | 
			
		||||
@ -9522,4 +9522,4 @@
 | 
			
		||||
  "language": {
 | 
			
		||||
    "language": "Sprog"
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@ -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",
 | 
			
		||||
@ -9522,4 +9522,4 @@
 | 
			
		||||
  "language": {
 | 
			
		||||
    "language": "Sprache"
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@ -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": "Κείμενο",
 | 
			
		||||
@ -9522,4 +9522,4 @@
 | 
			
		||||
  "language": {
 | 
			
		||||
    "language": "Γλώσσα"
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@ -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",
 | 
			
		||||
 | 
			
		||||
@ -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",
 | 
			
		||||
@ -9522,4 +9522,4 @@
 | 
			
		||||
  "language": {
 | 
			
		||||
    "language": "Idioma"
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@ -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",
 | 
			
		||||
@ -9522,4 +9522,4 @@
 | 
			
		||||
  "language": {
 | 
			
		||||
    "language": "Langue"
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@ -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",
 | 
			
		||||
@ -9522,4 +9522,4 @@
 | 
			
		||||
  "language": {
 | 
			
		||||
    "language": "Dil"
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user