gproxy_protocol/protocol/openai/realtime/
client_events.rs1use std::collections::BTreeMap;
2
3use serde::{Deserialize, Serialize};
4
5use super::super::common::*;
6use super::{RealtimeItem, RealtimeResponseOptions, RealtimeSessionConfig};
7
8#[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 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 #[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}