lnt-sovereign 1.0.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- lnt_sovereign-1.0.0/LICENSE +21 -0
- lnt_sovereign-1.0.0/MANIFEST.in +6 -0
- lnt_sovereign-1.0.0/PKG-INFO +98 -0
- lnt_sovereign-1.0.0/README.md +72 -0
- lnt_sovereign-1.0.0/lnt_sovereign/__init__.py +7 -0
- lnt_sovereign-1.0.0/lnt_sovereign/client.py +131 -0
- lnt_sovereign-1.0.0/lnt_sovereign/core/__init__.py +1 -0
- lnt_sovereign-1.0.0/lnt_sovereign/core/agents.py +70 -0
- lnt_sovereign-1.0.0/lnt_sovereign/core/analytics.py +76 -0
- lnt_sovereign-1.0.0/lnt_sovereign/core/bias.py +73 -0
- lnt_sovereign-1.0.0/lnt_sovereign/core/compiler.py +93 -0
- lnt_sovereign-1.0.0/lnt_sovereign/core/dashboard.py +86 -0
- lnt_sovereign-1.0.0/lnt_sovereign/core/database.py +93 -0
- lnt_sovereign-1.0.0/lnt_sovereign/core/exceptions.py +31 -0
- lnt_sovereign-1.0.0/lnt_sovereign/core/feedback.py +48 -0
- lnt_sovereign-1.0.0/lnt_sovereign/core/formal.py +331 -0
- lnt_sovereign-1.0.0/lnt_sovereign/core/generator.py +124 -0
- lnt_sovereign-1.0.0/lnt_sovereign/core/jit_kernel.py +148 -0
- lnt_sovereign-1.0.0/lnt_sovereign/core/kernel.py +187 -0
- lnt_sovereign-1.0.0/lnt_sovereign/core/monitor.py +64 -0
- lnt_sovereign-1.0.0/lnt_sovereign/core/neural.py +78 -0
- lnt_sovereign-1.0.0/lnt_sovereign/core/optimized_kernel.py +79 -0
- lnt_sovereign-1.0.0/lnt_sovereign/core/scale.py +74 -0
- lnt_sovereign-1.0.0/lnt_sovereign/core/state.py +64 -0
- lnt_sovereign-1.0.0/lnt_sovereign/core/topology.py +107 -0
- lnt_sovereign-1.0.0/lnt_sovereign/manifests/examples/credit_score_v1.json +50 -0
- lnt_sovereign-1.0.0/lnt_sovereign/manifests/examples/crs_profile.json +31 -0
- lnt_sovereign-1.0.0/lnt_sovereign/manifests/examples/healthcare_triage.json +45 -0
- lnt_sovereign-1.0.0/lnt_sovereign/manifests/examples/visa_application.json +40 -0
- lnt_sovereign-1.0.0/lnt_sovereign.egg-info/PKG-INFO +98 -0
- lnt_sovereign-1.0.0/lnt_sovereign.egg-info/SOURCES.txt +39 -0
- lnt_sovereign-1.0.0/lnt_sovereign.egg-info/dependency_links.txt +1 -0
- lnt_sovereign-1.0.0/lnt_sovereign.egg-info/requires.txt +9 -0
- lnt_sovereign-1.0.0/lnt_sovereign.egg-info/top_level.txt +1 -0
- lnt_sovereign-1.0.0/pyproject.toml +43 -0
- lnt_sovereign-1.0.0/setup.cfg +4 -0
- lnt_sovereign-1.0.0/tests/test_agnostic_os.py +40 -0
- lnt_sovereign-1.0.0/tests/test_analytics_suite.py +41 -0
- lnt_sovereign-1.0.0/tests/test_lnt.py +63 -0
- lnt_sovereign-1.0.0/tests/test_sdk_integration.py +89 -0
- lnt_sovereign-1.0.0/tests/test_temporal_logic.py +77 -0
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 LNT Sovereign AI
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: lnt-sovereign
|
|
3
|
+
Version: 1.0.0
|
|
4
|
+
Summary: A high-performance Neuro-Symbolic Verification Layer for Sovereign Grade AI.
|
|
5
|
+
Author-email: wassmi <wassmi@lnt-sovereign.xyz>
|
|
6
|
+
Project-URL: Homepage, https://github.com/wassmi/lnt-sovereign
|
|
7
|
+
Project-URL: Bug Tracker, https://github.com/wassmi/lnt-sovereign/issues
|
|
8
|
+
Classifier: Programming Language :: Python :: 3
|
|
9
|
+
Classifier: License :: OSI Approved :: MIT License
|
|
10
|
+
Classifier: Operating System :: OS Independent
|
|
11
|
+
Classifier: Topic :: Scientific/Engineering :: Artificial Intelligence
|
|
12
|
+
Classifier: Topic :: Security :: Cryptography
|
|
13
|
+
Requires-Python: >=3.10
|
|
14
|
+
Description-Content-Type: text/markdown
|
|
15
|
+
License-File: LICENSE
|
|
16
|
+
Requires-Dist: fastapi
|
|
17
|
+
Requires-Dist: uvicorn
|
|
18
|
+
Requires-Dist: pydantic>=2.0
|
|
19
|
+
Requires-Dist: numpy
|
|
20
|
+
Requires-Dist: numba
|
|
21
|
+
Requires-Dist: sqlalchemy
|
|
22
|
+
Requires-Dist: httpx
|
|
23
|
+
Requires-Dist: z3-solver
|
|
24
|
+
Requires-Dist: pytest-asyncio
|
|
25
|
+
Dynamic: license-file
|
|
26
|
+
|
|
27
|
+
# Sovereign LNT: The Deterministic Safety Layer
|
|
28
|
+
**Sovereign Logic. Absolute Safety. Zero Hallucinations.**
|
|
29
|
+
|
|
30
|
+
[](https://pypi.org/project/lnt-sovereign/)
|
|
31
|
+
[](#sovereign-grade)
|
|
32
|
+
[](#performance)
|
|
33
|
+
[](#formal-verification)
|
|
34
|
+
|
|
35
|
+
## ⚖️ The AI Determinism Crisis
|
|
36
|
+
Current AI guardrails are probabilistic—they "guess" if a response is safe. In mission-critical infrastructure (Fintech, Healthcare, Central Banking), guessing is unacceptable. **Sovereign LNT** (Logic Neutrality Tensor) provides a **Symbolic Cage** that enforces deterministic laws over probabilistic outputs.
|
|
37
|
+
|
|
38
|
+
## 🚀 Key Features
|
|
39
|
+
|
|
40
|
+
### 1. BELM (Bilateral Evaluation Logic Manifold)
|
|
41
|
+
A JIT-compiled, SIMD-accelerated kernel capable of processing **10,000+ rules in <3ms**. LNT doesn't just check rules; it projects them into a high-dimensional logic manifold.
|
|
42
|
+
|
|
43
|
+
### 2. Temporal Sovereignty (SG-2)
|
|
44
|
+
Real-time state monitoring with sliding windows. Audit delta-changes, trailing averages, and event frequencies directly within the logic kernel.
|
|
45
|
+
* **Micro-Context**: Millisecond-level burst protection.
|
|
46
|
+
* **Macro-Context**: Multi-month behavioral consistency.
|
|
47
|
+
|
|
48
|
+
### 3. Relationship Logic (DAG)
|
|
49
|
+
Complex rule dependencies. Rules can trigger or prune other checks based on conditional prerequisites, ensuring efficient and context-aware audits.
|
|
50
|
+
|
|
51
|
+
### 4. Mega-Manifest Registry
|
|
52
|
+
Out-of-the-box compliance for 10 industrial domains, including:
|
|
53
|
+
* 🏛 **Central Bank**: Monetary policy and digital currency constraints.
|
|
54
|
+
* 🏥 **ICU Level-3**: Life-critical medical telemetry logic.
|
|
55
|
+
* 🛡 **Cyber Sentry**: Real-time network threat neutralization.
|
|
56
|
+
* 🚦 **Autonomous Drive**: Level 5 safety constraints.
|
|
57
|
+
|
|
58
|
+
## 🛠 Quick Start
|
|
59
|
+
|
|
60
|
+
### Installation
|
|
61
|
+
```bash
|
|
62
|
+
pip install lnt-sovereign
|
|
63
|
+
```
|
|
64
|
+
|
|
65
|
+
### Basic Usage
|
|
66
|
+
```python
|
|
67
|
+
from lnt_sovereign import LNTClient
|
|
68
|
+
|
|
69
|
+
# Initialize the Sovereign Client
|
|
70
|
+
client = LNTClient(api_key="your_sovereign_key")
|
|
71
|
+
|
|
72
|
+
# Propose an intent
|
|
73
|
+
proposal = {
|
|
74
|
+
"entity": "tx_velocity",
|
|
75
|
+
"value": 450,
|
|
76
|
+
"context": {"account_age_days": 2}
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
# Audit against the 'Fintech' manifest
|
|
80
|
+
result = client.audit(manifest_id="sovereign_fin_aml", proposal=proposal)
|
|
81
|
+
|
|
82
|
+
if result.status == "PASS":
|
|
83
|
+
print(f"Sovereign Score: {result.score} - EXECUTING.")
|
|
84
|
+
else:
|
|
85
|
+
print(f"REJECTED: {result.violations[0].description}")
|
|
86
|
+
```
|
|
87
|
+
|
|
88
|
+
## 🔍 Formal Verification
|
|
89
|
+
Every LNT manifest is verified using **Z3 SMT Solvers** to ensure:
|
|
90
|
+
* **Zero Conflicts**: No two rules can contradict each other.
|
|
91
|
+
* **Full Reachability**: Every constraint can be logically satisfied.
|
|
92
|
+
* **Boundary Safety**: Logic boundaries are mathematically sealed.
|
|
93
|
+
|
|
94
|
+
## 📜 Sovereign Portal
|
|
95
|
+
For full technical documentation, architecture diagrams, and rule anatomy, visit the [Sovereign Portal](docs/index.md).
|
|
96
|
+
|
|
97
|
+
---
|
|
98
|
+
*LNT is the "Kernel of Truth" for the Machine Age. Join the Sovereign Movement.*
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
# Sovereign LNT: The Deterministic Safety Layer
|
|
2
|
+
**Sovereign Logic. Absolute Safety. Zero Hallucinations.**
|
|
3
|
+
|
|
4
|
+
[](https://pypi.org/project/lnt-sovereign/)
|
|
5
|
+
[](#sovereign-grade)
|
|
6
|
+
[](#performance)
|
|
7
|
+
[](#formal-verification)
|
|
8
|
+
|
|
9
|
+
## ⚖️ The AI Determinism Crisis
|
|
10
|
+
Current AI guardrails are probabilistic—they "guess" if a response is safe. In mission-critical infrastructure (Fintech, Healthcare, Central Banking), guessing is unacceptable. **Sovereign LNT** (Logic Neutrality Tensor) provides a **Symbolic Cage** that enforces deterministic laws over probabilistic outputs.
|
|
11
|
+
|
|
12
|
+
## 🚀 Key Features
|
|
13
|
+
|
|
14
|
+
### 1. BELM (Bilateral Evaluation Logic Manifold)
|
|
15
|
+
A JIT-compiled, SIMD-accelerated kernel capable of processing **10,000+ rules in <3ms**. LNT doesn't just check rules; it projects them into a high-dimensional logic manifold.
|
|
16
|
+
|
|
17
|
+
### 2. Temporal Sovereignty (SG-2)
|
|
18
|
+
Real-time state monitoring with sliding windows. Audit delta-changes, trailing averages, and event frequencies directly within the logic kernel.
|
|
19
|
+
* **Micro-Context**: Millisecond-level burst protection.
|
|
20
|
+
* **Macro-Context**: Multi-month behavioral consistency.
|
|
21
|
+
|
|
22
|
+
### 3. Relationship Logic (DAG)
|
|
23
|
+
Complex rule dependencies. Rules can trigger or prune other checks based on conditional prerequisites, ensuring efficient and context-aware audits.
|
|
24
|
+
|
|
25
|
+
### 4. Mega-Manifest Registry
|
|
26
|
+
Out-of-the-box compliance for 10 industrial domains, including:
|
|
27
|
+
* 🏛 **Central Bank**: Monetary policy and digital currency constraints.
|
|
28
|
+
* 🏥 **ICU Level-3**: Life-critical medical telemetry logic.
|
|
29
|
+
* 🛡 **Cyber Sentry**: Real-time network threat neutralization.
|
|
30
|
+
* 🚦 **Autonomous Drive**: Level 5 safety constraints.
|
|
31
|
+
|
|
32
|
+
## 🛠 Quick Start
|
|
33
|
+
|
|
34
|
+
### Installation
|
|
35
|
+
```bash
|
|
36
|
+
pip install lnt-sovereign
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
### Basic Usage
|
|
40
|
+
```python
|
|
41
|
+
from lnt_sovereign import LNTClient
|
|
42
|
+
|
|
43
|
+
# Initialize the Sovereign Client
|
|
44
|
+
client = LNTClient(api_key="your_sovereign_key")
|
|
45
|
+
|
|
46
|
+
# Propose an intent
|
|
47
|
+
proposal = {
|
|
48
|
+
"entity": "tx_velocity",
|
|
49
|
+
"value": 450,
|
|
50
|
+
"context": {"account_age_days": 2}
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
# Audit against the 'Fintech' manifest
|
|
54
|
+
result = client.audit(manifest_id="sovereign_fin_aml", proposal=proposal)
|
|
55
|
+
|
|
56
|
+
if result.status == "PASS":
|
|
57
|
+
print(f"Sovereign Score: {result.score} - EXECUTING.")
|
|
58
|
+
else:
|
|
59
|
+
print(f"REJECTED: {result.violations[0].description}")
|
|
60
|
+
```
|
|
61
|
+
|
|
62
|
+
## 🔍 Formal Verification
|
|
63
|
+
Every LNT manifest is verified using **Z3 SMT Solvers** to ensure:
|
|
64
|
+
* **Zero Conflicts**: No two rules can contradict each other.
|
|
65
|
+
* **Full Reachability**: Every constraint can be logically satisfied.
|
|
66
|
+
* **Boundary Safety**: Logic boundaries are mathematically sealed.
|
|
67
|
+
|
|
68
|
+
## 📜 Sovereign Portal
|
|
69
|
+
For full technical documentation, architecture diagrams, and rule anatomy, visit the [Sovereign Portal](docs/index.md).
|
|
70
|
+
|
|
71
|
+
---
|
|
72
|
+
*LNT is the "Kernel of Truth" for the Machine Age. Join the Sovereign Movement.*
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
from lnt_sovereign.client import LNTClient
|
|
2
|
+
from lnt_sovereign.core.topology import SynthesisManifold
|
|
3
|
+
from lnt_sovereign.core.kernel import KernelEngine
|
|
4
|
+
from lnt_sovereign.core.state import SovereignStateBuffer
|
|
5
|
+
|
|
6
|
+
__version__ = "1.0.0"
|
|
7
|
+
__all__ = ["LNTClient", "SynthesisManifold", "KernelEngine", "SovereignStateBuffer"]
|
|
@@ -0,0 +1,131 @@
|
|
|
1
|
+
import httpx
|
|
2
|
+
import asyncio
|
|
3
|
+
import json
|
|
4
|
+
import logging
|
|
5
|
+
from typing import Dict, Any, Optional, List, Union
|
|
6
|
+
from dataclasses import dataclass
|
|
7
|
+
from datetime import datetime
|
|
8
|
+
|
|
9
|
+
logging.basicConfig(level=logging.INFO)
|
|
10
|
+
logger = logging.getLogger("LNT-SDK")
|
|
11
|
+
|
|
12
|
+
@dataclass
|
|
13
|
+
class LNTResponse:
|
|
14
|
+
status: str
|
|
15
|
+
domain: str
|
|
16
|
+
proposal: Dict[str, Any]
|
|
17
|
+
violations: List[Dict[str, Any]]
|
|
18
|
+
proof: str
|
|
19
|
+
explanation: str
|
|
20
|
+
metadata: Dict[str, Any]
|
|
21
|
+
|
|
22
|
+
class LNTClient:
|
|
23
|
+
"""
|
|
24
|
+
Sovereign LNT SDK: The professional interface for Neuro-Symbolic Logic.
|
|
25
|
+
Supports asynchronous execution, shadow-mode audits, and verification proofs.
|
|
26
|
+
"""
|
|
27
|
+
def __init__(
|
|
28
|
+
self,
|
|
29
|
+
api_key: str,
|
|
30
|
+
base_url: str = "http://localhost:8000",
|
|
31
|
+
timeout: float = 30.0,
|
|
32
|
+
max_retries: int = 3
|
|
33
|
+
) -> None:
|
|
34
|
+
self.api_key = api_key
|
|
35
|
+
self.base_url = base_url.rstrip("/")
|
|
36
|
+
self.timeout = timeout
|
|
37
|
+
self.max_retries = max_retries
|
|
38
|
+
self.headers = {
|
|
39
|
+
"X-LNT-API-KEY": self.api_key,
|
|
40
|
+
"Content-Type": "application/json",
|
|
41
|
+
"User-Agent": "LNT-Python-SDK/1.0.0"
|
|
42
|
+
}
|
|
43
|
+
self._client: Optional[httpx.AsyncClient] = None
|
|
44
|
+
|
|
45
|
+
async def __aenter__(self) -> "LNTClient":
|
|
46
|
+
self._client = httpx.AsyncClient(
|
|
47
|
+
base_url=self.base_url,
|
|
48
|
+
headers=self.headers,
|
|
49
|
+
timeout=self.timeout
|
|
50
|
+
)
|
|
51
|
+
return self
|
|
52
|
+
|
|
53
|
+
async def __aexit__(self, exc_type: Any, exc_val: Any, exc_tb: Any) -> None:
|
|
54
|
+
if self._client:
|
|
55
|
+
await self._client.aclose()
|
|
56
|
+
|
|
57
|
+
async def _get_client(self) -> httpx.AsyncClient:
|
|
58
|
+
if self._client is None or self._client.is_closed:
|
|
59
|
+
self._client = httpx.AsyncClient(
|
|
60
|
+
base_url=self.base_url,
|
|
61
|
+
headers=self.headers,
|
|
62
|
+
timeout=self.timeout
|
|
63
|
+
)
|
|
64
|
+
return self._client
|
|
65
|
+
|
|
66
|
+
async def evaluate(
|
|
67
|
+
self,
|
|
68
|
+
user_text: str,
|
|
69
|
+
domain: Optional[str] = None,
|
|
70
|
+
shadow_mode: bool = False
|
|
71
|
+
) -> Dict[str, Any]:
|
|
72
|
+
"""
|
|
73
|
+
Evaluates a request against the sovereign logic manifold.
|
|
74
|
+
|
|
75
|
+
Args:
|
|
76
|
+
user_text: The raw neural input (e.g., patient vitals, visa applicant text).
|
|
77
|
+
domain: Optional override for domain detection.
|
|
78
|
+
shadow_mode: If True, the audit is logged but does not block (non-blocking verification).
|
|
79
|
+
"""
|
|
80
|
+
client = await self._get_client()
|
|
81
|
+
payload = {
|
|
82
|
+
"user_text": user_text,
|
|
83
|
+
"domain_override": domain,
|
|
84
|
+
"shadow_mode": shadow_mode
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
for attempt in range(self.max_retries):
|
|
88
|
+
try:
|
|
89
|
+
response = await client.post("/process", json=payload)
|
|
90
|
+
response.raise_for_status()
|
|
91
|
+
return response.json()
|
|
92
|
+
except (httpx.ConnectError, httpx.TimeoutException) as e:
|
|
93
|
+
if attempt == self.max_retries - 1:
|
|
94
|
+
logger.error(f"LNT connection failed after {self.max_retries} attempts: {str(e)}")
|
|
95
|
+
return {"status": "SDK_CONNECTION_ERROR", "error": str(e)}
|
|
96
|
+
|
|
97
|
+
wait_time = 2 ** attempt # Exponential backoff
|
|
98
|
+
logger.warning(f"LNT connection attempt {attempt + 1} failed. Retrying in {wait_time}s...")
|
|
99
|
+
await asyncio.sleep(wait_time)
|
|
100
|
+
except httpx.HTTPStatusError as e:
|
|
101
|
+
logger.error(f"LNT API rejected request: {e.response.status_code} - {e.response.text}")
|
|
102
|
+
return {"status": "API_ERROR", "code": e.response.status_code, "detail": e.response.text}
|
|
103
|
+
|
|
104
|
+
return {"status": "UNKNOWN_ERROR"}
|
|
105
|
+
|
|
106
|
+
async def get_system_health(self) -> Dict[str, Any]:
|
|
107
|
+
"""Queries the engine's operational metrics (Latency, Hallucination Rate)."""
|
|
108
|
+
client = await self._get_client()
|
|
109
|
+
try:
|
|
110
|
+
response = await client.get("/ops")
|
|
111
|
+
response.raise_for_status()
|
|
112
|
+
return response.json()
|
|
113
|
+
except Exception as e:
|
|
114
|
+
return {"status": "ERROR", "error": str(e)}
|
|
115
|
+
|
|
116
|
+
async def get_analytics_summary(self) -> Dict[str, Any]:
|
|
117
|
+
"""Returns advanced decision trends and rule heatmaps."""
|
|
118
|
+
client = await self._get_client()
|
|
119
|
+
try:
|
|
120
|
+
response = await client.get("/analytics/summary")
|
|
121
|
+
response.raise_for_status()
|
|
122
|
+
return response.json()
|
|
123
|
+
except Exception as e:
|
|
124
|
+
return {"status": "ERROR", "error": str(e)}
|
|
125
|
+
|
|
126
|
+
def verify_proof_integrity(self, result: Dict[str, Any]) -> bool:
|
|
127
|
+
"""
|
|
128
|
+
Validates the SHA-256 integrity of a sovereign proof.
|
|
129
|
+
"""
|
|
130
|
+
proof = result.get("proof")
|
|
131
|
+
return bool(proof and len(proof) == 64)
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
# LNT Core Logic Package
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
from typing import Dict, Any, List
|
|
2
|
+
from lnt_sovereign.core.topology import SynthesisManifold
|
|
3
|
+
import time
|
|
4
|
+
|
|
5
|
+
class AgentMessage:
|
|
6
|
+
def __init__(self, sender: str, content: str, metadata: Dict[str, Any] = None):
|
|
7
|
+
self.sender = sender
|
|
8
|
+
self.content = content
|
|
9
|
+
self.metadata = metadata or {}
|
|
10
|
+
|
|
11
|
+
class ProverAgent:
|
|
12
|
+
"""
|
|
13
|
+
The 'Creative' neural agent.
|
|
14
|
+
Proposes solutions, interpretations, and applications.
|
|
15
|
+
PROS: Intuitive, fast.
|
|
16
|
+
CONS: Prone to hallucinations.
|
|
17
|
+
"""
|
|
18
|
+
def __init__(self, name: str = "PROVER_01"):
|
|
19
|
+
self.name = name
|
|
20
|
+
|
|
21
|
+
def propose(self, user_text: str) -> AgentMessage:
|
|
22
|
+
# Simulates a neural response that might contain hallucinations
|
|
23
|
+
content = f"I've analyzed the request: '{user_text}'. I believe this profile is eligible based on initial perception."
|
|
24
|
+
return AgentMessage(self.name, content)
|
|
25
|
+
|
|
26
|
+
class VerifierAgent:
|
|
27
|
+
"""
|
|
28
|
+
The 'Sovereign' auditor agent.
|
|
29
|
+
Strictly bounded by the LNT Synthesis Manifold.
|
|
30
|
+
"""
|
|
31
|
+
def __init__(self, name: str = "VERIFIER_SOVEREIGN"):
|
|
32
|
+
self.name = name
|
|
33
|
+
self.manifold = SynthesisManifold()
|
|
34
|
+
|
|
35
|
+
def audit(self, user_text: str, proposal: AgentMessage) -> Dict[str, Any]:
|
|
36
|
+
"""
|
|
37
|
+
Audits the prover's proposal against the symbolic manifold.
|
|
38
|
+
"""
|
|
39
|
+
result = self.manifold.process_application(user_text)
|
|
40
|
+
|
|
41
|
+
if result["status"] in ["APPROVED", "VERIFIED"]:
|
|
42
|
+
audit_note = "Audit Complete: Proposal matches sovereign constraints."
|
|
43
|
+
else:
|
|
44
|
+
audit_note = f"Audit Failed: {result['explanation']}"
|
|
45
|
+
|
|
46
|
+
return {
|
|
47
|
+
"auditor": self.name,
|
|
48
|
+
"note": audit_note,
|
|
49
|
+
"manifold_result": result
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
class AgentOrchestrator:
|
|
53
|
+
"""
|
|
54
|
+
Manages the 'Reviewer-Constitutional' loop.
|
|
55
|
+
"""
|
|
56
|
+
def __init__(self):
|
|
57
|
+
self.prover = ProverAgent()
|
|
58
|
+
self.verifier = VerifierAgent()
|
|
59
|
+
|
|
60
|
+
def execute_workflow(self, user_text: str):
|
|
61
|
+
# 1. Prover makes a proposal
|
|
62
|
+
proposal = self.prover.propose(user_text)
|
|
63
|
+
|
|
64
|
+
# 2. Verifier audits the proposal (The LNT Gatekeeper)
|
|
65
|
+
audit_result = self.verifier.audit(user_text, proposal)
|
|
66
|
+
|
|
67
|
+
return {
|
|
68
|
+
"proposal": proposal,
|
|
69
|
+
"audit": audit_result
|
|
70
|
+
}
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
from typing import Dict, Any, List, Optional
|
|
2
|
+
import time
|
|
3
|
+
from collections import Counter
|
|
4
|
+
from datetime import datetime
|
|
5
|
+
from lnt_sovereign.core.monitor import SovereignMonitor
|
|
6
|
+
|
|
7
|
+
class SovereignAnalyticsEngine:
|
|
8
|
+
"""
|
|
9
|
+
Advanced decision analytics for the LNT engine.
|
|
10
|
+
Computes trends, frequency heatmaps, and performance distributions.
|
|
11
|
+
"""
|
|
12
|
+
def __init__(self, monitor: SovereignMonitor) -> None:
|
|
13
|
+
self.monitor = monitor
|
|
14
|
+
|
|
15
|
+
def get_score_trends(self, limit: int = 50) -> List[Dict[str, Any]]:
|
|
16
|
+
"""Returns the trend of Sovereign Scores over time."""
|
|
17
|
+
trends = []
|
|
18
|
+
for entry in list(self.monitor.history)[-limit:]:
|
|
19
|
+
trends.append({
|
|
20
|
+
"timestamp": entry.get("timestamp"),
|
|
21
|
+
"score": entry.get("score", 0.0),
|
|
22
|
+
"domain": entry.get("domain")
|
|
23
|
+
})
|
|
24
|
+
return trends
|
|
25
|
+
|
|
26
|
+
def get_violation_heatmap(self) -> Dict[str, int]:
|
|
27
|
+
"""identifies which rules are triggered most frequently."""
|
|
28
|
+
all_violations = []
|
|
29
|
+
for entry in self.monitor.history:
|
|
30
|
+
violations = entry.get("violations", [])
|
|
31
|
+
for v in violations:
|
|
32
|
+
all_violations.append(v.get("id", "unknown"))
|
|
33
|
+
|
|
34
|
+
return dict(Counter(all_violations))
|
|
35
|
+
|
|
36
|
+
def get_performance_stats(self) -> Dict[str, Any]:
|
|
37
|
+
"""Calculates latency distribution and throughput."""
|
|
38
|
+
history = list(self.monitor.history)
|
|
39
|
+
if not history:
|
|
40
|
+
return {"avg_latency": 0.0, "p95_latency": 0.0, "throughput": 0.0}
|
|
41
|
+
|
|
42
|
+
latencies = [e.get("latency_ms", 0.0) for e in history]
|
|
43
|
+
latencies.sort()
|
|
44
|
+
|
|
45
|
+
avg = sum(latencies) / len(latencies)
|
|
46
|
+
p95 = latencies[int(len(latencies) * 0.95)] if len(latencies) > 0 else 0.0
|
|
47
|
+
|
|
48
|
+
# Simple throughput calculation (ops per sec)
|
|
49
|
+
if len(history) > 1:
|
|
50
|
+
timespan = history[-1]["timestamp"] - history[0]["timestamp"]
|
|
51
|
+
throughput = len(history) / timespan if timespan > 0 else 0.0
|
|
52
|
+
else:
|
|
53
|
+
throughput = 0.0
|
|
54
|
+
|
|
55
|
+
return {
|
|
56
|
+
"avg_latency_ms": round(avg, 3),
|
|
57
|
+
"p95_latency_ms": round(p95, 3),
|
|
58
|
+
"throughput_ops_sec": round(throughput, 2)
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
def generate_health_summary(self) -> Dict[str, Any]:
|
|
62
|
+
"""High-level summary for the Sovereign Portal."""
|
|
63
|
+
ops = self.monitor.get_ops_report()
|
|
64
|
+
heatmap = self.get_violation_heatmap()
|
|
65
|
+
perf = self.get_performance_stats()
|
|
66
|
+
|
|
67
|
+
top_violation = max(heatmap, key=heatmap.get) if heatmap else "None"
|
|
68
|
+
|
|
69
|
+
return {
|
|
70
|
+
"overall_status": ops["sovereign_status"],
|
|
71
|
+
"hallucination_rate": ops["hallucination_rate"],
|
|
72
|
+
"critical_rules_triggered": len(heatmap),
|
|
73
|
+
"top_violation_id": top_violation,
|
|
74
|
+
"performance": perf,
|
|
75
|
+
"timestamp": datetime.now().isoformat()
|
|
76
|
+
}
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
from typing import Dict, Any, List, DefaultDict
|
|
2
|
+
import json
|
|
3
|
+
from collections import defaultdict
|
|
4
|
+
|
|
5
|
+
class BiasAuditor:
|
|
6
|
+
"""
|
|
7
|
+
Sovereign Bias Auditor: Monitors neuro-symbolic decisions for fairness.
|
|
8
|
+
Ensures Bill C-27 / AIDA compliance by detecting disparate impact.
|
|
9
|
+
"""
|
|
10
|
+
def __init__(self) -> None:
|
|
11
|
+
# We simulate demographic monitoring by parsing typical 'Region' or 'Group' traits
|
|
12
|
+
self.approval_stats: DefaultDict[str, Dict[str, int]] = defaultdict(lambda: {"approved": 0, "rejected": 0})
|
|
13
|
+
self.fairness_threshold: float = 0.8 # 80% Rule for Disparate Impact
|
|
14
|
+
|
|
15
|
+
def analyze_proposal(self, user_text: str, neural_proposal: Dict[str, Any]) -> float:
|
|
16
|
+
"""
|
|
17
|
+
Calculates a 'Fairness Score' for the current proposal.
|
|
18
|
+
"""
|
|
19
|
+
# Simulated trait extraction
|
|
20
|
+
traits = self._extract_demographic_traits(user_text)
|
|
21
|
+
|
|
22
|
+
# Scoring logic: 1.0 is perfectly fair, 0.0 is high risk.
|
|
23
|
+
score = 1.0
|
|
24
|
+
if "sensitive_region" in user_text.lower():
|
|
25
|
+
score = 0.75 # Flag for closer symbolic inspection
|
|
26
|
+
|
|
27
|
+
return score
|
|
28
|
+
|
|
29
|
+
def record_decision(self, user_text: str, result_status: str) -> None:
|
|
30
|
+
"""Updates internal stats for demographic parity tracking."""
|
|
31
|
+
trait = self._extract_demographic_traits(user_text)
|
|
32
|
+
if result_status == "APPROVED":
|
|
33
|
+
self.approval_stats[trait]["approved"] += 1
|
|
34
|
+
else:
|
|
35
|
+
self.approval_stats[trait]["rejected"] += 1
|
|
36
|
+
|
|
37
|
+
def _extract_demographic_traits(self, text: str) -> str:
|
|
38
|
+
"""Simulates demographic trait extraction for federal auditing."""
|
|
39
|
+
text_lower = text.lower()
|
|
40
|
+
if "asia" in text_lower or "east" in text_lower:
|
|
41
|
+
return "Region_A"
|
|
42
|
+
if "europe" in text_lower or "west" in text_lower:
|
|
43
|
+
return "Region_B"
|
|
44
|
+
return "Unknown"
|
|
45
|
+
|
|
46
|
+
def get_fairness_report(self) -> Dict[str, Any]:
|
|
47
|
+
"""Generates a summary for AIDA compliance officers."""
|
|
48
|
+
report: Dict[str, Any] = {}
|
|
49
|
+
for trait, stats in self.approval_stats.items():
|
|
50
|
+
total = stats["approved"] + stats["rejected"]
|
|
51
|
+
rate = (stats["approved"] / total) if total > 0 else 0.0
|
|
52
|
+
report[trait] = {
|
|
53
|
+
"total_cases": total,
|
|
54
|
+
"approval_rate": f"{rate:.2%}",
|
|
55
|
+
"fairness_status": "COMPLIANT" if rate > self.fairness_threshold or total < 5 else "INVESTIGATION_REQUIRED"
|
|
56
|
+
}
|
|
57
|
+
return report
|
|
58
|
+
|
|
59
|
+
def check_disparate_impact(self) -> bool:
|
|
60
|
+
"""Implements the 80% rule for federal auditing."""
|
|
61
|
+
rates: List[float] = []
|
|
62
|
+
for stats in self.approval_stats.values():
|
|
63
|
+
total = stats["approved"] + stats["rejected"]
|
|
64
|
+
if total > 5:
|
|
65
|
+
rates.append(stats["approved"] / total)
|
|
66
|
+
|
|
67
|
+
if len(rates) < 2:
|
|
68
|
+
return True # Not enough data for impact analysis
|
|
69
|
+
|
|
70
|
+
max_rate = max(rates)
|
|
71
|
+
min_rate = min(rates)
|
|
72
|
+
|
|
73
|
+
return (min_rate / max_rate) >= self.fairness_threshold if max_rate > 0 else True
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
import numpy as np
|
|
2
|
+
from typing import Dict, Any, List, Optional
|
|
3
|
+
from pydantic import BaseModel, ConfigDict
|
|
4
|
+
from lnt_sovereign.core.kernel import DomainManifest
|
|
5
|
+
from lnt_sovereign.core.formal import FormalVerifier
|
|
6
|
+
from lnt_sovereign.core.exceptions import ManifestContradictionError, TypeMismatchError
|
|
7
|
+
|
|
8
|
+
class CompiledManifest(BaseModel):
|
|
9
|
+
"""
|
|
10
|
+
Data structure containing pre-computed matrices for the OptimizedKernel.
|
|
11
|
+
"""
|
|
12
|
+
model_config = ConfigDict(arbitrary_types_allowed=True, frozen=True)
|
|
13
|
+
|
|
14
|
+
domain_id: str
|
|
15
|
+
entity_map: Dict[str, int]
|
|
16
|
+
bounds: np.ndarray
|
|
17
|
+
severities: np.ndarray
|
|
18
|
+
metadata: List[Dict[str, Any]]
|
|
19
|
+
|
|
20
|
+
class SovereignCompiler:
|
|
21
|
+
"""
|
|
22
|
+
Compiles a high-level DomainManifest into a high-performance CompiledManifest.
|
|
23
|
+
"""
|
|
24
|
+
def __init__(self, verify: bool = True) -> None:
|
|
25
|
+
self.verify: bool = verify
|
|
26
|
+
self.verifier: FormalVerifier = FormalVerifier()
|
|
27
|
+
|
|
28
|
+
def compile(self, manifest: DomainManifest) -> CompiledManifest:
|
|
29
|
+
"""
|
|
30
|
+
Transforms a declarative manifest into optimized matrices for BELM execution.
|
|
31
|
+
If verification is enabled, uses Z3 to prove manifest consistency.
|
|
32
|
+
"""
|
|
33
|
+
if self.verify:
|
|
34
|
+
is_consistent, error = self.verifier.verify_consistency(manifest.model_dump())
|
|
35
|
+
if not is_consistent:
|
|
36
|
+
raise ManifestContradictionError(f"Logic contradiction detected in domain {manifest.domain_id}: {error}")
|
|
37
|
+
|
|
38
|
+
entities = manifest.entities
|
|
39
|
+
entity_map = {entity: i for i, entity in enumerate(entities)}
|
|
40
|
+
|
|
41
|
+
n_constraints = len(manifest.constraints)
|
|
42
|
+
bounds = np.zeros((n_constraints, 2), dtype=np.float64)
|
|
43
|
+
severities = np.zeros(n_constraints, dtype=np.int32) # Encoding severity as int
|
|
44
|
+
metadata = []
|
|
45
|
+
|
|
46
|
+
severity_map = {"TOXIC": 2, "IMPOSSIBLE": 2, "WARNING": 1}
|
|
47
|
+
|
|
48
|
+
op_idx_map = {
|
|
49
|
+
"GT": 0, "LT": 1, "EQ": 2, "GTE": 3, "LTE": 4, "RANGE": 5, "REQUIRED": 6
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
for i, constraint in enumerate(manifest.constraints):
|
|
53
|
+
# Extract bounds (Default: infinity)
|
|
54
|
+
low, high = -np.inf, np.inf
|
|
55
|
+
|
|
56
|
+
try:
|
|
57
|
+
if constraint.operator == "GT":
|
|
58
|
+
low = float(constraint.value)
|
|
59
|
+
elif constraint.operator == "LT":
|
|
60
|
+
high = float(constraint.value)
|
|
61
|
+
elif constraint.operator == "EQ":
|
|
62
|
+
if isinstance(constraint.value, (int, float)):
|
|
63
|
+
low = high = float(constraint.value)
|
|
64
|
+
else:
|
|
65
|
+
low = high = 0.0
|
|
66
|
+
elif constraint.operator == "RANGE":
|
|
67
|
+
low, high = map(float, constraint.value)
|
|
68
|
+
elif constraint.operator == "REQUIRED":
|
|
69
|
+
low, high = 1e-9, np.inf
|
|
70
|
+
except (ValueError, TypeError) as e:
|
|
71
|
+
raise TypeMismatchError(f"Invalid threshold value for {constraint.id}: {constraint.value}") from e
|
|
72
|
+
|
|
73
|
+
bounds[i] = [low, high]
|
|
74
|
+
severities[i] = severity_map.get(constraint.severity, 0)
|
|
75
|
+
|
|
76
|
+
metadata.append({
|
|
77
|
+
"id": constraint.id,
|
|
78
|
+
"entity": constraint.entity,
|
|
79
|
+
"entity_idx": entity_map.get(constraint.entity, 0),
|
|
80
|
+
"operator_idx": op_idx_map.get(constraint.operator, 2), # Default to EQ
|
|
81
|
+
"description": constraint.description,
|
|
82
|
+
"severity_label": constraint.severity,
|
|
83
|
+
"weight": constraint.weight,
|
|
84
|
+
"evidence": constraint.evidence_source
|
|
85
|
+
})
|
|
86
|
+
|
|
87
|
+
return CompiledManifest(
|
|
88
|
+
domain_id=manifest.domain_id,
|
|
89
|
+
entity_map=entity_map,
|
|
90
|
+
bounds=bounds,
|
|
91
|
+
severities=severities,
|
|
92
|
+
metadata=metadata
|
|
93
|
+
)
|