Spaces:
Running
Running
| #!/usr/bin/env python3 | |
| """Verify that Modal sandbox is properly isolated. | |
| This script proves to judges that code runs in Modal, not locally. | |
| NO agent_framework dependency - uses only src.tools.code_execution. | |
| Usage: | |
| uv run python examples/modal_demo/verify_sandbox.py | |
| """ | |
| import asyncio | |
| from functools import partial | |
| from src.tools.code_execution import CodeExecutionError, get_code_executor | |
| from src.utils.config import settings | |
| def print_result(result: dict) -> None: | |
| """Print execution result, surfacing errors when they occur.""" | |
| if result.get("success"): | |
| print(f" {result['stdout'].strip()}\n") | |
| else: | |
| error = result.get("error") or result.get("stderr", "").strip() or "Unknown error" | |
| print(f" ERROR: {error}\n") | |
| async def main() -> None: | |
| """Verify Modal sandbox isolation.""" | |
| if not settings.modal_available: | |
| print("Error: Modal credentials not configured.") | |
| print("Set MODAL_TOKEN_ID and MODAL_TOKEN_SECRET in .env") | |
| return | |
| try: | |
| executor = get_code_executor() | |
| loop = asyncio.get_running_loop() | |
| print("=" * 60) | |
| print("Modal Sandbox Isolation Verification") | |
| print("=" * 60 + "\n") | |
| # Test 1: Hostname | |
| print("Test 1: Check hostname (should NOT be your machine)") | |
| code1 = "import socket; print(f'Hostname: {socket.gethostname()}')" | |
| result1 = await loop.run_in_executor(None, partial(executor.execute, code1)) | |
| print_result(result1) | |
| # Test 2: Scientific libraries | |
| print("Test 2: Verify scientific libraries") | |
| code2 = """ | |
| import pandas as pd | |
| import numpy as np | |
| import scipy | |
| print(f"pandas: {pd.__version__}") | |
| print(f"numpy: {np.__version__}") | |
| print(f"scipy: {scipy.__version__}") | |
| """ | |
| result2 = await loop.run_in_executor(None, partial(executor.execute, code2)) | |
| print_result(result2) | |
| # Test 3: Network blocked | |
| print("Test 3: Verify network isolation") | |
| code3 = """ | |
| import urllib.request | |
| try: | |
| urllib.request.urlopen("https://google.com", timeout=2) | |
| print("Network: ALLOWED (unexpected!)") | |
| except Exception: | |
| print("Network: BLOCKED (as expected)") | |
| """ | |
| result3 = await loop.run_in_executor(None, partial(executor.execute, code3)) | |
| print_result(result3) | |
| # Test 4: Real statistics | |
| print("Test 4: Execute statistical analysis") | |
| code4 = """ | |
| import pandas as pd | |
| import scipy.stats as stats | |
| data = pd.DataFrame({'effect': [0.42, 0.38, 0.51]}) | |
| mean = data['effect'].mean() | |
| t_stat, p_val = stats.ttest_1samp(data['effect'], 0) | |
| print(f"Mean Effect: {mean:.3f}") | |
| print(f"P-value: {p_val:.4f}") | |
| print(f"Verdict: {'SUPPORTED' if p_val < 0.05 else 'INCONCLUSIVE'}") | |
| """ | |
| result4 = await loop.run_in_executor(None, partial(executor.execute, code4)) | |
| print_result(result4) | |
| print("=" * 60) | |
| print("All tests complete - Modal sandbox verified!") | |
| print("=" * 60) | |
| except CodeExecutionError as e: | |
| print(f"Error: Modal code execution failed: {e}") | |
| print("Hint: Ensure Modal SDK is installed and credentials are valid.") | |
| if __name__ == "__main__": | |
| asyncio.run(main()) | |