Skip to main content

conversation_api/
response.rs

1use crate::{ConversationQueue, LiveSnapshot, ThreadSnapshot, ThreadSummary};
2use serde::{Deserialize, Serialize};
3
4#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
5#[serde(rename_all = "camelCase")]
6pub struct ThreadSession {
7    pub activity_at_unix_ms: i64,
8}
9
10#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
11#[serde(tag = "mode", rename_all = "snake_case")]
12pub enum ThreadSync {
13    Unchanged {
14        snapshot_version: u64,
15    },
16    Delta {
17        base_snapshot_version: u64,
18        snapshot_version: u64,
19        events: Vec<crate::SnapshotUpdatedEvent>,
20    },
21    Snapshot {
22        snapshot: ThreadSnapshot,
23    },
24}
25
26#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
27#[serde(rename_all = "camelCase")]
28pub struct ThreadLoadResponse {
29    pub thread: ThreadSummary,
30    pub session: ThreadSession,
31    pub sync: ThreadSync,
32    pub live: LiveSnapshot,
33    pub queue: ConversationQueue,
34}
35
36#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
37#[serde(rename_all = "camelCase")]
38pub struct MessageEnqueueResponse {
39    pub request_id: String,
40    pub disposition: MessageEnqueueDisposition,
41    #[serde(default, skip_serializing_if = "Option::is_none")]
42    pub queue_version: Option<u64>,
43    #[serde(default, skip_serializing_if = "Option::is_none")]
44    pub admission: Option<RequestAdmission>,
45}
46
47#[derive(Debug, Clone, Copy, Serialize, Deserialize, PartialEq, Eq)]
48#[serde(rename_all = "snake_case")]
49pub enum MessageEnqueueDisposition {
50    Queued,
51    Duplicate,
52}
53
54#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
55#[serde(rename_all = "camelCase")]
56pub struct TurnSubmitResponse {
57    pub request_id: String,
58    #[serde(default, skip_serializing_if = "Option::is_none")]
59    pub thread_id: Option<String>,
60    pub disposition: TurnSubmitDisposition,
61    #[serde(default, skip_serializing_if = "Option::is_none")]
62    pub session_disposition: Option<TurnSessionDisposition>,
63    #[serde(default, skip_serializing_if = "Option::is_none")]
64    pub queue_version: Option<u64>,
65    #[serde(default, skip_serializing_if = "Option::is_none")]
66    pub admission: Option<RequestAdmission>,
67}
68
69#[derive(Debug, Clone, Copy, Serialize, Deserialize, PartialEq, Eq)]
70#[serde(rename_all = "snake_case")]
71pub enum TurnSubmitDisposition {
72    Queued,
73    Duplicate,
74    BlockedPendingInteraction,
75}
76
77#[derive(Debug, Clone, Copy, Serialize, Deserialize, PartialEq, Eq)]
78#[serde(rename_all = "snake_case")]
79pub enum TurnSessionDisposition {
80    Existing,
81    Created,
82    RotatedIdleTimeout,
83}
84
85#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
86#[serde(rename_all = "camelCase")]
87pub struct SessionStartResponse {
88    pub operation_id: String,
89    pub thread_id: String,
90    pub disposition: SessionStartDisposition,
91    pub catalog: crate::ThreadCatalog,
92}
93
94#[derive(Debug, Clone, Copy, Serialize, Deserialize, PartialEq, Eq)]
95#[serde(rename_all = "snake_case")]
96pub enum SessionStartDisposition {
97    Rotated,
98    AlreadyApplied,
99}
100
101#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
102#[serde(rename_all = "camelCase")]
103pub struct InteractionAnswerResponse {
104    pub request_id: String,
105    pub thread_id: String,
106    pub disposition: InteractionAnswerDisposition,
107}
108
109#[derive(Debug, Clone, Copy, Serialize, Deserialize, PartialEq, Eq)]
110#[serde(rename_all = "snake_case")]
111pub enum InteractionAnswerDisposition {
112    Accepted,
113    Duplicate,
114    Unavailable,
115    ExpiredSession,
116}
117
118#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
119#[serde(rename_all = "camelCase")]
120pub struct InteractionSubmitResponse {
121    pub request_id: String,
122    pub disposition: InteractionSubmitDisposition,
123}
124
125#[derive(Debug, Clone, Copy, Serialize, Deserialize, PartialEq, Eq)]
126#[serde(rename_all = "snake_case")]
127pub enum InteractionSubmitDisposition {
128    Accepted,
129}
130
131#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
132#[serde(rename_all = "camelCase")]
133pub struct RequestCancelResponse {
134    pub request_id: String,
135    pub phase: RequestCancelPhase,
136    pub outcome: RequestCancelOutcome,
137    #[serde(default, skip_serializing_if = "Option::is_none")]
138    pub queue_version: Option<u64>,
139    #[serde(default, skip_serializing_if = "Option::is_none")]
140    pub admission_version: Option<u64>,
141}
142
143#[derive(Debug, Clone, Copy, Serialize, Deserialize, PartialEq, Eq)]
144#[serde(rename_all = "snake_case")]
145pub enum RequestCancelPhase {
146    AdmissionWaiting,
147    Waiting,
148    Running,
149}
150
151#[derive(Debug, Clone, Copy, Serialize, Deserialize, PartialEq, Eq)]
152#[serde(rename_all = "snake_case")]
153pub enum RequestCancelOutcome {
154    Cancelled,
155    Cancelling,
156}
157
158#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
159#[serde(rename_all = "camelCase")]
160pub struct RequestAdmission {
161    pub state: RequestAdmissionState,
162    pub admission_version: u64,
163    #[serde(default, skip_serializing_if = "Option::is_none")]
164    pub reason: Option<RequestAdmissionReason>,
165    #[serde(default, skip_serializing_if = "Option::is_none")]
166    pub thread_id: Option<String>,
167    #[serde(default, skip_serializing_if = "Option::is_none")]
168    pub queue_version: Option<u64>,
169}
170
171#[derive(Debug, Clone, Copy, Serialize, Deserialize, PartialEq, Eq)]
172#[serde(rename_all = "snake_case")]
173pub enum RequestAdmissionState {
174    WaitingHandoff,
175    Bound,
176    Cancelled,
177    Failed,
178}
179
180#[derive(Debug, Clone, Copy, Serialize, Deserialize, PartialEq, Eq)]
181#[serde(rename_all = "snake_case")]
182pub enum RequestAdmissionReason {
183    ModeHandoff,
184    WaitingForPriorTurn,
185    Accepted,
186    Cancelled,
187    HandoffFailed,
188}