gproxy-transform 3.0.0-alpha.0

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

pub(crate) fn claude_to_chat(reason: &claude::StopReason) -> openai::ChatFinishReason {
    match reason {
        claude::StopReason::Known(claude::StopReasonKnown::MaxTokens)
        | claude::StopReason::Known(claude::StopReasonKnown::ModelContextWindowExceeded) => {
            openai::ChatFinishReason::Length
        }
        claude::StopReason::Known(claude::StopReasonKnown::ToolUse) => {
            openai::ChatFinishReason::ToolCalls
        }
        claude::StopReason::Known(claude::StopReasonKnown::Refusal) => {
            openai::ChatFinishReason::ContentFilter
        }
        _ => openai::ChatFinishReason::Stop,
    }
}

pub(crate) fn chat_to_claude(reason: openai::ChatFinishReason) -> claude::StopReason {
    let known = match reason {
        openai::ChatFinishReason::Length => claude::StopReasonKnown::MaxTokens,
        openai::ChatFinishReason::ToolCalls | openai::ChatFinishReason::FunctionCall => {
            claude::StopReasonKnown::ToolUse
        }
        openai::ChatFinishReason::ContentFilter => claude::StopReasonKnown::Refusal,
        _ => claude::StopReasonKnown::EndTurn,
    };
    claude::StopReason::Known(known)
}