next_web_ai/chat/prompt/
prompt.rs

1use bytes::Bytes;
2
3use crate::{
4    chat::{
5        messages::{message::Message, user_message::UserMessage},
6        prompt::chat_options::ChatOptions,
7    },
8    model::{model_options::ModelOptions, model_request::ModelRequest},
9};
10
11#[derive(Clone)]
12pub struct Prompt {
13    messages: Vec<Box<dyn Message>>,
14    chat_options: Box<dyn ChatOptions>,
15}
16
17impl Prompt {
18    pub fn new(messages: Vec<Box<dyn Message>>, chat_options: Box<dyn ChatOptions>) -> Self {
19        Self {
20            messages,
21            chat_options,
22        }
23    }
24
25    pub fn from_message(message: Box<dyn Message>, chat_options: Box<dyn ChatOptions>) -> Self {
26        Self::new(vec![message], chat_options)
27    }
28
29    pub fn from_contents(contents: impl Into<Bytes>, chat_options: Box<dyn ChatOptions>) -> Self {
30        let message = UserMessage::new(Default::default(), contents.into(), Default::default());
31        let messages: Vec<Box<dyn Message>> = vec![Box::new(message)];
32        Self {
33            messages,
34            chat_options,
35        }
36    }
37
38    pub fn chat_options(&self) -> &Box<dyn ChatOptions> {
39        &self.chat_options
40    }
41}
42
43impl ModelRequest<Vec<Box<dyn Message>>> for Prompt {
44    fn instructions(&self) -> Vec<Box<dyn Message>> {
45        todo!()
46    }
47
48    fn options(&self) -> Option<&dyn ModelOptions> {
49        Some(self.chat_options.as_ref())
50    }
51}