Skip to main content

gproxy_protocol/protocol/openai/realtime/
client_events.rs

1use std::collections::BTreeMap;
2
3use serde::{Deserialize, Serialize};
4
5use super::super::common::*;
6use super::{RealtimeItem, RealtimeResponseOptions, RealtimeSessionConfig};
7
8/// Events the client sends over the realtime WebSocket.
9#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
10#[serde(tag = "type")]
11#[allow(clippy::large_enum_variant)]
12#[non_exhaustive]
13pub enum RealtimeClientEvent {
14    #[serde(rename = "session.update")]
15    SessionUpdate {
16        session: RealtimeSessionConfig,
17        #[serde(skip_serializing_if = "Option::is_none")]
18        event_id: Option<String>,
19        #[serde(default, flatten, skip_serializing_if = "BTreeMap::is_empty")]
20        extra: Extra,
21    },
22    #[serde(rename = "input_audio_buffer.append")]
23    InputAudioBufferAppend {
24        /// Base64-encoded audio in the session input format.
25        audio: String,
26        #[serde(skip_serializing_if = "Option::is_none")]
27        event_id: Option<String>,
28        #[serde(default, flatten, skip_serializing_if = "BTreeMap::is_empty")]
29        extra: Extra,
30    },
31    #[serde(rename = "input_audio_buffer.commit")]
32    InputAudioBufferCommit {
33        #[serde(skip_serializing_if = "Option::is_none")]
34        event_id: Option<String>,
35        #[serde(default, flatten, skip_serializing_if = "BTreeMap::is_empty")]
36        extra: Extra,
37    },
38    #[serde(rename = "input_audio_buffer.clear")]
39    InputAudioBufferClear {
40        #[serde(skip_serializing_if = "Option::is_none")]
41        event_id: Option<String>,
42        #[serde(default, flatten, skip_serializing_if = "BTreeMap::is_empty")]
43        extra: Extra,
44    },
45    /// WebRTC only: stop whatever the server is currently playing out.
46    #[serde(rename = "output_audio_buffer.clear")]
47    OutputAudioBufferClear {
48        #[serde(skip_serializing_if = "Option::is_none")]
49        event_id: Option<String>,
50        #[serde(default, flatten, skip_serializing_if = "BTreeMap::is_empty")]
51        extra: Extra,
52    },
53    #[serde(rename = "conversation.item.create")]
54    ConversationItemCreate {
55        item: RealtimeItem,
56        #[serde(skip_serializing_if = "Option::is_none")]
57        previous_item_id: Option<String>,
58        #[serde(skip_serializing_if = "Option::is_none")]
59        event_id: Option<String>,
60        #[serde(default, flatten, skip_serializing_if = "BTreeMap::is_empty")]
61        extra: Extra,
62    },
63    #[serde(rename = "conversation.item.retrieve")]
64    ConversationItemRetrieve {
65        item_id: String,
66        #[serde(skip_serializing_if = "Option::is_none")]
67        event_id: Option<String>,
68        #[serde(default, flatten, skip_serializing_if = "BTreeMap::is_empty")]
69        extra: Extra,
70    },
71    #[serde(rename = "conversation.item.truncate")]
72    ConversationItemTruncate {
73        item_id: String,
74        content_index: u32,
75        audio_end_ms: u64,
76        #[serde(skip_serializing_if = "Option::is_none")]
77        event_id: Option<String>,
78        #[serde(default, flatten, skip_serializing_if = "BTreeMap::is_empty")]
79        extra: Extra,
80    },
81    #[serde(rename = "conversation.item.delete")]
82    ConversationItemDelete {
83        item_id: String,
84        #[serde(skip_serializing_if = "Option::is_none")]
85        event_id: Option<String>,
86        #[serde(default, flatten, skip_serializing_if = "BTreeMap::is_empty")]
87        extra: Extra,
88    },
89    #[serde(rename = "response.create")]
90    ResponseCreate {
91        #[serde(skip_serializing_if = "Option::is_none")]
92        response: Option<RealtimeResponseOptions>,
93        #[serde(skip_serializing_if = "Option::is_none")]
94        event_id: Option<String>,
95        #[serde(default, flatten, skip_serializing_if = "BTreeMap::is_empty")]
96        extra: Extra,
97    },
98    #[serde(rename = "response.cancel")]
99    ResponseCancel {
100        #[serde(skip_serializing_if = "Option::is_none")]
101        response_id: Option<String>,
102        #[serde(skip_serializing_if = "Option::is_none")]
103        event_id: Option<String>,
104        #[serde(default, flatten, skip_serializing_if = "BTreeMap::is_empty")]
105        extra: Extra,
106    },
107}