Skip to main content

async_openai/types/realtime/
input.rs

1use serde::{Deserialize, Serialize};
2
3/// An existing item reference or a new message or function call item for a Realtime response.
4#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
5#[serde(tag = "type", rename_all = "snake_case")]
6pub enum RealtimeResponseInputItem {
7    Message(RealtimeResponseInputMessage),
8    FunctionCall(RealtimeResponseInputFunctionCall),
9    FunctionCallOutput(RealtimeResponseInputFunctionCallOutput),
10    ItemReference(RealtimeResponseItemReference),
11}
12
13/// Reference an existing item in this Realtime session as response.create input.
14/// Item references are only accepted in the response input array, not as new
15/// conversation items.
16#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Default)]
17pub struct RealtimeResponseItemReference {
18    /// The ID of an existing item in the same Realtime session.
19    pub id: String,
20}
21
22/// The result of a function call supplied as input to a Realtime response.
23#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Default)]
24pub struct RealtimeResponseInputFunctionCallOutput {
25    #[serde(skip_serializing_if = "Option::is_none")]
26    pub id: Option<String>,
27    #[serde(skip_serializing_if = "Option::is_none")]
28    pub status: Option<RealtimeResponseInputFunctionCallOutputStatus>,
29    pub call_id: String,
30    pub output: String,
31}
32
33#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Default)]
34#[serde(rename_all = "snake_case")]
35pub enum RealtimeResponseInputFunctionCallOutputStatus {
36    #[default]
37    Completed,
38    Incomplete,
39}
40
41/// A function call supplied as input to a Realtime response.
42#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Default)]
43pub struct RealtimeResponseInputFunctionCall {
44    #[serde(skip_serializing_if = "Option::is_none")]
45    pub id: Option<String>,
46    #[serde(skip_serializing_if = "Option::is_none")]
47    pub status: Option<RealtimeResponseInputFunctionCallStatus>,
48    pub call_id: String,
49    pub name: String,
50    pub arguments: String,
51}
52
53#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Default)]
54#[serde(rename_all = "snake_case")]
55pub enum RealtimeResponseInputFunctionCallStatus {
56    #[default]
57    Completed,
58    Incomplete,
59}
60
61/// A message supplied as input to a Realtime response. The role determines the allowed content.
62#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
63#[serde(tag = "role", rename_all = "snake_case")]
64pub enum RealtimeResponseInputMessage {
65    System(RealtimeResponseInputMessageSystem),
66    Developer(RealtimeResponseInputMessageDeveloper),
67    User(RealtimeResponseInputMessageUser),
68    Assistant(RealtimeResponseInputMessageAssistant),
69}
70
71#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Default)]
72pub struct RealtimeResponseInputMessageAssistant {
73    /// An optional client ID. The value `root` is reserved.
74    #[serde(skip_serializing_if = "Option::is_none")]
75    pub id: Option<String>,
76    /// Optional input status. Omission or null defaults to completed.
77    #[serde(skip_serializing_if = "Option::is_none")]
78    pub status: Option<RealtimeResponseInputMessageStatus>,
79    pub content: Vec<RealtimeResponseInputMessageAssistantContentItem>,
80}
81
82#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
83pub struct RealtimeResponseInputMessageAssistantContentItem {
84    pub r#type: RealtimeResponseInputMessageAssistantContentItemType,
85    pub text: String,
86}
87
88#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
89#[serde(rename_all = "snake_case")]
90pub enum RealtimeResponseInputMessageAssistantContentItemType {
91    OutputText,
92}
93
94/// Optional input status. Omission or null defaults to completed.
95#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
96#[serde(rename_all = "snake_case")]
97pub enum RealtimeResponseInputMessageStatus {
98    Completed,
99    Incomplete,
100}
101
102#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Default)]
103pub struct RealtimeResponseInputMessageUser {
104    /// An optional client ID. The value `root` is reserved.
105    #[serde(skip_serializing_if = "Option::is_none")]
106    pub id: Option<String>,
107    /// Optional input status. Omission or null defaults to completed.
108    #[serde(skip_serializing_if = "Option::is_none")]
109    pub status: Option<RealtimeResponseInputMessageStatus>,
110    pub content: Vec<RealtimeResponseInputMessageUserContentItem>,
111}
112
113#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
114#[serde(tag = "type", rename_all = "snake_case")]
115pub enum RealtimeResponseInputMessageUserContentItem {
116    InputText(RealtimeResponseInputText),
117    InputAudio(RealtimeResponseInputAudio),
118    InputImage(RealtimeResponseInputImage),
119}
120
121#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Default)]
122pub struct RealtimeResponseInputImage {
123    /// A base64 data URL with an image MIME type; use PNG or JPEG.
124    pub image_url: String,
125    #[serde(skip_serializing_if = "Option::is_none")]
126    pub detail: Option<RealtimeResponseInputImageDetail>,
127}
128
129#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Default)]
130#[serde(rename_all = "snake_case")]
131pub enum RealtimeResponseInputImageDetail {
132    Low,
133    High,
134    #[default]
135    Auto,
136}
137
138#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Default)]
139pub struct RealtimeResponseInputAudio {
140    /// Base64 audio bytes in the session input audio format.
141    pub audio: String,
142    /// Optional text to associate with the input audio.
143    #[serde(skip_serializing_if = "Option::is_none")]
144    pub transcript: Option<String>,
145}
146
147#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Default)]
148pub struct RealtimeResponseInputText {
149    pub text: String,
150}
151
152#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Default)]
153pub struct RealtimeResponseInputMessageDeveloper {
154    /// An optional client ID. The value `root` is reserved.
155    #[serde(skip_serializing_if = "Option::is_none")]
156    pub id: Option<String>,
157    /// Optional input status. Omission or null defaults to completed.
158    #[serde(skip_serializing_if = "Option::is_none")]
159    pub status: Option<RealtimeResponseInputMessageStatus>,
160    pub content: Vec<RealtimeResponseInputTextPart>,
161}
162
163#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Default)]
164pub struct RealtimeResponseInputMessageSystem {
165    /// An optional client ID. The value `root` is reserved.
166    #[serde(skip_serializing_if = "Option::is_none")]
167    pub id: Option<String>,
168    /// Optional input status. Omission or null defaults to completed.
169    #[serde(skip_serializing_if = "Option::is_none")]
170    pub status: Option<RealtimeResponseInputMessageStatus>,
171    pub content: Vec<RealtimeResponseInputTextPart>,
172}
173
174/// Input-text content for system and developer messages.
175#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
176#[serde(tag = "type", rename_all = "snake_case")]
177pub enum RealtimeResponseInputTextPart {
178    InputText(RealtimeResponseInputText),
179}