use crate::providers::ProviderName;
use serde::{Deserialize, Serialize};
use zeph_common::memory::EdgeType;
fn default_write_gate_min_edge_relevance() -> f32 {
0.3
}
fn default_conflict_recency_slow_threshold() -> f32 {
0.2
}
#[derive(Debug, Clone, Deserialize, Serialize, schemars::JsonSchema)]
#[serde(default)]
pub struct WriteGateConfig {
pub enabled: bool,
#[serde(
default = "default_write_gate_min_edge_relevance",
deserialize_with = "crate::de_helpers::de_unit_closed"
)]
pub min_edge_relevance: f32,
}
impl Default for WriteGateConfig {
fn default() -> Self {
Self {
enabled: false,
min_edge_relevance: default_write_gate_min_edge_relevance(),
}
}
}
#[derive(Debug, Clone, Deserialize, Serialize, schemars::JsonSchema)]
#[serde(default)]
pub struct ConflictRecencyConfig {
#[serde(
default = "default_conflict_recency_slow_threshold",
deserialize_with = "crate::de_helpers::de_unit_closed"
)]
pub recency_slow_threshold: f32,
}
impl Default for ConflictRecencyConfig {
fn default() -> Self {
Self {
recency_slow_threshold: default_conflict_recency_slow_threshold(),
}
}
}
#[derive(Debug, Clone, Deserialize, Serialize)]
#[serde(default)]
pub struct BeliefRevisionConfig {
pub enabled: bool,
#[serde(deserialize_with = "crate::de_helpers::de_unit_closed")]
pub similarity_threshold: f32,
}
fn default_belief_revision_similarity_threshold() -> f32 {
0.85
}
impl Default for BeliefRevisionConfig {
fn default() -> Self {
Self {
enabled: false,
similarity_threshold: default_belief_revision_similarity_threshold(),
}
}
}
#[derive(Debug, Clone, Deserialize, Serialize)]
#[serde(default)]
pub struct RpeConfig {
pub enabled: bool,
#[serde(deserialize_with = "crate::de_helpers::de_unit_closed")]
pub threshold: f32,
pub max_skip_turns: u32,
}
fn default_rpe_threshold() -> f32 {
0.3
}
fn default_rpe_max_skip_turns() -> u32 {
5
}
impl Default for RpeConfig {
fn default() -> Self {
Self {
enabled: false,
threshold: default_rpe_threshold(),
max_skip_turns: default_rpe_max_skip_turns(),
}
}
}
#[derive(Debug, Clone, Deserialize, Serialize)]
#[serde(default)]
pub struct HebbianConfig {
pub enabled: bool,
pub hebbian_lr: f32,
pub consolidation_interval_secs: u64,
pub consolidation_threshold: f64,
#[serde(default)]
pub consolidate_provider: Option<ProviderName>,
pub max_candidates_per_sweep: usize,
pub consolidation_cooldown_secs: u64,
pub consolidation_prompt_timeout_secs: u64,
pub consolidation_max_neighbors: usize,
pub spreading_activation: bool,
pub spread_depth: u32,
pub spread_edge_types: Vec<EdgeType>,
pub step_budget_ms: u64,
pub embed_timeout_secs: u64,
}
impl Default for HebbianConfig {
fn default() -> Self {
Self {
enabled: false,
hebbian_lr: 0.1,
consolidation_interval_secs: 3600,
consolidation_threshold: 5.0,
consolidate_provider: None,
max_candidates_per_sweep: 10,
consolidation_cooldown_secs: 86_400,
consolidation_prompt_timeout_secs: 30,
consolidation_max_neighbors: 20,
spreading_activation: false,
spread_depth: 2,
spread_edge_types: Vec::new(),
step_budget_ms: 80,
embed_timeout_secs: 5,
}
}
}