youssouf994/LangBrain

LangGraph boilerplate with hierarchical agents inspired by the human body: a Brain orchestrator and Organs that act autonomously or escalate. IoT/Smart Home demo with event-log reconciliation and configurable HITL. Working alpha, adaptable to any domain.

6

stars

8

commits

Python

primary language

Sep 4, 2026

updated

README

๐Ÿ‡ฎ๐Ÿ‡น Italiano | ๐Ÿ‡ฌ๐Ÿ‡ง English

๐Ÿค– LangBrain

[!WARNING] LangBrain non รจ pronto per l'uso in produzione. รˆ un prototipo/boilerplate dimostrativo: prima di usarlo in ambienti reali occorre completare gli interventi di sicurezza, persistenza, concorrenza, deployment, observability e testing elencati in docs/PROJECT_STATUS.md.

Un corpo digitale per i tuoi progetti di automazione intelligente ed agenti gerarchici.

Un boilerplate LangGraph sperimentale che implementa un pattern di agenti gerarchici ispirato al modo in cui funziona un organismo: un cervello (Orchestratore Supremo) che pensa in modo ponderato e concilia i conflitti, e organi/componenti (sotto-agenti a N-livelli) che reagiscono in tempo reale, agendo in autonomia quando serve ed escalando ai livelli superiori solo quando la situazione lo richiede.

Il caso d'uso dimostrativo principale รจ una smart home, affiancato da una demo avanzata di omeostasi medica e fisiologica, ma l'architettura รจ pensata per essere trapiantata in qualsiasi dominio โ€” customer support, monitoraggio industriale, gestione flotte, e molto altro.


๐Ÿง  L'idea: un sistema nervoso, non un albero di funzioni

La maggior parte dei sistemi multi-agente che si trovano in giro sono organigrammi rigidi: un capo che decide tutto, e sotto-agenti che eseguono ordini senza mai muovere un dito da soli. รˆ un buon modello per un ufficio burocratico. รˆ un modello pessimo per un corpo che deve sopravvivere nel mondo reale.

Il tuo corpo non funziona cosรฌ. Se metti la mano su una piastra bollente, non aspetti che il cervello elabori la situazione e ti mandi il comando di ritirarla โ€” il midollo spinale reagisce da solo, in millisecondi, tramite un arco riflesso. Il cervello viene informato dopo, quando serve capire cosa รจ successo e magari decidere qualcosa di piรน strategico (es. "non toccare piรน quella zona della cucina").

Questo boilerplate replica esattamente questa logica:

  • Il Cervello (Orchestratore Supremo - Livello 0) โ€” pensa in modo ciclico, guarda la storia recente e decide aggiustamenti strategici o risoluzioni di conflitti.
  • Gli Organi & Componenti (Sotto-agenti N-Livelli) โ€” specializzati per macro-aree o periferiche. Reagiscono in autonomia entro le loro soglie di competenza, ed escalano al Padre quando la situazione รจ ambigua o conflittuale.
  • Il Sistema Nervoso (Event Log & Audit) โ€” รจ il canale attraverso cui ogni agente registra cosa ha fatto e legge le azioni recenti per evitare conflitti o sovrascrizioni.

๐Ÿงฌ Un organismo ad espandibilitร  ricorsiva (N-Livelli)

Un vero corpo non si ferma a "cervello + organi". Ogni organo, se lo guardi da vicino, รจ a sua volta un sistema fatto di sotto-strutture, ognuna specializzata:

๐Ÿง  Cervello (Orchestratore centrale - Livello 0)
   โ”‚
   โ”œโ”€โ”€ ๐Ÿ”’ Organo Sicurezza (Livello 1)
   โ”‚      โ”‚
   โ”‚      โ””โ”€โ”€ ๐Ÿ”‘ Componente Serratura (Livello 2)
   โ”‚
   โ””โ”€โ”€ โค๏ธ Organo Cardiovascolare (Livello 1)
          โ”‚
          โ””โ”€โ”€ ๐Ÿซ€ Componente Frequenza Cardiaca (Livello 2)

