| """ |
| Stress-test the DEPLOYED HF Space to find any score that is exactly 0.0 or 1.0. |
| Tests ALL 5 tasks with multiple agent behaviors. |
| """ |
| import requests |
| import json |
|
|
| BASE = "https://aksharasharma-voice-authenticity-openenv.hf.space" |
|
|
| def reset(task, seed=7): |
| r = requests.post(f"{BASE}/reset", json={"task_name": task, "seed": seed}, timeout=30) |
| r.raise_for_status() |
| return r.json() |
|
|
| def step(action, task): |
| payload = { |
| "action_type": action.get("action_type", "final_classify"), |
| "label": action.get("label", 0), |
| "confidence": action.get("confidence", 0.5), |
| "reasoning": action.get("reasoning", ""), |
| "task_name": task, |
| } |
| r = requests.post(f"{BASE}/step", json=payload, timeout=30) |
| r.raise_for_status() |
| return r.json() |
|
|
| def check_reward(reward, context): |
| if reward <= 0.0 or reward >= 1.0: |
| print(f" *** VIOLATION: reward={reward} at {context}") |
| return False |
| return True |
|
|
| tasks = [ |
| "clean_detection", |
| "compressed_detection", |
| "adversarial_detection", |
| "streaming_detection", |
| "phonecall_detection", |
| ] |
|
|
| violations = [] |
|
|
| |
| print("=== Test 1: Full 5-step protocol ===") |
| for task in tasks: |
| print(f"\n Task: {task}") |
| resp = reset(task) |
| r = resp.get("reward", 0) |
| if not check_reward(r, f"reset {task}"): |
| violations.append(f"reset {task}: {r}") |
|
|
| rewards = [] |
| for i, act in enumerate([ |
| {"action_type": "request_temporal_features"}, |
| {"action_type": "request_spectral_features"}, |
| {"action_type": "request_comparison"}, |
| {"action_type": "analyze_evidence"}, |
| {"action_type": "final_classify", "label": 0, "confidence": 0.7, |
| "reasoning": "human speech with natural jitter and shimmer variation"}, |
| ]): |
| resp = step(act, task) |
| r = resp["reward"] |
| rewards.append(r) |
| if not check_reward(r, f"step {i+1} ({act['action_type']}) task={task}"): |
| violations.append(f"step {i+1} {task}: {r}") |
| print(f" rewards: {rewards}") |
|
|
| |
| print("\n=== Test 2: Jump to final_classify (no exploration) ===") |
| for task in tasks: |
| print(f"\n Task: {task}") |
| reset(task, seed=42) |
| |
| |
| for label in [0, 1]: |
| reset(task, seed=42) |
| resp = step({ |
| "action_type": "final_classify", |
| "label": label, |
| "confidence": 0.99, |
| "reasoning": "" |
| }, task) |
| r = resp["reward"] |
| if not check_reward(r, f"jump-classify label={label} task={task}"): |
| violations.append(f"jump {task} label={label}: {r}") |
| print(f" label={label} reward={r}") |
|
|
| |
| print("\n=== Test 3: Edge confidence values ===") |
| for task in tasks: |
| for conf in [0.0, 0.001, 0.5, 0.999, 1.0]: |
| reset(task, seed=7) |
| resp = step({ |
| "action_type": "final_classify", |
| "label": 0, |
| "confidence": conf, |
| "reasoning": "test" |
| }, task) |
| r = resp["reward"] |
| if not check_reward(r, f"conf={conf} task={task}"): |
| violations.append(f"conf {task} conf={conf}: {r}") |
| print(f" {task} conf={conf}: reward={r}") |
|
|
| |
| print("\n=== Test 4: Multiple seeds (checking sample variation) ===") |
| for task in tasks: |
| for seed in [0, 1, 2, 3, 42, 100, 999]: |
| reset(task, seed=seed) |
| |
| step({"action_type": "request_temporal_features"}, task) |
| resp = step({ |
| "action_type": "final_classify", |
| "label": 1, |
| "confidence": 0.6, |
| "reasoning": "synthetic fake generated smooth" |
| }, task) |
| r = resp["reward"] |
| if not check_reward(r, f"seed={seed} task={task}"): |
| violations.append(f"seed {task} seed={seed}: {r}") |
|
|
| print(f"\n\n{'='*60}") |
| if violations: |
| print(f"FOUND {len(violations)} VIOLATIONS:") |
| for v in violations: |
| print(f" - {v}") |
| else: |
| print("ALL SCORES STRICTLY IN (0, 1) - NO VIOLATIONS FOUND") |
| print(f"{'='*60}") |
|
|