context_harness/agent_model/
fake.rs1use super::*;
3use std::collections::VecDeque;
4use std::sync::Mutex;
5
6pub struct FakeModel {
7 outcomes: Mutex<VecDeque<ModelResult<ModelResponse>>>,
8}
9impl FakeModel {
10 pub fn new(outcomes: impl IntoIterator<Item = ModelResult<ModelResponse>>) -> Self {
11 Self {
12 outcomes: Mutex::new(outcomes.into_iter().collect()),
13 }
14 }
15}
16#[async_trait]
17impl ModelProvider for FakeModel {
18 async fn generate(&self, request: &ModelRequest) -> ModelResult<ModelResponse> {
19 request.validate()?;
20 let response = self
21 .outcomes
22 .lock()
23 .map_err(|_| ModelError::new(ModelErrorKind::ProviderFailure))?
24 .pop_front()
25 .ok_or_else(|| ModelError::new(ModelErrorKind::ScriptExhausted))??;
26 response.validate(request)?;
27 Ok(response)
28 }
29}