async_openai_alt/
messages.rs1use serde::Serialize;
2
3use crate::{
4 config::Config,
5 error::OpenAIError,
6 types::{
7 CreateMessageRequest, DeleteMessageResponse, ListMessagesResponse, MessageObject,
8 ModifyMessageRequest,
9 },
10 Client, MessageFiles,
11};
12
13pub struct Messages<'c, C: Config> {
15 pub thread_id: String,
17 client: &'c Client<C>,
18}
19
20impl<'c, C: Config> Messages<'c, C> {
21 pub fn new(client: &'c Client<C>, thread_id: &str) -> Self {
22 Self {
23 client,
24 thread_id: thread_id.into(),
25 }
26 }
27
28 pub fn files(&self, message_id: &str) -> MessageFiles<C> {
30 MessageFiles::new(self.client, &self.thread_id, message_id)
31 }
32
33 pub async fn create(
35 &self,
36 request: CreateMessageRequest,
37 ) -> Result<MessageObject, OpenAIError> {
38 self.client
39 .post(&format!("/threads/{}/messages", self.thread_id), request)
40 .await
41 }
42
43 pub async fn retrieve(&self, message_id: &str) -> Result<MessageObject, OpenAIError> {
45 self.client
46 .get(&format!(
47 "/threads/{}/messages/{message_id}",
48 self.thread_id
49 ))
50 .await
51 }
52
53 pub async fn update(
55 &self,
56 message_id: &str,
57 request: ModifyMessageRequest,
58 ) -> Result<MessageObject, OpenAIError> {
59 self.client
60 .post(
61 &format!("/threads/{}/messages/{message_id}", self.thread_id),
62 request,
63 )
64 .await
65 }
66
67 pub async fn list<Q>(&self, query: &Q) -> Result<ListMessagesResponse, OpenAIError>
69 where
70 Q: Serialize + ?Sized,
71 {
72 self.client
73 .get_with_query(&format!("/threads/{}/messages", self.thread_id), query)
74 .await
75 }
76
77 pub async fn delete(&self, message_id: &str) -> Result<DeleteMessageResponse, OpenAIError> {
78 self.client
79 .delete(&format!(
80 "/threads/{}/messages/{message_id}",
81 self.thread_id
82 ))
83 .await
84 }
85}