prodex 0.32.0

OpenAI profile pooling and safe auto-rotate for Codex CLI and Claude Code
Documentation
use super::*;

#[derive(Clone, Copy)]
pub(crate) struct RuntimeProxyChainLog<'a> {
    pub(crate) request_id: u64,
    pub(crate) transport: &'a str,
    pub(crate) route: &'a str,
    pub(crate) websocket_session: Option<u64>,
    pub(crate) profile_name: &'a str,
    pub(crate) previous_response_id: Option<&'a str>,
    pub(crate) reason: &'a str,
    pub(crate) via: Option<&'a str>,
}

pub(crate) fn runtime_proxy_log_chain_retried_owner(
    shared: &RuntimeRotationProxyShared,
    log: RuntimeProxyChainLog<'_>,
    delay_ms: u128,
) {
    runtime_proxy_log(
        shared,
        format!(
            "request={} transport={} route={} websocket_session={} chain_retried_owner profile={} previous_response_id={} delay_ms={delay_ms} reason={} via={}",
            log.request_id,
            log.transport,
            log.route,
            log.websocket_session
                .map(|session_id| session_id.to_string())
                .as_deref()
                .unwrap_or("-"),
            log.profile_name,
            log.previous_response_id.unwrap_or("-"),
            log.reason,
            log.via.unwrap_or("-"),
        ),
    );
}

pub(crate) fn runtime_proxy_log_chain_dead_upstream_confirmed(
    shared: &RuntimeRotationProxyShared,
    log: RuntimeProxyChainLog<'_>,
    event: Option<&str>,
) {
    runtime_proxy_log(
        shared,
        format!(
            "request={} transport={} route={} websocket_session={} chain_dead_upstream_confirmed profile={} previous_response_id={} reason={} via={} event={}",
            log.request_id,
            log.transport,
            log.route,
            log.websocket_session
                .map(|session_id| session_id.to_string())
                .as_deref()
                .unwrap_or("-"),
            log.profile_name,
            log.previous_response_id.unwrap_or("-"),
            log.reason,
            log.via.unwrap_or("-"),
            event.unwrap_or("-"),
        ),
    );
}