use super::{ContextMixins, PromptContextMixin};
use chrono::{DateTime, Utc};
use minijinja::value::{Object, Value};
use std::sync::Arc;
impl Object for ContextMixins {
fn get_value(self: &Arc<Self>, field: &Value) -> Option<Value> {
match field.as_str()? {
"datetime" => self.datetime(),
_ => None,
}
}
}
impl ContextMixins {
pub fn new(allowed_mixins: &[PromptContextMixin]) -> Self {
ContextMixins {
context_mixins: allowed_mixins.iter().cloned().collect(),
}
}
fn datetime(&self) -> Option<Value> {
if self
.context_mixins
.contains(&PromptContextMixin::Llama3DateTime)
{
let now = chrono::Utc::now();
Some(Value::from(llama3_datetime(now)))
} else {
None
}
}
}
fn llama3_datetime(datetime: DateTime<Utc>) -> String {
datetime.format("%d, %B, %Y").to_string()
}