use klieo_core::agent::AgentContext;
use klieo_ops::governor::{GovernedLlmClient, Governor};
use klieo_ops::types::{ProviderId, TenantId};
use std::sync::Arc;
#[derive(Clone)]
pub(crate) struct GovernorBundle {
pub(crate) governor: Arc<dyn Governor>,
pub(crate) provider: ProviderId,
}
pub(crate) fn wrap_ctx_with_governor(ctx: AgentContext, bundle: &GovernorBundle) -> AgentContext {
let llm = ctx.llm.clone();
let episodic = ctx.episodic.clone();
let run_id = ctx.run_id;
let tenant = ctx.tenant_label().map(|label| TenantId(label.to_string()));
ctx.with_llm(Arc::new(GovernedLlmClient::new(
llm,
bundle.governor.clone(),
episodic,
run_id,
bundle.provider.clone(),
tenant,
)))
}