Skip to main content

gproxy_protocol/openai/create_response/
response.rs

1use std::collections::BTreeMap;
2
3use http::StatusCode;
4use serde::{Deserialize, Serialize};
5
6use crate::openai::create_response::types::{
7    Metadata, Model, OpenAiApiErrorResponse, OpenAiResponseHeaders, ResponseConversationParam,
8    ResponseError, ResponseIncompleteDetails, ResponseInput, ResponseObject, ResponseOutputItem,
9    ResponsePrompt, ResponsePromptCacheRetention, ResponseReasoning, ResponseServiceTier,
10    ResponseStatus, ResponseTextConfig, ResponseTool, ResponseToolChoice, ResponseTruncation,
11    ResponseUsage,
12};
13
14/// Successful body returned by `responses.create`.
15#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
16pub struct ResponseBody {
17    pub id: String,
18    pub created_at: u64,
19    #[serde(default, skip_serializing_if = "Option::is_none")]
20    pub error: Option<ResponseError>,
21    #[serde(default, skip_serializing_if = "Option::is_none")]
22    pub incomplete_details: Option<ResponseIncompleteDetails>,
23    #[serde(default, skip_serializing_if = "Option::is_none")]
24    pub instructions: Option<ResponseInput>,
25    #[serde(default, skip_serializing_if = "BTreeMap::is_empty")]
26    pub metadata: Metadata,
27    pub model: Model,
28    pub object: ResponseObject,
29    pub output: Vec<ResponseOutputItem>,
30    pub parallel_tool_calls: bool,
31    pub temperature: f64,
32    pub tool_choice: ResponseToolChoice,
33    pub tools: Vec<ResponseTool>,
34    pub top_p: f64,
35    #[serde(default, skip_serializing_if = "Option::is_none")]
36    pub background: Option<bool>,
37    #[serde(default, skip_serializing_if = "Option::is_none")]
38    pub completed_at: Option<u64>,
39    #[serde(default, skip_serializing_if = "Option::is_none")]
40    pub conversation: Option<ResponseConversationParam>,
41    #[serde(default, skip_serializing_if = "Option::is_none")]
42    pub max_output_tokens: Option<u64>,
43    #[serde(default, skip_serializing_if = "Option::is_none")]
44    pub max_tool_calls: Option<u64>,
45    #[serde(default, skip_serializing_if = "Option::is_none")]
46    pub output_text: Option<String>,
47    #[serde(default, skip_serializing_if = "Option::is_none")]
48    pub previous_response_id: Option<String>,
49    #[serde(default, skip_serializing_if = "Option::is_none")]
50    pub prompt: Option<ResponsePrompt>,
51    #[serde(default, skip_serializing_if = "Option::is_none")]
52    pub prompt_cache_key: Option<String>,
53    #[serde(default, skip_serializing_if = "Option::is_none")]
54    pub prompt_cache_retention: Option<ResponsePromptCacheRetention>,
55    #[serde(default, skip_serializing_if = "Option::is_none")]
56    pub reasoning: Option<ResponseReasoning>,
57    #[serde(default, skip_serializing_if = "Option::is_none")]
58    pub safety_identifier: Option<String>,
59    #[serde(default, skip_serializing_if = "Option::is_none")]
60    pub service_tier: Option<ResponseServiceTier>,
61    #[serde(default, skip_serializing_if = "Option::is_none")]
62    pub status: Option<ResponseStatus>,
63    #[serde(default, skip_serializing_if = "Option::is_none")]
64    pub text: Option<ResponseTextConfig>,
65    #[serde(default, skip_serializing_if = "Option::is_none")]
66    pub top_logprobs: Option<u32>,
67    #[serde(default, skip_serializing_if = "Option::is_none")]
68    pub truncation: Option<ResponseTruncation>,
69    #[serde(default, skip_serializing_if = "Option::is_none")]
70    pub usage: Option<ResponseUsage>,
71    #[serde(default, skip_serializing_if = "Option::is_none")]
72    pub user: Option<String>,
73}
74
75/// Full HTTP response for OpenAI `responses.create` endpoint.
76#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
77#[serde(untagged)]
78#[allow(clippy::large_enum_variant)]
79pub enum OpenAiCreateResponseResponse {
80    Success {
81        /// HTTP status code returned by server (should be `200 OK`).
82        #[serde(with = "crate::openai::types::status_code_serde")]
83        stats_code: StatusCode,
84        /// Response headers.
85        headers: OpenAiResponseHeaders,
86        /// Successful body.
87        body: ResponseBody,
88    },
89    Error {
90        /// HTTP status code returned by server (typically non-2xx).
91        #[serde(with = "crate::openai::types::status_code_serde")]
92        stats_code: StatusCode,
93        /// Response headers.
94        headers: OpenAiResponseHeaders,
95        /// Error body.
96        body: OpenAiApiErrorResponse,
97    },
98}