trieve_client/apis/
message_api.rs

1/*
2 * Trieve API
3 *
4 * Trieve OpenAPI Specification. This document describes all of the operations available through the Trieve API.
5 *
6 * The version of the OpenAPI document: 0.11.7
7 * Contact: developers@trieve.ai
8 * Generated by: https://openapi-generator.tech
9 */
10
11
12use reqwest;
13
14use crate::{apis::ResponseContent, models};
15use super::{Error, configuration};
16
17
18/// struct for typed errors of method [`create_message`]
19#[derive(Debug, Clone, Serialize, Deserialize)]
20#[serde(untagged)]
21pub enum CreateMessageError {
22    Status400(models::ErrorResponseBody),
23    UnknownValue(serde_json::Value),
24}
25
26/// struct for typed errors of method [`edit_message`]
27#[derive(Debug, Clone, Serialize, Deserialize)]
28#[serde(untagged)]
29pub enum EditMessageError {
30    Status400(models::ErrorResponseBody),
31    UnknownValue(serde_json::Value),
32}
33
34/// struct for typed errors of method [`get_all_topic_messages`]
35#[derive(Debug, Clone, Serialize, Deserialize)]
36#[serde(untagged)]
37pub enum GetAllTopicMessagesError {
38    Status400(models::ErrorResponseBody),
39    UnknownValue(serde_json::Value),
40}
41
42/// struct for typed errors of method [`regenerate_message`]
43#[derive(Debug, Clone, Serialize, Deserialize)]
44#[serde(untagged)]
45pub enum RegenerateMessageError {
46    Status400(models::ErrorResponseBody),
47    UnknownValue(serde_json::Value),
48}
49
50/// struct for typed errors of method [`regenerate_message_patch`]
51#[derive(Debug, Clone, Serialize, Deserialize)]
52#[serde(untagged)]
53pub enum RegenerateMessagePatchError {
54    Status400(models::ErrorResponseBody),
55    UnknownValue(serde_json::Value),
56}
57
58
59/// Create message. Messages are attached to topics in order to coordinate memory of gen-AI chat sessions.Auth'ed user or api key must have an admin or owner role for the specified dataset's organization.
60pub async fn create_message(configuration: &configuration::Configuration, tr_dataset: &str, create_message_req_payload: models::CreateMessageReqPayload) -> Result<String, Error<CreateMessageError>> {
61    let local_var_configuration = configuration;
62
63    let local_var_client = &local_var_configuration.client;
64
65    let local_var_uri_str = format!("{}/api/message", local_var_configuration.base_path);
66    let mut local_var_req_builder = local_var_client.request(reqwest::Method::POST, local_var_uri_str.as_str());
67
68    if let Some(ref local_var_user_agent) = local_var_configuration.user_agent {
69        local_var_req_builder = local_var_req_builder.header(reqwest::header::USER_AGENT, local_var_user_agent.clone());
70    }
71    local_var_req_builder = local_var_req_builder.header("TR-Dataset", tr_dataset.to_string());
72    if let Some(ref local_var_apikey) = local_var_configuration.api_key {
73        let local_var_key = local_var_apikey.key.clone();
74        let local_var_value = match local_var_apikey.prefix {
75            Some(ref local_var_prefix) => format!("{} {}", local_var_prefix, local_var_key),
76            None => local_var_key,
77        };
78        local_var_req_builder = local_var_req_builder.header("Authorization", local_var_value);
79    };
80    local_var_req_builder = local_var_req_builder.json(&create_message_req_payload);
81
82    let local_var_req = local_var_req_builder.build()?;
83    let local_var_resp = local_var_client.execute(local_var_req).await?;
84
85    let local_var_status = local_var_resp.status();
86    let local_var_content = local_var_resp.text().await?;
87
88    if !local_var_status.is_client_error() && !local_var_status.is_server_error() {
89        serde_json::from_str(&local_var_content).map_err(Error::from)
90    } else {
91        let local_var_entity: Option<CreateMessageError> = serde_json::from_str(&local_var_content).ok();
92        let local_var_error = ResponseContent { status: local_var_status, content: local_var_content, entity: local_var_entity };
93        Err(Error::ResponseError(local_var_error))
94    }
95}
96
97/// Edit message which exists within the topic's chat history. This will delete the message and replace it with a new message. The new message will be generated by the AI based on the new content provided in the request body. The response will include Chunks first on the stream if the topic is using RAG. The structure will look like `[chunks]||mesage`. See docs.trieve.ai for more information. Auth'ed user or api key must have an admin or owner role for the specified dataset's organization.
98pub async fn edit_message(configuration: &configuration::Configuration, tr_dataset: &str, edit_message_req_payload: models::EditMessageReqPayload) -> Result<(), Error<EditMessageError>> {
99    let local_var_configuration = configuration;
100
101    let local_var_client = &local_var_configuration.client;
102
103    let local_var_uri_str = format!("{}/api/message", local_var_configuration.base_path);
104    let mut local_var_req_builder = local_var_client.request(reqwest::Method::PUT, local_var_uri_str.as_str());
105
106    if let Some(ref local_var_user_agent) = local_var_configuration.user_agent {
107        local_var_req_builder = local_var_req_builder.header(reqwest::header::USER_AGENT, local_var_user_agent.clone());
108    }
109    local_var_req_builder = local_var_req_builder.header("TR-Dataset", tr_dataset.to_string());
110    if let Some(ref local_var_apikey) = local_var_configuration.api_key {
111        let local_var_key = local_var_apikey.key.clone();
112        let local_var_value = match local_var_apikey.prefix {
113            Some(ref local_var_prefix) => format!("{} {}", local_var_prefix, local_var_key),
114            None => local_var_key,
115        };
116        local_var_req_builder = local_var_req_builder.header("Authorization", local_var_value);
117    };
118    local_var_req_builder = local_var_req_builder.json(&edit_message_req_payload);
119
120    let local_var_req = local_var_req_builder.build()?;
121    let local_var_resp = local_var_client.execute(local_var_req).await?;
122
123    let local_var_status = local_var_resp.status();
124    let local_var_content = local_var_resp.text().await?;
125
126    if !local_var_status.is_client_error() && !local_var_status.is_server_error() {
127        Ok(())
128    } else {
129        let local_var_entity: Option<EditMessageError> = serde_json::from_str(&local_var_content).ok();
130        let local_var_error = ResponseContent { status: local_var_status, content: local_var_content, entity: local_var_entity };
131        Err(Error::ResponseError(local_var_error))
132    }
133}
134
135/// Get all messages for a given topic. If the topic is a RAG topic then the response will include Chunks first on each message. The structure will look like `[chunks]||mesage`. See docs.trieve.ai for more information.
136pub async fn get_all_topic_messages(configuration: &configuration::Configuration, tr_dataset: &str, messages_topic_id: &str) -> Result<Vec<models::Message>, Error<GetAllTopicMessagesError>> {
137    let local_var_configuration = configuration;
138
139    let local_var_client = &local_var_configuration.client;
140
141    let local_var_uri_str = format!("{}/api/messages/{messages_topic_id}", local_var_configuration.base_path, messages_topic_id=crate::apis::urlencode(messages_topic_id));
142    let mut local_var_req_builder = local_var_client.request(reqwest::Method::GET, local_var_uri_str.as_str());
143
144    if let Some(ref local_var_user_agent) = local_var_configuration.user_agent {
145        local_var_req_builder = local_var_req_builder.header(reqwest::header::USER_AGENT, local_var_user_agent.clone());
146    }
147    local_var_req_builder = local_var_req_builder.header("TR-Dataset", tr_dataset.to_string());
148    if let Some(ref local_var_apikey) = local_var_configuration.api_key {
149        let local_var_key = local_var_apikey.key.clone();
150        let local_var_value = match local_var_apikey.prefix {
151            Some(ref local_var_prefix) => format!("{} {}", local_var_prefix, local_var_key),
152            None => local_var_key,
153        };
154        local_var_req_builder = local_var_req_builder.header("Authorization", local_var_value);
155    };
156
157    let local_var_req = local_var_req_builder.build()?;
158    let local_var_resp = local_var_client.execute(local_var_req).await?;
159
160    let local_var_status = local_var_resp.status();
161    let local_var_content = local_var_resp.text().await?;
162
163    if !local_var_status.is_client_error() && !local_var_status.is_server_error() {
164        serde_json::from_str(&local_var_content).map_err(Error::from)
165    } else {
166        let local_var_entity: Option<GetAllTopicMessagesError> = serde_json::from_str(&local_var_content).ok();
167        let local_var_error = ResponseContent { status: local_var_status, content: local_var_content, entity: local_var_entity };
168        Err(Error::ResponseError(local_var_error))
169    }
170}
171
172/// Regenerate the assistant response to the last user message of a topic. This will delete the last message and replace it with a new message. The response will include Chunks first on the stream if the topic is using RAG. The structure will look like `[chunks]||mesage`. See docs.trieve.ai for more information. Auth'ed user or api key must have an admin or owner role for the specified dataset's organization.
173pub async fn regenerate_message(configuration: &configuration::Configuration, tr_dataset: &str, regenerate_message_req_payload: models::RegenerateMessageReqPayload) -> Result<String, Error<RegenerateMessageError>> {
174    let local_var_configuration = configuration;
175
176    let local_var_client = &local_var_configuration.client;
177
178    let local_var_uri_str = format!("{}/api/message", local_var_configuration.base_path);
179    let mut local_var_req_builder = local_var_client.request(reqwest::Method::DELETE, local_var_uri_str.as_str());
180
181    if let Some(ref local_var_user_agent) = local_var_configuration.user_agent {
182        local_var_req_builder = local_var_req_builder.header(reqwest::header::USER_AGENT, local_var_user_agent.clone());
183    }
184    local_var_req_builder = local_var_req_builder.header("TR-Dataset", tr_dataset.to_string());
185    if let Some(ref local_var_apikey) = local_var_configuration.api_key {
186        let local_var_key = local_var_apikey.key.clone();
187        let local_var_value = match local_var_apikey.prefix {
188            Some(ref local_var_prefix) => format!("{} {}", local_var_prefix, local_var_key),
189            None => local_var_key,
190        };
191        local_var_req_builder = local_var_req_builder.header("Authorization", local_var_value);
192    };
193    local_var_req_builder = local_var_req_builder.json(&regenerate_message_req_payload);
194
195    let local_var_req = local_var_req_builder.build()?;
196    let local_var_resp = local_var_client.execute(local_var_req).await?;
197
198    let local_var_status = local_var_resp.status();
199    let local_var_content = local_var_resp.text().await?;
200
201    if !local_var_status.is_client_error() && !local_var_status.is_server_error() {
202        serde_json::from_str(&local_var_content).map_err(Error::from)
203    } else {
204        let local_var_entity: Option<RegenerateMessageError> = serde_json::from_str(&local_var_content).ok();
205        let local_var_error = ResponseContent { status: local_var_status, content: local_var_content, entity: local_var_entity };
206        Err(Error::ResponseError(local_var_error))
207    }
208}
209
210/// Regenerate the assistant response to the last user message of a topic. This will delete the last message and replace it with a new message. The response will include Chunks first on the stream if the topic is using RAG. The structure will look like `[chunks]||mesage`. See docs.trieve.ai for more information. Auth'ed user or api key must have an admin or owner role for the specified dataset's organization.
211pub async fn regenerate_message_patch(configuration: &configuration::Configuration, tr_dataset: &str, regenerate_message_req_payload: models::RegenerateMessageReqPayload) -> Result<String, Error<RegenerateMessagePatchError>> {
212    let local_var_configuration = configuration;
213
214    let local_var_client = &local_var_configuration.client;
215
216    let local_var_uri_str = format!("{}/api/message", local_var_configuration.base_path);
217    let mut local_var_req_builder = local_var_client.request(reqwest::Method::PATCH, local_var_uri_str.as_str());
218
219    if let Some(ref local_var_user_agent) = local_var_configuration.user_agent {
220        local_var_req_builder = local_var_req_builder.header(reqwest::header::USER_AGENT, local_var_user_agent.clone());
221    }
222    local_var_req_builder = local_var_req_builder.header("TR-Dataset", tr_dataset.to_string());
223    if let Some(ref local_var_apikey) = local_var_configuration.api_key {
224        let local_var_key = local_var_apikey.key.clone();
225        let local_var_value = match local_var_apikey.prefix {
226            Some(ref local_var_prefix) => format!("{} {}", local_var_prefix, local_var_key),
227            None => local_var_key,
228        };
229        local_var_req_builder = local_var_req_builder.header("Authorization", local_var_value);
230    };
231    local_var_req_builder = local_var_req_builder.json(&regenerate_message_req_payload);
232
233    let local_var_req = local_var_req_builder.build()?;
234    let local_var_resp = local_var_client.execute(local_var_req).await?;
235
236    let local_var_status = local_var_resp.status();
237    let local_var_content = local_var_resp.text().await?;
238
239    if !local_var_status.is_client_error() && !local_var_status.is_server_error() {
240        serde_json::from_str(&local_var_content).map_err(Error::from)
241    } else {
242        let local_var_entity: Option<RegenerateMessagePatchError> = serde_json::from_str(&local_var_content).ok();
243        let local_var_error = ResponseContent { status: local_var_status, content: local_var_content, entity: local_var_entity };
244        Err(Error::ResponseError(local_var_error))
245    }
246}
247