Skip to main content

openresponses_rust/types/
responses.rs

1use super::{enums::*, items::*, tools::*};
2use serde::{Deserialize, Serialize};
3use std::collections::HashMap;
4
5#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
6pub struct ResponseResource {
7    pub id: String,
8    pub object: String,
9    pub created_at: i64,
10    #[serde(skip_serializing_if = "Option::is_none")]
11    pub completed_at: Option<i64>,
12    pub status: String,
13    #[serde(skip_serializing_if = "Option::is_none")]
14    pub incomplete_details: Option<IncompleteDetails>,
15    pub model: String,
16    #[serde(skip_serializing_if = "Option::is_none")]
17    pub previous_response_id: Option<String>,
18    #[serde(skip_serializing_if = "Option::is_none")]
19    pub instructions: Option<String>,
20    pub output: Vec<Item>,
21    #[serde(skip_serializing_if = "Option::is_none")]
22    pub error: Option<Error>,
23    pub tools: Vec<Tool>,
24    pub tool_choice: ToolChoiceParam,
25    pub truncation: Truncation,
26    pub parallel_tool_calls: bool,
27    pub text: TextField,
28    pub top_p: f64,
29    pub presence_penalty: f64,
30    pub frequency_penalty: f64,
31    pub top_logprobs: i32,
32    pub temperature: f64,
33    #[serde(skip_serializing_if = "Option::is_none")]
34    pub reasoning: Option<ReasoningOutput>,
35    #[serde(skip_serializing_if = "Option::is_none")]
36    pub usage: Option<Usage>,
37    #[serde(skip_serializing_if = "Option::is_none")]
38    pub max_output_tokens: Option<i32>,
39    #[serde(skip_serializing_if = "Option::is_none")]
40    pub max_tool_calls: Option<i32>,
41    pub store: bool,
42    pub background: bool,
43    pub service_tier: String,
44    pub metadata: HashMap<String, String>,
45    #[serde(skip_serializing_if = "Option::is_none")]
46    pub safety_identifier: Option<String>,
47    #[serde(skip_serializing_if = "Option::is_none")]
48    pub prompt_cache_key: Option<String>,
49}
50
51#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
52pub struct IncompleteDetails {
53    pub reason: String,
54}
55
56#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
57pub struct Error {
58    pub code: String,
59    pub message: String,
60    #[serde(skip_serializing_if = "Option::is_none")]
61    pub param: Option<String>,
62    #[serde(rename = "type")]
63    pub error_type: ErrorType,
64}
65
66#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
67pub struct TextField {
68    pub format: TextFormatOutput,
69    #[serde(skip_serializing_if = "Option::is_none")]
70    pub verbosity: Option<Verbosity>,
71}
72
73#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
74#[serde(tag = "type")]
75pub enum TextFormatOutput {
76    #[serde(rename = "text")]
77    Text,
78    #[serde(rename = "json_object")]
79    JsonObject,
80    #[serde(rename = "json_schema")]
81    JsonSchema {
82        name: String,
83        description: String,
84        schema: serde_json::Value,
85        strict: bool,
86    },
87}
88
89#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
90pub struct ReasoningOutput {
91    #[serde(skip_serializing_if = "Option::is_none")]
92    pub effort: Option<ReasoningEffort>,
93    #[serde(skip_serializing_if = "Option::is_none")]
94    pub summary: Option<ReasoningSummary>,
95}
96
97#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
98pub struct Usage {
99    pub input_tokens: i32,
100    pub output_tokens: i32,
101    pub total_tokens: i32,
102    pub input_tokens_details: InputTokensDetails,
103    pub output_tokens_details: OutputTokensDetails,
104}
105
106#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
107pub struct InputTokensDetails {
108    pub cached_tokens: i32,
109}
110
111#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
112pub struct OutputTokensDetails {
113    pub reasoning_tokens: i32,
114}