Skip to main content

conversation_api/
request.rs

1use crate::{InteractionDecision, ThreadArchiveReason};
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: ThreadArchiveReason,
33}
34
35#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
36#[serde(rename_all = "camelCase", deny_unknown_fields)]
37pub struct ThreadLoadRequest {
38    pub thread_id: String,
39    #[serde(default, skip_serializing_if = "Option::is_none")]
40    pub known_snapshot_version: Option<u64>,
41}
42
43#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
44#[serde(rename_all = "camelCase", deny_unknown_fields)]
45pub struct ImageReference {
46    pub base64: String,
47    pub format: ImageFormat,
48    pub created_at: u64,
49}
50
51#[derive(Debug, Clone, Copy, Serialize, Deserialize, PartialEq, Eq)]
52#[serde(rename_all = "lowercase")]
53pub enum ImageFormat {
54    Jpeg,
55    Png,
56    Webp,
57    Gif,
58}
59
60#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
61#[serde(rename_all = "camelCase", deny_unknown_fields)]
62pub struct MessageEnqueueRequest {
63    pub thread_id: String,
64    pub request_id: String,
65    #[serde(default)]
66    pub message: String,
67    #[serde(default)]
68    pub image_refs: Vec<ImageReference>,
69    #[serde(default, skip_serializing_if = "Option::is_none")]
70    pub access_mode: Option<String>,
71    pub agent_model_mode: String,
72    #[serde(default, skip_serializing_if = "Option::is_none")]
73    pub temperature: Option<f32>,
74    pub allow_tools: bool,
75    pub debug: bool,
76}
77
78#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
79#[serde(rename_all = "camelCase", deny_unknown_fields)]
80pub struct QueueReorderRequest {
81    pub thread_id: String,
82    pub expected_queue_version: u64,
83    pub ordered_request_ids: Vec<String>,
84}
85
86#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
87#[serde(rename_all = "camelCase", deny_unknown_fields)]
88pub struct RequestCancelRequest {
89    pub thread_id: String,
90    pub request_id: String,
91}
92
93#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
94#[serde(rename_all = "camelCase", deny_unknown_fields)]
95pub struct InteractionSubmitRequest {
96    pub thread_id: String,
97    pub batch_id: String,
98    pub decisions: Vec<InteractionDecision>,
99}