dynamo_async_openai/
messages.rs1use serde::Serialize;
12
13use crate::{
14 Client,
15 config::Config,
16 error::OpenAIError,
17 types::{
18 CreateMessageRequest, DeleteMessageResponse, ListMessagesResponse, MessageObject,
19 ModifyMessageRequest,
20 },
21};
22
23pub struct Messages<'c, C: Config> {
25 pub thread_id: String,
27 client: &'c Client<C>,
28}
29
30impl<'c, C: Config> Messages<'c, C> {
31 pub fn new(client: &'c Client<C>, thread_id: &str) -> Self {
32 Self {
33 client,
34 thread_id: thread_id.into(),
35 }
36 }
37
38 #[crate::byot(T0 = serde::Serialize, R = serde::de::DeserializeOwned)]
40 pub async fn create(
41 &self,
42 request: CreateMessageRequest,
43 ) -> Result<MessageObject, OpenAIError> {
44 self.client
45 .post(&format!("/threads/{}/messages", self.thread_id), request)
46 .await
47 }
48
49 #[crate::byot(T0 = std::fmt::Display, R = serde::de::DeserializeOwned)]
51 pub async fn retrieve(&self, message_id: &str) -> Result<MessageObject, OpenAIError> {
52 self.client
53 .get(&format!(
54 "/threads/{}/messages/{message_id}",
55 self.thread_id
56 ))
57 .await
58 }
59
60 #[crate::byot(T0 = std::fmt::Display, T1 = serde::Serialize, R = serde::de::DeserializeOwned)]
62 pub async fn update(
63 &self,
64 message_id: &str,
65 request: ModifyMessageRequest,
66 ) -> Result<MessageObject, OpenAIError> {
67 self.client
68 .post(
69 &format!("/threads/{}/messages/{message_id}", self.thread_id),
70 request,
71 )
72 .await
73 }
74
75 #[crate::byot(T0 = serde::Serialize, R = serde::de::DeserializeOwned)]
77 pub async fn list<Q>(&self, query: &Q) -> Result<ListMessagesResponse, OpenAIError>
78 where
79 Q: Serialize + ?Sized,
80 {
81 self.client
82 .get_with_query(&format!("/threads/{}/messages", self.thread_id), &query)
83 .await
84 }
85
86 #[crate::byot(T0 = std::fmt::Display, R = serde::de::DeserializeOwned)]
87 pub async fn delete(&self, message_id: &str) -> Result<DeleteMessageResponse, OpenAIError> {
88 self.client
89 .delete(&format!(
90 "/threads/{}/messages/{message_id}",
91 self.thread_id
92 ))
93 .await
94 }
95}