xz-provider 0.5.0

LLM 服务提供者抽象层 — 统一的 LLM 服务提供者接口
Documentation
//! LLM provider implementations.
//!
//! The only HTTP client implementation is [`GenericProvider`], which delegates
//! protocol encoding/decoding to a [`crate::protocol::ProtocolAdapter`].
//! Historical `OpenAiCompatibleProvider` (a second full HTTP stack) was removed;
//! OpenAI-compatible endpoints use `GenericProvider` + `OpenAiChatAdapter` /
//! `OpenAiResponsesAdapter` via [`crate::ProviderBuilder`].

mod generic;
pub mod sse;

pub use generic::GenericProvider;

/// Parse Retry-After header value from an HTTP response.
/// Supports integer seconds format ("120") and float ("120.5").
/// Falls back to `default_ms` if header is missing or unparseable.
pub(crate) fn parse_retry_after(resp: &reqwest::Response, default_ms: u64) -> u64 {
    resp.headers()
        .get(reqwest::header::RETRY_AFTER)
        .and_then(|v| v.to_str().ok())
        .and_then(|s| s.trim().parse::<f64>().ok())
        .map(|secs| (secs * 1000.0) as u64)
        .unwrap_or(default_ms)
}