gproxy-transform 3.0.0-alpha.0

GPROXY v3 pairwise protocol transforms
Documentation
use gproxy_protocol::{claude, openai};

use crate::TransformError;

pub(crate) fn transform(body: bytes::Bytes, model: &str) -> Result<bytes::Bytes, TransformError> {
    let input: openai::CompactResponseRequestBody = serde_json::from_slice(&body)?;
    let output = transform_typed(input, model)?;
    Ok(bytes::Bytes::from(serde_json::to_vec(&output)?))
}

pub(crate) fn transform_typed(
    input: openai::CompactResponseRequestBody,
    model: &str,
) -> Result<claude::CreateMessageRequestBody, TransformError> {
    let instructions = input.instructions.clone();
    let request = super::super::other::compact_to_responses_typed(input, model);
    let mut output =
        crate::generate_content::openai_responses_to_claude_messages::request::transform_typed(
            request, model, false,
        )?;
    output.context_management = Some(crate::wire!(claude::ContextManagementConfig {
        edits: Some(vec![claude::ContextEdit::Known(
            claude::KnownContextEdit::Compact {
                instructions,
                pause_after_compaction: Some(true),
                trigger: None,
                rest: Default::default(),
            },
        )]),
        rest: Default::default(),
    }));
    Ok(output)
}