1use crate::{
2 config::Config,
3 error::OpenAIError,
4 types::assistants::{
5 CreateMessageRequest, DeleteMessageResponse, ListMessagesResponse, MessageObject,
6 ModifyMessageRequest,
7 },
8 Client, RequestOptions,
9};
10
11pub struct Messages<'c, C: Config> {
13 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 #[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 #[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 #[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 #[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}