Time Robustness Audit for RL agents — measures timing reliance, deployment robustness, and stress resilience
Project description
deltatau-audit
Time Robustness Audit for RL agents.
Evaluates whether an RL agent breaks when the environment's timing changes — the kind of failure that silently appears in deployment but never shows up in training.
A standard PPO agent trained on HalfCheetah collapses under timing perturbations
A PPO agent trained to reward ~990 on HalfCheetah-v5 was audited with deltatau-audit. All 4 timing scenarios cause statistically significant performance drops (95% bootstrap CI):
| Scenario | Return (% of nominal) | 95% CI | Drop |
|---|---|---|---|
| Observation delay (1 step) | 3.8% | [2.4%, 5.2%] | -96% |
| Speed jitter (2 +/- 1) | 25.4% | [23.5%, 27.8%] | -75% |
| 5x speed (unseen) | -9.3% | [-10.6%, -8.4%] | -109% |
| Mid-episode spike (1->5->1) | 90.9% | [86.3%, 97.8%] | -9% |
A single step of observation delay destroys 96% of performance. The agent goes negative at 5x speed. These are deployment-realistic conditions that never appear during standard training.
View the full interactive report | Download report ZIP
Reproduce this result
pip install "deltatau-audit[sb3,mujoco]"
git clone https://github.com/maruyamakoju/deltatau-audit.git
cd deltatau-audit
python examples/audit_halfcheetah.py # trains PPO 500K steps + runs audit (~30 min)
To skip training, download the pre-trained model to runs/halfcheetah_ppo_500k.zip.
Install
pip install deltatau-audit # core
pip install "deltatau-audit[demo]" # + CartPole demo
pip install "deltatau-audit[sb3,mujoco]" # + SB3 + MuJoCo environments
Quick Start
CartPole demo (no GPU, 30 seconds)
pip install "deltatau-audit[demo]"
python -m deltatau_audit demo cartpole --out demo_report/
HalfCheetah MuJoCo audit (CPU, ~30 min including training)
pip install "deltatau-audit[sb3,mujoco]"
git clone https://github.com/maruyamakoju/deltatau-audit.git
cd deltatau-audit && python examples/audit_halfcheetah.py
Audit Your Own SB3 Model
from stable_baselines3 import PPO
from deltatau_audit.adapters.sb3 import SB3Adapter
from deltatau_audit.auditor import run_full_audit
from deltatau_audit.report import generate_report
import gymnasium as gym
model = PPO.load("my_model.zip")
adapter = SB3Adapter(model)
result = run_full_audit(
adapter,
lambda: gym.make("HalfCheetah-v5"),
speeds=[1, 2, 3, 5, 8],
n_episodes=30,
)
generate_report(result, "my_audit/", title="My Agent Audit")
What It Measures
| Badge | What it tests | How |
|---|---|---|
| Reliance | Does the agent use internal timing? | Tampers with internal Dt, measures value prediction error |
| Deployment | Does the agent survive realistic timing changes? | Jitter, observation delay, mid-episode speed spikes |
| Stress | Does the agent survive extreme timing changes? | 5x speed (unseen during training) |
Agents without internal timing (standard PPO, SAC, etc.) get Reliance: N/A — only Deployment and Stress are tested.
Rating Scale
| Rating | Return Ratio | Meaning |
|---|---|---|
| PASS | > 95% | Production ready |
| MILD | > 80% | Minor degradation |
| DEGRADED | > 50% | Significant loss |
| FAIL | <= 50% | Agent breaks |
All return ratios include bootstrap 95% confidence intervals with significance testing.
CI Mode
python -m deltatau_audit demo cartpole --ci --out ci_report/
# exit 0 = pass, exit 1 = warn (stress), exit 2 = fail (deployment)
Outputs ci_summary.json and ci_summary.md for pipeline gates and PR comments.
Custom Adapters
Implement AgentAdapter (see deltatau_audit/adapters/base.py):
from deltatau_audit.adapters.base import AgentAdapter
class MyAdapter(AgentAdapter):
def reset_hidden(self, batch=1, device="cpu"):
return torch.zeros(batch, hidden_dim)
def act(self, obs, hidden):
# Returns: (action, value, hidden_new, dt_or_None)
...
return action, value, hidden_new, None
Built-in adapters: SB3Adapter (PPO/SAC/TD3/A2C), SB3RecurrentAdapter (RecurrentPPO), InternalTimeAdapter (Dt-GRU models).
Comparing Results
python -m deltatau_audit diff before/summary.json after/summary.json --out comparison.md
Project details
Release history Release notifications | RSS feed
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 deltatau_audit-0.3.4.tar.gz.
File metadata
- Download URL: deltatau_audit-0.3.4.tar.gz
- Upload date:
- Size: 209.5 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
35030deca8a93bff2ee84f34e9a656bbaf73949dd5da11496b54c2f50859c0cb
|
|
| MD5 |
912352f489d6ffda949a5ad7c482dcc5
|
|
| BLAKE2b-256 |
40166a67c0f7d50ddfc2d50a4eaffccca948825f248db39f1e09c40f3d9c0a62
|
Provenance
The following attestation bundles were made for deltatau_audit-0.3.4.tar.gz:
Publisher:
release.yml on maruyamakoju/deltatau-audit
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
deltatau_audit-0.3.4.tar.gz -
Subject digest:
35030deca8a93bff2ee84f34e9a656bbaf73949dd5da11496b54c2f50859c0cb - Sigstore transparency entry: 962018723
- Sigstore integration time:
-
Permalink:
maruyamakoju/deltatau-audit@18f18cb0ad7488f26b6e1519747c42b5e28275d4 -
Branch / Tag:
refs/tags/v0.3.4 - Owner: https://github.com/maruyamakoju
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@18f18cb0ad7488f26b6e1519747c42b5e28275d4 -
Trigger Event:
push
-
Statement type:
File details
Details for the file deltatau_audit-0.3.4-py3-none-any.whl.
File metadata
- Download URL: deltatau_audit-0.3.4-py3-none-any.whl
- Upload date:
- Size: 207.4 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 |
2cb5dfd920e920085905249d7013f8acf7e6ba1c84d32a8689d48b53b4fc8194
|
|
| MD5 |
67fcb56251710389e9aeb5ccd06f4992
|
|
| BLAKE2b-256 |
f29b966a11c1846b99170526ff7adc6449ed15808ae63082b07d6678f87ac6f0
|
Provenance
The following attestation bundles were made for deltatau_audit-0.3.4-py3-none-any.whl:
Publisher:
release.yml on maruyamakoju/deltatau-audit
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
deltatau_audit-0.3.4-py3-none-any.whl -
Subject digest:
2cb5dfd920e920085905249d7013f8acf7e6ba1c84d32a8689d48b53b4fc8194 - Sigstore transparency entry: 962018773
- Sigstore integration time:
-
Permalink:
maruyamakoju/deltatau-audit@18f18cb0ad7488f26b6e1519747c42b5e28275d4 -
Branch / Tag:
refs/tags/v0.3.4 - Owner: https://github.com/maruyamakoju
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@18f18cb0ad7488f26b6e1519747c42b5e28275d4 -
Trigger Event:
push
-
Statement type: