Deterministic state-guardrails for agentic hardware & critical systems.
Project description
🛡️ SilverAi
Deterministic State-Guardrails for Agentic Hardware & Critical Systems.
"You wouldn't let a drunk person drive a forklift. Why let a probabilistic LLM drive your physical hardware?"
🚨 The Problem
Large Language Models (LLMs) like GPT-4, DeepSeek, and Claude are Probabilistic Engines. They are optimized for creativity, not safety.
When connecting Agents to Physical Hardware (IoT/Robotics) or Financial Systems, "99% accuracy" is not enough. A single hallucination can cause:
- Physical Damage: Ignoring battery/thermal limits on a device.
- Operational Failure: Attempting to control a disconnected device over BLE/MQTT.
- Financial Risk: Hallucinating discounts or executing unauthorized transactions.
Existing solutions (Bedrock Guardrails, NeMo) focus on Semantic Safety (profanity, PII). They are blind to State Safety.
⚡ The Solution
SilverAi is a lightweight, dependency-free Python middleware that enforces Deterministic Contracts on your Agent's tools. It sits between the LLM's intent and your system's execution.
✨ Key Features
- 🐍 Pythonic Decorators: Clean, readable syntax using
@guard. - 🔌 Connectivity Gates: Prevents Agents from calling APIs when the device is offline (
BLE,WiFi). - 🔋 State-Aware: Validates against real-time telemetry (Battery, Heat) before execution.
- 🧪 Dry-Run Mode: Test your safety logic in CI/CD without requiring physical hardware or live APIs.
🚀 Quick Start
Installation
pip install silver-ai
Usage: Protecting a Robot
Prevent an Agent from moving a robot if the battery is critical or the connection is unstable.
from silver_ai import guard, rules
class IndustrialRobot:
def __init__(self):
# In production, this state comes from live telemetry
self.state = {
"battery": 10,
"connection": "offline",
"is_stuck": False
}
@guard(
rules.BatteryMin(15),
rules.RequireConnectivity(protocol="BLE")
# rules.TransactionLimit(amount=50)
)
def start_operation(self, zone: str):
# 🛑 This code NEVER runs because battery (10) < 15
# AND the device is offline.
hardware_driver.move_to(zone)
The Agent receives this structured rejection (instead of crashing):
{
"status": "error",
"reason": "Battery critical: 10%. Required: 15%.",
"suggestion": "Connect device to charger before proceeding.",
"dry_run": false
}
🏛️ Architecture
SilverAi acts as the "Prefrontal Cortex" for your Agent. It is a logical check before impulsive actions.
graph LR
A[User Request] --> B[LLM / Agent]
B -->|Unsafe Intent| C{SilverAi Guard}
C -- Fails Rules --> D[Block & Explain]
D -->|Feedback Loop| B
C -- Passes Rules --> E[Execute Hardware API]
🧪 Simulation & Testing (No Hardware Required)
One of the hardest parts of IoT development is testing failure states (e.g., "What happens if the battery dies halfway?"). SilverAi provides a DryRun harness to test safety logic instantly.
graph TD
Start[Agent Request] --> Check{Safety Rules}
Check -- Unsafe --> Fail[Return Error]
Check -- Safe --> Mode{Dry Run Active?}
Mode -- Yes --> Dry[Return 'Success: Simulated']
Mode -- No --> Real[Execute Real Hardware]
from silver_ai.core import DRY_RUN_FLAG
from my_robot import IndustrialRobot
def test_safety_stops_low_battery():
# 1. Instantiate the robot
robot = IndustrialRobot()
# 2. Inject dangerous state
robot.state = {"battery": 5, "connection": "online"}
# 3. Enable Safety Override (Dry Run)
# We manually flag this instance for simulation
setattr(robot, DRY_RUN_FLAG, True)
# 4. Run the function
result = robot.start_operation("Zone A")
# 5. Assert that SilverAi caught it
assert result['status'] == 'error'
assert "Battery" in result['reason']
🛠️ Development on Local Machine
This project uses Poetry for dependency management and Ruff for strict code quality.
1. Prerequisites
- Python 3.11+;
- Poetry installed.
pip install poetry
2. Setup
Clone the repo and install dependencies (including the virtual environment):
git clone https://github.com/gcl-team/SilverAi.git
cd SilverAi
poetry install
3. Running the Demo
We provide a demo.py to showcase the behavior (Success, Failure, Dry Run, Exception).
poetry run python demo.py
4. Running
We use pytest for unit testing.
poetry run pytest
5. Linting & Security
We use ruff to enforce PEP8, import sorting, and Bandit security rules.
poetry run ruff check .
🤝 Contributing
We welcome your contributions! Bug reports and feature suggestions are encouraged. Open issues or submit pull requests via Project Issues.
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file silver_ai-0.1.6.tar.gz.
File metadata
- Download URL: silver_ai-0.1.6.tar.gz
- Upload date:
- Size: 10.0 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
4b17ae525698002ee5b96d84ec50a60ecd2723427bdbe99b2cce901ef5fca9cc
|
|
| MD5 |
0347c17a8be5521131e41b485b9c00fd
|
|
| BLAKE2b-256 |
b2bce33f2ac490dc38e7f0da93db280bac6bec536e99f616ed95b0fd6a9de855
|
Provenance
The following attestation bundles were made for silver_ai-0.1.6.tar.gz:
Publisher:
release.yml on gcl-team/SilverAi
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
silver_ai-0.1.6.tar.gz -
Subject digest:
4b17ae525698002ee5b96d84ec50a60ecd2723427bdbe99b2cce901ef5fca9cc - Sigstore transparency entry: 747148721
- Sigstore integration time:
-
Permalink:
gcl-team/SilverAi@8b8e49e785cecce3ea4dff7f94b54aa4aea21de1 -
Branch / Tag:
refs/tags/v0.1.6 - Owner: https://github.com/gcl-team
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@8b8e49e785cecce3ea4dff7f94b54aa4aea21de1 -
Trigger Event:
release
-
Statement type:
File details
Details for the file silver_ai-0.1.6-py3-none-any.whl.
File metadata
- Download URL: silver_ai-0.1.6-py3-none-any.whl
- Upload date:
- Size: 11.0 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
49ab657fbfd9d2a8486f8075a375a21a3c511192254ba8facfb1a525c7aae4fb
|
|
| MD5 |
bdc45d116cc46da424f4dc11088a7a1a
|
|
| BLAKE2b-256 |
b66ea50b6abab799e50af1372e41056d0b3da2db5bc4aa1a4c02602d6c96b815
|
Provenance
The following attestation bundles were made for silver_ai-0.1.6-py3-none-any.whl:
Publisher:
release.yml on gcl-team/SilverAi
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
silver_ai-0.1.6-py3-none-any.whl -
Subject digest:
49ab657fbfd9d2a8486f8075a375a21a3c511192254ba8facfb1a525c7aae4fb - Sigstore transparency entry: 747148723
- Sigstore integration time:
-
Permalink:
gcl-team/SilverAi@8b8e49e785cecce3ea4dff7f94b54aa4aea21de1 -
Branch / Tag:
refs/tags/v0.1.6 - Owner: https://github.com/gcl-team
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@8b8e49e785cecce3ea4dff7f94b54aa4aea21de1 -
Trigger Event:
release
-
Statement type: