FallbackStreamFunction constructor

FallbackStreamFunction({
  1. required List<ChainEntry> entries,
  2. ModelRolesRetryPolicy policy = const ModelRolesRetryPolicy(),
  3. void onNotice(
    1. FallbackNotice notice
    )?,
  4. DateTime now()?,
  5. double jitterFraction()?,
  6. Future<bool> sleeper(
    1. Duration delay,
    2. CancelToken? cancelToken
    )?,
  7. QueueDeathClassifier? queueClassifier,
  8. ProviderQueueState? queueState,
})

Creates the wrapper. entries must be non-empty. jitterFraction and sleeper are injectable for deterministic tests.

Implementation

FallbackStreamFunction({
  required List<ChainEntry> entries,
  this.policy = const ModelRolesRetryPolicy(),
  this.onNotice,
  DateTime Function()? now,
  double Function()? jitterFraction,
  Future<bool> Function(Duration delay, CancelToken? cancelToken)? sleeper,

  /// Issue #418: when set, the queue death classifier decides what
  /// advances (7 death kinds) and what surfaces verbatim
  /// (content_filter/user abort). Null keeps the classic rate-limit +
  /// transport policy byte-identical.
  this.queueClassifier,

  /// Issue #418: the sticky-cursor/health state the queue editor reads.
  /// Null in roles mode.
  this.queueState,
}) : _entries = List.unmodifiable(entries),
     _now = now ?? DateTime.now,
     _jitterFraction = jitterFraction ?? Random().nextDouble,
     _sleeper = sleeper ?? _defaultSleeper {
  if (entries.isEmpty) {
    throw ArgumentError.value(
      entries,
      'entries',
      'a fallback chain needs at least one entry',
    );
  }
}