use std::sync::Arc;
use axum::extract::FromRef;
use systemprompt_runtime::AppContext;
use systemprompt_runtime::optimization::SkillOptimizationOrchestrator;
#[derive(Debug, Clone)]
pub struct OptimizationState {
ctx: AppContext,
orchestrator: Arc<SkillOptimizationOrchestrator>,
}
impl OptimizationState {
pub fn new(ctx: AppContext) -> Self {
let orchestrator = Arc::new(SkillOptimizationOrchestrator::new(
ctx.managed_repository().as_ref().clone(),
ctx.evaluation_repositories().as_ref().clone(),
));
Self { ctx, orchestrator }
}
pub fn orchestrator(&self) -> &SkillOptimizationOrchestrator {
&self.orchestrator
}
pub const fn ctx(&self) -> &AppContext {
&self.ctx
}
}
impl FromRef<OptimizationState> for AppContext {
fn from_ref(state: &OptimizationState) -> Self {
state.ctx.clone()
}
}