from hopx_ai import Sandbox
import os
import json
from typing import Dict, List, Any
class CodingPlatform:
def __init__(self, api_key: str):
self.api_key = api_key
def execute_submission(self, code: str, language: str, timeout: int = 10) -> Dict[str, Any]:
"""Execute student code submission"""
sandbox = None
try:
# Create isolated sandbox for this submission
sandbox = Sandbox.create(
template="code-interpreter",
api_key=self.api_key,
timeout_seconds=timeout + 5 # Extra buffer
)
# Execute code
result = sandbox.run_code(code, language=language, timeout=timeout)
return {
"success": result.success,
"stdout": result.stdout,
"stderr": result.stderr,
"exit_code": result.exit_code,
"execution_time": result.execution_time,
"timeout": result.execution_time >= timeout
}
except Exception as e:
return {
"success": False,
"error": str(e),
"stderr": str(e)
}
finally:
if sandbox:
sandbox.kill()
def validate_solution(self, code: str, test_cases: List[Dict], language: str = "python") -> Dict[str, Any]:
"""Validate solution against test cases"""
results = []
all_passed = True
for i, test_case in enumerate(test_cases):
# Prepare test code
test_code = self._prepare_test_code(code, test_case, language)
# Execute
execution_result = self.execute_submission(test_code, language, timeout=5)
# Check result
passed = self._check_test_result(execution_result, test_case)
results.append({
"test_case": i + 1,
"passed": passed,
"input": test_case.get("input"),
"expected": test_case.get("expected"),
"actual": execution_result.get("stdout", "").strip(),
"error": execution_result.get("stderr") if not passed else None
})
if not passed:
all_passed = False
return {
"all_passed": all_passed,
"total_tests": len(test_cases),
"passed_tests": sum(1 for r in results if r["passed"]),
"results": results
}
def _prepare_test_code(self, code: str, test_case: Dict, language: str) -> str:
"""Prepare code with test case"""
if language == "python":
input_data = test_case.get("input", "")
expected = test_case.get("expected", "")
# Wrap student code with test
test_code = f"""
{code}
# Test case
test_input = {input_data}
result = solution(test_input) # Assuming function named 'solution'
expected = {expected}
if result == expected:
print("PASS")
else:
print(f"FAIL: Expected {{expected}}, got {{result}}")
"""
return test_code
else:
# Similar for other languages
return code
def _check_test_result(self, execution_result: Dict, test_case: Dict) -> bool:
"""Check if test case passed"""
if not execution_result.get("success"):
return False
stdout = execution_result.get("stdout", "").strip()
return "PASS" in stdout or stdout == str(test_case.get("expected", "")).strip()
# Usage
platform = CodingPlatform(api_key=os.getenv("HOPX_API_KEY"))
# Student submission
student_code = """
def solution(nums):
return sum(nums)
"""
# Test cases
test_cases = [
{"input": "[1, 2, 3]", "expected": 6},
{"input": "[10, 20, 30]", "expected": 60},
{"input": "[]", "expected": 0}
]
# Validate
result = platform.validate_solution(student_code, test_cases)
print(json.dumps(result, indent=2))