use async_trait::async_trait;
use vil_llm::ChatMessage;
#[derive(Debug)]
pub enum DraftError {
GenerationFailed(String),
}
impl std::fmt::Display for DraftError {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
match self {
Self::GenerationFailed(e) => write!(f, "draft generation failed: {}", e),
}
}
}
impl std::error::Error for DraftError {}
#[async_trait]
pub trait DraftProvider: Send + Sync {
async fn draft(
&self,
messages: &[ChatMessage],
n_tokens: usize,
) -> Result<Vec<String>, DraftError>;
fn model_name(&self) -> &str;
}