entrenar/ecosystem/ruchy/
types.rs1use super::session::{CodeCell, EntrenarSession};
4use std::collections::HashMap;
5
6#[derive(Debug, Clone)]
11pub struct RuchySession {
12 pub session_id: String,
14 pub title: String,
16 pub username: Option<String>,
18 pub start_time: chrono::DateTime<chrono::Utc>,
20 pub end_time: Option<chrono::DateTime<chrono::Utc>>,
22 pub kernel: Option<String>,
24 pub cells: Vec<RuchyCell>,
26 pub variables: HashMap<String, String>,
28 pub training_runs: Vec<TrainingRun>,
30}
31
32#[derive(Debug, Clone)]
34pub struct RuchyCell {
35 pub id: String,
37 pub cell_type: String,
39 pub source: String,
41 pub outputs: Vec<String>,
43 pub execution_count: Option<u32>,
45 pub executed_at: Option<chrono::DateTime<chrono::Utc>>,
47}
48
49#[derive(Debug, Clone)]
51pub struct TrainingRun {
52 pub run_id: String,
54 pub model: String,
56 pub dataset: Option<String>,
58 pub epochs: u32,
60 pub losses: Vec<f64>,
62 pub metrics: HashMap<String, Vec<f64>>,
64}
65
66impl From<RuchySession> for EntrenarSession {
67 fn from(ruchy: RuchySession) -> Self {
68 let mut session = EntrenarSession::new(&ruchy.session_id, &ruchy.title);
69
70 session.user = ruchy.username;
71 session.created_at = ruchy.start_time;
72 session.ended_at = ruchy.end_time;
73 session.model_architecture = ruchy.kernel;
74
75 for cell in ruchy.cells {
77 if cell.cell_type == "code" {
78 let code_cell = CodeCell {
79 execution_order: cell.execution_count.unwrap_or(0),
80 source: cell.source,
81 output: cell.outputs.first().cloned(),
82 timestamp: cell.executed_at.unwrap_or(ruchy.start_time),
83 duration_ms: None,
84 };
85 session.code_history.push(code_cell);
86 }
87 }
88
89 for run in ruchy.training_runs {
91 for loss in run.losses {
92 session.metrics.add_loss(loss);
93 }
94 for (name, values) in run.metrics {
95 for value in values {
96 session.metrics.add_custom(&name, value);
97 }
98 }
99 if session.dataset_id.is_none() {
100 session.dataset_id = run.dataset;
101 }
102 }
103
104 session.config = ruchy.variables;
106
107 session
108 }
109}