pub mod backends;
pub mod coherence_router;
pub mod consciousness;
pub mod genomic;
pub mod plasticity_engine;
pub mod thermodynamics;
pub mod witness;
pub use genomic::{GenomicPatternStore, HorvathClock, NeurotransmitterProfile, RvDnaPattern};
pub use backends::{
NeuromorphicBackend, QuantumStubBackend, SubstrateBackend as ComputeSubstrateBackend,
};
pub use coherence_router::{ActionContext, CoherenceBackend, CoherenceRouter, GateDecision};
pub use plasticity_engine::{PlasticityDelta, PlasticityEngine, PlasticityMode};
pub use witness::WitnessDecision as CoherenceDecision;
pub use witness::{CrossParadigmWitness, WitnessChain, WitnessDecision};
use serde::{Deserialize, Serialize};
use std::collections::HashMap;
use std::fmt;
use uuid::Uuid;
#[derive(Clone, Debug, Serialize, Deserialize)]
pub struct Pattern {
pub id: PatternId,
pub embedding: Vec<f32>,
pub metadata: Metadata,
pub timestamp: SubstrateTime,
pub antecedents: Vec<PatternId>,
pub salience: f32,
}
#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, Serialize, Deserialize)]
pub struct PatternId(pub Uuid);
impl PatternId {
pub fn new() -> Self {
Self(Uuid::new_v4())
}
}
impl Default for PatternId {
fn default() -> Self {
Self::new()
}
}
impl fmt::Display for PatternId {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
write!(f, "{}", self.0)
}
}
#[derive(Clone, Copy, Debug, PartialEq, Eq, PartialOrd, Ord, Serialize, Deserialize)]
pub struct SubstrateTime(pub i64);
impl SubstrateTime {
pub const MIN: Self = Self(i64::MIN);
pub const MAX: Self = Self(i64::MAX);
pub fn now() -> Self {
use std::time::{SystemTime, UNIX_EPOCH};
let duration = SystemTime::now()
.duration_since(UNIX_EPOCH)
.expect("Time went backwards");
Self(duration.as_nanos() as i64)
}
pub fn abs(&self) -> Self {
Self(self.0.abs())
}
}
impl std::ops::Sub for SubstrateTime {
type Output = Self;
fn sub(self, rhs: Self) -> Self::Output {
Self(self.0 - rhs.0)
}
}
#[derive(Clone, Debug, Default, Serialize, Deserialize)]
pub struct Metadata {
pub fields: HashMap<String, MetadataValue>,
}
impl Metadata {
pub fn new() -> Self {
Self::default()
}
pub fn with_field(key: impl Into<String>, value: MetadataValue) -> Self {
let mut fields = HashMap::new();
fields.insert(key.into(), value);
Self { fields }
}
pub fn insert(&mut self, key: impl Into<String>, value: MetadataValue) -> &mut Self {
self.fields.insert(key.into(), value);
self
}
}
#[derive(Clone, Debug, Serialize, Deserialize)]
pub enum MetadataValue {
String(String),
Number(f64),
Boolean(bool),
Array(Vec<MetadataValue>),
}
#[derive(Clone, Debug)]
pub struct SearchResult {
pub pattern: Pattern,
pub score: f32,
pub distance: f32,
}
#[derive(Clone, Debug, Serialize, Deserialize)]
pub struct Filter {
pub conditions: Vec<FilterCondition>,
}
#[derive(Clone, Debug, Serialize, Deserialize)]
pub struct FilterCondition {
pub field: String,
pub operator: FilterOperator,
pub value: MetadataValue,
}
#[derive(Clone, Debug, Serialize, Deserialize)]
pub enum FilterOperator {
Equal,
NotEqual,
GreaterThan,
LessThan,
Contains,
}
#[derive(Clone, Debug)]
pub enum ManifoldDelta {
ContinuousDeform {
embedding: Vec<f32>,
salience: f32,
loss: f32,
},
DiscreteInsert { id: PatternId },
}
#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, Serialize, Deserialize)]
pub struct EntityId(pub Uuid);
impl EntityId {
pub fn new() -> Self {
Self(Uuid::new_v4())
}
}
impl Default for EntityId {
fn default() -> Self {
Self::new()
}
}
impl fmt::Display for EntityId {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
write!(f, "{}", self.0)
}
}
#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, Serialize, Deserialize)]
pub struct HyperedgeId(pub Uuid);
impl HyperedgeId {
pub fn new() -> Self {
Self(Uuid::new_v4())
}
}
impl Default for HyperedgeId {
fn default() -> Self {
Self::new()
}
}
#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, Serialize, Deserialize)]
pub struct SectionId(pub Uuid);
impl SectionId {
pub fn new() -> Self {
Self(Uuid::new_v4())
}
}
impl Default for SectionId {
fn default() -> Self {
Self::new()
}
}
#[derive(Clone, Debug, PartialEq, Eq, Hash, Serialize, Deserialize)]
pub struct RelationType(pub String);
impl RelationType {
pub fn new(s: impl Into<String>) -> Self {
Self(s.into())
}
}
#[derive(Clone, Debug, Serialize, Deserialize)]
pub struct Relation {
pub relation_type: RelationType,
pub properties: serde_json::Value,
}
#[derive(Clone, Debug, Serialize, Deserialize)]
pub enum TopologicalQuery {
PersistentHomology {
dimension: usize,
epsilon_range: (f32, f32),
},
BettiNumbers { max_dimension: usize },
SheafConsistency { local_sections: Vec<SectionId> },
}
#[derive(Clone, Debug, Serialize, Deserialize)]
pub enum HyperedgeResult {
PersistenceDiagram(Vec<(f32, f32)>),
BettiNumbers(Vec<usize>),
SheafConsistency(SheafConsistencyResult),
NotSupported,
}
#[derive(Clone, Debug, Serialize, Deserialize)]
pub enum SheafConsistencyResult {
Consistent,
Inconsistent(Vec<String>),
NotConfigured,
}
#[derive(Debug, thiserror::Error)]
pub enum Error {
#[error("Pattern not found: {0}")]
PatternNotFound(PatternId),
#[error("Invalid embedding dimension: expected {expected}, got {got}")]
InvalidDimension { expected: usize, got: usize },
#[error("Backend error: {0}")]
Backend(String),
#[error("Convergence failed")]
ConvergenceFailed,
#[error("Invalid configuration: {0}")]
InvalidConfig(String),
#[error("Not found: {0}")]
NotFound(String),
}
pub type Result<T> = std::result::Result<T, Error>;
pub trait SubstrateBackend: Send + Sync {
fn similarity_search(
&self,
query: &[f32],
k: usize,
filter: Option<&Filter>,
) -> Result<Vec<SearchResult>>;
fn manifold_deform(&self, pattern: &Pattern, learning_rate: f32) -> Result<ManifoldDelta>;
fn dimension(&self) -> usize;
}
#[derive(Clone, Debug, Serialize, Deserialize)]
pub struct ManifoldConfig {
pub dimension: usize,
pub max_descent_steps: usize,
pub learning_rate: f32,
pub convergence_threshold: f32,
pub hidden_layers: usize,
pub hidden_dim: usize,
pub omega_0: f32,
}
impl Default for ManifoldConfig {
fn default() -> Self {
Self {
dimension: 768,
max_descent_steps: 100,
learning_rate: 0.01,
convergence_threshold: 1e-4,
hidden_layers: 3,
hidden_dim: 256,
omega_0: 30.0,
}
}
}