Skip to main content

gproxy_protocol/openai/compact/
mod.rs

1use serde::{Deserialize, Serialize};
2use serde_json::Value;
3
4use crate::openai::common::*;
5use crate::openai::generate_content::responses::{
6    ComputerScreenshot, ResponseInput, ResponseInputContentPart, ResponseMessageItemType,
7    ResponseOutputContentPart, ResponseUsage, TypedResponseItem,
8};
9
10pub type CompactResponseWireModel =
11    OpenAiWireModel<CompactResponseRequestBody, CompactedResponseObject>;
12
13#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, gproxy_protocol_macros::WireBuilder)]
14#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
15pub struct CompactResponseRequestBody {
16    #[serde(skip_serializing_if = "Option::is_none")]
17    pub input: Option<ResponseInput>,
18    #[serde(skip_serializing_if = "Option::is_none")]
19    pub instructions: Option<String>,
20    pub model: Option<OpenAiModelId>,
21    #[serde(skip_serializing_if = "Option::is_none")]
22    pub previous_response_id: Option<String>,
23    #[serde(skip_serializing_if = "Option::is_none")]
24    pub prompt_cache_key: Option<String>,
25    #[serde(skip_serializing_if = "Option::is_none")]
26    pub prompt_cache_options: Option<PromptCacheOptions>,
27    #[serde(skip_serializing_if = "Option::is_none")]
28    pub prompt_cache_retention: Option<PromptCacheRetention>,
29    #[serde(skip_serializing_if = "Option::is_none")]
30    pub service_tier: Option<CompactServiceTier>,
31    #[serde(default, flatten)]
32    pub rest: Rest,
33}
34
35#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, gproxy_protocol_macros::WireBuilder)]
36#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
37pub struct CompactedResponseObject {
38    pub id: String,
39    #[serde(skip_serializing_if = "Option::is_none")]
40    pub created_at: Option<u64>,
41    pub object: ResponseCompactionObjectType,
42    pub output: Vec<CompactResponseItem>,
43    pub usage: ResponseUsage,
44    #[serde(default, flatten)]
45    pub rest: Rest,
46}
47
48#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
49#[serde(untagged)]
50pub enum CompactResponseItem {
51    Message(CompactMessageItem),
52    Typed(Box<TypedResponseItem>),
53    Unknown(Value),
54}
55
56#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, gproxy_protocol_macros::WireBuilder)]
57#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
58pub struct CompactMessageItem {
59    #[serde(skip_serializing_if = "Option::is_none")]
60    pub id: Option<String>,
61    #[serde(rename = "type")]
62    pub type_: ResponseMessageItemType,
63    pub content: Vec<CompactMessageContentPart>,
64    pub role: CompactMessageRole,
65    pub status: ResponseItemLifecycleStatus,
66    #[serde(skip_serializing_if = "Option::is_none")]
67    pub phase: Option<ResponsePhase>,
68    #[serde(default, flatten)]
69    pub rest: Rest,
70}
71
72#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
73#[serde(untagged)]
74pub enum CompactMessageContentPart {
75    Input(ResponseInputContentPart),
76    Output(ResponseOutputContentPart),
77    Text(CompactTextContent),
78    SummaryText(CompactSummaryTextContent),
79    ComputerScreenshot(ComputerScreenshot),
80    Unknown(Value),
81}
82
83#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, gproxy_protocol_macros::WireBuilder)]
84#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
85pub struct CompactTextContent {
86    pub text: String,
87    #[serde(rename = "type")]
88    pub type_: CompactTextContentType,
89    #[serde(default, flatten)]
90    pub rest: Rest,
91}
92
93#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
94pub enum CompactTextContentType {
95    #[serde(rename = "text")]
96    Text,
97}
98
99#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, gproxy_protocol_macros::WireBuilder)]
100#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
101pub struct CompactSummaryTextContent {
102    pub text: String,
103    #[serde(rename = "type")]
104    pub type_: CompactSummaryTextContentType,
105    #[serde(default, flatten)]
106    pub rest: Rest,
107}
108
109#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
110pub enum CompactSummaryTextContentType {
111    #[serde(rename = "summary_text")]
112    SummaryText,
113}
114
115#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
116#[serde(rename_all = "snake_case")]
117pub enum CompactMessageRole {
118    Unknown,
119    User,
120    Assistant,
121    System,
122    Critic,
123    Discriminator,
124    Developer,
125    Tool,
126}
127
128pub type CompactServiceTier = ServiceTier;