In pratica: ogni nodo del grafo puรฒ essere, a sua volta, un piccolo cervello per il livello sottostante. Lo stesso base_agent.py, lo stesso DynamicAgent, ed il meccanismo di audit log si applicano in modo ricorsivo sia coordinando 2 organi principali che 20 sotto-componenti innestati su N livelli.


๐Ÿฆพ Anatomia del Sistema

                          โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
                          โ”‚   ๐Ÿง  CERVELLO         โ”‚
                          โ”‚   (Orchestratore L0)  โ”‚
                          โ”‚   Prioritร : 1000.0    โ”‚
                          โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
                                     โ”‚
                    legge/scrive sul sistema nervoso
                                     โ”‚
                     โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
                     โ”‚               โ”‚               โ”‚
              โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ–ผโ”€โ”€โ”€โ”€โ”€โ”  โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ–ผโ”€โ”€โ”€โ”€โ”€โ”  โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ–ผโ”€โ”€โ”€โ”€โ”€โ”€โ”
              โ”‚ ๐ŸŒก๏ธ Clima    โ”‚  โ”‚ ๐Ÿ”’ Sicurezzaโ”‚  โ”‚ โค๏ธ Cardio    โ”‚
              โ”‚ (Organo L1) โ”‚  โ”‚ (Organo L1) โ”‚  โ”‚ (Organo L1)  โ”‚
              โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”˜  โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”˜  โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
                     โ”‚                โ”‚                โ”‚
              โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ–ผโ”€โ”€โ”€โ”€โ”€โ”€โ”  โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ–ผโ”€โ”€โ”€โ”€โ”€โ”€โ”  โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ–ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
              โ”‚ Sensori/    โ”‚  โ”‚ Componente  โ”‚  โ”‚ Componente   โ”‚
              โ”‚ Attuatori   โ”‚  โ”‚ Serratura L2โ”‚  โ”‚ Pacemaker L2 โ”‚
              โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜  โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜  โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜

              โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•
                    ๐Ÿฉธ SISTEMA NERVOSO (Event Log / DB)
              โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•

Il Cervello (Orchestratore Supremo)

Possiede i privilegi massimi (prioritร  1000.0). Riceve le escalation dei sotto-agenti quando scattano conflitti non risolvibili ed esegue il check di routine dell'intero sistema (check_body_status).

Gli Organi e Componenti (DynamicAgent & BaseAgent)

Agiscono in autonomia per il loro target sensore/dispositivo. Se rilevano un conflitto nel DB o un'anomalia severa (es. aritmia cardiaca o sblocco sospetto), generano un'escalation strutturata verso il loro agente Padre.


๐ŸŽ›๏ธ Human-in-the-Loop (HITL) Dinamico

L'interruzione per approvazione umana puรฒ essere inserita dinamicamente ovunque nel flusso del grafo tramite il wrapper in app/graph/builder.py e gestita 100% via API REST senza riavviare il server.

  • Attivazione Dinamica via API: POST /hitl/config consente di specificare nodi (hitl_nodes), sensori protetti (hitl_targets), azioni critiche (hitl_actions) e l'attesa massima in secondi (max_wait_seconds).

  • Tre modalitร  di Resume (POST /graph/resume):

    decisionComportamento
    APPROVAScrive RECONCILED_<action> nel DB. Nessuna modifica fisica al dispositivo.
    RESPINGIScrive REJECTED_<action> nel DB. Il device rimane bloccato fino a TTL o unblock manuale.
    OVERRIDEGod Mode Semantico: il campo reasoning in linguaggio naturale viene inviato al MAO con un prompt di Arbitrato Semantico. Il MAO traduce la frase in un array JSON di comandi {target, action, value} eseguiti fisicamente via force_execute_tool, che bypassa tutti i lock di prioritร  e traccia ogni azione nel DB con actor: "Brain_Override".
    POST /graph/resume
    Content-Type: application/json
    
    {
      "decision": "OVERRIDE",
      "reasoning": "Ignora il blocco dell'energia: mia nonna ha freddo. Accendi la stufa a 22 gradi.",
      "thread_id": "api_session"
    }
    

