ClaudeWrapper.Retry (ClaudeWrapper v0.7.0)

Copy Markdown View Source

Retry policy with exponential backoff for query execution.

Usage

config = ClaudeWrapper.Config.new()
query = ClaudeWrapper.Query.new("fix the bug")

# Retry up to 3 times with exponential backoff
{:ok, result} = ClaudeWrapper.Retry.execute(query, config,
  max_retries: 3,
  base_delay_ms: 1_000,
  max_delay_ms: 30_000
)

# With custom retry predicate
{:ok, result} = ClaudeWrapper.Retry.execute(query, config,
  max_retries: 5,
  retry_on: fn
    {:error, {:exit, 1, _}} -> true
    {:error, {:timeout, _}} -> true
    _ -> false
  end
)

Summary

Functions

Compute the delay for a given attempt number.

Execute a query with retry logic.

Types

opts()

@type opts() :: [
  max_retries: non_neg_integer(),
  base_delay_ms: pos_integer(),
  max_delay_ms: pos_integer(),
  multiplier: number(),
  jitter: boolean(),
  retry_on: (term() -> boolean())
]

Functions

compute_delay(attempt, base_delay, max_delay, multiplier, jitter?)

@spec compute_delay(
  non_neg_integer(),
  pos_integer(),
  pos_integer(),
  number(),
  boolean()
) ::
  non_neg_integer()

Compute the delay for a given attempt number.

execute(query, config, opts \\ [])

@spec execute(ClaudeWrapper.Query.t(), ClaudeWrapper.Config.t(), opts()) ::
  {:ok, ClaudeWrapper.Result.t()} | {:error, term()}

Execute a query with retry logic.

Options

  • :max_retries - Maximum number of retry attempts (default: 3)
  • :base_delay_ms - Initial delay between retries in ms (default: 1000)
  • :max_delay_ms - Maximum delay cap in ms (default: 30000)
  • :multiplier - Backoff multiplier (default: 2)
  • :jitter - Add random jitter to delays (default: true)
  • :retry_on - Function that receives the error and returns whether to retry. Defaults to retrying on timeouts and non-zero exits.