evaluateTimeBasedTrigger function

({TimeBasedMCConfig config, double gapMinutes})? evaluateTimeBasedTrigger(
  1. List<CompactMessage> messages,
  2. String? querySource
)

Evaluate whether the time-based microcompact trigger should fire.

Implementation

({double gapMinutes, TimeBasedMCConfig config})? evaluateTimeBasedTrigger(
  List<CompactMessage> messages,
  String? querySource,
) {
  final config = getTimeBasedMCConfig();
  if (!config.enabled ||
      querySource == null ||
      !querySource.startsWith('repl_main_thread')) {
    return null;
  }

  CompactMessage? lastAssistant;
  for (int i = messages.length - 1; i >= 0; i--) {
    if (messages[i].type == MessageRole.assistant) {
      lastAssistant = messages[i];
      break;
    }
  }
  if (lastAssistant == null) return null;

  final gapMinutes = DateTime.now()
      .difference(lastAssistant.timestamp)
      .inMinutes
      .toDouble();
  if (!gapMinutes.isFinite || gapMinutes < config.gapThresholdMinutes) {
    return null;
  }
  return (gapMinutes: gapMinutes, config: config);
}