Skip to main content

batuta/oracle/knowledge_graph/
integrations.rs

1//! Integration patterns between stack components.
2
3use super::super::types::IntegrationPattern;
4use super::types::KnowledgeGraph;
5
6impl KnowledgeGraph {
7    /// Register integration patterns
8    pub(crate) fn register_integration_patterns(&mut self) {
9        // ML Pipeline patterns
10        self.integrations.push(IntegrationPattern {
11            from: "aprender".into(),
12            to: "realizar".into(),
13            pattern_name: "model_export".into(),
14            description: "Export trained model for serving".into(),
15            code_template: Some(
16                r#"// Train with aprender
17let model = RandomForest::new().fit(&X, &y)?;
18// Export for realizar
19model.save_apr("model.apr")?;"#
20                    .into(),
21            ),
22        });
23
24        self.integrations.push(IntegrationPattern {
25            from: "aprender".into(),
26            to: "trueno".into(),
27            pattern_name: "tensor_backend".into(),
28            description: "Use trueno as compute backend for aprender".into(),
29            code_template: None,
30        });
31
32        self.integrations.push(IntegrationPattern {
33            from: "entrenar".into(),
34            to: "realizar".into(),
35            pattern_name: "training_to_inference".into(),
36            description: "Export fine-tuned model for inference".into(),
37            code_template: None,
38        });
39
40        // Transpilation patterns
41        self.integrations.push(IntegrationPattern {
42            from: "depyler".into(),
43            to: "aprender".into(),
44            pattern_name: "sklearn_convert".into(),
45            description: "Convert sklearn code to aprender".into(),
46            code_template: Some(
47                r"// depyler converts:
48// from sklearn.ensemble import RandomForestClassifier
49// to:
50use aprender::tree::RandomForestClassifier;"
51                    .into(),
52            ),
53        });
54
55        self.integrations.push(IntegrationPattern {
56            from: "depyler".into(),
57            to: "trueno".into(),
58            pattern_name: "numpy_convert".into(),
59            description: "Convert numpy operations to trueno".into(),
60            code_template: None,
61        });
62
63        self.integrations.push(IntegrationPattern {
64            from: "batuta".into(),
65            to: "depyler".into(),
66            pattern_name: "orchestrated_transpilation".into(),
67            description: "Batuta orchestrates depyler for Python projects".into(),
68            code_template: None,
69        });
70
71        // Distribution patterns
72        self.integrations.push(IntegrationPattern {
73            from: "repartir".into(),
74            to: "entrenar".into(),
75            pattern_name: "distributed_training".into(),
76            description: "Distribute training across nodes".into(),
77            code_template: None,
78        });
79
80        self.integrations.push(IntegrationPattern {
81            from: "repartir".into(),
82            to: "trueno".into(),
83            pattern_name: "distributed_compute".into(),
84            description: "Distribute tensor operations".into(),
85            code_template: None,
86        });
87
88        // Data patterns
89        self.integrations.push(IntegrationPattern {
90            from: "alimentar".into(),
91            to: "aprender".into(),
92            pattern_name: "data_loading".into(),
93            description: "Load data for ML training".into(),
94            code_template: Some(
95                r#"use alimentar::CsvReader;
96use aprender::Dataset;
97
98let data = CsvReader::from_path("data.csv")?.load()?;
99let dataset = Dataset::from(data);"#
100                    .into(),
101            ),
102        });
103
104        // Ruchy patterns
105        self.integrations.push(IntegrationPattern {
106            from: "ruchy".into(),
107            to: "batuta".into(),
108            pattern_name: "scripted_orchestration".into(),
109            description: "Use ruchy scripts to drive batuta pipelines".into(),
110            code_template: Some(
111                r#"// ruchy script for pipeline automation
112let result = batuta::analyze("./project")?;
113let transpiled = batuta::transpile(&result)?;
114batuta::validate(&transpiled)?;"#
115                    .into(),
116            ),
117        });
118
119        self.integrations.push(IntegrationPattern {
120            from: "ruchy".into(),
121            to: "renacer".into(),
122            pattern_name: "scripted_tracing".into(),
123            description: "Automate syscall tracing with ruchy scripts".into(),
124            code_template: None,
125        });
126
127        // Bashrs patterns
128        self.integrations.push(IntegrationPattern {
129            from: "bashrs".into(),
130            to: "batuta".into(),
131            pattern_name: "bootstrap_generation".into(),
132            description: "Generate shell bootstrap scripts from Rust".into(),
133            code_template: Some(
134                r#"// Generate portable install script
135bashrs::transpile! {
136    check_rust_installed();
137    cargo_install("batuta");
138    batuta_init("./project");
139}"#
140                .into(),
141            ),
142        });
143
144        self.integrations.push(IntegrationPattern {
145            from: "bashrs".into(),
146            to: "repartir".into(),
147            pattern_name: "cluster_bootstrap".into(),
148            description: "Generate shell scripts for cluster node setup".into(),
149            code_template: None,
150        });
151
152        // Quality patterns
153        self.integrations.push(IntegrationPattern {
154            from: "renacer".into(),
155            to: "certeza".into(),
156            pattern_name: "trace_validation".into(),
157            description: "Validate performance with golden traces".into(),
158            code_template: None,
159        });
160
161        self.integrations.push(IntegrationPattern {
162            from: "pmat".into(),
163            to: "batuta".into(),
164            pattern_name: "quality_gating".into(),
165            description: "Gate pipeline on quality metrics".into(),
166            code_template: None,
167        });
168
169        // Zero-JS WASM patterns (simular)
170        self.integrations.push(IntegrationPattern {
171            from: "simular".into(),
172            to: "trueno".into(),
173            pattern_name: "zero_js_wasm".into(),
174            description: "Zero-JS WASM architecture for interactive demos".into(),
175            code_template: Some(
176                r#"// HTML: ONE LINE OF JAVASCRIPT
177// <script type="module">import init, { initApp } from './pkg/app.js'; init().then(initApp);</script>
178
179// Rust: Full app in WASM
180use wasm_bindgen::prelude::*;
181use web_sys::{Document, HtmlCanvasElement, CanvasRenderingContext2d};
182
183#[wasm_bindgen(js_name = initApp)]
184pub fn init_app() -> Result<(), JsValue> {
185    let window = web_sys::window().expect("no window");
186    let document = window.document().expect("no document");
187    let canvas = document.get_element_by_id("canvas")
188        .expect("no canvas")
189        .dyn_into::<HtmlCanvasElement>()?;
190
191    // All DOM, rendering, animation in Rust
192    let ctx = canvas.get_context("2d")?.expect("unexpected failure")
193        .dyn_into::<CanvasRenderingContext2d>()?;
194
195    // requestAnimationFrame loop in Rust
196    // Event handlers in Rust closures
197    Ok(())
198}"#
199                    .into(),
200            ),
201        });
202
203        self.integrations.push(IntegrationPattern {
204            from: "simular".into(),
205            to: "probar".into(),
206            pattern_name: "edd_testing".into(),
207            description: "Equation-Driven Development with Probar validation".into(),
208            code_template: Some(
209                r"// EDD Demo pattern
210pub trait DemoEngine {
211    fn from_yaml(yaml: &str) -> Result<Self, DemoError>;
212    fn step(&mut self, dt: f64) -> StepResult;
213    fn verify_invariants(&self) -> bool;
214    fn falsification_status(&self) -> FalsificationStatus;
215}
216
217// Probar validates:
218// - Governing equations hold within tolerance
219// - Invariants never violated
220// - Deterministic replay produces identical results"
221                    .into(),
222            ),
223        });
224
225        self.integrations.push(IntegrationPattern {
226            from: "probar".into(),
227            to: "certeza".into(),
228            pattern_name: "gui_coverage".into(),
229            description: "GUI/pixel coverage extends code coverage".into(),
230            code_template: None,
231        });
232
233        self.integrations.push(IntegrationPattern {
234            from: "simular".into(),
235            to: "repartir".into(),
236            pattern_name: "distributed_simulation".into(),
237            description: "Distribute Monte Carlo simulations across nodes".into(),
238            code_template: None,
239        });
240
241        // APR QA patterns
242        self.integrations.push(IntegrationPattern {
243            from: "apr-qa".into(),
244            to: "aprender".into(),
245            pattern_name: "model_validation".into(),
246            description: "Validate APR models trained with aprender".into(),
247            code_template: Some(
248                r#"// Generate and run QA tests for APR model
249use apr_qa_gen::TestGenerator;
250use apr_qa_runner::Runner;
251
252let tests = TestGenerator::for_model("model.apr")?.generate()?;
253let results = Runner::new().run(&tests)?;"#
254                    .into(),
255            ),
256        });
257
258        self.integrations.push(IntegrationPattern {
259            from: "apr-qa".into(),
260            to: "realizar".into(),
261            pattern_name: "inference_validation".into(),
262            description: "Validate APR model inference with realizar".into(),
263            code_template: None,
264        });
265
266        self.integrations.push(IntegrationPattern {
267            from: "apr-qa".into(),
268            to: "certeza".into(),
269            pattern_name: "qa_quality_gates".into(),
270            description: "Integrate APR QA into quality gate pipeline".into(),
271            code_template: None,
272        });
273
274        // Provable contracts patterns
275        self.integrations.push(IntegrationPattern {
276            from: "provable-contracts".into(),
277            to: "trueno".into(),
278            pattern_name: "kernel_verification".into(),
279            description: "Verify trueno SIMD kernel correctness via YAML contracts".into(),
280            code_template: None,
281        });
282
283        self.integrations.push(IntegrationPattern {
284            from: "provable-contracts".into(),
285            to: "realizar".into(),
286            pattern_name: "inference_kernel_verification".into(),
287            description: "Verify realizar Q4K/Q6K kernel contracts".into(),
288            code_template: None,
289        });
290
291        self.integrations.push(IntegrationPattern {
292            from: "provable-contracts".into(),
293            to: "probar".into(),
294            pattern_name: "contract_to_property_tests".into(),
295            description: "Generate probar property tests from YAML contracts".into(),
296            code_template: None,
297        });
298
299        self.integrations.push(IntegrationPattern {
300            from: "provable-contracts".into(),
301            to: "certeza".into(),
302            pattern_name: "formal_quality_gates".into(),
303            description: "Kani verification as quality gate".into(),
304            code_template: None,
305        });
306
307        // Tiny model ground truth patterns
308        self.integrations.push(IntegrationPattern {
309            from: "tiny-model-ground-truth".into(),
310            to: "realizar".into(),
311            pattern_name: "inference_parity".into(),
312            description: "Validate realizar inference against HuggingFace oracle".into(),
313            code_template: None,
314        });
315
316        self.integrations.push(IntegrationPattern {
317            from: "tiny-model-ground-truth".into(),
318            to: "aprender".into(),
319            pattern_name: "conversion_parity".into(),
320            description: "Validate APR format conversions".into(),
321            code_template: None,
322        });
323
324        // Forjar patterns
325        self.integrations.push(IntegrationPattern {
326            from: "forjar".into(),
327            to: "bashrs".into(),
328            pattern_name: "bootstrap_provisioning".into(),
329            description: "Generate shell provisioning scripts".into(),
330            code_template: None,
331        });
332
333        self.integrations.push(IntegrationPattern {
334            from: "forjar".into(),
335            to: "repartir".into(),
336            pattern_name: "cluster_provisioning".into(),
337            description: "Provision distributed compute nodes".into(),
338            code_template: None,
339        });
340
341        // Media Production patterns (rmedia)
342        self.integrations.push(IntegrationPattern {
343            from: "whisper-apr".into(),
344            to: "rmedia".into(),
345            pattern_name: "transcription_pipeline".into(),
346            description:
347                "Transcribe course audio with whisper-apr, feed into rmedia subtitle pipeline"
348                    .into(),
349            code_template: Some(
350                r#"// 1. Transcribe audio with whisper-apr
351let model = WhisperModel::from_apr("whisper-base.apr")?;
352let transcript = model.transcribe(&audio)?;
353
354// 2. Burn subtitles into video with rmedia
355rmedia::subtitle::burn_in("lecture.mp4", &transcript.srt(), "output.mp4")?;"#
356                    .into(),
357            ),
358        });
359
360        self.integrations.push(IntegrationPattern {
361            from: "rmedia".into(),
362            to: "whisper-apr".into(),
363            pattern_name: "audio_extraction".into(),
364            description: "Extract audio from video for transcription".into(),
365            code_template: None,
366        });
367
368        self.integrations.push(IntegrationPattern {
369            from: "rmedia".into(),
370            to: "certeza".into(),
371            pattern_name: "course_quality_gate".into(),
372            description:
373                "Score course artifacts against quality dimensions, enforce critical defect gates"
374                    .into(),
375            code_template: None,
376        });
377
378        self.integrations.push(IntegrationPattern {
379            from: "rmedia".into(),
380            to: "batuta".into(),
381            pattern_name: "orchestrated_rendering".into(),
382            description: "Batuta orchestrates rmedia for course video production pipelines".into(),
383            code_template: None,
384        });
385    }
386}