use serde::{Deserialize, Serialize};
use std::collections::BTreeMap;
use super::beta::BetaPosterior;
use super::config::DelegationConfig;
use super::env::env_enabled_override;
use crate::session::relevance::Bucket;
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct DelegationState {
#[serde(default)]
pub beliefs: BTreeMap<String, BetaPosterior>,
#[serde(default)]
pub config: DelegationConfig,
}
impl DelegationState {
pub fn with_config(config: DelegationConfig) -> Self {
Self {
beliefs: BTreeMap::new(),
config,
}
}
pub fn enabled(&self) -> bool {
env_enabled_override().unwrap_or(self.config.enabled)
}
pub fn key(agent: &str, skill: &str, bucket: Bucket) -> String {
format!(
"{agent}|{skill}|{}|{}|{}",
bucket.difficulty.as_str(),
bucket.dependency.as_str(),
bucket.tool_use.as_str(),
)
}
}