.
This commit is contained in:
@@ -3813,8 +3813,10 @@ public class MarketingAnalysisService {
|
|||||||
.replace("[[CHART_CHANNEL_MATRIX]]", "")
|
.replace("[[CHART_CHANNEL_MATRIX]]", "")
|
||||||
.replace("[[CHART_FUNNEL]]", "")
|
.replace("[[CHART_FUNNEL]]", "")
|
||||||
.replace("[[CHART_SWOT]]", "");
|
.replace("[[CHART_SWOT]]", "");
|
||||||
// Safety net: remove any unknown/variant placeholders too
|
// Safety net: remove any unknown/variant placeholders too.
|
||||||
cleaned = cleaned.replaceAll("(?i)\\[\\[\\s*(CHART|TABLE)_[A-Za-z0-9_]+\\s*\\]\\]", "");
|
// IMPORTANT: model sometimes outputs generic placeholders like [[CHART_...]].
|
||||||
|
// We tolerate dots/hyphens/underscores to ensure they get removed.
|
||||||
|
cleaned = cleaned.replaceAll("(?i)\\[\\[\\s*(CHART|TABLE)_[A-Za-z0-9_.-]+\\s*\\]\\]", "");
|
||||||
cleaned = cleaned.replaceAll("(\\r?\\n){3,}", "\n\n");
|
cleaned = cleaned.replaceAll("(\\r?\\n){3,}", "\n\n");
|
||||||
return cleaned;
|
return cleaned;
|
||||||
}
|
}
|
||||||
@@ -3854,7 +3856,7 @@ public class MarketingAnalysisService {
|
|||||||
// spaces). Use a fast contains() check first, but fall back to regex to
|
// spaces). Use a fast contains() check first, but fall back to regex to
|
||||||
// tolerate extra spaces like: [[ CHART_SEASONALITY ]].
|
// tolerate extra spaces like: [[ CHART_SEASONALITY ]].
|
||||||
java.util.regex.Pattern presentPattern = java.util.regex.Pattern
|
java.util.regex.Pattern presentPattern = java.util.regex.Pattern
|
||||||
.compile("\\[\\[\\s*(CHART|TABLE)_[A-Za-z0-9_]+\\s*\\]\\]");
|
.compile("\\[\\[\\s*(CHART|TABLE)_[A-Za-z0-9_.-]+\\s*\\]\\]");
|
||||||
Set<String> presentPlaceholders = new LinkedHashSet<>();
|
Set<String> presentPlaceholders = new LinkedHashSet<>();
|
||||||
if (containsChartOrTablePlaceholder(result)) {
|
if (containsChartOrTablePlaceholder(result)) {
|
||||||
java.util.regex.Matcher presentMatcher = presentPattern.matcher(result);
|
java.util.regex.Matcher presentMatcher = presentPattern.matcher(result);
|
||||||
@@ -3935,8 +3937,9 @@ public class MarketingAnalysisService {
|
|||||||
result = removePlaceholderWithSurroundingNewlines(result, placeholderVariant);
|
result = removePlaceholderWithSurroundingNewlines(result, placeholderVariant);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Final safety net: remove any leftover placeholders (known or unknown)
|
// Final safety net: remove any leftover placeholders (known or unknown),
|
||||||
result = result.replaceAll("(?i)\\[\\[\\s*(CHART|TABLE)_[A-Za-z0-9_]+\\s*\\]\\]", "");
|
// including generic tokens like [[CHART_...]].
|
||||||
|
result = result.replaceAll("(?i)\\[\\[\\s*(CHART|TABLE)_[A-Za-z0-9_.-]+\\s*\\]\\]", "");
|
||||||
result = result.replaceAll("(\\r?\\n){3,}", "\n\n");
|
result = result.replaceAll("(\\r?\\n){3,}", "\n\n");
|
||||||
|
|
||||||
logger.info(
|
logger.info(
|
||||||
|
|||||||
+19
@@ -171,4 +171,23 @@ class MarketingAnalysisServiceChartPlacementTest {
|
|||||||
assertTrue(Pattern.compile("(?m)^```json:segmentsChannelMatrix$").matcher(out).find(),
|
assertTrue(Pattern.compile("(?m)^```json:segmentsChannelMatrix$").matcher(out).find(),
|
||||||
"Opening fence line must be exactly ```json:<key> with no leading spaces");
|
"Opening fence line must be exactly ```json:<key> with no leading spaces");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void replaceChartPlaceholders_shouldRemoveGenericChartDotsPlaceholder() throws Exception {
|
||||||
|
Method m = MarketingAnalysisService.class.getDeclaredMethod("replaceChartPlaceholders", String.class,
|
||||||
|
Map.class);
|
||||||
|
m.setAccessible(true);
|
||||||
|
|
||||||
|
String report = ""
|
||||||
|
+ "## I. Краткое резюме\n"
|
||||||
|
+ "Текст перед.\n"
|
||||||
|
+ "[[CHART_...]]\n"
|
||||||
|
+ "Текст после.\n";
|
||||||
|
|
||||||
|
// Even if chartsData is empty, generic placeholders must be removed.
|
||||||
|
String out = (String) m.invoke(marketingAnalysisService, report, new HashMap<String, Object>());
|
||||||
|
|
||||||
|
assertFalse(out.contains("[[CHART_...]]"),
|
||||||
|
"Generic placeholder [[CHART_...]] must be removed from fullAnalysis");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user