mod chat;
mod model;
mod serialization;
mod string_template;
pub use string_template::{StringTemplate, StringTemplateError};
pub use chat::{ChatMessage, ChatMessageCollection, ChatRole};
pub use model::Data;
pub type PromptTemplate = Data<StringTemplate>;
pub type Prompt = Data<String>;
pub type Conversation = ChatMessageCollection<String>;
pub type ConversationTemplate = ChatMessageCollection<StringTemplate>;
#[macro_export]
macro_rules! prompt {
(user: $user_arg:expr $(,)?) => {
$crate::prompt::Data::Chat(
$crate::prompt::ChatMessageCollection::<$crate::prompt::StringTemplate>::new()
.with_user_template($user_arg),
)
};
(assistant: $assistant_arg:expr $(,)?) => {
$crate::prompt::Data::Chat(
$crate::prompt::ChatMessageCollection::<$crate::prompt::StringTemplate>::new()
.with_assistant_template($assistant_arg),
)
};
(system: $system_arg:expr $(,)?) => {
$crate::prompt::Data::Chat(
$crate::prompt::ChatMessageCollection::<$crate::prompt::StringTemplate>::new()
.with_system_template($system_arg),
)
};
($single_arg:expr) => {
$crate::prompt::Data::Text($crate::prompt::StringTemplate::tera($single_arg))
};
($system_arg:expr, $user_arg:expr $(,)?) => {
$crate::prompt::Data::Chat(
$crate::prompt::ChatMessageCollection::<$crate::prompt::StringTemplate>::new()
.with_system_template($system_arg)
.with_user_template($user_arg),
)
};
($($extra_tokens:expr),+ $(,)?) => {
compile_error!("The 'prompt!' macro takes at most 2 arguments.")
};
}