async_openai/assistants/
messages.rs1use crate::{
2 config::Config,
3 error::OpenAIError,
4 types::assistants::{
5 CreateMessageRequest, DeleteMessageResponse, ListMessagesResponse, MessageObject,
6 ModifyMessageRequest,
7 },
8 Client, RequestOptions,
9};
10
11#[deprecated(
13 note = "Assistants API is deprecated and will be removed in August 2026. Use the Responses API."
14)]
15pub struct Messages<'c, C: Config> {
16 pub thread_id: String,
18 client: &'c Client<C>,
19 pub(crate) request_options: RequestOptions,
20}
21
22impl<'c, C: Config> Messages<'c, C> {
23 pub fn new(client: &'c Client<C>, thread_id: &str) -> Self {
24 Self {
25 client,
26 thread_id: thread_id.into(),
27 request_options: RequestOptions::new(),
28 }
29 }
30
31 #[crate::byot(T0 = serde::Serialize, R = serde::de::DeserializeOwned)]
33 pub async fn create(
34 &self,
35 request: CreateMessageRequest,
36 ) -> Result<MessageObject, OpenAIError> {
37 self.client
38 .post(
39 &format!("/threads/{}/messages", self.thread_id),
40 request,
41 &self.request_options,
42 )
43 .await
44 }
45
46 #[crate::byot(T0 = std::fmt::Display, R = serde::de::DeserializeOwned)]
48 pub async fn retrieve(&self, message_id: &str) -> Result<MessageObject, OpenAIError> {
49 self.client
50 .get(
51 &format!("/threads/{}/messages/{message_id}", self.thread_id),
52 &self.request_options,
53 )
54 .await
55 }
56
57 #[crate::byot(T0 = std::fmt::Display, T1 = serde::Serialize, R = serde::de::DeserializeOwned)]
59 pub async fn update(
60 &self,
61 message_id: &str,
62 request: ModifyMessageRequest,
63 ) -> Result<MessageObject, OpenAIError> {
64 self.client
65 .post(
66 &format!("/threads/{}/messages/{message_id}", self.thread_id),
67 request,
68 &self.request_options,
69 )
70 .await
71 }
72
73 #[crate::byot(R = serde::de::DeserializeOwned)]
75 pub async fn list(&self) -> Result<ListMessagesResponse, OpenAIError> {
76 self.client
77 .get(
78 &format!("/threads/{}/messages", self.thread_id),
79 &self.request_options,
80 )
81 .await
82 }
83
84 #[crate::byot(T0 = std::fmt::Display, R = serde::de::DeserializeOwned)]
85 pub async fn delete(&self, message_id: &str) -> Result<DeleteMessageResponse, OpenAIError> {
86 self.client
87 .delete(
88 &format!("/threads/{}/messages/{message_id}", self.thread_id),
89 &self.request_options,
90 )
91 .await
92 }
93}