outfox_openai/spec/realtime/
session_resource.rs1use serde::{Deserialize, Serialize};
2
3#[derive(Debug, Serialize, Deserialize, Clone)]
4pub enum AudioFormat {
5 #[serde(rename = "pcm16")]
6 PCM16,
7 #[serde(rename = "g711_law")]
8 G711ULAW,
9 #[serde(rename = "g711_alaw")]
10 G711ALAW,
11}
12
13#[derive(Debug, Default, Serialize, Deserialize, Clone)]
14pub struct AudioTranscription {
15 #[serde(skip_serializing_if = "Option::is_none")]
17 pub language: Option<String>,
18 #[serde(skip_serializing_if = "Option::is_none")]
20 pub model: Option<String>,
21 #[serde(skip_serializing_if = "Option::is_none")]
25 pub prompt: Option<String>,
26}
27
28#[derive(Debug, Serialize, Deserialize, Clone)]
29#[serde(tag = "type")]
30pub enum TurnDetection {
31 #[serde(rename = "server_vad")]
33 ServerVAD {
34 threshold: f32,
36 prefix_padding_ms: u32,
38 silence_duration_ms: u32,
40
41 #[serde(skip_serializing_if = "Option::is_none")]
43 create_response: Option<bool>,
44
45 #[serde(skip_serializing_if = "Option::is_none")]
48 interrupt_response: Option<bool>,
49 },
50
51 #[serde(rename = "semantic_vad")]
52 SemanticVAD {
53 eagerness: String,
57
58 #[serde(skip_serializing_if = "Option::is_none", default)]
60 create_response: Option<bool>,
61
62 #[serde(skip_serializing_if = "Option::is_none", default)]
65 interrupt_response: Option<bool>,
66 },
67}
68
69#[derive(Debug, Serialize, Deserialize, Clone)]
70pub enum MaxResponseOutputTokens {
71 #[serde(rename = "inf")]
72 Inf,
73 #[serde(untagged)]
74 Num(u16),
75}
76
77#[derive(Debug, Serialize, Deserialize, Clone)]
78#[serde(tag = "type")]
79pub enum ToolDefinition {
80 #[serde(rename = "function")]
81 Function {
82 name: String,
84 description: String,
86 parameters: serde_json::Value,
88 },
89}
90
91#[derive(Debug, Serialize, Deserialize, Clone)]
92#[serde(rename_all = "lowercase")]
93pub enum FunctionType {
94 Function,
95}
96
97#[derive(Debug, Serialize, Deserialize, Clone)]
98#[serde(rename_all = "lowercase")]
99pub enum ToolChoice {
100 Auto,
101 None,
102 Required,
103 #[serde(untagged)]
104 Function {
105 #[serde(rename = "type")]
106 kind: FunctionType,
107 name: String,
108 },
109}
110
111#[derive(Debug, Serialize, Deserialize, Clone)]
112#[serde(rename_all = "lowercase")]
113pub enum RealtimeVoice {
114 Alloy,
115 Ash,
116 Ballad,
117 Coral,
118 Echo,
119 Fable,
120 Onyx,
121 Nova,
122 Shimmer,
123 Verse,
124}
125
126#[derive(Debug, Serialize, Deserialize, Clone, Default)]
127pub struct SessionResource {
128 #[serde(skip_serializing_if = "Option::is_none")]
130 pub model: Option<String>,
131
132 #[serde(skip_serializing_if = "Option::is_none")]
134 pub modalities: Option<Vec<String>>,
135
136 #[serde(skip_serializing_if = "Option::is_none")]
138 pub instructions: Option<String>,
139
140 #[serde(skip_serializing_if = "Option::is_none")]
142 pub voice: Option<RealtimeVoice>,
143
144 #[serde(skip_serializing_if = "Option::is_none")]
146 pub input_audio_format: Option<AudioFormat>,
147
148 #[serde(skip_serializing_if = "Option::is_none")]
150 pub output_audio_format: Option<AudioFormat>,
151
152 #[serde(skip_serializing_if = "Option::is_none")]
154 pub input_audio_transcription: Option<AudioTranscription>,
155
156 #[serde(skip_serializing_if = "Option::is_none")]
158 pub turn_detection: Option<TurnDetection>,
159
160 #[serde(skip_serializing_if = "Option::is_none")]
162 pub tools: Option<Vec<ToolDefinition>>,
163
164 #[serde(skip_serializing_if = "Option::is_none")]
165 pub tool_choice: Option<ToolChoice>,
167
168 #[serde(skip_serializing_if = "Option::is_none")]
169 pub temperature: Option<f32>,
171
172 #[serde(skip_serializing_if = "Option::is_none")]
176 pub max_response_output_tokens: Option<MaxResponseOutputTokens>,
177}