use std::sync::Arc;
use modelplease::{LanguageModelProvider, ModelId};
use crate::adapter::Adapter;
#[derive(Clone)]
pub struct Context {
pub provider: Arc<dyn LanguageModelProvider>,
pub model: ModelId,
pub adapter: Arc<dyn Adapter>,
}
impl Context {
#[must_use]
pub fn provider(&self) -> &dyn LanguageModelProvider {
self.provider.as_ref()
}
#[must_use]
pub const fn model(&self) -> &ModelId {
&self.model
}
#[must_use]
pub fn adapter(&self) -> &dyn Adapter {
self.adapter.as_ref()
}
}
#[cfg(test)]
mod tests {
use modelplease::DummyLM;
use super::*;
use crate::adapter::ChatAdapter;
fn make_ctx(answers: Vec<String>) -> Context {
Context {
provider: Arc::new(DummyLM::sequential(answers)),
model: ModelId::new("test"),
adapter: Arc::new(ChatAdapter::default()),
}
}
#[test]
fn new_context() {
let ctx = make_ctx(vec!["test".into()]);
assert!(ctx.usage_compiles());
}
impl Context {
#[cfg(test)]
fn usage_compiles(&self) -> bool {
let _provider: &dyn LanguageModelProvider = self.provider();
let _model: &ModelId = self.model();
let _adapter: &dyn Adapter = self.adapter();
true
}
}
}