Skip to main content

async_openai/assistants/
messages.rs

1use crate::{
2    config::Config,
3    error::OpenAIError,
4    types::assistants::{
5        CreateMessageRequest, DeleteMessageResponse, ListMessagesResponse, MessageObject,
6        ModifyMessageRequest,
7    },
8    Client, RequestOptions,
9};
10
11/// Represents a message within a [thread](https://platform.openai.com/docs/api-reference/threads).
12#[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    ///  The ID of the [thread](https://platform.openai.com/docs/api-reference/threads) to create a message for.
17    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    /// Create a message.
32    #[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    /// Retrieve a message.
47    #[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    /// Modifies a message.
58    #[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    /// Returns a list of messages for a given thread.
74    #[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}