gproxy-protocol 1.0.20

Wire-format types and cross-protocol transforms for Claude, OpenAI, and Gemini LLM APIs.
Documentation
use crate::gemini::generate_content::request::{
    GeminiGenerateContentRequest, PathParameters as GeminiGenerateContentPathParameters,
    QueryParameters as GeminiGenerateContentQueryParameters,
    RequestHeaders as GeminiGenerateContentRequestHeaders,
};
use crate::gemini::generate_content::types::HttpMethod as GeminiGenerateContentHttpMethod;
use crate::gemini::stream_generate_content::request::GeminiStreamGenerateContentRequest;
use crate::openai::create_response::request::OpenAiCreateResponseRequest;
use crate::openai::create_response::types::HttpMethod as OpenAiHttpMethod;
use crate::transform::utils::TransformError;

impl TryFrom<GeminiStreamGenerateContentRequest> for OpenAiCreateResponseRequest {
    type Error = TransformError;

    fn try_from(value: GeminiStreamGenerateContentRequest) -> Result<Self, TransformError> {
        let mut output = OpenAiCreateResponseRequest::try_from(GeminiGenerateContentRequest {
            method: GeminiGenerateContentHttpMethod::Post,
            path: GeminiGenerateContentPathParameters {
                model: value.path.model,
            },
            query: GeminiGenerateContentQueryParameters::default(),
            headers: GeminiGenerateContentRequestHeaders::default(),
            body: value.body,
        })?;
        output.method = OpenAiHttpMethod::Post;
        output.body.stream = Some(true);
        Ok(output)
    }
}