| |
|
|
| use super::types::ArgumentStyle; |
|
|
| |
| #[derive(Debug, Clone)] |
| pub struct UserPreference { |
| |
| pub topic: String, |
| |
| pub preference: PreferenceType, |
| |
| pub confidence: f64, |
| |
| pub inferred_from: InferenceSource, |
| |
| pub learned_at: i64, |
| } |
|
|
| |
| #[derive(Debug, Clone)] |
| pub enum PreferenceType { |
| |
| PrefersQuestions, |
| |
| PrefersDetail, |
| |
| PrefersBrevity, |
| |
| AgreesWithStyle(ArgumentStyle), |
| |
| HasStrongPrior, |
| |
| Unfamiliar, |
| } |
|
|
| impl UserPreference { |
| pub fn new(topic: impl Into<String>, preference: PreferenceType, confidence: f64) -> Self { |
| Self { |
| topic: topic.into(), |
| preference, |
| confidence, |
| inferred_from: InferenceSource::Observation, |
| learned_at: crate::now_timestamp(), |
| } |
| } |
|
|
| pub fn from_teaching(topic: impl Into<String>, preference: PreferenceType, confidence: f64) -> Self { |
| Self { |
| topic: topic.into(), |
| preference, |
| confidence, |
| inferred_from: InferenceSource::Teaching, |
| learned_at: crate::now_timestamp(), |
| } |
| } |
|
|
| |
| pub fn prefers_questions(&self) -> bool { |
| matches!(self.preference, PreferenceType::PrefersQuestions) |
| } |
| } |
|
|
| |
| #[derive(Debug, Clone, Copy, PartialEq, Eq)] |
| pub enum InferenceSource { |
| |
| Observation, |
| |
| Teaching, |
| } |