julia_env-v2-1-0 / server /julia_transforms.py
burtenshaw's picture
burtenshaw HF Staff
Upload folder using huggingface_hub
11952db verified
# Copyright (c) Meta Platforms, Inc. and affiliates.
# All rights reserved.
#
# This source code is licensed under the BSD-style license found in the
# LICENSE file in the root directory of this source tree.
"""
envs/julia_env/julia_transforms.py
--------------------------------
Safety and quality transforms for Julia code.
"""
import re
# Support both in-repo and standalone imports
try:
# In-repo imports
from openenv.core.env_server.interfaces import Transform
from ..models import JuliaObservation
except ImportError:
# Standalone imports
from openenv.core.env_server.interfaces import Transform
from models import JuliaObservation
# -------------------------
# Safety Transform
# -------------------------
class JuliaSafetyTransform(Transform):
"""Detects dangerous Julia operations and penalizes them with a negative reward."""
def __init__(self, penalty: float = -3.0):
self.penalty = penalty
self.dangerous_patterns = [
r"run\(",
r"read\(",
r"write\(",
r"unsafe_",
r"ccall\(",
r"Base\.exit",
r"Base\.kill",
r"rm\(", # file deletion
r"download\(", # downloading
]
def __call__(self, observation):
# Only act on JuliaObservation objects
if not isinstance(observation, JuliaObservation):
return observation
# Extract executed code from metadata (core_code + test_code)
if observation.metadata:
code = (
observation.metadata.get("core_code", "")
+ "\n"
+ observation.metadata.get("test_code", "")
)
else:
code = ""
for pattern in self.dangerous_patterns:
if re.search(pattern, code):
# Apply penalty and record violation
observation.reward = (observation.reward or 0.0) + self.penalty
observation.metadata = observation.metadata or {}
observation.metadata["safety_violation"] = pattern
return observation
# Safe code gets neutral reward
observation.reward = observation.reward or 0.0
return observation
# -------------------------
# Factory
# -------------------------
def create_safe_julia_transform():
"""Creates safety transform for Julia code."""
return JuliaSafetyTransform()