gproxy_protocol/transform/openai/websocket/from_http/
response.rs1use 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}