gproxy_protocol/openai/audio/
mod.rs1mod request;
9mod response;
10mod stream;
11
12pub use request::*;
13pub use response::*;
14pub use stream::*;
15
16pub type SpeechResponse = Vec<u8>;
18
19#[cfg(test)]
20mod tests {
21 use super::*;
22 use serde_json::json;
23
24 #[test]
25 fn audio_models_round_trip_unknown_fields_and_events() {
26 let request = json!({
27 "input": "hello",
28 "model": "tts-future",
29 "voice": {"id":"voice_1", "future_voice":true},
30 "response_format": "future_codec",
31 "future_request": 1
32 });
33 let parsed: SpeechRequest = serde_json::from_value(request.clone()).unwrap();
34 assert_eq!(serde_json::to_value(parsed).unwrap(), request);
35
36 let response = json!({
37 "text": "hello",
38 "usage": {"type":"duration", "seconds":1.5, "future_usage":2},
39 "future_response": {"x":1}
40 });
41 let parsed: TranscriptionResponse = serde_json::from_value(response.clone()).unwrap();
42 assert_eq!(serde_json::to_value(parsed).unwrap(), response);
43
44 let verbose = json!({
45 "task":"transcribe","language":"english","duration":1.5,
46 "text":"hello","segments":[]
47 });
48 let parsed: TranscriptionResponse = serde_json::from_value(verbose).unwrap();
49 assert!(matches!(parsed, TranscriptionResponse::Verbose(_)));
50
51 let event = json!({"type":"transcript.future", "delta":"x", "future_event":true});
52 let parsed: TranscriptionStreamEvent = serde_json::from_value(event.clone()).unwrap();
53 assert_eq!(serde_json::to_value(parsed).unwrap(), event);
54
55 let speech = json!({"type":"speech.audio.delta", "audio":"AAEC", "future":1});
56 let parsed: SpeechStreamEvent = serde_json::from_value(speech.clone()).unwrap();
57 assert_eq!(serde_json::to_value(parsed).unwrap(), speech);
58 }
59}