gproxy-transform 3.0.0-alpha.0

GPROXY v3 pairwise protocol transforms
Documentation
mod content;
mod item_done;
mod item_id;
mod items;
mod terminal;

use item_id::item_id;

use gproxy_protocol::{claude, openai};

use crate::TransformError;

use super::openai_to_claude::{Scalar, State};

impl State {
    pub(crate) fn push_responses_typed(
        &mut self,
        event: openai::ResponseStreamEvent,
    ) -> Result<Vec<claude::StreamEvent>, TransformError> {
        let openai::ResponseStreamEvent::Known(event) = event else {
            return Ok(Vec::new());
        };
        match *event {
            openai::KnownResponseStreamEvent::ResponseCreated(event) => {
                self.response_created(event)
            }
            openai::KnownResponseStreamEvent::ResponseInProgress(event)
            | openai::KnownResponseStreamEvent::ResponseQueued(event) => {
                self.response_pending(event)
            }
            openai::KnownResponseStreamEvent::ResponseCompleted(event) => {
                self.response_completed(event)
            }
            openai::KnownResponseStreamEvent::ResponseIncomplete(event) => {
                self.response_incomplete(event)
            }
            openai::KnownResponseStreamEvent::ResponseFailed(_)
            | openai::KnownResponseStreamEvent::Error(_) => Err(TransformError::unsupported(
                "Responses stream",
                "failed response",
            )),
            openai::KnownResponseStreamEvent::ResponseOutputItemAdded(event) => {
                self.response_output_item_added(event)
            }
            openai::KnownResponseStreamEvent::ResponseOutputItemDone(event) => {
                self.response_output_item_done(event)
            }
            openai::KnownResponseStreamEvent::ResponseContentPartAdded(event) => {
                self.response_content_part_added(event)
            }
            openai::KnownResponseStreamEvent::ResponseContentPartDone(event) => {
                self.response_content_done(&event.item_id, Some(event.content_index))
            }
            openai::KnownResponseStreamEvent::ResponseOutputTextDelta(event) => {
                self.response_output_text_delta(event)
            }
            openai::KnownResponseStreamEvent::ResponseReasoningTextDelta(event) => {
                self.response_content_delta(event, Scalar::Thinking)
            }
            openai::KnownResponseStreamEvent::ResponseReasoningSummaryTextDelta(event) => {
                self.response_summary_delta(event)
            }
            openai::KnownResponseStreamEvent::ResponseRefusalDelta(event) => {
                self.response_content_delta(event, Scalar::Text)
            }
            openai::KnownResponseStreamEvent::ResponseFunctionCallArgumentsDelta(event)
            | openai::KnownResponseStreamEvent::ResponseCustomToolCallInputDelta(event) => {
                self.response_tool_delta(event)
            }
            openai::KnownResponseStreamEvent::ResponseOutputTextDone(event) => {
                self.response_content_done(&event.item_id, Some(event.content_index))
            }
            openai::KnownResponseStreamEvent::ResponseReasoningTextDone(event) => {
                self.response_content_done(&event.item_id, Some(event.content_index))
            }
            openai::KnownResponseStreamEvent::ResponseReasoningSummaryTextDone(event) => {
                self.response_content_done(&event.item_id, None)
            }
            openai::KnownResponseStreamEvent::ResponseRefusalDone(event) => {
                self.response_content_done(&event.item_id, Some(event.content_index))
            }
            openai::KnownResponseStreamEvent::ResponseFunctionCallArgumentsDone(event) => self
                .response_tool_done(
                    event.item_id.as_deref(),
                    event.output_index,
                    event.arguments,
                ),
            openai::KnownResponseStreamEvent::ResponseCustomToolCallInputDone(event) => {
                self.response_tool_done(Some(&event.item_id), event.output_index, event.input)
            }
            openai::KnownResponseStreamEvent::ResponseOutputTextAnnotationAdded(_)
            | openai::KnownResponseStreamEvent::ResponseInjectCreated(_)
            | openai::KnownResponseStreamEvent::ResponseInjectFailed(_)
            | openai::KnownResponseStreamEvent::ResponseSteerAccepted(_)
            | openai::KnownResponseStreamEvent::ResponseSteerPending(_)
            | openai::KnownResponseStreamEvent::ResponseSteerFailed(_)
            | openai::KnownResponseStreamEvent::ResponseReasoningSummaryPartAdded(_)
            | openai::KnownResponseStreamEvent::ResponseReasoningSummaryPartDone(_)
            | openai::KnownResponseStreamEvent::ResponseAudioDelta(_)
            | openai::KnownResponseStreamEvent::ResponseAudioDone(_)
            | openai::KnownResponseStreamEvent::ResponseAudioTranscriptDelta(_)
            | openai::KnownResponseStreamEvent::ResponseAudioTranscriptDone(_)
            | openai::KnownResponseStreamEvent::ResponseImageGenerationCallCompleted(_)
            | openai::KnownResponseStreamEvent::ResponseImageGenerationCallGenerating(_)
            | openai::KnownResponseStreamEvent::ResponseImageGenerationCallInProgress(_)
            | openai::KnownResponseStreamEvent::ResponseImageGenerationCallPartialImage(_)
            | openai::KnownResponseStreamEvent::ResponseFileSearchCallInProgress(_)
            | openai::KnownResponseStreamEvent::ResponseFileSearchCallSearching(_)
            | openai::KnownResponseStreamEvent::ResponseFileSearchCallCompleted(_)
            | openai::KnownResponseStreamEvent::ResponseWebSearchCallInProgress(_)
            | openai::KnownResponseStreamEvent::ResponseWebSearchCallSearching(_)
            | openai::KnownResponseStreamEvent::ResponseWebSearchCallCompleted(_)
            | openai::KnownResponseStreamEvent::ResponseCodeInterpreterCallInProgress(_)
            | openai::KnownResponseStreamEvent::ResponseCodeInterpreterCallInterpreting(_)
            | openai::KnownResponseStreamEvent::ResponseCodeInterpreterCallCompleted(_)
            | openai::KnownResponseStreamEvent::ResponseCodeInterpreterCallCodeDelta(_)
            | openai::KnownResponseStreamEvent::ResponseCodeInterpreterCallCodeDone(_)
            | openai::KnownResponseStreamEvent::ResponseMcpCallArgumentsDelta(_)
            | openai::KnownResponseStreamEvent::ResponseMcpCallArgumentsDone(_)
            | openai::KnownResponseStreamEvent::ResponseMcpCallInProgress(_)
            | openai::KnownResponseStreamEvent::ResponseMcpCallCompleted(_)
            | openai::KnownResponseStreamEvent::ResponseMcpCallFailed(_)
            | openai::KnownResponseStreamEvent::ResponseMcpListToolsInProgress(_)
            | openai::KnownResponseStreamEvent::ResponseMcpListToolsCompleted(_)
            | openai::KnownResponseStreamEvent::ResponseMcpListToolsFailed(_) => Ok(Vec::new()),
            #[cfg(not(feature = "exhaustive"))]
            _ => {
                return Err(crate::TransformError::unsupported(
                    "protocol enum",
                    "unrecognized external variant",
                ));
            }
        }
    }
}