gproxy_protocol/openai/create_response/
response.rs1use 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#[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#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
77#[serde(untagged)]
78#[allow(clippy::large_enum_variant)]
79pub enum OpenAiCreateResponseResponse {
80 Success {
81 #[serde(with = "crate::openai::types::status_code_serde")]
83 stats_code: StatusCode,
84 headers: OpenAiResponseHeaders,
86 body: ResponseBody,
88 },
89 Error {
90 #[serde(with = "crate::openai::types::status_code_serde")]
92 stats_code: StatusCode,
93 headers: OpenAiResponseHeaders,
95 body: OpenAiApiErrorResponse,
97 },
98}