use crate::error::Result;
pub trait LlmCallback: Send + Sync {
fn complete(&self, prompt: &str) -> Result<String>;
}
#[cfg(test)]
mod tests {
use super::*;
struct MockLlm {
response: String,
}
impl LlmCallback for MockLlm {
fn complete(&self, _prompt: &str) -> Result<String> {
Ok(self.response.clone())
}
}
#[test]
fn mock_llm_works() {
let llm = MockLlm {
response: "This is a test response".into(),
};
let result = llm.complete("test prompt").expect("complete");
assert_eq!(result, "This is a test response");
}
#[test]
fn trait_object_works() {
let llm: Box<dyn LlmCallback> = Box::new(MockLlm {
response: "trait object response".into(),
});
let result = llm.complete("test").expect("complete");
assert_eq!(result, "trait object response");
}
}