Commit ·
433cefc
1
Parent(s): cf4926b
refactor: revert to root-level package structure with proper imports and hacky pyproject.toml setup
Browse files- .env +0 -20
- he_demo/__init__.py → __init__.py +5 -5
- he_demo/client.py → client.py +1 -1
- evaluate_inference.py +3 -3
- he_demo/grader_manifest.py → grader_manifest.py +0 -0
- gym_wrapper.py +2 -11
- inference.py +2 -2
- inference_v2.py +2 -2
- he_demo/models.py → models.py +0 -0
- pyproject.toml +3 -1
- {he_demo/server → server}/__init__.py +0 -0
- {he_demo/server → server}/app.py +10 -5
- {he_demo/server → server}/he_demo_environment.py +7 -2
- {he_demo/server → server}/requirements.txt +0 -0
- he_demo/task_graders.py → task_graders.py +1 -1
- he_demo/task_registry.py → task_registry.py +1 -1
- test_environment.py +2 -16
- train_agent.py +1 -10
- validate.py +4 -4
- validate_comprehensive.py +4 -4
.env
DELETED
|
@@ -1,20 +0,0 @@
|
|
| 1 |
-
# Environment configuration for Energy & Memory RAM Optimization RL Environment
|
| 2 |
-
# OPTION A: Qwen/Qwen3.5-27B (Recommended for technical reasoning)
|
| 3 |
-
#
|
| 4 |
-
# Required Environment Variables:
|
| 5 |
-
# - API_BASE_URL: The API endpoint for the LLM
|
| 6 |
-
# - MODEL_NAME: The model identifier to use for inference
|
| 7 |
-
# - HF_TOKEN: Your Hugging Face / API key
|
| 8 |
-
# - LOCAL_IMAGE_NAME: The name of the local image to use for the environment (optional)
|
| 9 |
-
|
| 10 |
-
# The API endpoint for the LLM
|
| 11 |
-
API_BASE_URL=https://router.huggingface.co/v1
|
| 12 |
-
|
| 13 |
-
# The model identifier to use for inference (Option A: Qwen for technical optimization)
|
| 14 |
-
MODEL_NAME=Qwen/Qwen3.5-27B
|
| 15 |
-
|
| 16 |
-
# Your Hugging Face / API key
|
| 17 |
-
HF_TOKEN=
|
| 18 |
-
|
| 19 |
-
# The name of the local image to use for the environment if using from_docker_image() method
|
| 20 |
-
LOCAL_IMAGE_NAME=energy-optimization-rl
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
he_demo/__init__.py → __init__.py
RENAMED
|
@@ -6,9 +6,9 @@
|
|
| 6 |
|
| 7 |
"""Energy & Memory RAM Optimization Environment."""
|
| 8 |
|
| 9 |
-
from
|
| 10 |
-
from
|
| 11 |
-
from
|
| 12 |
TASK_GRADERS,
|
| 13 |
get_grader,
|
| 14 |
get_all_graders,
|
|
@@ -19,14 +19,14 @@ from he_demo.task_graders import (
|
|
| 19 |
task_4_advanced_efficiency_grader,
|
| 20 |
task_5_expert_optimization_grader,
|
| 21 |
)
|
| 22 |
-
from
|
| 23 |
TASK_REGISTRY,
|
| 24 |
get_all_tasks_with_graders,
|
| 25 |
get_task_grader,
|
| 26 |
get_tasks_count,
|
| 27 |
is_grader_requirement_met,
|
| 28 |
)
|
| 29 |
-
from
|
| 30 |
GRADERS_MANIFEST,
|
| 31 |
get_graders_manifest,
|
| 32 |
get_active_graders_count,
|
|
|
|
| 6 |
|
| 7 |
"""Energy & Memory RAM Optimization Environment."""
|
| 8 |
|
| 9 |
+
from client import EnergyOptimizationEnv
|
| 10 |
+
from models import EnergyOptimizationAction, EnergyOptimizationObservation, Task
|
| 11 |
+
from task_graders import (
|
| 12 |
TASK_GRADERS,
|
| 13 |
get_grader,
|
| 14 |
get_all_graders,
|
|
|
|
| 19 |
task_4_advanced_efficiency_grader,
|
| 20 |
task_5_expert_optimization_grader,
|
| 21 |
)
|
| 22 |
+
from task_registry import (
|
| 23 |
TASK_REGISTRY,
|
| 24 |
get_all_tasks_with_graders,
|
| 25 |
get_task_grader,
|
| 26 |
get_tasks_count,
|
| 27 |
is_grader_requirement_met,
|
| 28 |
)
|
| 29 |
+
from grader_manifest import (
|
| 30 |
GRADERS_MANIFEST,
|
| 31 |
get_graders_manifest,
|
| 32 |
get_active_graders_count,
|
he_demo/client.py → client.py
RENAMED
|
@@ -12,7 +12,7 @@ from openenv.core import EnvClient
|
|
| 12 |
from openenv.core.client_types import StepResult
|
| 13 |
from openenv.core.env_server.types import State
|
| 14 |
|
| 15 |
-
from
|
| 16 |
|
| 17 |
|
| 18 |
class EnergyOptimizationEnv(
|
|
|
|
| 12 |
from openenv.core.client_types import StepResult
|
| 13 |
from openenv.core.env_server.types import State
|
| 14 |
|
| 15 |
+
from models import EnergyOptimizationAction, EnergyOptimizationObservation, Task, TaskSummary
|
| 16 |
|
| 17 |
|
| 18 |
class EnergyOptimizationEnv(
|
evaluate_inference.py
CHANGED
|
@@ -23,9 +23,9 @@ os.environ.setdefault("MODEL_NAME", "Qwen/Qwen2.5-72B-Instruct")
|
|
| 23 |
os.environ.setdefault("LOCAL_SERVER_URL", "http://localhost:8000")
|
| 24 |
|
| 25 |
# Import after setting environment variables
|
| 26 |
-
from
|
| 27 |
-
from
|
| 28 |
-
from
|
| 29 |
|
| 30 |
print("=" * 80)
|
| 31 |
print("LLM INFERENCE EVALUATION SCRIPT")
|
|
|
|
| 23 |
os.environ.setdefault("LOCAL_SERVER_URL", "http://localhost:8000")
|
| 24 |
|
| 25 |
# Import after setting environment variables
|
| 26 |
+
from client import EnergyOptimizationEnv
|
| 27 |
+
from models import EnergyOptimizationAction, EnergyOptimizationObservation
|
| 28 |
+
from task_graders import get_grader, get_grader_metadata, TASK_GRADERS
|
| 29 |
|
| 30 |
print("=" * 80)
|
| 31 |
print("LLM INFERENCE EVALUATION SCRIPT")
|
he_demo/grader_manifest.py → grader_manifest.py
RENAMED
|
File without changes
|
gym_wrapper.py
CHANGED
|
@@ -9,18 +9,9 @@ import gymnasium as gym
|
|
| 9 |
import numpy as np
|
| 10 |
sys.path.insert(0, os.path.dirname(__file__))
|
| 11 |
|
| 12 |
-
#
|
| 13 |
-
import types
|
| 14 |
-
he_demo = types.ModuleType('he_demo')
|
| 15 |
from models import EnergyOptimizationAction, EnergyOptimizationObservation, Task, TaskSummary
|
| 16 |
-
|
| 17 |
-
he_demo.EnergyOptimizationObservation = EnergyOptimizationObservation
|
| 18 |
-
he_demo.Task = Task
|
| 19 |
-
he_demo.TaskSummary = TaskSummary
|
| 20 |
-
sys.modules['he_demo'] = he_demo
|
| 21 |
-
sys.modules['he_demo.models'] = he_demo
|
| 22 |
-
|
| 23 |
-
from he_demo.server.he_demo_environment import EnergyOptimizationEnvironment
|
| 24 |
|
| 25 |
class EnergyOptimizationGymEnv(gym.Env):
|
| 26 |
"""Gym wrapper for the Energy Optimization Environment."""
|
|
|
|
| 9 |
import numpy as np
|
| 10 |
sys.path.insert(0, os.path.dirname(__file__))
|
| 11 |
|
| 12 |
+
# Import from root level modules
|
|
|
|
|
|
|
| 13 |
from models import EnergyOptimizationAction, EnergyOptimizationObservation, Task, TaskSummary
|
| 14 |
+
from server.he_demo_environment import EnergyOptimizationEnvironment
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 15 |
|
| 16 |
class EnergyOptimizationGymEnv(gym.Env):
|
| 17 |
"""Gym wrapper for the Energy Optimization Environment."""
|
inference.py
CHANGED
|
@@ -32,8 +32,8 @@ if TYPE_CHECKING:
|
|
| 32 |
# Lazy imports - Only imported when needed to avoid hanging on startup
|
| 33 |
# from openai import OpenAI, OpenAIError
|
| 34 |
|
| 35 |
-
from
|
| 36 |
-
from
|
| 37 |
|
| 38 |
|
| 39 |
# Lazy OpenAI client initialization
|
|
|
|
| 32 |
# Lazy imports - Only imported when needed to avoid hanging on startup
|
| 33 |
# from openai import OpenAI, OpenAIError
|
| 34 |
|
| 35 |
+
from client import EnergyOptimizationEnv
|
| 36 |
+
from models import EnergyOptimizationAction, EnergyOptimizationObservation
|
| 37 |
|
| 38 |
|
| 39 |
# Lazy OpenAI client initialization
|
inference_v2.py
CHANGED
|
@@ -27,8 +27,8 @@ from dataclasses import dataclass, asdict
|
|
| 27 |
from datetime import datetime
|
| 28 |
import statistics
|
| 29 |
|
| 30 |
-
from
|
| 31 |
-
from
|
| 32 |
|
| 33 |
|
| 34 |
# ============================================================================
|
|
|
|
| 27 |
from datetime import datetime
|
| 28 |
import statistics
|
| 29 |
|
| 30 |
+
from client import EnergyOptimizationEnv
|
| 31 |
+
from models import EnergyOptimizationObservation, EnergyOptimizationAction
|
| 32 |
|
| 33 |
|
| 34 |
# ============================================================================
|
he_demo/models.py → models.py
RENAMED
|
File without changes
|
pyproject.toml
CHANGED
|
@@ -41,4 +41,6 @@ server = "he_demo.server.app:main"
|
|
| 41 |
|
| 42 |
[tool.setuptools]
|
| 43 |
include-package-data = true
|
| 44 |
-
|
|
|
|
|
|
|
|
|
| 41 |
|
| 42 |
[tool.setuptools]
|
| 43 |
include-package-data = true
|
| 44 |
+
package-dir = {"he_demo" = "."}
|
| 45 |
+
py-modules = ["models", "client", "task_graders", "task_registry", "grader_manifest"]
|
| 46 |
+
packages = ["server"]
|
{he_demo/server → server}/__init__.py
RENAMED
|
File without changes
|
{he_demo/server → server}/app.py
RENAMED
|
@@ -35,12 +35,17 @@ except Exception as e: # pragma: no cover
|
|
| 35 |
"openenv is required for the web interface. Install dependencies with '\n uv sync\n'"
|
| 36 |
) from e
|
| 37 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 38 |
from fastapi import FastAPI
|
| 39 |
-
from
|
| 40 |
-
from
|
| 41 |
-
from
|
| 42 |
-
from
|
| 43 |
-
from
|
| 44 |
|
| 45 |
|
| 46 |
# Create the app with web interface and README integration
|
|
|
|
| 35 |
"openenv is required for the web interface. Install dependencies with '\n uv sync\n'"
|
| 36 |
) from e
|
| 37 |
|
| 38 |
+
import sys
|
| 39 |
+
import os
|
| 40 |
+
# Add parent directory to path so we can import root-level modules
|
| 41 |
+
sys.path.insert(0, os.path.dirname(os.path.dirname(__file__)))
|
| 42 |
+
|
| 43 |
from fastapi import FastAPI
|
| 44 |
+
from models import EnergyOptimizationAction, EnergyOptimizationObservation
|
| 45 |
+
from .he_demo_environment import EnergyOptimizationEnvironment
|
| 46 |
+
from task_graders import get_grader_metadata, TASK_GRADERS
|
| 47 |
+
from task_registry import get_all_tasks_with_graders, get_tasks_count, is_grader_requirement_met
|
| 48 |
+
from grader_manifest import get_graders_manifest, is_validator_satisfied
|
| 49 |
|
| 50 |
|
| 51 |
# Create the app with web interface and README integration
|
{he_demo/server → server}/he_demo_environment.py
RENAMED
|
@@ -14,12 +14,17 @@ RAM usage and energy consumption through various optimization strategies.
|
|
| 14 |
import random
|
| 15 |
from typing import List
|
| 16 |
from uuid import uuid4
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 17 |
|
| 18 |
from openenv.core.env_server.interfaces import Environment
|
| 19 |
from openenv.core.env_server.types import State
|
| 20 |
|
| 21 |
-
from
|
| 22 |
-
from
|
| 23 |
|
| 24 |
|
| 25 |
class EnergyOptimizationEnvironment(Environment):
|
|
|
|
| 14 |
import random
|
| 15 |
from typing import List
|
| 16 |
from uuid import uuid4
|
| 17 |
+
import sys
|
| 18 |
+
import os
|
| 19 |
+
|
| 20 |
+
# Add parent directory to path so we can import root-level modules
|
| 21 |
+
sys.path.insert(0, os.path.dirname(os.path.dirname(__file__)))
|
| 22 |
|
| 23 |
from openenv.core.env_server.interfaces import Environment
|
| 24 |
from openenv.core.env_server.types import State
|
| 25 |
|
| 26 |
+
from models import EnergyOptimizationAction, EnergyOptimizationObservation, Task, TaskSummary
|
| 27 |
+
from task_graders import TASK_GRADERS, get_grader, get_all_graders, get_grader_metadata
|
| 28 |
|
| 29 |
|
| 30 |
class EnergyOptimizationEnvironment(Environment):
|
{he_demo/server → server}/requirements.txt
RENAMED
|
File without changes
|
he_demo/task_graders.py → task_graders.py
RENAMED
|
@@ -18,7 +18,7 @@ The graders are exposed through the TASK_GRADERS registry for easy discovery.
|
|
| 18 |
"""
|
| 19 |
|
| 20 |
from typing import Callable, Dict, Any
|
| 21 |
-
from
|
| 22 |
|
| 23 |
|
| 24 |
# ============================================================================
|
|
|
|
| 18 |
"""
|
| 19 |
|
| 20 |
from typing import Callable, Dict, Any
|
| 21 |
+
from models import EnergyOptimizationObservation
|
| 22 |
|
| 23 |
|
| 24 |
# ============================================================================
|
he_demo/task_registry.py → task_registry.py
RENAMED
|
@@ -6,7 +6,7 @@ for easy discovery and validation.
|
|
| 6 |
"""
|
| 7 |
|
| 8 |
from typing import Dict, Callable, Any
|
| 9 |
-
from
|
| 10 |
task_1_basic_ram_reduction_grader,
|
| 11 |
task_2_energy_optimization_grader,
|
| 12 |
task_3_balanced_optimization_grader,
|
|
|
|
| 6 |
"""
|
| 7 |
|
| 8 |
from typing import Dict, Callable, Any
|
| 9 |
+
from task_graders import (
|
| 10 |
task_1_basic_ram_reduction_grader,
|
| 11 |
task_2_energy_optimization_grader,
|
| 12 |
task_3_balanced_optimization_grader,
|
test_environment.py
CHANGED
|
@@ -10,23 +10,9 @@ import os
|
|
| 10 |
project_root = os.path.dirname(__file__)
|
| 11 |
sys.path.insert(0, project_root)
|
| 12 |
|
| 13 |
-
#
|
| 14 |
-
import types
|
| 15 |
-
he_demo = types.ModuleType('he_demo')
|
| 16 |
-
|
| 17 |
-
# Import models and add to he_demo
|
| 18 |
from models import EnergyOptimizationAction, EnergyOptimizationObservation, Task, TaskSummary
|
| 19 |
-
|
| 20 |
-
he_demo.EnergyOptimizationObservation = EnergyOptimizationObservation
|
| 21 |
-
he_demo.Task = Task
|
| 22 |
-
he_demo.TaskSummary = TaskSummary
|
| 23 |
-
|
| 24 |
-
# Add to sys.modules
|
| 25 |
-
sys.modules['he_demo'] = he_demo
|
| 26 |
-
sys.modules['he_demo.models'] = he_demo
|
| 27 |
-
|
| 28 |
-
# Now import the environment
|
| 29 |
-
from he_demo.server.he_demo_environment import EnergyOptimizationEnvironment
|
| 30 |
|
| 31 |
def test_environment():
|
| 32 |
"""Test the energy optimization environment."""
|
|
|
|
| 10 |
project_root = os.path.dirname(__file__)
|
| 11 |
sys.path.insert(0, project_root)
|
| 12 |
|
| 13 |
+
# Import from root level modules
|
|
|
|
|
|
|
|
|
|
|
|
|
| 14 |
from models import EnergyOptimizationAction, EnergyOptimizationObservation, Task, TaskSummary
|
| 15 |
+
from server.he_demo_environment import EnergyOptimizationEnvironment
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 16 |
|
| 17 |
def test_environment():
|
| 18 |
"""Test the energy optimization environment."""
|
train_agent.py
CHANGED
|
@@ -10,17 +10,8 @@ import sys
|
|
| 10 |
import os
|
| 11 |
sys.path.insert(0, os.path.dirname(__file__))
|
| 12 |
|
| 13 |
-
#
|
| 14 |
-
import types
|
| 15 |
-
he_demo = types.ModuleType('he_demo')
|
| 16 |
from models import EnergyOptimizationAction, EnergyOptimizationObservation, Task, TaskSummary
|
| 17 |
-
he_demo.EnergyOptimizationAction = EnergyOptimizationAction
|
| 18 |
-
he_demo.EnergyOptimizationObservation = EnergyOptimizationObservation
|
| 19 |
-
he_demo.Task = Task
|
| 20 |
-
he_demo.TaskSummary = TaskSummary
|
| 21 |
-
sys.modules['he_demo'] = he_demo
|
| 22 |
-
sys.modules['he_demo.models'] = he_demo
|
| 23 |
-
|
| 24 |
from gym_wrapper import EnergyOptimizationGymEnv
|
| 25 |
from task_graders import TASK_GRADERS, get_grader_metadata
|
| 26 |
from stable_baselines3 import PPO
|
|
|
|
| 10 |
import os
|
| 11 |
sys.path.insert(0, os.path.dirname(__file__))
|
| 12 |
|
| 13 |
+
# Import from root level modules
|
|
|
|
|
|
|
| 14 |
from models import EnergyOptimizationAction, EnergyOptimizationObservation, Task, TaskSummary
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 15 |
from gym_wrapper import EnergyOptimizationGymEnv
|
| 16 |
from task_graders import TASK_GRADERS, get_grader_metadata
|
| 17 |
from stable_baselines3 import PPO
|
validate.py
CHANGED
|
@@ -5,10 +5,10 @@ Final validation script for the Energy & Memory RAM Optimization Environment.
|
|
| 5 |
Per hackathon requirements, this validation includes grader configuration verification.
|
| 6 |
"""
|
| 7 |
|
| 8 |
-
# Import
|
| 9 |
-
from
|
| 10 |
-
from
|
| 11 |
-
from
|
| 12 |
|
| 13 |
def main():
|
| 14 |
print("🔋 Energy & Memory RAM Optimization Environment - Final Validation")
|
|
|
|
| 5 |
Per hackathon requirements, this validation includes grader configuration verification.
|
| 6 |
"""
|
| 7 |
|
| 8 |
+
# Import models and graders from root level
|
| 9 |
+
from models import EnergyOptimizationAction, EnergyOptimizationObservation, Task, TaskSummary
|
| 10 |
+
from task_graders import TASK_GRADERS, get_grader_metadata, get_grader
|
| 11 |
+
from server.he_demo_environment import EnergyOptimizationEnvironment
|
| 12 |
|
| 13 |
def main():
|
| 14 |
print("🔋 Energy & Memory RAM Optimization Environment - Final Validation")
|
validate_comprehensive.py
CHANGED
|
@@ -11,10 +11,10 @@ import os
|
|
| 11 |
project_root = os.path.dirname(__file__)
|
| 12 |
sys.path.insert(0, project_root)
|
| 13 |
|
| 14 |
-
# Import
|
| 15 |
-
from
|
| 16 |
-
from
|
| 17 |
-
from
|
| 18 |
|
| 19 |
def create_observation(ram_usage, energy_consumption, steps_taken):
|
| 20 |
"""Helper to create observations for testing."""
|
|
|
|
| 11 |
project_root = os.path.dirname(__file__)
|
| 12 |
sys.path.insert(0, project_root)
|
| 13 |
|
| 14 |
+
# Import models and graders from root level
|
| 15 |
+
from models import EnergyOptimizationAction, EnergyOptimizationObservation, Task, TaskSummary
|
| 16 |
+
from task_graders import TASK_GRADERS, get_grader, get_grader_metadata
|
| 17 |
+
from server.he_demo_environment import EnergyOptimizationEnvironment
|
| 18 |
|
| 19 |
def create_observation(ram_usage, energy_consumption, steps_taken):
|
| 20 |
"""Helper to create observations for testing."""
|