rlx-flow 0.2.1

Block assembly-line API for RLX model builders — fusion-first, config-driven
Documentation
// RLX — versatile ML compiler + runtime.
// Copyright (C) 2026 Eugene Hauptmann, Nataliya Kosmyna.

//! Side-output collection (KV cache taps, auxiliary heads, …).

use std::sync::{Arc, Mutex};

use rlx_ir::HirNodeId;

/// Collects extra graph outputs emitted by side-effect stages (e.g. KV taps).
#[derive(Debug, Clone, Default)]
pub struct SideOutputs {
    inner: Arc<Mutex<Vec<HirNodeId>>>,
}

impl SideOutputs {
    pub fn new() -> Self {
        Self::default()
    }

    /// Shared handle for side-effect stages (KV taps, …).
    pub fn inner(&self) -> Arc<Mutex<Vec<HirNodeId>>> {
        Arc::clone(&self.inner)
    }

    pub fn drain(&self) -> Vec<HirNodeId> {
        self.inner.lock().expect("side outputs").clone()
    }

    pub fn is_empty(&self) -> bool {
        self.inner.lock().expect("side outputs").is_empty()
    }
}