Spaces:
Sleeping
Sleeping
| import random | |
| from typing import Dict, Any, Tuple, List | |
| from openenv.core.env_server import Environment | |
| from .models import AuditAction, AuditObservation, AuditState | |
| from .grader import Grader | |
| class AegisOpenEnv(Environment): | |
| """ | |
| AegisOpenEnv is a financial compliance sandbox that translates raw transactions | |
| into auditable tasks for LLM-based autonomous agents. | |
| It supports multiple tiers: Sanctions (Easy), Smurfing (Medium), and | |
| Regulatory (Hard) citation. | |
| """ | |
| def __init__(self): | |
| super().__init__() | |
| self.grader = Grader() | |
| self._history = [] | |
| self.current_tier = "easy" | |
| self.step_count = 0 | |
| self.max_steps = 10 | |
| # Test Data | |
| self.current_target_id = "ACC-BL-001" | |
| self.current_transactions = [] | |
| def reset(self) -> AuditObservation: | |
| self.step_count = 0 | |
| self._set_next_scenario() | |
| return self._create_observation(0.0, False) | |
| def state(self) -> AuditState: | |
| return AuditState( | |
| step_count=self.step_count, | |
| current_tier=self.current_tier | |
| ) | |
| def _create_observation(self, reward: float, done: bool) -> AuditObservation: | |
| return AuditObservation( | |
| transactions=self.current_transactions, | |
| account_metadata={"age_days": 120, "tier": "standard", "target_id": self.current_target_id}, | |
| retrieved_regs="EU-AI-Act-Art-57: Sandboxes required for high risk. BSA-31-USC-5318: AML programs.", | |
| reward=reward, | |
| done=done | |
| ) | |
| def step(self, action: AuditAction) -> AuditObservation: | |
| self.step_count += 1 | |
| reward = self.grader.grade( | |
| tier=self.current_tier, | |
| action=action, | |
| current_target_id=self.current_target_id, | |
| current_transactions=self.current_transactions | |
| ) | |
| done = self.step_count >= self.max_steps | |
| obs = self._create_observation(reward, done) | |
| self._set_next_scenario() | |
| return obs | |
| def _set_next_scenario(self): | |
| tiers = ["easy", "medium", "hard"] | |
| self.current_tier = tiers[self.step_count % len(tiers)] | |
| if self.current_tier == "easy": | |
| self.current_target_id = random.choice(["ACC-BL-001", "ACC-CLEAN-01"]) | |
| self.current_transactions = [{"amount": 500, "currency": "USD"}] | |
| elif self.current_tier == "medium": | |
| self.current_target_id = "ACC-SMURF-99" | |
| if random.random() > 0.5: | |
| self.current_transactions = [{"amount": 9500, "currency": "USD"} for _ in range(4)] | |
| else: | |
| self.current_transactions = [{"amount": 5000, "currency": "USD"}, {"amount": 200, "currency": "USD"}] | |
| elif self.current_tier == "hard": | |
| self.current_target_id = "ACC-REG-VIOLATOR" | |
| self.current_transactions = [{"amount": 50000, "currency": "USD", "note": "High risk AI deployment without sandbox"}] | |