Skip to main content

somatize_runtime/executors/
simple.rs

1//! SimpleExecutor — one-shot execution: compile, fit, forward.
2//!
3//! The default executor for running a complete dataset through a graph.
4//! No loops, no sampling, no chunking — just compile → fit → forward.
5
6use crate::EventBus;
7use crate::filter_library::FilterLibrary;
8use crate::runner::Runner;
9
10use somatize_compiler::{CompileMode, compile};
11use somatize_core::cache::CacheStore;
12use somatize_core::error::Result;
13use somatize_core::graph::Graph;
14use somatize_core::value::Value;
15use std::collections::HashMap;
16use std::sync::Arc;
17
18/// One-shot execution: compile the graph, fit, then forward.
19pub struct SimpleExecutor;
20
21impl SimpleExecutor {
22    /// Fit + forward in one call.
23    #[allow(clippy::too_many_arguments)]
24    pub fn run(
25        &self,
26        runner: &dyn Runner,
27        graph: &Graph,
28        filters: &FilterLibrary,
29        cache: &dyn CacheStore,
30        event_bus: &Arc<EventBus>,
31        x: &Value,
32        y: Option<&Value>,
33    ) -> Result<(Value, HashMap<String, Value>)> {
34        graph.validate()?;
35
36        let plan = compile(graph, filters, CompileMode::NoCache, Some(cache))?.plan;
37        runner.fit(&plan, filters, cache, event_bus, x, y)
38    }
39
40    /// Forward only (inference on fitted model).
41    pub fn forward(
42        &self,
43        runner: &dyn Runner,
44        graph: &Graph,
45        filters: &FilterLibrary,
46        cache: &dyn CacheStore,
47        event_bus: &Arc<EventBus>,
48        x: &Value,
49    ) -> Result<Value> {
50        let plan = compile(graph, filters, CompileMode::Inference, Some(cache))?.plan;
51        runner.forward(&plan, filters, cache, event_bus, x)
52    }
53}