Skip to main content

gproxy_protocol/transform/openai/websocket/from_http/
response.rs

1use crate::openai::create_response::response::OpenAiCreateResponseResponse;
2use crate::openai::create_response::stream::ResponseStreamEvent;
3use crate::openai::create_response::websocket::response::OpenAiCreateResponseWebSocketMessageResponse;
4use crate::openai::create_response::websocket::types::{
5    OpenAiCreateResponseWebSocketDoneMarker, OpenAiCreateResponseWebSocketServerMessage,
6};
7use crate::transform::openai::websocket::context::OpenAiWebsocketTransformContext;
8use crate::transform::utils::TransformError;
9
10impl TryFrom<OpenAiCreateResponseResponse> for Vec<OpenAiCreateResponseWebSocketMessageResponse> {
11    type Error = TransformError;
12
13    fn try_from(value: OpenAiCreateResponseResponse) -> Result<Self, TransformError> {
14        Ok(openai_nonstream_response_to_websocket_messages_with_context(value)?.0)
15    }
16}
17
18pub fn openai_nonstream_response_to_websocket_messages_with_context(
19    value: OpenAiCreateResponseResponse,
20) -> Result<
21    (
22        Vec<OpenAiCreateResponseWebSocketMessageResponse>,
23        OpenAiWebsocketTransformContext,
24    ),
25    TransformError,
26> {
27    let events = Vec::<ResponseStreamEvent>::try_from(value)?;
28    openai_stream_events_to_websocket_messages_with_context(&events)
29}
30
31pub fn openai_stream_events_to_websocket_messages_with_context(
32    value: &[ResponseStreamEvent],
33) -> Result<
34    (
35        Vec<OpenAiCreateResponseWebSocketMessageResponse>,
36        OpenAiWebsocketTransformContext,
37    ),
38    TransformError,
39> {
40    let ctx = OpenAiWebsocketTransformContext::default();
41    let mut messages = Vec::with_capacity(value.len() + 1);
42    for event in value {
43        messages.push(OpenAiCreateResponseWebSocketServerMessage::StreamEvent(
44            event.clone(),
45        ));
46    }
47    messages.push(OpenAiCreateResponseWebSocketServerMessage::Done(
48        OpenAiCreateResponseWebSocketDoneMarker::Done,
49    ));
50
51    Ok((messages, ctx))
52}