Skip to main content

gproxy_protocol/wire/openai/realtime/
transcription_events.rs

1//! Native Realtime wire DTOs. Source definitions are cited on each object.
2//! Verified with Realtime.md and openai-python snapshot
3//! e12b81d3bbf644ec7045e152d69bc4b68d69cd48 (2026-09-13).
4//! https://github.com/openai/openai-python/tree/e12b81d3bbf644ec7045e152d69bc4b68d69cd48/src/openai/types/realtime
5use super::wire::present_nullable;
6use super::{LogProbProperties, TranscriptionLanguage};
7use crate::Rest;
8use serde::{Deserialize, Serialize};
9
10/// Source: `openai/types/realtime/conversation_item_input_audio_transcription_completed_event.py`, `ConversationItemInputAudioTranscriptionCompletedEvent`.
11#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, gproxy_protocol_macros::WireBuilder)]
12#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
13#[derive(gproxy_protocol_macros::DeclaredFields)]
14#[cfg_attr(feature = "schema", derive(schemars::JsonSchema))]
15pub struct ConversationItemInputAudioTranscriptionCompletedEvent {
16    pub content_index: i64,
17    pub event_id: String,
18    pub item_id: String,
19    pub transcript: String,
20    #[serde(rename = "type")]
21    pub type_: ConversationItemInputAudioTranscriptionCompletedEventType,
22    pub usage: ConversationItemInputAudioTranscriptionCompletedEventUsage,
23    #[serde(
24        default,
25        deserialize_with = "present_nullable",
26        skip_serializing_if = "Option::is_none"
27    )]
28    pub languages: Option<Option<Vec<TranscriptionLanguage>>>,
29    #[serde(
30        default,
31        deserialize_with = "present_nullable",
32        skip_serializing_if = "Option::is_none"
33    )]
34    pub logprobs: Option<Option<Vec<LogProbProperties>>>,
35    #[serde(default, flatten, skip_serializing_if = "serde_json::Map::is_empty")]
36    pub rest: Rest,
37}
38
39/// Source: `openai/types/realtime/conversation_item_input_audio_transcription_delta_event.py`, `ConversationItemInputAudioTranscriptionDeltaEvent`.
40#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, gproxy_protocol_macros::WireBuilder)]
41#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
42#[derive(gproxy_protocol_macros::DeclaredFields)]
43#[cfg_attr(feature = "schema", derive(schemars::JsonSchema))]
44pub struct ConversationItemInputAudioTranscriptionDeltaEvent {
45    pub event_id: String,
46    pub item_id: String,
47    #[serde(rename = "type")]
48    pub type_: ConversationItemInputAudioTranscriptionDeltaEventType,
49    #[serde(
50        default,
51        deserialize_with = "present_nullable",
52        skip_serializing_if = "Option::is_none"
53    )]
54    pub content_index: Option<Option<i64>>,
55    #[serde(
56        default,
57        deserialize_with = "present_nullable",
58        skip_serializing_if = "Option::is_none"
59    )]
60    pub delta: Option<Option<String>>,
61    #[serde(
62        default,
63        deserialize_with = "present_nullable",
64        skip_serializing_if = "Option::is_none"
65    )]
66    pub logprobs: Option<Option<Vec<LogProbProperties>>>,
67    #[serde(default, flatten, skip_serializing_if = "serde_json::Map::is_empty")]
68    pub rest: Rest,
69}
70
71/// Source: `openai/types/realtime/conversation_item_input_audio_transcription_failed_event.py`, `ConversationItemInputAudioTranscriptionFailedEvent`.
72#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, gproxy_protocol_macros::WireBuilder)]
73#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
74#[derive(gproxy_protocol_macros::DeclaredFields)]
75#[cfg_attr(feature = "schema", derive(schemars::JsonSchema))]
76pub struct ConversationItemInputAudioTranscriptionFailedEvent {
77    pub content_index: i64,
78    pub error: ConversationItemInputAudioTranscriptionFailedEventError,
79    pub event_id: String,
80    pub item_id: String,
81    #[serde(rename = "type")]
82    pub type_: ConversationItemInputAudioTranscriptionFailedEventType,
83    #[serde(default, flatten, skip_serializing_if = "serde_json::Map::is_empty")]
84    pub rest: Rest,
85}
86
87/// Source: `openai/types/realtime/conversation_item_input_audio_transcription_segment.py`, `ConversationItemInputAudioTranscriptionSegment`.
88#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, gproxy_protocol_macros::WireBuilder)]
89#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
90#[derive(gproxy_protocol_macros::DeclaredFields)]
91#[cfg_attr(feature = "schema", derive(schemars::JsonSchema))]
92pub struct ConversationItemInputAudioTranscriptionSegment {
93    pub id: String,
94    pub content_index: i64,
95    pub end: serde_json::Number,
96    pub event_id: String,
97    pub item_id: String,
98    pub speaker: String,
99    pub start: serde_json::Number,
100    pub text: String,
101    #[serde(rename = "type")]
102    pub type_: ConversationItemInputAudioTranscriptionSegmentType,
103    #[serde(default, flatten, skip_serializing_if = "serde_json::Map::is_empty")]
104    pub rest: Rest,
105}
106
107/// Source: `openai/types/realtime/conversation_item_input_audio_transcription_completed_event.py`, `Usage`.
108#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
109#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
110#[serde(untagged)]
111#[derive(gproxy_protocol_macros::DeclaredFields)]
112#[cfg_attr(feature = "schema", derive(schemars::JsonSchema))]
113pub enum ConversationItemInputAudioTranscriptionCompletedEventUsage {
114    ConversationItemInputAudioTranscriptionCompletedEventUsageTranscriptTextUsageTokens(
115        ConversationItemInputAudioTranscriptionCompletedEventUsageTranscriptTextUsageTokens,
116    ),
117    ConversationItemInputAudioTranscriptionCompletedEventUsageTranscriptTextUsageDuration(
118        ConversationItemInputAudioTranscriptionCompletedEventUsageTranscriptTextUsageDuration,
119    ),
120}
121
122/// Source: `openai/types/realtime/conversation_item_input_audio_transcription_failed_event.py`, `Error`.
123#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, gproxy_protocol_macros::WireBuilder)]
124#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
125#[derive(gproxy_protocol_macros::DeclaredFields)]
126#[cfg_attr(feature = "schema", derive(schemars::JsonSchema))]
127pub struct ConversationItemInputAudioTranscriptionFailedEventError {
128    #[serde(
129        default,
130        deserialize_with = "present_nullable",
131        skip_serializing_if = "Option::is_none"
132    )]
133    pub code: Option<Option<String>>,
134    #[serde(
135        default,
136        deserialize_with = "present_nullable",
137        skip_serializing_if = "Option::is_none"
138    )]
139    pub message: Option<Option<String>>,
140    #[serde(
141        default,
142        deserialize_with = "present_nullable",
143        skip_serializing_if = "Option::is_none"
144    )]
145    pub param: Option<Option<String>>,
146    #[serde(rename = "type")]
147    #[serde(
148        default,
149        deserialize_with = "present_nullable",
150        skip_serializing_if = "Option::is_none"
151    )]
152    pub type_: Option<Option<String>>,
153    #[serde(default, flatten, skip_serializing_if = "serde_json::Map::is_empty")]
154    pub rest: Rest,
155}
156
157/// Source: `openai/types/realtime/conversation_item_input_audio_transcription_completed_event.py`, `UsageTranscriptTextUsageTokens`.
158#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, gproxy_protocol_macros::WireBuilder)]
159#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
160#[derive(gproxy_protocol_macros::DeclaredFields)]
161#[cfg_attr(feature = "schema", derive(schemars::JsonSchema))]
162pub struct ConversationItemInputAudioTranscriptionCompletedEventUsageTranscriptTextUsageTokens {
163    pub input_tokens: i64,
164    pub output_tokens: i64,
165    pub total_tokens: i64,
166    #[serde(rename = "type")]
167    pub type_: ConversationItemInputAudioTranscriptionCompletedEventUsageTranscriptTextUsageTokensType,
168    #[serde(default, deserialize_with = "present_nullable", skip_serializing_if = "Option::is_none")]
169    pub input_token_details: Option<Option<ConversationItemInputAudioTranscriptionCompletedEventUsageTranscriptTextUsageTokensInputTokenDetails>>,
170    #[serde(default, flatten, skip_serializing_if = "serde_json::Map::is_empty")]
171    pub rest: Rest,
172}
173
174/// Source: `openai/types/realtime/conversation_item_input_audio_transcription_completed_event.py`, `UsageTranscriptTextUsageDuration`.
175#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, gproxy_protocol_macros::WireBuilder)]
176#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
177#[derive(gproxy_protocol_macros::DeclaredFields)]
178#[cfg_attr(feature = "schema", derive(schemars::JsonSchema))]
179pub struct ConversationItemInputAudioTranscriptionCompletedEventUsageTranscriptTextUsageDuration {
180    pub seconds: serde_json::Number,
181    #[serde(rename = "type")]
182    pub type_:
183        ConversationItemInputAudioTranscriptionCompletedEventUsageTranscriptTextUsageDurationType,
184    #[serde(default, flatten, skip_serializing_if = "serde_json::Map::is_empty")]
185    pub rest: Rest,
186}
187
188/// Source: `openai/types/realtime/conversation_item_input_audio_transcription_completed_event.py`, `UsageTranscriptTextUsageTokensInputTokenDetails`.
189#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, gproxy_protocol_macros::WireBuilder)]
190#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
191#[derive(gproxy_protocol_macros::DeclaredFields)]
192#[cfg_attr(feature = "schema", derive(schemars::JsonSchema))]
193pub struct ConversationItemInputAudioTranscriptionCompletedEventUsageTranscriptTextUsageTokensInputTokenDetails
194{
195    #[serde(
196        default,
197        deserialize_with = "present_nullable",
198        skip_serializing_if = "Option::is_none"
199    )]
200    pub audio_tokens: Option<Option<i64>>,
201    #[serde(
202        default,
203        deserialize_with = "present_nullable",
204        skip_serializing_if = "Option::is_none"
205    )]
206    pub text_tokens: Option<Option<i64>>,
207    #[serde(default, flatten, skip_serializing_if = "serde_json::Map::is_empty")]
208    pub rest: Rest,
209}
210
211#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
212#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
213#[derive(gproxy_protocol_macros::DeclaredFields)]
214#[cfg_attr(feature = "schema", derive(schemars::JsonSchema))]
215pub enum ConversationItemInputAudioTranscriptionCompletedEventType {
216    #[serde(rename = "conversation.item.input_audio_transcription.completed")]
217    ConversationItemInputAudioTranscriptionCompleted,
218}
219
220#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
221#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
222#[derive(gproxy_protocol_macros::DeclaredFields)]
223#[cfg_attr(feature = "schema", derive(schemars::JsonSchema))]
224pub enum ConversationItemInputAudioTranscriptionDeltaEventType {
225    #[serde(rename = "conversation.item.input_audio_transcription.delta")]
226    ConversationItemInputAudioTranscriptionDelta,
227}
228
229#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
230#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
231#[derive(gproxy_protocol_macros::DeclaredFields)]
232#[cfg_attr(feature = "schema", derive(schemars::JsonSchema))]
233pub enum ConversationItemInputAudioTranscriptionFailedEventType {
234    #[serde(rename = "conversation.item.input_audio_transcription.failed")]
235    ConversationItemInputAudioTranscriptionFailed,
236}
237
238#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
239#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
240#[derive(gproxy_protocol_macros::DeclaredFields)]
241#[cfg_attr(feature = "schema", derive(schemars::JsonSchema))]
242pub enum ConversationItemInputAudioTranscriptionSegmentType {
243    #[serde(rename = "conversation.item.input_audio_transcription.segment")]
244    ConversationItemInputAudioTranscriptionSegment,
245}
246
247#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
248#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
249#[derive(gproxy_protocol_macros::DeclaredFields)]
250#[cfg_attr(feature = "schema", derive(schemars::JsonSchema))]
251pub enum ConversationItemInputAudioTranscriptionCompletedEventUsageTranscriptTextUsageTokensType {
252    #[serde(rename = "tokens")]
253    Tokens,
254}
255
256#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
257#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
258#[derive(gproxy_protocol_macros::DeclaredFields)]
259#[cfg_attr(feature = "schema", derive(schemars::JsonSchema))]
260pub enum ConversationItemInputAudioTranscriptionCompletedEventUsageTranscriptTextUsageDurationType {
261    #[serde(rename = "duration")]
262    Duration,
263}