Skip to main content

Time Robustness Audit for RL agents — measures timing reliance, deployment robustness, and stress resilience

Project description

deltatau-audit

PyPI version CI Python 3.9+ License: MIT

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.

Try it in 30 seconds

pip install "deltatau-audit[demo]"
python -m deltatau_audit demo cartpole

No GPU. No MuJoCo. Just pip install and run. You'll see a Before/After comparison:

Scenario Before (Baseline) After (Speed-Randomized) Change
5x speed 12% 49% +37pp
Speed jitter 66% 115% +49pp
Observation delay 82% 95% +13pp
Mid-episode spike 23% 62% +39pp
Deployment FAIL (0.23) DEGRADED (0.62) +0.39

The standard agent collapses under timing perturbations. Speed-randomized training dramatically improves robustness. Full HTML reports with charts are generated in demo_report/.

The same pattern at MuJoCo scale: HalfCheetah PPO

A PPO agent trained to reward ~990 on HalfCheetah-v5 shows even more catastrophic timing failures — all 4 scenarios statistically significant (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.

HalfCheetah robustness audit results

View interactive report | Download report ZIP

Speed-randomized training fixes the problem

Scenario Before (Standard) After (Speed-Randomized) Change
Observation delay 2% 148% +146pp
Speed jitter 28% 121% +93pp
5x speed (unseen) -12% 38% +50pp
Mid-episode spike 100% 113% +13pp
Deployment FAIL (0.02) PASS (1.00)
Quadrant deployment_fragile deployment_ready

Robust agent audit results

View Before report | View After report

Reproduce HalfCheetah results
pip install "deltatau-audit[sb3,mujoco]"
git clone https://github.com/maruyamakoju/deltatau-audit.git
cd deltatau-audit
python examples/audit_halfcheetah.py              # standard PPO audit (~30 min)
python examples/train_robust_halfcheetah.py        # train robust PPO (~30 min)
python examples/audit_before_after.py              # Before/After comparison

Or download pre-trained models from Releases.

Install

pip install deltatau-audit            # core
pip install "deltatau-audit[demo]"    # + CartPole demo (recommended start)
pip install "deltatau-audit[sb3,mujoco]"  # + SB3 + MuJoCo environments

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


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

deltatau_audit-0.3.6.tar.gz (210.1 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

deltatau_audit-0.3.6-py3-none-any.whl (207.7 kB view details)

Uploaded Python 3

File details

Details for the file deltatau_audit-0.3.6.tar.gz.

File metadata

  • Download URL: deltatau_audit-0.3.6.tar.gz
  • Upload date:
  • Size: 210.1 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for deltatau_audit-0.3.6.tar.gz
Algorithm Hash digest
SHA256 9b9b4be0cf69239917acbcbfde6b7d84c9f4587785e39cc097cea3e441f1035e
MD5 2fce48550b942f95db2c94bf03c93775
BLAKE2b-256 1de6d86f721e861a89c9204f30c9454fba44f7b5fc9c778cf6ca298883a5bf97

See more details on using hashes here.

Provenance

The following attestation bundles were made for deltatau_audit-0.3.6.tar.gz:

Publisher: release.yml on maruyamakoju/deltatau-audit

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file deltatau_audit-0.3.6-py3-none-any.whl.

File metadata

  • Download URL: deltatau_audit-0.3.6-py3-none-any.whl
  • Upload date:
  • Size: 207.7 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for deltatau_audit-0.3.6-py3-none-any.whl
Algorithm Hash digest
SHA256 79e7d77b678ddea7913e66dbe5fcfc1a3ef76ad9dfdf6301db64ac588179af1a
MD5 1e1e2e09e549869913f36f2a3c9087ed
BLAKE2b-256 b62438cf637e375f99686699df4f60f72894b41cb6a426e6e7ee9cc5e591b10d

See more details on using hashes here.

Provenance

The following attestation bundles were made for deltatau_audit-0.3.6-py3-none-any.whl:

Publisher: release.yml on maruyamakoju/deltatau-audit

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page