use std::sync::Arc;
use crate::client::engine::Engine;
use crate::client::indexer::IndexerClient;
use crate::client::retriever::RetrieverClient;
use crate::config::Config;
use crate::events::EventEmitter;
use crate::index::PipelineExecutor;
use crate::llm::LlmClient;
use crate::llm::config::LlmConfig;
use crate::metrics::MetricsHub;
use crate::storage::Workspace;
pub async fn build_test_engine(workspace_dir: &std::path::Path) -> Engine {
let config = Config::default();
let executor_factory: Arc<dyn Fn() -> PipelineExecutor + Send + Sync> =
Arc::new(|| PipelineExecutor::new());
let indexer = IndexerClient::with_factory(executor_factory);
let workspace = Workspace::new(workspace_dir).await.unwrap();
let retriever = RetrieverClient::new(LlmClient::new(LlmConfig::default()));
Engine::with_components(
config,
workspace,
retriever,
indexer,
EventEmitter::new(),
Arc::new(MetricsHub::with_defaults()),
)
.await
.unwrap()
}