patch 20
This commit is contained in:
@@ -80,6 +80,131 @@ final class AgentRunnerConfig
|
||||
return $this->getRequiredString('follow_up_context.reference_anchor.hardness_value_pattern');
|
||||
}
|
||||
|
||||
public function isInputNormalizationEnabled(): bool
|
||||
{
|
||||
return $this->getRequiredBool('input_normalization.enabled');
|
||||
}
|
||||
|
||||
public function getInputNormalizationMaxInputChars(): int
|
||||
{
|
||||
return $this->getRequiredInt('input_normalization.max_input_chars');
|
||||
}
|
||||
|
||||
public function getInputNormalizationMaxOutputChars(): int
|
||||
{
|
||||
return $this->getRequiredInt('input_normalization.max_output_chars');
|
||||
}
|
||||
|
||||
public function getInputNormalizationMaxAddedTokens(): int
|
||||
{
|
||||
return $this->getRequiredInt('input_normalization.max_added_tokens');
|
||||
}
|
||||
|
||||
public function getInputNormalizationMaxLengthRatioPercent(): int
|
||||
{
|
||||
return $this->getRequiredInt('input_normalization.max_length_ratio_percent');
|
||||
}
|
||||
|
||||
public function getInputNormalizationHeartbeatMessage(): string
|
||||
{
|
||||
return $this->getRequiredString('input_normalization.heartbeat_message');
|
||||
}
|
||||
|
||||
public function getInputNormalizationOutputPrefixPattern(): string
|
||||
{
|
||||
return $this->getRequiredString('input_normalization.output_prefix_pattern');
|
||||
}
|
||||
|
||||
/**
|
||||
* @return string[]
|
||||
*/
|
||||
public function getInputNormalizationSkipPatterns(): array
|
||||
{
|
||||
return $this->getRequiredStringList('input_normalization.skip_patterns');
|
||||
}
|
||||
|
||||
public function getInputNormalizationPrompt(string $prompt): string
|
||||
{
|
||||
return $this->implodePromptBlocks([
|
||||
$this->getInputNormalizationIntro(),
|
||||
$this->buildRulesBlock($this->getInputNormalizationRules()),
|
||||
$this->getInputNormalizationOutputFormatBlock(),
|
||||
$this->getInputNormalizationCurrentUserInputLabel() . ':',
|
||||
trim($prompt),
|
||||
]);
|
||||
}
|
||||
|
||||
/**
|
||||
* @return string[]
|
||||
*/
|
||||
public function getInputNormalizationRules(): array
|
||||
{
|
||||
return $this->getRequiredStringList('input_normalization.prompt.rules');
|
||||
}
|
||||
|
||||
public function getInputNormalizationIntro(): string
|
||||
{
|
||||
return $this->getRequiredString('input_normalization.prompt.intro');
|
||||
}
|
||||
|
||||
public function getInputNormalizationOutputFormatBlock(): string
|
||||
{
|
||||
return $this->getRequiredString('input_normalization.prompt.output_format_block');
|
||||
}
|
||||
|
||||
public function getInputNormalizationCurrentUserInputLabel(): string
|
||||
{
|
||||
return $this->getRequiredString('input_normalization.prompt.current_user_input_label');
|
||||
}
|
||||
|
||||
public function isInputNormalizationFuzzyRoutingEnabled(): bool
|
||||
{
|
||||
return $this->getRequiredBool('input_normalization.fuzzy_routing.enabled');
|
||||
}
|
||||
|
||||
public function getInputNormalizationFuzzyRoutingMinTokenLength(): int
|
||||
{
|
||||
return $this->getRequiredInt('input_normalization.fuzzy_routing.min_token_length');
|
||||
}
|
||||
|
||||
public function getInputNormalizationFuzzyRoutingMediumTokenLength(): int
|
||||
{
|
||||
return $this->getRequiredInt('input_normalization.fuzzy_routing.medium_token_length');
|
||||
}
|
||||
|
||||
public function getInputNormalizationFuzzyRoutingLongTokenLength(): int
|
||||
{
|
||||
return $this->getRequiredInt('input_normalization.fuzzy_routing.long_token_length');
|
||||
}
|
||||
|
||||
public function getInputNormalizationFuzzyRoutingMaxDistanceShort(): int
|
||||
{
|
||||
return $this->getRequiredInt('input_normalization.fuzzy_routing.max_distance_short');
|
||||
}
|
||||
|
||||
public function getInputNormalizationFuzzyRoutingMaxDistanceMedium(): int
|
||||
{
|
||||
return $this->getRequiredInt('input_normalization.fuzzy_routing.max_distance_medium');
|
||||
}
|
||||
|
||||
public function getInputNormalizationFuzzyRoutingMaxDistanceLong(): int
|
||||
{
|
||||
return $this->getRequiredInt('input_normalization.fuzzy_routing.max_distance_long');
|
||||
}
|
||||
|
||||
public function getInputNormalizationFuzzyRoutingMinSimilarityPercent(): int
|
||||
{
|
||||
return $this->getRequiredInt('input_normalization.fuzzy_routing.min_similarity_percent');
|
||||
}
|
||||
|
||||
/**
|
||||
* @return string[]
|
||||
*/
|
||||
public function getInputNormalizationFuzzyRoutingTerms(): array
|
||||
{
|
||||
return $this->getRequiredStringList('input_normalization.fuzzy_routing.terms');
|
||||
}
|
||||
|
||||
private function getRequiredInt(string $key): int
|
||||
{
|
||||
$value = $this->requiredValue($key);
|
||||
|
||||
@@ -441,6 +441,33 @@ final readonly class RetriexEffectiveConfigProvider
|
||||
'product_search_knowledge_chunk_limit' => $this->agentRunnerConfig->getProductSearchKnowledgeChunkLimit(),
|
||||
'advisory_product_search_knowledge_chunk_limit' => $this->agentRunnerConfig->getAdvisoryProductSearchKnowledgeChunkLimit(),
|
||||
'optimized_shop_query_prefix_pattern' => $this->agentRunnerConfig->getOptimizedShopQueryPrefixPattern(),
|
||||
'input_normalization' => [
|
||||
'enabled' => $this->agentRunnerConfig->isInputNormalizationEnabled(),
|
||||
'max_input_chars' => $this->agentRunnerConfig->getInputNormalizationMaxInputChars(),
|
||||
'max_output_chars' => $this->agentRunnerConfig->getInputNormalizationMaxOutputChars(),
|
||||
'max_added_tokens' => $this->agentRunnerConfig->getInputNormalizationMaxAddedTokens(),
|
||||
'max_length_ratio_percent' => $this->agentRunnerConfig->getInputNormalizationMaxLengthRatioPercent(),
|
||||
'heartbeat_message' => $this->agentRunnerConfig->getInputNormalizationHeartbeatMessage(),
|
||||
'output_prefix_pattern' => $this->agentRunnerConfig->getInputNormalizationOutputPrefixPattern(),
|
||||
'skip_patterns' => $this->agentRunnerConfig->getInputNormalizationSkipPatterns(),
|
||||
'prompt' => [
|
||||
'intro' => $this->agentRunnerConfig->getInputNormalizationIntro(),
|
||||
'rules' => $this->agentRunnerConfig->getInputNormalizationRules(),
|
||||
'output_format_block' => $this->agentRunnerConfig->getInputNormalizationOutputFormatBlock(),
|
||||
'current_user_input_label' => $this->agentRunnerConfig->getInputNormalizationCurrentUserInputLabel(),
|
||||
],
|
||||
'fuzzy_routing' => [
|
||||
'enabled' => $this->agentRunnerConfig->isInputNormalizationFuzzyRoutingEnabled(),
|
||||
'min_token_length' => $this->agentRunnerConfig->getInputNormalizationFuzzyRoutingMinTokenLength(),
|
||||
'medium_token_length' => $this->agentRunnerConfig->getInputNormalizationFuzzyRoutingMediumTokenLength(),
|
||||
'long_token_length' => $this->agentRunnerConfig->getInputNormalizationFuzzyRoutingLongTokenLength(),
|
||||
'max_distance_short' => $this->agentRunnerConfig->getInputNormalizationFuzzyRoutingMaxDistanceShort(),
|
||||
'max_distance_medium' => $this->agentRunnerConfig->getInputNormalizationFuzzyRoutingMaxDistanceMedium(),
|
||||
'max_distance_long' => $this->agentRunnerConfig->getInputNormalizationFuzzyRoutingMaxDistanceLong(),
|
||||
'min_similarity_percent' => $this->agentRunnerConfig->getInputNormalizationFuzzyRoutingMinSimilarityPercent(),
|
||||
'terms' => $this->agentRunnerConfig->getInputNormalizationFuzzyRoutingTerms(),
|
||||
],
|
||||
],
|
||||
'messages' => [
|
||||
'empty_prompt' => $this->agentRunnerConfig->getEmptyPromptMessage(),
|
||||
'analyze_request' => $this->agentRunnerConfig->getAnalyzeRequestMessage(),
|
||||
@@ -1027,6 +1054,58 @@ final readonly class RetriexEffectiveConfigProvider
|
||||
$this->validateStringListMap($agent['shop_query_optimizer'] ?? [], 'agent.shop_query_optimizer', $errors, $warnings);
|
||||
$this->validateRegexPattern($agent['optimized_shop_query_prefix_pattern'] ?? null, 'agent.optimized_shop_query_prefix_pattern', $errors);
|
||||
|
||||
$normalization = is_array($agent['input_normalization'] ?? null) ? $agent['input_normalization'] : [];
|
||||
$normalizationPrompt = is_array($normalization['prompt'] ?? null) ? $normalization['prompt'] : [];
|
||||
if (($this->asInt($normalization['max_input_chars'] ?? null) ?? 0) < 1) {
|
||||
$errors[] = 'agent.input_normalization.max_input_chars must be greater than 0.';
|
||||
}
|
||||
if (($this->asInt($normalization['max_output_chars'] ?? null) ?? 0) < 1) {
|
||||
$errors[] = 'agent.input_normalization.max_output_chars must be greater than 0.';
|
||||
}
|
||||
if (($this->asInt($normalization['max_added_tokens'] ?? null) ?? -1) < 0) {
|
||||
$errors[] = 'agent.input_normalization.max_added_tokens must be greater than or equal to 0.';
|
||||
}
|
||||
if (($this->asInt($normalization['max_length_ratio_percent'] ?? null) ?? 0) < 100) {
|
||||
$errors[] = 'agent.input_normalization.max_length_ratio_percent must be at least 100.';
|
||||
}
|
||||
$this->validateRegexPattern($normalization['output_prefix_pattern'] ?? null, 'agent.input_normalization.output_prefix_pattern', $errors);
|
||||
$this->validateRegexPatternList($normalization['skip_patterns'] ?? [], 'agent.input_normalization.skip_patterns', $errors);
|
||||
$this->validateStringList($this->toList($normalizationPrompt['rules'] ?? []), 'agent.input_normalization.prompt.rules', $errors, $warnings);
|
||||
|
||||
$fuzzyRouting = is_array($normalization['fuzzy_routing'] ?? null) ? $normalization['fuzzy_routing'] : [];
|
||||
if (($this->asInt($fuzzyRouting['min_token_length'] ?? null) ?? 0) < 1) {
|
||||
$errors[] = 'agent.input_normalization.fuzzy_routing.min_token_length must be greater than 0.';
|
||||
}
|
||||
if (($this->asInt($fuzzyRouting['medium_token_length'] ?? null) ?? 0) < 1) {
|
||||
$errors[] = 'agent.input_normalization.fuzzy_routing.medium_token_length must be greater than 0.';
|
||||
}
|
||||
if (($this->asInt($fuzzyRouting['long_token_length'] ?? null) ?? 0) < 1) {
|
||||
$errors[] = 'agent.input_normalization.fuzzy_routing.long_token_length must be greater than 0.';
|
||||
}
|
||||
if (($this->asInt($fuzzyRouting['max_distance_short'] ?? null) ?? -1) < 0) {
|
||||
$errors[] = 'agent.input_normalization.fuzzy_routing.max_distance_short must be greater than or equal to 0.';
|
||||
}
|
||||
if (($this->asInt($fuzzyRouting['max_distance_medium'] ?? null) ?? -1) < 0) {
|
||||
$errors[] = 'agent.input_normalization.fuzzy_routing.max_distance_medium must be greater than or equal to 0.';
|
||||
}
|
||||
if (($this->asInt($fuzzyRouting['max_distance_long'] ?? null) ?? -1) < 0) {
|
||||
$errors[] = 'agent.input_normalization.fuzzy_routing.max_distance_long must be greater than or equal to 0.';
|
||||
}
|
||||
$minSimilarityPercent = $this->asInt($fuzzyRouting['min_similarity_percent'] ?? null) ?? 0;
|
||||
if ($minSimilarityPercent < 1 || $minSimilarityPercent > 100) {
|
||||
$errors[] = 'agent.input_normalization.fuzzy_routing.min_similarity_percent must be between 1 and 100.';
|
||||
}
|
||||
$this->validateStringList($this->toList($fuzzyRouting['terms'] ?? []), 'agent.input_normalization.fuzzy_routing.terms', $errors, $warnings);
|
||||
if (trim((string) ($normalizationPrompt['intro'] ?? '')) === '') {
|
||||
$errors[] = 'agent.input_normalization.prompt.intro must not be empty.';
|
||||
}
|
||||
if (trim((string) ($normalizationPrompt['output_format_block'] ?? '')) === '') {
|
||||
$errors[] = 'agent.input_normalization.prompt.output_format_block must not be empty.';
|
||||
}
|
||||
if (trim((string) ($normalizationPrompt['current_user_input_label'] ?? '')) === '') {
|
||||
$errors[] = 'agent.input_normalization.prompt.current_user_input_label must not be empty.';
|
||||
}
|
||||
|
||||
$anchorEnrichment = $agent['shop_query_optimizer']['context_anchor_enrichment'] ?? [];
|
||||
if (is_array($anchorEnrichment)) {
|
||||
$this->validateStringList($this->toList($anchorEnrichment['trigger_terms'] ?? []), 'agent.shop_query_optimizer.context_anchor_enrichment.trigger_terms', $errors, $warnings);
|
||||
|
||||
Reference in New Issue
Block a user