gproxy-transform 2.6.3

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_speed(
    service_tier: Option<openai::ServiceTier>,
) -> Option<claude::Speed> {
    match service_tier {
        Some(openai::ServiceTier::Fast | openai::ServiceTier::Priority) => {
            Some(claude::Speed::Known(claude::SpeedKnown::Fast))
        }
        _ => None,
    }
}

pub(in crate::transform::generate_content) fn claude_speed_to_openai(
    speed: Option<claude::Speed>,
) -> Option<openai::ServiceTier> {
    match speed {
        Some(claude::Speed::Known(claude::SpeedKnown::Fast)) => Some(openai::ServiceTier::Priority),
        _ => None,
    }
}

pub(in crate::transform::generate_content) fn claude_speed_to_gemini(
    speed: Option<claude::Speed>,
) -> Option<gemini::ServiceTier> {
    match speed {
        Some(claude::Speed::Known(claude::SpeedKnown::Fast)) => Some(gemini::ServiceTier::Known(
            gemini::ServiceTierKnown::Priority,
        )),
        _ => None,
    }
}

pub(in crate::transform::generate_content) fn gemini_service_tier_to_claude_speed(
    service_tier: Option<gemini::ServiceTier>,
) -> Option<claude::Speed> {
    match service_tier {
        Some(gemini::ServiceTier::Known(gemini::ServiceTierKnown::Priority)) => {
            Some(claude::Speed::Known(claude::SpeedKnown::Fast))
        }
        _ => None,
    }
}

pub(in crate::transform::generate_content) fn claude_usage_to_openai_service_tier(
    usage: &claude::Usage,
) -> Option<openai::ServiceTier> {
    claude_speed_to_openai(usage.speed.clone())
        .or_else(|| super::claude_usage_service_tier_to_openai(usage.service_tier.as_ref()))
}

#[cfg(test)]
mod tests {
    use super::*;

    #[test]
    fn maps_fast_semantics_across_protocols() {
        for tier in [openai::ServiceTier::Fast, openai::ServiceTier::Priority] {
            assert_eq!(
                openai_service_tier_to_claude_speed(Some(tier)),
                Some(claude::Speed::Known(claude::SpeedKnown::Fast))
            );
        }
        assert_eq!(
            claude_speed_to_openai(Some(claude::Speed::Known(claude::SpeedKnown::Fast))),
            Some(openai::ServiceTier::Priority)
        );
        assert_eq!(
            claude_speed_to_gemini(Some(claude::Speed::Known(claude::SpeedKnown::Fast))),
            Some(gemini::ServiceTier::Known(
                gemini::ServiceTierKnown::Priority
            ))
        );
        assert_eq!(
            gemini_service_tier_to_claude_speed(Some(gemini::ServiceTier::Known(
                gemini::ServiceTierKnown::Priority,
            ))),
            Some(claude::Speed::Known(claude::SpeedKnown::Fast))
        );
    }
}