Skip to main content

gproxy_protocol/openai/compact_response/
response.rs

1use http::StatusCode;
2use serde::{Deserialize, Serialize};
3
4use crate::openai::compact_response::types::{
5    CompactedResponseOutputItem, OpenAiApiErrorResponse, OpenAiResponseHeaders, ResponseUsage,
6};
7
8/// Successful body returned by `responses.compact`.
9#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
10pub struct ResponseBody {
11    /// Unique ID of the compacted response.
12    pub id: String,
13    /// Unix timestamp (seconds) when compaction finished.
14    pub created_at: u64,
15    /// Object discriminator (always `response.compaction`).
16    pub object: OpenAiCompactedResponseObject,
17    /// Compacted output items.
18    pub output: Vec<CompactedResponseOutputItem>,
19    /// Token accounting for compaction.
20    pub usage: ResponseUsage,
21}
22
23/// Object discriminator for compacted responses.
24#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
25pub enum OpenAiCompactedResponseObject {
26    #[serde(rename = "response.compaction")]
27    ResponseCompaction,
28}
29
30/// Full HTTP response for OpenAI `responses.compact` endpoint.
31#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
32#[serde(untagged)]
33pub enum OpenAiCompactResponse {
34    Success {
35        /// HTTP status code returned by server (should be `200 OK`).
36        #[serde(with = "crate::openai::types::status_code_serde")]
37        stats_code: StatusCode,
38        /// Response headers.
39        headers: OpenAiResponseHeaders,
40        /// Successful body.
41        body: ResponseBody,
42    },
43    Error {
44        /// HTTP status code returned by server (typically non-2xx).
45        #[serde(with = "crate::openai::types::status_code_serde")]
46        stats_code: StatusCode,
47        /// Response headers.
48        headers: OpenAiResponseHeaders,
49        /// Error body.
50        body: OpenAiApiErrorResponse,
51    },
52}