use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct InterpretabilityConfig {
pub enable_shap: bool,
pub enable_lime: bool,
pub enable_attention_analysis: bool,
pub enable_feature_attribution: bool,
pub enable_counterfactual_generation: bool,
pub shap_samples: usize,
pub lime_perturbations: usize,
pub max_attention_seq_length: usize,
pub num_counterfactuals: usize,
pub attribution_methods: Vec<AttributionMethod>,
pub shap_background_size: usize,
}
impl Default for InterpretabilityConfig {
fn default() -> Self {
Self {
enable_shap: true,
enable_lime: true,
enable_attention_analysis: true,
enable_feature_attribution: true,
enable_counterfactual_generation: true,
shap_samples: 1000,
lime_perturbations: 5000,
max_attention_seq_length: 512,
num_counterfactuals: 10,
attribution_methods: vec![
AttributionMethod::IntegratedGradients,
AttributionMethod::GradientShap,
AttributionMethod::DeepLift,
],
shap_background_size: 100,
}
}
}
#[derive(Debug, Clone, Serialize, Deserialize, Eq, PartialEq, Hash)]
pub enum AttributionMethod {
IntegratedGradients,
GradientInput,
SmoothGrad,
GradientShap,
DeepLift,
LRP,
GuidedBackprop,
GradCAM,
GradCAMPlusPlus,
ScoreCAM,
ExpectedGradients,
AttentionRollout,
PathIntegratedGradients,
}