async_openai/
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).
12pub struct Messages<'c, C: Config> {
13    ///  The ID of the [thread](https://platform.openai.com/docs/api-reference/threads) to create a message for.
14    pub thread_id: String,
15    client: &'c Client<C>,
16    pub(crate) request_options: RequestOptions,
17}
18
19impl<'c, C: Config> Messages<'c, C> {
20    pub fn new(client: &'c Client<C>, thread_id: &str) -> Self {
21        Self {
22            client,
23            thread_id: thread_id.into(),
24            request_options: RequestOptions::new(),
25        }
26    }
27
28    /// Create a message.
29    #[crate::byot(T0 = serde::Serialize, R = serde::de::DeserializeOwned)]
30    pub async fn create(
31        &self,
32        request: CreateMessageRequest,
33    ) -> Result<MessageObject, OpenAIError> {
34        self.client
35            .post(
36                &format!("/threads/{}/messages", self.thread_id),
37                request,
38                &self.request_options,
39            )
40            .await
41    }
42
43    /// Retrieve a message.
44    #[crate::byot(T0 = std::fmt::Display, R = serde::de::DeserializeOwned)]
45    pub async fn retrieve(&self, message_id: &str) -> Result<MessageObject, OpenAIError> {
46        self.client
47            .get(
48                &format!("/threads/{}/messages/{message_id}", self.thread_id),
49                &self.request_options,
50            )
51            .await
52    }
53
54    /// Modifies a message.
55    #[crate::byot(T0 = std::fmt::Display, T1 = serde::Serialize, R = serde::de::DeserializeOwned)]
56    pub async fn update(
57        &self,
58        message_id: &str,
59        request: ModifyMessageRequest,
60    ) -> Result<MessageObject, OpenAIError> {
61        self.client
62            .post(
63                &format!("/threads/{}/messages/{message_id}", self.thread_id),
64                request,
65                &self.request_options,
66            )
67            .await
68    }
69
70    /// Returns a list of messages for a given thread.
71    #[crate::byot(R = serde::de::DeserializeOwned)]
72    pub async fn list(&self) -> Result<ListMessagesResponse, OpenAIError> {
73        self.client
74            .get(
75                &format!("/threads/{}/messages", self.thread_id),
76                &self.request_options,
77            )
78            .await
79    }
80
81    #[crate::byot(T0 = std::fmt::Display, R = serde::de::DeserializeOwned)]
82    pub async fn delete(&self, message_id: &str) -> Result<DeleteMessageResponse, OpenAIError> {
83        self.client
84            .delete(
85                &format!("/threads/{}/messages/{message_id}", self.thread_id),
86                &self.request_options,
87            )
88            .await
89    }
90}