1use serde::{Deserialize, Serialize};
15use std::collections::HashMap;
16
17#[derive(Debug, Clone, Serialize, Deserialize)]
23pub struct IOCodingOptions {
24 pub signage_options: Vec<String>,
25 pub behavior_options: Vec<String>,
26 pub coding_type_options: Vec<String>,
27}
28
29#[derive(Debug, Clone, Serialize, Deserialize)]
35pub struct NeuronInfo {
36 pub id: u64,
37 pub cortical_id: String,
38 pub cortical_idx: u32,
39 pub coordinates: (u32, u32, u32),
40 pub properties: HashMap<String, serde_json::Value>,
41}
42
43#[derive(Debug, Clone, Serialize, Deserialize)]
45pub struct CreateNeuronParams {
46 pub cortical_id: String,
47 pub coordinates: (u32, u32, u32),
48 pub properties: Option<HashMap<String, serde_json::Value>>,
49}
50
51#[derive(Debug, Clone, Serialize, Deserialize)]
58pub struct CorticalAreaInfo {
59 pub cortical_id: String,
60 pub cortical_id_s: String, pub cortical_idx: u32,
62 #[serde(rename = "cortical_name", alias = "name")]
63 pub name: String,
64 #[serde(rename = "cortical_dimensions", alias = "dimensions")]
65 pub dimensions: (usize, usize, usize),
66 #[serde(rename = "coordinates_3d", alias = "position")]
67 pub position: (i32, i32, i32),
68 pub area_type: String, pub cortical_group: String, pub cortical_type: String,
74 pub neuron_count: usize,
75 pub synapse_count: usize,
76 pub incoming_synapse_count: usize,
78 pub outgoing_synapse_count: usize,
80 pub visible: bool,
81 #[serde(
82 rename = "cortical_sub_group",
83 alias = "sub_group",
84 skip_serializing_if = "Option::is_none"
85 )]
86 pub sub_group: Option<String>,
87 pub neurons_per_voxel: u32,
88 #[serde(rename = "neuron_post_synaptic_potential")]
89 pub postsynaptic_current: f64,
90 #[serde(rename = "neuron_post_synaptic_potential_max")]
91 pub postsynaptic_current_max: f64,
92 #[serde(rename = "neuron_plasticity_constant")]
93 pub plasticity_constant: f64,
94 #[serde(rename = "neuron_degeneracy_coefficient")]
95 pub degeneration: f64,
96 #[serde(rename = "neuron_psp_uniform_distribution")]
97 pub psp_uniform_distribution: bool,
98 #[serde(rename = "neuron_mp_driven_psp")]
99 pub mp_driven_psp: bool,
100 #[serde(rename = "neuron_fire_threshold")]
101 pub firing_threshold: f64,
102 #[serde(rename = "neuron_fire_threshold_increment")]
103 pub firing_threshold_increment: [f64; 3],
104 #[serde(rename = "neuron_firing_threshold_limit")]
105 pub firing_threshold_limit: f64,
106 #[serde(rename = "neuron_consecutive_fire_count")]
107 pub consecutive_fire_count: u32,
108 #[serde(rename = "neuron_snooze_period")]
109 pub snooze_period: u32,
110 #[serde(rename = "neuron_refractory_period")]
111 pub refractory_period: u32,
112 #[serde(rename = "neuron_leak_coefficient")]
113 pub leak_coefficient: f64,
114 #[serde(rename = "neuron_leak_variability")]
115 pub leak_variability: f64,
116 #[serde(rename = "neuron_mp_charge_accumulation")]
117 pub mp_charge_accumulation: bool,
118 #[serde(rename = "neuron_excitability")]
119 pub neuron_excitability: f64,
120 #[serde(rename = "neuron_burst_engine_active")]
121 pub burst_engine_active: bool,
122 #[serde(rename = "neuron_init_lifespan")]
123 pub init_lifespan: u32,
124 #[serde(rename = "neuron_lifespan_growth_rate")]
125 pub lifespan_growth_rate: f64,
126 #[serde(rename = "neuron_longterm_mem_threshold")]
127 pub longterm_mem_threshold: u32,
128 #[serde(rename = "temporal_depth", skip_serializing_if = "Option::is_none")]
131 pub temporal_depth: Option<u32>,
132 pub properties: HashMap<String, serde_json::Value>,
133
134 #[serde(skip_serializing_if = "Option::is_none")]
137 pub cortical_subtype: Option<String>,
138
139 #[serde(skip_serializing_if = "Option::is_none")]
141 pub encoding_type: Option<String>,
142
143 #[serde(skip_serializing_if = "Option::is_none")]
145 pub encoding_format: Option<String>,
146
147 #[serde(skip_serializing_if = "Option::is_none")]
149 pub unit_id: Option<u8>,
150
151 #[serde(skip_serializing_if = "Option::is_none")]
153 pub group_id: Option<u8>,
154
155 #[serde(skip_serializing_if = "Option::is_none")]
157 pub coding_signage: Option<String>,
158
159 #[serde(skip_serializing_if = "Option::is_none")]
161 pub coding_behavior: Option<String>,
162
163 #[serde(skip_serializing_if = "Option::is_none")]
165 pub coding_type: Option<String>,
166
167 #[serde(skip_serializing_if = "Option::is_none")]
169 pub coding_options: Option<IOCodingOptions>,
170
171 #[serde(skip_serializing_if = "Option::is_none")]
174 pub parent_region_id: Option<String>,
175
176 #[serde(skip_serializing_if = "Option::is_none")]
179 pub dev_count: Option<usize>,
180
181 #[serde(skip_serializing_if = "Option::is_none")]
185 pub cortical_dimensions_per_device: Option<(usize, usize, usize)>,
186
187 pub visualization_voxel_granularity: Option<(u32, u32, u32)>,
194}
195
196#[derive(Debug, Clone, Serialize, Deserialize)]
198pub struct CreateCorticalAreaParams {
199 pub cortical_id: String,
200 pub name: String,
201 pub dimensions: (usize, usize, usize),
202 pub position: (i32, i32, i32),
203 pub area_type: String,
204 pub visible: Option<bool>,
205 pub sub_group: Option<String>,
206 pub neurons_per_voxel: Option<u32>,
207 pub postsynaptic_current: Option<f64>,
208 pub plasticity_constant: Option<f64>,
209 pub degeneration: Option<f64>,
210 pub psp_uniform_distribution: Option<bool>,
211 pub firing_threshold_increment: Option<f64>,
212 pub firing_threshold_limit: Option<f64>,
213 pub consecutive_fire_count: Option<u32>,
214 pub snooze_period: Option<u32>,
215 pub refractory_period: Option<u32>,
216 pub leak_coefficient: Option<f64>,
217 pub leak_variability: Option<f64>,
218 pub burst_engine_active: Option<bool>,
219 pub properties: Option<HashMap<String, serde_json::Value>>,
220}
221
222#[derive(Debug, Clone, Serialize, Deserialize)]
224pub struct UpdateCorticalAreaParams {
225 pub name: Option<String>,
226 pub position: Option<(i32, i32, i32)>,
227 pub dimensions: Option<(usize, usize, usize)>,
228 pub area_type: Option<String>,
229 pub visible: Option<bool>,
230 pub postsynaptic_current: Option<f64>,
231 pub plasticity_constant: Option<f64>,
232 pub degeneration: Option<f64>,
233 pub psp_uniform_distribution: Option<bool>,
234 pub firing_threshold_increment: Option<f64>,
235 pub firing_threshold_limit: Option<f64>,
236 pub consecutive_fire_count: Option<u32>,
237 pub snooze_period: Option<u32>,
238 pub refractory_period: Option<u32>,
239 pub leak_coefficient: Option<f64>,
240 pub leak_variability: Option<f64>,
241 pub burst_engine_active: Option<bool>,
242}
243
244#[derive(Debug, Clone, Serialize, Deserialize)]
250pub struct BrainRegionInfo {
251 pub region_id: String,
252 pub name: String,
253 pub region_type: String, pub parent_id: Option<String>,
255 pub cortical_areas: Vec<String>,
256 pub child_regions: Vec<String>,
257 pub properties: HashMap<String, serde_json::Value>,
258}
259
260#[derive(Debug, Clone, Serialize, Deserialize)]
262pub struct CreateBrainRegionParams {
263 pub region_id: String,
264 pub name: String,
265 pub region_type: String,
266 pub parent_id: Option<String>,
267 pub properties: Option<HashMap<String, serde_json::Value>>,
268}
269
270#[derive(Debug, Clone, Serialize, Deserialize)]
276pub struct MorphologyInfo {
277 pub morphology_type: String,
278 pub class: String,
279 pub parameters: serde_json::Value,
280}
281
282#[derive(Debug, Clone, Serialize, Deserialize)]
288pub struct GenomeInfo {
289 pub genome_id: String,
290 pub genome_title: String,
291 pub version: String,
292 pub cortical_area_count: usize,
293 pub brain_region_count: usize,
294 pub simulation_timestep: f64, pub genome_num: Option<i32>, pub genome_timestamp: Option<i64>, }
298
299#[derive(Debug, Clone, Serialize, Deserialize)]
301pub struct LoadGenomeParams {
302 pub json_str: String,
303}
304
305#[derive(Debug, Clone, Serialize, Deserialize)]
307pub struct SaveGenomeParams {
308 pub genome_id: Option<String>,
309 pub genome_title: Option<String>,
310}
311
312#[derive(Debug, Clone, Serialize, Deserialize)]
318pub struct SynapseInfo {
319 pub source_neuron: u64,
320 pub target_neuron: u64,
321 pub weight: u8,
322 pub psp: u8,
323 pub synapse_type: String, }
325
326#[derive(Debug, Clone, Serialize, Deserialize)]
328pub struct CreateSynapseParams {
329 pub source_neuron: u64,
330 pub target_neuron: u64,
331 pub weight: u8,
332 pub psp: u8,
333 pub synapse_type: String,
334}
335
336#[derive(Debug, Clone, Serialize, Deserialize)]
342pub struct CorticalAreaStats {
343 pub cortical_id: String,
344 pub neuron_count: usize,
345 pub synapse_count: usize,
346 pub density: f32,
347 pub populated: bool,
348}
349
350#[derive(Debug, Clone, Serialize, Deserialize)]
352pub struct ConnectivityStats {
353 pub source_area: String,
354 pub target_area: String,
355 pub synapse_count: usize,
356 pub avg_weight: f32,
357 pub excitatory_count: usize,
358 pub inhibitory_count: usize,
359}
360
361#[derive(Debug, Clone, Serialize, Deserialize)]
363pub struct SystemHealth {
364 pub burst_engine_active: bool,
365 pub brain_readiness: bool,
366 pub neuron_count: usize,
367 pub neuron_capacity: usize,
368 pub synapse_capacity: usize,
369 pub cortical_area_count: usize,
370 pub burst_count: u64,
371}
372
373#[derive(Debug, Clone, Serialize, Deserialize)]
379pub struct RuntimeStatus {
380 pub is_running: bool,
382
383 pub is_paused: bool,
385
386 pub frequency_hz: f64,
388
389 pub burst_count: u64,
391
392 pub current_rate_hz: f64,
394
395 pub last_burst_neuron_count: usize,
397
398 pub avg_burst_time_ms: f64,
400}
401
402#[derive(Debug, Clone, Serialize, Deserialize)]
408pub struct ComponentHealth {
409 pub name: String,
410 pub status: String, pub message: Option<String>,
412}
413
414#[derive(Debug, Clone, Serialize, Deserialize)]
416pub struct HealthStatus {
417 pub overall_status: String, pub components: Vec<ComponentHealth>,
419 pub timestamp: String, }
421
422#[derive(Debug, Clone, Serialize, Deserialize)]
424pub struct SystemStatus {
425 pub is_initialized: bool,
426 pub burst_engine_running: bool,
427 pub burst_count: u64,
428 pub neuron_count: usize,
429 pub synapse_count: usize,
430 pub cortical_area_count: usize,
431 pub brain_region_count: usize,
432 pub uptime_seconds: u64,
433 pub current_burst_rate_hz: f64,
434 pub avg_burst_time_ms: f64,
435}
436
437#[derive(Debug, Clone, Serialize, Deserialize, Default)]
441pub struct VersionInfo {
442 pub crates: std::collections::HashMap<String, String>,
445
446 pub build_timestamp: String,
448
449 pub rust_version: String,
451}
452
453#[derive(Debug, Clone, Serialize, Deserialize)]
455pub struct RuntimeStats {
456 pub total_bursts: u64,
457 pub total_neurons_fired: u64,
458 pub total_processing_time_ms: u64,
459 pub avg_burst_time_ms: f64,
460 pub avg_neurons_per_burst: f64,
461 pub current_rate_hz: f64,
462 pub peak_rate_hz: f64,
463 pub uptime_seconds: u64,
464}
465
466#[derive(Debug, Clone, Serialize, Deserialize)]
468pub struct MemoryUsage {
469 pub npu_neurons_bytes: usize,
470 pub npu_synapses_bytes: usize,
471 pub npu_total_bytes: usize,
472 pub connectome_metadata_bytes: usize,
473 pub total_allocated_bytes: usize,
474 pub system_total_bytes: usize,
475 pub system_available_bytes: usize,
476}
477
478#[derive(Debug, Clone, Serialize, Deserialize)]
480pub struct CapacityInfo {
481 pub current_neurons: usize,
482 pub max_neurons: usize,
483 pub neuron_utilization_percent: f64,
484 pub current_synapses: usize,
485 pub max_synapses: usize,
486 pub synapse_utilization_percent: f64,
487 pub current_cortical_areas: usize,
488 pub max_cortical_areas: usize,
489}