pub mod coordinator;
pub mod planner;
pub mod researcher;
pub mod summarizer;
pub mod verifier;
pub use coordinator::Coordinator;
pub use planner::PlannerAgent;
pub use researcher::Researcher;
pub use summarizer::Summarizer;
pub use verifier::Verifier;
pub use car_search::indexer;
pub use car_search::reference_miner;
pub use car_search::{
CodeReference, IndexReport, Indexer, MiningError, MiningFilters, MiningQuery, MiningScope,
ReferenceMiner,
};
use car_inference::{GenerateRequest, InferenceEngine, InferenceError, InferenceResult};
use std::future::Future;
use std::pin::Pin;
use std::sync::Arc;
pub type AgentGenerationFuture =
Pin<Box<dyn Future<Output = Result<InferenceResult, InferenceError>> + Send>>;
pub type AgentGenerator = dyn Fn(GenerateRequest) -> AgentGenerationFuture + Send + Sync;
#[derive(Clone)]
pub struct AgentContext {
pub inference: Arc<InferenceEngine>,
}
pub(crate) async fn generate_with(
context: &AgentContext,
generator: Option<&Arc<AgentGenerator>>,
request: GenerateRequest,
) -> Result<InferenceResult, InferenceError> {
match generator {
Some(generator) => generator(request).await,
None => context.inference.generate_tracked(request).await,
}
}
#[derive(Debug, Clone, serde::Serialize, serde::Deserialize)]
pub struct AgentResult {
pub agent: String,
pub output: String,
pub confidence: f64,
pub model_used: String,
pub latency_ms: u64,
}