Skip to main content

entrenar/citl/trainer/citl/
types.rs

1//! Type definitions for the CITL trainer
2
3use super::super::stats::Session;
4use super::super::{CITLConfig, DecisionStats};
5use crate::citl::DecisionPatternStore;
6use std::collections::HashMap;
7
8/// Compiler-in-the-Loop (CITL) trainer
9///
10/// Correlates compiler decision traces with compilation outcomes
11/// to identify error-contributing decisions and suggest fixes.
12///
13/// # Example
14///
15/// ```ignore
16/// use entrenar::citl::{DecisionCITL, DecisionTrace, CompilationOutcome, SourceSpan};
17///
18/// let mut trainer = DecisionCITL::new()?;
19///
20/// // Ingest a failed session
21/// let traces = vec![
22///     DecisionTrace::new("d1", "type_inference", "Inferred type i32")
23///         .with_span(SourceSpan::line("main.rs", 5)),
24/// ];
25/// let outcome = CompilationOutcome::failure(
26///     vec!["E0308".to_string()],
27///     vec![SourceSpan::line("main.rs", 5)],
28///     vec!["mismatched types".to_string()],
29/// );
30///
31/// trainer.ingest_session(traces, outcome, None)?;
32///
33/// // Correlate errors
34/// let correlations = trainer.correlate_error("E0308", &SourceSpan::line("main.rs", 5))?;
35/// ```
36pub struct DecisionCITL {
37    /// Pattern store for fix suggestions
38    pub(crate) pattern_store: DecisionPatternStore,
39    /// Sessions indexed by outcome type
40    pub(crate) success_sessions: Vec<Session>,
41    pub(crate) failed_sessions: Vec<Session>,
42    /// Decision frequency in successful vs failed sessions (for Tarantula)
43    pub(crate) decision_stats: HashMap<String, DecisionStats>,
44    /// Configuration
45    pub(crate) config: CITLConfig,
46    /// Session counter
47    pub(crate) session_counter: u64,
48}
49
50impl std::fmt::Debug for DecisionCITL {
51    fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
52        f.debug_struct("DecisionCITL")
53            .field("success_sessions", &self.success_sessions.len())
54            .field("failed_sessions", &self.failed_sessions.len())
55            .field("decision_types", &self.decision_stats.len())
56            .field("patterns", &self.pattern_store.len())
57            .field("config", &self.config)
58            .finish_non_exhaustive()
59    }
60}