gproxy-transform 2.2.2

Pairwise request/response/stream transforms between the OpenAI, Anthropic Claude, and Google Gemini APIs
Documentation
use crate::protocol::{claude, gemini, openai};

pub(in crate::transform::generate_content) fn openai_service_tier_to_claude(
    service_tier: Option<openai::ServiceTier>,
) -> Option<claude::RequestServiceTier> {
    let tier = match service_tier? {
        openai::ServiceTier::Auto => claude::RequestServiceTierKnown::Auto,
        openai::ServiceTier::Default | openai::ServiceTier::OnDemand => {
            claude::RequestServiceTierKnown::StandardOnly
        }
        openai::ServiceTier::Fast
        | openai::ServiceTier::Flex
        | openai::ServiceTier::Scale
        | openai::ServiceTier::Priority => claude::RequestServiceTierKnown::Auto,
    };
    Some(claude::RequestServiceTier::Known(tier))
}

pub(in crate::transform::generate_content) fn claude_service_tier_to_openai(
    service_tier: Option<claude::RequestServiceTier>,
) -> Option<openai::ServiceTier> {
    let tier = match service_tier? {
        claude::RequestServiceTier::Known(claude::RequestServiceTierKnown::Auto) => {
            openai::ServiceTier::Auto
        }
        claude::RequestServiceTier::Known(claude::RequestServiceTierKnown::StandardOnly)
        | claude::RequestServiceTier::Unknown(_) => openai::ServiceTier::Default,
    };
    Some(tier)
}

pub(in crate::transform::generate_content) fn openai_service_tier_to_gemini(
    service_tier: Option<openai::ServiceTier>,
) -> Option<gemini::ServiceTier> {
    let tier = match service_tier? {
        openai::ServiceTier::Auto => gemini::ServiceTierKnown::Unspecified,
        openai::ServiceTier::Default | openai::ServiceTier::OnDemand => {
            gemini::ServiceTierKnown::Standard
        }
        openai::ServiceTier::Flex => gemini::ServiceTierKnown::Flex,
        openai::ServiceTier::Fast | openai::ServiceTier::Priority => {
            gemini::ServiceTierKnown::Priority
        }
        openai::ServiceTier::Scale => gemini::ServiceTierKnown::Standard,
    };
    Some(gemini::ServiceTier::Known(tier))
}

pub(in crate::transform::generate_content) fn gemini_service_tier_to_openai(
    service_tier: Option<gemini::ServiceTier>,
) -> Option<openai::ServiceTier> {
    let tier = match service_tier? {
        gemini::ServiceTier::Known(gemini::ServiceTierKnown::Flex) => openai::ServiceTier::Flex,
        gemini::ServiceTier::Known(gemini::ServiceTierKnown::Priority) => {
            openai::ServiceTier::Priority
        }
        gemini::ServiceTier::Known(gemini::ServiceTierKnown::Standard)
        | gemini::ServiceTier::Known(gemini::ServiceTierKnown::Unspecified)
        | gemini::ServiceTier::Unknown(_) => openai::ServiceTier::Default,
    };
    Some(tier)
}

pub(in crate::transform::generate_content) fn claude_service_tier_to_gemini(
    service_tier: Option<claude::RequestServiceTier>,
) -> Option<gemini::ServiceTier> {
    let tier = match service_tier? {
        claude::RequestServiceTier::Known(claude::RequestServiceTierKnown::Auto) => {
            gemini::ServiceTierKnown::Unspecified
        }
        claude::RequestServiceTier::Known(claude::RequestServiceTierKnown::StandardOnly) => {
            gemini::ServiceTierKnown::Standard
        }
        claude::RequestServiceTier::Unknown(_) => gemini::ServiceTierKnown::Standard,
    };
    Some(gemini::ServiceTier::Known(tier))
}

pub(in crate::transform::generate_content) fn gemini_service_tier_to_claude(
    service_tier: Option<gemini::ServiceTier>,
) -> Option<claude::RequestServiceTier> {
    let tier = match service_tier? {
        gemini::ServiceTier::Known(gemini::ServiceTierKnown::Standard) => {
            claude::RequestServiceTierKnown::StandardOnly
        }
        gemini::ServiceTier::Known(gemini::ServiceTierKnown::Flex)
        | gemini::ServiceTier::Known(gemini::ServiceTierKnown::Priority)
        | gemini::ServiceTier::Known(gemini::ServiceTierKnown::Unspecified) => {
            claude::RequestServiceTierKnown::Auto
        }
        gemini::ServiceTier::Unknown(_) => claude::RequestServiceTierKnown::StandardOnly,
    };
    Some(claude::RequestServiceTier::Known(tier))
}

pub(in crate::transform::generate_content) fn gemini_usage_service_tier_to_claude(
    service_tier: Option<gemini::ServiceTier>,
) -> Option<claude::UsageServiceTier> {
    let tier = match service_tier? {
        gemini::ServiceTier::Known(gemini::ServiceTierKnown::Standard) => {
            claude::UsageServiceTier::Known(claude::UsageServiceTierKnown::Standard)
        }
        gemini::ServiceTier::Known(gemini::ServiceTierKnown::Priority) => {
            claude::UsageServiceTier::Known(claude::UsageServiceTierKnown::Priority)
        }
        gemini::ServiceTier::Known(gemini::ServiceTierKnown::Flex) => {
            claude::UsageServiceTier::Unknown("flex".to_string())
        }
        gemini::ServiceTier::Known(gemini::ServiceTierKnown::Unspecified) => {
            claude::UsageServiceTier::Unknown("unspecified".to_string())
        }
        gemini::ServiceTier::Unknown(value) => claude::UsageServiceTier::Unknown(value),
    };
    Some(tier)
}