CMDC.Agent.Retry (cmdc v0.3.0)

Copy Markdown View Source

Provider 错误分类与重试延迟计算。

错误分类

  • Transient(暂时性) — 限流、服务器过载、网络断开等,等待后重试可能成功。
  • Permanent(永久性) — 认证失败、上下文溢出、无效请求,重试无意义。

永久性错误优先检测——若同一错误同时包含永久与暂时模式,归为永久性。

退避策略

指数退避:delay = base_ms × 2^(attempt-1),上限 max_ms。 不引入 jitter——单 Agent 并发请求量不足以受益,且确定性延迟便于测试。

Summary

Functions

计算第 attempt 次重试的延迟毫秒数。

返回永久性错误模式列表。

返回 true 如果该错误是暂时性的、可以重试。

返回暂时性错误模式列表。

Functions

delay(attempt, opts \\ [])

@spec delay(
  pos_integer(),
  keyword()
) :: pos_integer()

计算第 attempt 次重试的延迟毫秒数。

选项

  • :base_ms — 初始延迟(默认 2_000
  • :max_ms — 最大延迟(默认 60_000

示例

iex> CMDC.Agent.Retry.delay(1)
2_000

iex> CMDC.Agent.Retry.delay(3)
8_000

permanent_patterns()

@spec permanent_patterns() :: [String.t()]

返回永久性错误模式列表。

retryable?(reason)

@spec retryable?(term()) :: boolean()

返回 true 如果该错误是暂时性的、可以重试。

示例

iex> CMDC.Agent.Retry.retryable?("429 Too Many Requests")
true

iex> CMDC.Agent.Retry.retryable?("context_length_exceeded")
false

transient_patterns()

@spec transient_patterns() :: [String.t()]

返回暂时性错误模式列表。