[API reference](https://evolu.dev/docs/api-reference) › [@evolu/common](https://evolu.dev/docs/api-reference/common) › [Schedule](https://evolu.dev/docs/api-reference/common/Schedule) › whenInput

```ts
function whenInput<Input, Output>(
  predicate: Predicate<Input>,
  altSchedule: Schedule<Output, Input>,
): (schedule: Schedule<Output, Input>) => Schedule<Output, Input>;
```

Defined in: [packages/common/src/Schedule.ts:1369](https://github.com/evoluhq/evolu/blob/e7144e2bbe9069362b62dec1b64a8aa922b8f1b0/packages/common/src/Schedule.ts#L1369)

Selects between two schedules based on input.

If [Predicate](https://evolu.dev/docs/api-reference/common/Types/type-aliases/Predicate) returns `true`, uses `altSchedule`; otherwise uses the
base schedule. Useful for implementing error-aware backoff where certain
errors (e.g., throttling) use different delays.

### Example

```ts
interface MyError extends Typed<"Throttled" | "NetworkError"> {}

const awsWithThrottling = whenInput<MyError, Millis>(
  (error) => error.type === "Throttled",
  exponential("1s"), // throttled: 1s base
)(exponential("100ms")); // normal: 100ms base
```