AIMP — Protocole de maillage IA

Un protocole réseau expérimental et sans serveur pour la synchronisation d'état résiliente entre agents autonomes dans des réseaux fragmentés et à faible bande passante. Construit sur Merkle-CRDTs et identité cryptographique — aucune autorité centrale, pas de DNS global, toujours accessible en écriture.
Articles
Profils des auteurs : ResearchGate · ResearchHub
Pile de protocoles
Nouveautés
v0.4.0 — Topologies sémantiques déterministes
L3 v0.3.0 exigeait que les applications construisent manuellement le graphe de connaissances (arêtes Supports/Contradicts). v0.4.0 supprime ce goulot d'étranglement avec une génération autonome d'arêtes :
- Les affirmations portent un
QuantizedEmbedding([u64; 4]) optionnel — un SimHash 256 bits calculé côté application à partir d'un modèle d'embedding canonique.
- À chaque limite d'époque, le protocole calcule les distances de Hamming par paires (XOR + popcount, ~1 ns par paire) et émet des arêtes Supports pour les paires proches (d <= 30 bits) et des arêtes Contradicts pour les paires éloignées (d >= 200 bits).
- La force de l'arête évolue linéairement avec la distance en points de base (d=0 → 10000 pdb, d=30 → 1000 pdb).
- Un plafond
max_k_nearest limite la densité d'arêtes à O(N), empêchant l'explosion de la propagation de confiance.
embedding_version: u32 isole les espaces latents disjoints pour les mises à niveau de modèle au niveau du protocole.
- Les auto-arêtes sont matérialisées via le gossip L2, survivent au GC grâce au routage holographique.
- La zone morte (31-199 bits) isole les affirmations ambiguës — un isolement épistémologiquement correct.
// Autonomous truth discovery: 10,000 claims → 50 ms scan, O(N) edges
// No floats. No coordination. No central authority.
let edges = auto_edge_generator.generate_edges(&epoch_claims);
v0.3.0 — Agrégation des croyances tenant compte des corrélations
L3 v0.2.0 suppose que toutes les sources de preuves sont statistiquement indépendantes (Naive Bayes). Cela produit une hyperconfiance pathologique lorsque des capteurs physiquement corrélés (ex. 100 appareils IoT sur le même toit) ou des agents sémantiquement corrélés (ex. LLMs affinés sur le même jeu de données) rapportent des observations concordantes.
v0.3.0 introduit l'escompte de corrélation par cellule de grille :
- Chaque affirmation porte un
CorrelationCell(u64) optionnel — une coordonnée discrète pour la proximité spatiale, sémantique ou temporelle.
- Dans chaque cellule, les preuves sont classées par force et escomptées géométriquement : la source la plus forte conserve 100 % du poids ; chaque source suivante reçoit
discount_bps^rank / 10000^rank (par défaut 30 %).
- Avec un escompte de 30 %, N capteurs corrélés convergent vers ~1,42x la preuve d'un seul capteur — quel que soit N. L'approche naïve produirait une amplification de Nx.
- Le défi d'associativité des CRDT (la décroissance géométrique n'est pas associative lors des fusions partielles) est résolu architecturalement : la réduction par époque regroupe par
(temporal_grid, fingerprint, correlation_cell), garantissant un calcul atomique sur l'ensemble complet.
- Les affirmations avec
correlation_cell: None se comportent à l'identique de v0.2.0 (régression zéro).
- Tout l'arithmétique est en entiers uniquement (i32/i64, points de base). Pas de flottants. Prêt pour ZK.
// 100 co-located sensors, 70% confidence each:
// v0.2.0 (naive): 100 × 847 = 84,700 milli-log-odds → ~100% (hyper-confident)
// v0.3.0 (30%): 847 × Σ(0.3^i) ≈ 1,207 milli-log-odds → ~77% (realistic)
Architecture
aimp_node/ Implémentation de référence en Rust (membre de l'espace de travail Cargo)
src/
crdt/ Moteur Merkle-DAG, modèle d'acteur, allocateur arène, consensus quorum
crypto/ Identité Ed25519, hachage BLAKE3, pare-feu zéro confiance
network/ Gossip UDP, sessions Noise Protocol XX, limitation de débit par pair
protocol/ Format filaire (MessagePack), énumération de payload typée
epistemic.rs Couche épistémique L3 (v0.3.0) : log-odds, propagation de confiance, escompte de corrélation
semantic_topology.rs Topologie sémantique L3 (v0.4.0) : embeddings SimHash, génération automatique d'arêtes
decision_engine.rs Moteur de décision déterministe enfichable (trait + moteur de règles + rechargement à chaud)
error.rs Hiérarchie de types d'erreurs unifiée AimpError
dashboard/ Interface TUI Ratatui
config.rs Configuration dynamique avec validation
event/ Journalisation structurée + métriques Prometheus (compteurs + histogrammes)
tests/ Tests d'intégration
benches/ Bancs d'essai Criterion
aimp_testbed/ SDK Python (aimp-client) + outil CLI + tests de chaos
deploy/ Service systemd, microVM Firecracker, script d'installation
formal/ Spécification TLA+ de convergence, sécurité du quorum et convergence des croyances
docs/ Article 1 (source Typst + PDF)
v0.2.0/ Article 2 : Couche épistémique (source Typst + PDF)
v0.3.0/ Article 3 : Agrégation tenant compte des corrélations (source Typst + PDF)
Avantages stratégiques
Fonctionnalités clés
Moteur principal (v0.1.0)
- Modèle d'acteur avec CRDT sans état partagé via
tokio::mpsc
- Allocation Slab/Arena avec insertion O(1) et disposition SoA
- Persistance durable via redb avec chiffrement ChaCha20Poly1305 au repos
- Dérivation de clé HKDF-SHA256 avec séparation de domaine
- Racine Merkle mise en cache avec invalidation à l'écriture
- GC réel de type mark-and-sweep avec récupération de mémoire des slabs
- Suivi du GC basé sur les époques intégré à l'acteur CRDT
Couche épistémique (v0.2.0 — v0.4.0)
- Arithmétique de log-odds entiers (i32, milli-log-odds) — pas de flottants, 100% déterministe
- Propagation de confiance markovienne en deux passes (Supports → Contradictions, sans oscillation)
- Réputation résistante aux Sybil : les nouveaux nœuds commencent à 0, délégation requise, dépense de réputation
- Réduction par époque alignée sur la grille avec compaction matérialisée (les résumés survivent au GC)
- Détection de cycles (DFS trié) empêche les boucles d'inflation de confiance
- v0.3.0 : Agrégation tenant compte des corrélations — escompte géométrique pour capteurs/LLM colocalisés
- v0.3.0 : Réduction atomique par cellule — regroupement par (epoch, fingerprint, cell) pour la sécurité CRDT
- v0.4.0 : Topologies sémantiques déterministes — embeddings SimHash, génération autonome d'arêtes
- 98 à 142 fois plus rapide que la logique subjective / Dempster-Shafer (identique au bit près entre architectures)
Réseau et sécurité
- Sessions chiffrées Noise Protocol XX (activées par défaut)
- Limitation de débit par pair avec seau à jetons (arithmétique entière)
- Déduplication du gossip en O(1) via HashSet + VecDeque
- Détection de rejeu TTL avec disjoncteur
- Éviction LRU des sessions (TTL + nombre max)
- Négociation de plage de versions de protocole pour mises à niveau progressives
Moteur de décision et consensus
- Trait
DecisionEngine enfichable avec implémentation RuleEngine
- Règles rechargeables à chaud depuis
aimp_rules.json (pas de redémarrage nécessaire)
- Vote par quorum BFT avec décisions vérifiées persistantes
- Énumération
Payload typée par opcode (sécurité à la compilation)
Observabilité
- Compteurs, jauges et histogrammes de latence Prometheus
- Point de terminaison
/health composite avec sous-vérifications et codes d'état HTTP
- Journalisation structurée
SystemEvent avec tableau de bord TUI
Opérations
- Hiérarchie de types d'erreurs unifiée
AimpError (fini les Box<dyn Error>)
- Validation de la configuration (rejette les combinaisons de paramètres invalides)
- Arrêt gracieux avec délai d'attente de 5 secondes
- Fichier de service systemd durci
- CI/CD : lint, tests, audit de sécurité, documentation, versions compilées croisées
Bancs d'essai
Mesurés avec Criterion sur Apple Silicon (série M), monothread, mode fast-crypto :
Niveau système
Cluster simulé de 5 nœuds avec synchronisation anti-entropie (en processus, Apple Silicon) :
Perturbation réseau (simulation netem)
Convergence sous perte de paquets, latence et partitions simulées (5 nœuds, 50 mutations/nœud) :
AIMP converge jusqu'à ~80 % de perte de paquets en quelques cycles d'anti-entropie, avec une dégradation gracieuse.
Docker ARM64 Linux avec limites de ressources de classe Raspberry Pi :
Même sur du matériel de classe RPi Zero, le débit est de 3 ordres de grandeur au-dessus de la limite de débit.
Comparaison avec Automerge v0.7
Même matériel, mêmes opérations, monothread, target-cpu=native :
AIMP avec ring surpasse Automerge d'un facteur 1,37x sur les mutations (avec Ed25519 par écriture) et de 2,4x sur la fusion. Yrs est le plus rapide sur les mutations (pas de crypto) mais la fusion d'AIMP est à 26 % de celle de Yrs.
# Activer le backend ring pour un débit maximal
RUSTFLAGS="-C target-cpu=native" cargo run --release --features fast-crypto,fast-alloc
Exécuter les bancs d'essai localement :
cargo bench --manifest-path aimp_node/Cargo.toml # Micro-bancs d'essai
cargo run --release -p aimp_node --example bench_convergence # Bancs d'essai système
cargo run --release -p aimp_node --example bench_netem # Perturbation réseau
docker build -f Dockerfile.bench -t aimp-bench . && \
docker run --rm --memory=1g --cpus=1 aimp-bench # ARM64 contraint
L2 — Convergence CRDT
TLC a exploré 46 063 états (9 558 distincts) jusqu'à une profondeur de 16 en moins d'une seconde avec 10 travailleurs parallèles et zéro violation. Bogues trouvés : 2 bogues de correction (têtes désordonnées, double vote du quorum). Les deux ont été corrigés.
L3 — Convergence des croyances
Vérification exhaustive bornée : 199 902 configurations (5 propriétés, jusqu'à N=6 nœuds). Bogue trouvé : 1 bogue de formule de propagation de confiance (t_{k+1} = t_k + At_k au lieu de t_{k+1} = t_0 + At_k). Corrigé.
Démarrage rapide
1. Lancer le nœud
cargo run -- --port 1337 --name node1
2. Interface en ligne de commande Python
cd aimp_testbed
pip install -e .
aimp-cli health --target 127.0.0.1 --metrics-port 9090
aimp-cli infer "Check valve pressure in sector north"
3. Exécuter les tests et les bancs d'essai
make test # Tests basés sur les propriétés + intégration
make bench # Bancs d'essai Criterion
make lint # Formatage + clippy
make docs # Générer rustdoc
Déploiement en périphérie
AIMP est conçu pour fonctionner comme un binaire statique unique sans aucune dépendance d'exécution. Pas de Docker, pas d'environnement d'exécution de conteneur, pas de JVM.
# Télécharger le binaire pour votre architecture
curl -LO https://github.com/fabriziosalmi/aimp/releases/latest/download/aimp_node-aarch64-linux
chmod +x aimp_node-aarch64-linux
# Installer comme service systemd
sudo deploy/install.sh ./aimp_node-aarch64-linux
# Démarrer
sudo systemctl start aimp-node
curl localhost:9090/health
Compilation croisée à partir des sources
make install-cross-targets # Une fois : installer les cibles musl
make edge-arm64 # ARM64 (RPi 4/5, Jetson, Graviton)
make edge-armv7 # ARMv7 (RPi 2/3, automates industriels)
make edge-x86 # x86_64 (passerelles périphériques)
make edge-all # Les trois
MicroVM Firecracker (isolation multi-locataire)
Pour les passerelles périphériques exécutant plusieurs charges de travail non fiables :
sudo make microvm-rootfs # Construit une racine Alpine ~15 Mo avec AIMP
firecracker --no-api --config-file deploy/firecracker/vm-config.json
Temps de démarrage : ~125 ms. Mémoire : 64 Mo. vCPU : 1.
Service systemd
Le fichier de service inclus (deploy/systemd/aimp-node.service) fournit :
Configuration
La configuration est chargée depuis (priorité la plus haute d'abord) :
- Arguments CLI (
--port, --name)
- Variables d'environnement (
AIMP_PORT, AIMP_NOISE_REQUIRED, AIMP_PEER_RATE_LIMIT, ...)
- Fichier
aimp.toml (optionnel)
- Valeurs par défaut codées en dur
Flux de données
graph TD
UDP[Socket UDP] -->|Enveloppe| RL[Limiteur de débit]
RL -->|Autorisé| NP[Noise Protocol]
NP -->|Déchiffrer| FW[Pare-feu de sécurité]
FW -->|Valide| BP[Sémaphore de contre-pression]
BP -->|Permis| Parser[Analyseur de protocole]
Parser -->|AimpData| CRDT[Acteur CRDT]
CRDT -->|Mutation| DAG[Merkle-DAG + redb]
DAG -->|Élaguer| GC[GC d'époque]
CRDT -->|Demande d'évaluation| DE[Moteur de décision]
DE -->|Décision + Preuve| CRDT
CRDT -->|Vote du quorum| QM[Gestionnaire de quorum]
Travaux connexes
AIMP s'appuie sur des concepts issus des domaines suivants de la recherche en systèmes distribués :
- CRDTs — Shapiro et al., "A Comprehensive Study of Convergent and Commutative Replicated Data Types" (INRIA, 2011)
- Merkle-CRDTs — Kleppmann & Howard, "Byzantine Eventual Consistency and the Fundamental Limits of Peer-to-Peer Databases" (2022)
- BFT Consensus — Castro & Liskov, "Practical Byzantine Fault Tolerance" (OSDI, 1999)
- Bayesian Aggregation — Jaynes, "Probability Theory: The Logic of Science" (2003); log-odds arithmetic for belief fusion
- Trust Networks — Kamvar et al., "The EigenTrust Algorithm for Reputation Management in P2P Networks" (WWW, 2003)
- Subjective Logic — Jøsang, "Subjective Logic: A Formalism for Reasoning Under Uncertainty" (Springer, 2016)
- Copulas — Nelsen, "An Introduction to Copulas" (Springer, 2006); correlation modeling for dependent evidence
- Noise Protocol — Perrin, "The Noise Protocol Framework" (2018); used via the
snow crate for XX handshake pattern
- Gossip Protocols — Demers et al., "Epidemic Algorithms for Replicated Database Maintenance" (1987)
- Merkle Trees — Merkle, "A Digital Signature Based on a Conventional Encryption Function" (CRYPTO, 1987)
- Vector Clocks — Mattern, "Virtual Time and Global States of Distributed Systems" (1988)
Licence
MIT — Fabrizio Salmi, 2026.