use thiserror::Error;
use crate::lm::LanguageModel;
use super::strategy::AlignmentStrategy;
pub const DEFAULT_RETRIES: usize = 2;
#[derive(Debug, Error)]
pub enum AlignmentStrategyBuilderError {
#[error("{0} is not set")]
ConfigurationNotSet(String),
}
#[derive(Default)]
pub struct AlignmentStrategyBuilder<'a> {
lm: Option<&'a dyn LanguageModel>,
retries: Option<usize>,
}
impl<'a> AlignmentStrategyBuilder<'a> {
pub fn new() -> Self {
Self {
lm: None,
retries: Some(DEFAULT_RETRIES),
}
}
pub fn with_lm(mut self, lm: &'a dyn LanguageModel) -> Self {
self.lm = Some(lm);
self
}
pub fn with_retries(mut self, retries: usize) -> Self {
self.retries = Some(retries);
self
}
pub fn try_build(self) -> Result<AlignmentStrategy<'a>, AlignmentStrategyBuilderError> {
let Some(lm) = self.lm else {
return Err(AlignmentStrategyBuilderError::ConfigurationNotSet(
"Language model".to_string(),
));
};
let Some(retries) = self.retries else {
return Err(AlignmentStrategyBuilderError::ConfigurationNotSet(
"Retries".to_string(),
));
};
Ok(AlignmentStrategy { lm, retries })
}
}