๐Ÿ—‚๏ธ Struttura del Progetto

LangBrain/
โ”œโ”€โ”€ REQUIREMENTS.md
โ”œโ”€โ”€ Dockerfile
โ”œโ”€โ”€ docker-compose.yml
โ”œโ”€โ”€ requirements.txt
โ”œโ”€โ”€ test_results.json               # Esito in tempo reale della suite di test
โ”œโ”€โ”€ .env                            # Provider LLM e Prompt configurabili del Brain
โ”œโ”€โ”€ .env.example                    # Template di configurazione senza segreti
โ”œโ”€โ”€ app/
โ”‚   โ”œโ”€โ”€ MAO/
โ”‚   โ”‚   โ””โ”€โ”€ model_access_object.py  # Model Access Object (OpenRouter, Gemini, LLM Locale)
โ”‚   โ”œโ”€โ”€ agents/
โ”‚   โ”‚   โ”œโ”€โ”€ base_agent.py           # DNA comune di ogni agente (applica stato, idoneitร , escalation)
โ”‚   โ”‚   โ”œโ”€โ”€ agent_climate.py        # Agente Clima nativo
โ”‚   โ”‚   โ”œโ”€โ”€ dynamic_agent.py        # Agente Dinamico configurabile a runtime (Livelli 1..N)
โ”‚   โ”‚   โ”œโ”€โ”€ agent_registry.py       # Registro gerarchico salvato su DB SQLite
โ”‚   โ”‚   โ””โ”€โ”€ medical_agents.py       # Agenti Fisiologici (Cardiovascolare, Respiratorio)
โ”‚   โ”œโ”€โ”€ graph/
โ”‚   โ”‚   โ”œโ”€โ”€ orchestrator.py         # Cervello (BrainAgent - Livello 0)
โ”‚   โ”‚   โ”œโ”€โ”€ builder.py              # Builder del grafo LangGraph con wrapper HITL
โ”‚   โ”‚   โ”œโ”€โ”€ hitl_config.py          # Manager della configurazione dinamica HITL
โ”‚   โ”‚   โ””โ”€โ”€ state.py                # GraphState condiviso
โ”‚   โ”œโ”€โ”€ tools/
โ”‚   โ”‚   โ”œโ”€โ”€ baseTool.py             # Classe base astratta per tutti i tool IoT/Medici
โ”‚   โ”‚   โ”œโ”€โ”€ sensor_tools.py         # Tool Smart Home (AC, Serratura, Allarme)
โ”‚   โ”‚   โ”œโ”€โ”€ medical_tools.py        # Tool Medici (Pacemaker, Ventilatore SpO2, Normalizzatore)
โ”‚   โ”‚   โ”œโ”€โ”€ event_log.py            # Sistema Nervoso: audit log eventi e sblocco TTL
โ”‚   โ”‚   โ””โ”€โ”€ tool_wrapper.py         # Tool execution logging/wrapper
โ”‚   โ”œโ”€โ”€ db/
โ”‚   โ”‚   โ””โ”€โ”€ database.py             # Setup SQLite (tabelle events, readings, agents_registry)
โ”‚   โ”œโ”€โ”€ api/
โ”‚   โ”‚   โ””โ”€โ”€ main.py                 # API REST FastAPI complete (100% headless con DELETE /system/reset)
โ”‚   โ”œโ”€โ”€ checkpointer.py             # Checkpointer LangGraph per la persistenza
โ”‚   โ””โ”€โ”€ observability/
โ”‚       โ””โ”€โ”€ tracing.py              # Tracing e logging strutturato
โ”œโ”€โ”€ examples/
โ”‚   โ”œโ”€โ”€ hierarchical_pattern/
โ”‚   โ”‚   โ””โ”€โ”€ demo_hierarchy.py       # Demo Gerarchia Smart Home N-Livelli
โ”‚   โ””โ”€โ”€ medical_homeostasis/
โ”‚       โ””โ”€โ”€ demo_medical_homeostasis.py # Demo Omeostasi Fisiologica & Risoluzione Patologie
โ”œโ”€โ”€ tests/
โ”‚   โ””โ”€โ”€ test_all.py                 # Suite di test automatizzata (38 test unitari & integrati)
โ””โ”€โ”€ docs/
    โ””โ”€โ”€ HOW_TO_CUSTOMIZE.md         # Guida alla personalizzazione e mappatura API

