outfox_openai/spec/realtime/
response_resource.rs

1use serde::{Deserialize, Serialize};
2
3use super::item::Item;
4
5#[derive(Debug, Serialize, Deserialize, Clone)]
6pub struct Usage {
7    pub total_tokens: u32,
8    pub input_tokens: u32,
9    pub output_tokens: u32,
10}
11
12#[derive(Debug, Serialize, Deserialize, Clone)]
13#[serde(rename_all = "snake_case")]
14pub enum ResponseStatus {
15    InProgress,
16    Completed,
17    Cancelled,
18    Failed,
19    Incomplete,
20}
21
22#[derive(Debug, Serialize, Deserialize, Clone)]
23pub struct FailedError {
24    pub code: String,
25    pub message: String,
26}
27
28#[derive(Debug, Serialize, Deserialize, Clone)]
29#[serde(rename_all = "snake_case")]
30pub enum IncompleteReason {
31    Interruption,
32    MaxOutputTokens,
33    ContentFilter,
34}
35
36#[derive(Debug, Serialize, Deserialize, Clone)]
37#[serde(tag = "type")]
38pub enum ResponseStatusDetail {
39    #[serde(rename = "incomplete")]
40    Incomplete { reason: IncompleteReason },
41    #[serde(rename = "failed")]
42    Failed { error: Option<FailedError> },
43    #[serde(rename = "cancelled")]
44    Cancelled { reason: String },
45}
46
47#[derive(Debug, Serialize, Deserialize, Clone)]
48pub struct ResponseResource {
49    /// The unique ID of the response.
50    pub id: String,
51    /// The object type, must be "realtime.response".
52    pub object: String,
53    /// The status of the response
54    pub status: ResponseStatus,
55    /// Additional details about the status.
56    pub status_details: Option<ResponseStatusDetail>,
57    /// The list of output items generated by the response.
58    pub output: Vec<Item>,
59    /// Usage statistics for the response.
60    pub usage: Option<Usage>,
61}