mergeExpressionStyles function
Merge expression styles from multiple policies (ยง7.4).
Implementation
ExpressionStyle mergeExpressionStyles(List<ExpressionStyle> styles) {
if (styles.isEmpty) return ExpressionStyle.defaultStyle;
if (styles.length == 1) return styles.first;
// Merge tone: use most extreme/cautious values
final mergedTone = ToneConfig(
formality: _mostFormal(styles.map((s) => s.tone.formality)),
confidence: _leastConfident(styles.map((s) => s.tone.confidence)),
empathy: _highest(styles.map((s) => s.tone.empathy)),
directness: _average(styles.map((s) => s.tone.directness)),
);
// Merge format: use most restrictive
final mergedFormat = FormatConfig(
structure: styles.first.format.structure,
length: _shortest(styles.map((s) => s.format.length)),
includeEvidence: styles.any((s) => s.format.includeEvidence),
includeCaveats: styles.any((s) => s.format.includeCaveats),
includeAlternatives: styles.any((s) => s.format.includeAlternatives),
);
// Merge hedging: use highest level, merge phrases by category
final mergedPhrases = <String, List<String>>{};
for (final style in styles) {
final phrases = style.hedging?.phrases;
if (phrases != null) {
_mergePhrasesInto(mergedPhrases, phrases.highUncertainty, 'high_uncertainty');
_mergePhrasesInto(mergedPhrases, phrases.moderateUncertainty, 'moderate_uncertainty');
_mergePhrasesInto(mergedPhrases, phrases.lowUncertainty, 'low_uncertainty');
_mergePhrasesInto(mergedPhrases, phrases.qualifying, 'qualifying');
_mergePhrasesInto(mergedPhrases, phrases.probabilistic, 'probabilistic');
}
}
final mergedHedging = HedgingConfig(
level: _highestHedging(
styles.map((s) => s.hedging?.level ?? HedgingLevel.none)),
phrases: mergedPhrases.isNotEmpty
? HedgingPhrases(
highUncertainty: mergedPhrases['high_uncertainty'],
moderateUncertainty: mergedPhrases['moderate_uncertainty'],
lowUncertainty: mergedPhrases['low_uncertainty'],
qualifying: mergedPhrases['qualifying'],
probabilistic: mergedPhrases['probabilistic'],
)
: null,
);
return ExpressionStyle(
tone: mergedTone,
format: mergedFormat,
hedging: mergedHedging,
);
}