๐Ÿ› ๏ธ Stack Tecnologico

ComponenteSceltaPerchรฉ
Framework AgentiLangGraphGrafi stateful con cicli, routing condizionale e checkpointing nativo
Provider LLMMAO ProxySupporto per OpenRouter, Google AI Studio (Gemini) e LLM Locali (vLLM, LM Studio)
API ServerFastAPIServer HTTP/REST asincrono 100% headless con Swagger UI interattiva
DatabaseSQLite (aiosqlite)Zero setup, persistenza audit log eventi, registro agenti e stato

โš™๏ธ Configurazione MAO e contratti di dominio

Le chiamate LLM sono asincrone. Il timeout HTTP del MAO รจ configurato da MAO_TIMEOUT_SECONDS e vale 40 secondi se la variabile non รจ presente o non รจ valida. Per un modello su un'altra macchina della LAN, imposta sia LOCAL_MODEL_BASE_URL sia LOCAL_MODEL_DOCKER_BASE_URL sull'endpoint OpenAI-compatible raggiungibile (per esempio http://172.16.77.153:8080/v1) e usa in LOCAL_MODEL l'ID restituito da GET /v1/models.

LangBrain tratta action, old_value e new_value come dati estensibili. Il boilerplate non puรฒ conoscere gli stati fisici validi di ogni dominio: chi aggiunge un tool o agente deve implementare e testare la propria validazione/mappatura (per esempio LOCKED/UNLOCKED per una serratura). I flag interni come REJECTED e BLOCKED vengono segnalati dall'health check, ma non trasformati automaticamente in uno stato fisico.

Gli smoke test smoke_test_full.ps1 e smoke_test_full_v2.ps1 verificano prima /v1/models, configurano un vero interrupt sul target dell'override e usano decodifica UTF-8 esplicita su Windows PowerShell 5.1.


๐Ÿš€ Esempi Dimostrativi Inclusi

  1. Gerarchia Smart Home (examples/hierarchical_pattern/demo_hierarchy.py):

    python3 examples/hierarchical_pattern/demo_hierarchy.py
    

    Dimostra l'escalation ricorsiva da un sotto-componente serratura (Livello 2) all'organo sicurezza (Livello 1) fino al Cervello (Livello 0).

  2. Omeostasi Medica & Patologie (examples/medical_homeostasis/demo_medical_homeostasis.py):

    python3 examples/medical_homeostasis/demo_medical_homeostasis.py
    

    Simula l'insorgenza di patologie cliniche (Tachicardia 160 BPM, Ipossia 82% SpO2) e l'intervento automatico degli Agenti Fisiologici per riportare l'organismo in omeostasi.


๐Ÿงช Esecuzione della Suite di Test

Per eseguire la suite legacy custom e aggiornare test_results.json:

python3 tests/test_all.py

Per eseguire i test di regressione asincroni standard:

python -m unittest tests.test_blocking_regressions -v

Per il test end-to-end con modello locale usa smoke_test_full_v2.ps1. Per una verifica API compatta usa lo smoke test PowerShell per Windows; รจ disponibile anche la versione Bash.


๐Ÿ“„ Licenza

Polyform Small Business License 1.0.0, libero per uso personale ed aziendale fino a soglia di fatturato.

Contributors

youssouf994

8 commits

youssouf994/LangBrain

LangGraph boilerplate with hierarchical agents inspired by the human body: a Brain orchestrator and Organs that act autonomously or escalate. IoT/Smart Home demo with event-log reconciliation and configurable HITL. Working alpha, adaptable to any domain.

6

stars

8

commits

Python

primary language

Sep 4, 2026

updated

README

๐Ÿ‡ฎ๐Ÿ‡น Italiano | ๐Ÿ‡ฌ๐Ÿ‡ง English

๐Ÿค– LangBrain

[!WARNING] LangBrain non รจ pronto per l'uso in produzione. รˆ un prototipo/boilerplate dimostrativo: prima di usarlo in ambienti reali occorre completare gli interventi di sicurezza, persistenza, concorrenza, deployment, observability e testing elencati in docs/PROJECT_STATUS.md.

Un corpo digitale per i tuoi progetti di automazione intelligente ed agenti gerarchici.

Un boilerplate LangGraph sperimentale che implementa un pattern di agenti gerarchici ispirato al modo in cui funziona un organismo: un cervello (Orchestratore Supremo) che pensa in modo ponderato e concilia i conflitti, e organi/componenti (sotto-agenti a N-livelli) che reagiscono in tempo reale, agendo in autonomia quando serve ed escalando ai livelli superiori solo quando la situazione lo richiede.

Il caso d'uso dimostrativo principale รจ una smart home, affiancato da una demo avanzata di omeostasi medica e fisiologica, ma l'architettura รจ pensata per essere trapiantata in qualsiasi dominio โ€” customer support, monitoraggio industriale, gestione flotte, e molto altro.


๐Ÿง  L'idea: un sistema nervoso, non un albero di funzioni

La maggior parte dei sistemi multi-agente che si trovano in giro sono organigrammi rigidi: un capo che decide tutto, e sotto-agenti che eseguono ordini senza mai muovere un dito da soli. รˆ un buon modello per un ufficio burocratico. รˆ un modello pessimo per un corpo che deve sopravvivere nel mondo reale.

Il tuo corpo non funziona cosรฌ. Se metti la mano su una piastra bollente, non aspetti che il cervello elabori la situazione e ti mandi il comando di ritirarla โ€” il midollo spinale reagisce da solo, in millisecondi, tramite un arco riflesso. Il cervello viene informato dopo, quando serve capire cosa รจ successo e magari decidere qualcosa di piรน strategico (es. "non toccare piรน quella zona della cucina").

Questo boilerplate replica esattamente questa logica:

  • Il Cervello (Orchestratore Supremo - Livello 0) โ€” pensa in modo ciclico, guarda la storia recente e decide aggiustamenti strategici o risoluzioni di conflitti.
  • Gli Organi & Componenti (Sotto-agenti N-Livelli) โ€” specializzati per macro-aree o periferiche. Reagiscono in autonomia entro le loro soglie di competenza, ed escalano al Padre quando la situazione รจ ambigua o conflittuale.
  • Il Sistema Nervoso (Event Log & Audit) โ€” รจ il canale attraverso cui ogni agente registra cosa ha fatto e legge le azioni recenti per evitare conflitti o sovrascrizioni.

๐Ÿงฌ Un organismo ad espandibilitร  ricorsiva (N-Livelli)

Un vero corpo non si ferma a "cervello + organi". Ogni organo, se lo guardi da vicino, รจ a sua volta un sistema fatto di sotto-strutture, ognuna specializzata:

๐Ÿง  Cervello (Orchestratore centrale - Livello 0)
   โ”‚
   โ”œโ”€โ”€ ๐Ÿ”’ Organo Sicurezza (Livello 1)
   โ”‚      โ”‚
   โ”‚      โ””โ”€โ”€ ๐Ÿ”‘ Componente Serratura (Livello 2)
   โ”‚
   โ””โ”€โ”€ โค๏ธ Organo Cardiovascolare (Livello 1)
          โ”‚
          โ””โ”€โ”€ ๐Ÿซ€ Componente Frequenza Cardiaca (Livello 2)

In pratica: ogni nodo del grafo puรฒ essere, a sua volta, un piccolo cervello per il livello sottostante. Lo stesso base_agent.py, lo stesso DynamicAgent, ed il meccanismo di audit log si applicano in modo ricorsivo sia coordinando 2 organi principali che 20 sotto-componenti innestati su N livelli.


๐Ÿฆพ Anatomia del Sistema

                          โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
                          โ”‚   ๐Ÿง  CERVELLO         โ”‚
                          โ”‚   (Orchestratore L0)  โ”‚
                          โ”‚   Prioritร : 1000.0    โ”‚
                          โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
                                     โ”‚
                    legge/scrive sul sistema nervoso
                                     โ”‚
                     โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
                     โ”‚               โ”‚               โ”‚
              โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ–ผโ”€โ”€โ”€โ”€โ”€โ”  โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ–ผโ”€โ”€โ”€โ”€โ”€โ”  โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ–ผโ”€โ”€โ”€โ”€โ”€โ”€โ”
              โ”‚ ๐ŸŒก๏ธ Clima    โ”‚  โ”‚ ๐Ÿ”’ Sicurezzaโ”‚  โ”‚ โค๏ธ Cardio    โ”‚
              โ”‚ (Organo L1) โ”‚  โ”‚ (Organo L1) โ”‚  โ”‚ (Organo L1)  โ”‚
              โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”˜  โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”˜  โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
                     โ”‚                โ”‚                โ”‚
              โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ–ผโ”€โ”€โ”€โ”€โ”€โ”€โ”  โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ–ผโ”€โ”€โ”€โ”€โ”€โ”€โ”  โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ–ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
              โ”‚ Sensori/    โ”‚  โ”‚ Componente  โ”‚  โ”‚ Componente   โ”‚
              โ”‚ Attuatori   โ”‚  โ”‚ Serratura L2โ”‚  โ”‚ Pacemaker L2 โ”‚
              โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜  โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜  โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜

              โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•
                    ๐Ÿฉธ SISTEMA NERVOSO (Event Log / DB)
              โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•

Il Cervello (Orchestratore Supremo)

Possiede i privilegi massimi (prioritร  1000.0). Riceve le escalation dei sotto-agenti quando scattano conflitti non risolvibili ed esegue il check di routine dell'intero sistema (check_body_status).

Gli Organi e Componenti (DynamicAgent & BaseAgent)

Agiscono in autonomia per il loro target sensore/dispositivo. Se rilevano un conflitto nel DB o un'anomalia severa (es. aritmia cardiaca o sblocco sospetto), generano un'escalation strutturata verso il loro agente Padre.


๐ŸŽ›๏ธ Human-in-the-Loop (HITL) Dinamico

L'interruzione per approvazione umana puรฒ essere inserita dinamicamente ovunque nel flusso del grafo tramite il wrapper in app/graph/builder.py e gestita 100% via API REST senza riavviare il server.

  • Attivazione Dinamica via API: POST /hitl/config consente di specificare nodi (hitl_nodes), sensori protetti (hitl_targets), azioni critiche (hitl_actions) e l'attesa massima in secondi (max_wait_seconds).

  • Tre modalitร  di Resume (POST /graph/resume):

    decisionComportamento
    APPROVAScrive RECONCILED_<action> nel DB. Nessuna modifica fisica al dispositivo.
    RESPINGIScrive REJECTED_<action> nel DB. Il device rimane bloccato fino a TTL o unblock manuale.
    OVERRIDEGod Mode Semantico: il campo reasoning in linguaggio naturale viene inviato al MAO con un prompt di Arbitrato Semantico. Il MAO traduce la frase in un array JSON di comandi {target, action, value} eseguiti fisicamente via force_execute_tool, che bypassa tutti i lock di prioritร  e traccia ogni azione nel DB con actor: "Brain_Override".
    POST /graph/resume
    Content-Type: application/json
    
    {
      "decision": "OVERRIDE",
      "reasoning": "Ignora il blocco dell'energia: mia nonna ha freddo. Accendi la stufa a 22 gradi.",
      "thread_id": "api_session"
    }
    

๐Ÿ—‚๏ธ Struttura del Progetto

LangBrain/
โ”œโ”€โ”€ REQUIREMENTS.md
โ”œโ”€โ”€ Dockerfile
โ”œโ”€โ”€ docker-compose.yml
โ”œโ”€โ”€ requirements.txt
โ”œโ”€โ”€ test_results.json               # Esito in tempo reale della suite di test
โ”œโ”€โ”€ .env                            # Provider LLM e Prompt configurabili del Brain
โ”œโ”€โ”€ .env.example                    # Template di configurazione senza segreti
โ”œโ”€โ”€ app/
โ”‚   โ”œโ”€โ”€ MAO/
โ”‚   โ”‚   โ””โ”€โ”€ model_access_object.py  # Model Access Object (OpenRouter, Gemini, LLM Locale)
โ”‚   โ”œโ”€โ”€ agents/
โ”‚   โ”‚   โ”œโ”€โ”€ base_agent.py           # DNA comune di ogni agente (applica stato, idoneitร , escalation)
โ”‚   โ”‚   โ”œโ”€โ”€ agent_climate.py        # Agente Clima nativo
โ”‚   โ”‚   โ”œโ”€โ”€ dynamic_agent.py        # Agente Dinamico configurabile a runtime (Livelli 1..N)
โ”‚   โ”‚   โ”œโ”€โ”€ agent_registry.py       # Registro gerarchico salvato su DB SQLite
โ”‚   โ”‚   โ””โ”€โ”€ medical_agents.py       # Agenti Fisiologici (Cardiovascolare, Respiratorio)
โ”‚   โ”œโ”€โ”€ graph/
โ”‚   โ”‚   โ”œโ”€โ”€ orchestrator.py         # Cervello (BrainAgent - Livello 0)
โ”‚   โ”‚   โ”œโ”€โ”€ builder.py              # Builder del grafo LangGraph con wrapper HITL
โ”‚   โ”‚   โ”œโ”€โ”€ hitl_config.py          # Manager della configurazione dinamica HITL
โ”‚   โ”‚   โ””โ”€โ”€ state.py                # GraphState condiviso
โ”‚   โ”œโ”€โ”€ tools/
โ”‚   โ”‚   โ”œโ”€โ”€ baseTool.py             # Classe base astratta per tutti i tool IoT/Medici
โ”‚   โ”‚   โ”œโ”€โ”€ sensor_tools.py         # Tool Smart Home (AC, Serratura, Allarme)
โ”‚   โ”‚   โ”œโ”€โ”€ medical_tools.py        # Tool Medici (Pacemaker, Ventilatore SpO2, Normalizzatore)
โ”‚   โ”‚   โ”œโ”€โ”€ event_log.py            # Sistema Nervoso: audit log eventi e sblocco TTL
โ”‚   โ”‚   โ””โ”€โ”€ tool_wrapper.py         # Tool execution logging/wrapper
โ”‚   โ”œโ”€โ”€ db/
โ”‚   โ”‚   โ””โ”€โ”€ database.py             # Setup SQLite (tabelle events, readings, agents_registry)
โ”‚   โ”œโ”€โ”€ api/
โ”‚   โ”‚   โ””โ”€โ”€ main.py                 # API REST FastAPI complete (100% headless con DELETE /system/reset)
โ”‚   โ”œโ”€โ”€ checkpointer.py             # Checkpointer LangGraph per la persistenza
โ”‚   โ””โ”€โ”€ observability/
โ”‚       โ””โ”€โ”€ tracing.py              # Tracing e logging strutturato
โ”œโ”€โ”€ examples/
โ”‚   โ”œโ”€โ”€ hierarchical_pattern/
โ”‚   โ”‚   โ””โ”€โ”€ demo_hierarchy.py       # Demo Gerarchia Smart Home N-Livelli
โ”‚   โ””โ”€โ”€ medical_homeostasis/
โ”‚       โ””โ”€โ”€ demo_medical_homeostasis.py # Demo Omeostasi Fisiologica & Risoluzione Patologie
โ”œโ”€โ”€ tests/
โ”‚   โ””โ”€โ”€ test_all.py                 # Suite di test automatizzata (38 test unitari & integrati)
โ””โ”€โ”€ docs/
    โ””โ”€โ”€ HOW_TO_CUSTOMIZE.md         # Guida alla personalizzazione e mappatura API

๐Ÿ› ๏ธ Stack Tecnologico

ComponenteSceltaPerchรฉ
Framework AgentiLangGraphGrafi stateful con cicli, routing condizionale e checkpointing nativo
Provider LLMMAO ProxySupporto per OpenRouter, Google AI Studio (Gemini) e LLM Locali (vLLM, LM Studio)
API ServerFastAPIServer HTTP/REST asincrono 100% headless con Swagger UI interattiva
DatabaseSQLite (aiosqlite)Zero setup, persistenza audit log eventi, registro agenti e stato

โš™๏ธ Configurazione MAO e contratti di dominio

Le chiamate LLM sono asincrone. Il timeout HTTP del MAO รจ configurato da MAO_TIMEOUT_SECONDS e vale 40 secondi se la variabile non รจ presente o non รจ valida. Per un modello su un'altra macchina della LAN, imposta sia LOCAL_MODEL_BASE_URL sia LOCAL_MODEL_DOCKER_BASE_URL sull'endpoint OpenAI-compatible raggiungibile (per esempio http://172.16.77.153:8080/v1) e usa in LOCAL_MODEL l'ID restituito da GET /v1/models.

LangBrain tratta action, old_value e new_value come dati estensibili. Il boilerplate non puรฒ conoscere gli stati fisici validi di ogni dominio: chi aggiunge un tool o agente deve implementare e testare la propria validazione/mappatura (per esempio LOCKED/UNLOCKED per una serratura). I flag interni come REJECTED e BLOCKED vengono segnalati dall'health check, ma non trasformati automaticamente in uno stato fisico.

Gli smoke test smoke_test_full.ps1 e smoke_test_full_v2.ps1 verificano prima /v1/models, configurano un vero interrupt sul target dell'override e usano decodifica UTF-8 esplicita su Windows PowerShell 5.1.


๐Ÿš€ Esempi Dimostrativi Inclusi

  1. Gerarchia Smart Home (examples/hierarchical_pattern/demo_hierarchy.py):

    python3 examples/hierarchical_pattern/demo_hierarchy.py
    

    Dimostra l'escalation ricorsiva da un sotto-componente serratura (Livello 2) all'organo sicurezza (Livello 1) fino al Cervello (Livello 0).

  2. Omeostasi Medica & Patologie (examples/medical_homeostasis/demo_medical_homeostasis.py):

    python3 examples/medical_homeostasis/demo_medical_homeostasis.py
    

    Simula l'insorgenza di patologie cliniche (Tachicardia 160 BPM, Ipossia 82% SpO2) e l'intervento automatico degli Agenti Fisiologici per riportare l'organismo in omeostasi.


๐Ÿงช Esecuzione della Suite di Test

Per eseguire la suite legacy custom e aggiornare test_results.json:

python3 tests/test_all.py

Per eseguire i test di regressione asincroni standard:

python -m unittest tests.test_blocking_regressions -v

Per il test end-to-end con modello locale usa smoke_test_full_v2.ps1. Per una verifica API compatta usa lo smoke test PowerShell per Windows; รจ disponibile anche la versione Bash.


๐Ÿ“„ Licenza

Polyform Small Business License 1.0.0, libero per uso personale ed aziendale fino a soglia di fatturato.

See what people are saying

Contributors

youssouf994

8 commits

Languages

Python

86.4%

PowerShell

13.2%