next_web_ai/chat/prompt/
prompt.rs1use 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}