Provider 错误分类与重试延迟计算。
错误分类
- Transient(暂时性) — 限流、服务器过载、网络断开等,等待后重试可能成功。
- Permanent(永久性) — 认证失败、上下文溢出、无效请求,重试无意义。
永久性错误优先检测——若同一错误同时包含永久与暂时模式,归为永久性。
退避策略
指数退避:delay = base_ms × 2^(attempt-1),上限 max_ms。
不引入 jitter——单 Agent 并发请求量不足以受益,且确定性延迟便于测试。
Summary
Functions
@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
@spec permanent_patterns() :: [String.t()]
返回永久性错误模式列表。
返回 true 如果该错误是暂时性的、可以重试。
示例
iex> CMDC.Agent.Retry.retryable?("429 Too Many Requests")
true
iex> CMDC.Agent.Retry.retryable?("context_length_exceeded")
false
@spec transient_patterns() :: [String.t()]
返回暂时性错误模式列表。