Skip to main content

conversation_api/
request.rs

1use crate::InteractionDecision;
2use serde::{Deserialize, Serialize};
3
4#[derive(Debug, Clone, Default, Serialize, Deserialize, PartialEq, Eq)]
5#[serde(deny_unknown_fields)]
6pub struct ThreadListRequest {}
7
8#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
9#[serde(rename_all = "camelCase", deny_unknown_fields)]
10pub struct ThreadCreateRequest {
11    pub operation_id: String,
12    pub expected_catalog_version: u64,
13    #[serde(default, skip_serializing_if = "Option::is_none")]
14    pub title: Option<String>,
15}
16
17#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
18#[serde(rename_all = "camelCase", deny_unknown_fields)]
19pub struct ThreadArchiveRequest {
20    pub thread_id: String,
21    pub expected_catalog_version: u64,
22}
23
24#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
25#[serde(rename_all = "camelCase", deny_unknown_fields)]
26pub struct ThreadRotateRequest {
27    pub operation_id: String,
28    pub thread_id: String,
29    pub expected_catalog_version: u64,
30    pub expected_snapshot_version: u64,
31    pub expected_setting_version: u64,
32    pub reason: ThreadRotateReason,
33}
34
35#[derive(Debug, Clone, Copy, Serialize, Deserialize, PartialEq, Eq)]
36#[serde(rename_all = "snake_case")]
37pub enum ThreadRotateReason {
38    IdleTimeout,
39    UserRequested,
40}
41
42#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
43#[serde(rename_all = "camelCase", deny_unknown_fields)]
44pub struct ThreadLoadRequest {
45    pub thread_id: String,
46    #[serde(default, skip_serializing_if = "Option::is_none")]
47    pub known_snapshot_version: Option<u64>,
48}
49
50#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
51#[serde(rename_all = "camelCase", deny_unknown_fields)]
52pub struct ImageReference {
53    pub base64: String,
54    pub format: ImageFormat,
55    pub created_at: u64,
56}
57
58#[derive(Debug, Clone, Copy, Serialize, Deserialize, PartialEq, Eq)]
59#[serde(rename_all = "lowercase")]
60pub enum ImageFormat {
61    Jpeg,
62    Png,
63    Webp,
64    Gif,
65}
66
67#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
68#[serde(rename_all = "camelCase", deny_unknown_fields)]
69pub struct MessageEnqueueRequest {
70    pub thread_id: String,
71    pub request_id: String,
72    #[serde(default)]
73    pub message: String,
74    #[serde(default)]
75    pub image_refs: Vec<ImageReference>,
76    #[serde(default, skip_serializing_if = "Option::is_none")]
77    pub access_mode: Option<ConversationAccessMode>,
78    pub agent_model_mode: String,
79    #[serde(default, skip_serializing_if = "Option::is_none")]
80    pub temperature: Option<f32>,
81    pub allow_tools: bool,
82    pub debug: bool,
83}
84
85#[derive(Debug, Clone, Copy, Serialize, Deserialize, PartialEq, Eq)]
86#[serde(rename_all = "snake_case")]
87pub enum ConversationAccessMode {
88    Interactive,
89    FullAccess,
90}
91
92#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
93#[serde(rename_all = "camelCase", deny_unknown_fields)]
94pub struct QueueReorderRequest {
95    pub thread_id: String,
96    pub expected_queue_version: u64,
97    pub ordered_request_ids: Vec<String>,
98}
99
100#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
101#[serde(rename_all = "camelCase", deny_unknown_fields)]
102pub struct RequestCancelRequest {
103    pub thread_id: String,
104    pub request_id: String,
105}
106
107#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
108#[serde(rename_all = "camelCase", deny_unknown_fields)]
109pub struct InteractionSubmitRequest {
110    pub thread_id: String,
111    pub batch_id: String,
112    pub decisions: Vec<InteractionDecision>,
113}