EcoEval-LLM / ecoeval /energy.py
singhalamaan116's picture
Update ecoeval/energy.py
b0cc1a1 verified
# ecoeval/energy.py
import os
from typing import Callable, Dict, Any
from codecarbon import EmissionsTracker
def run_with_energy(
fn: Callable[[], Dict[str, Any]],
project_name: str = "EcoEval-LLM",
) -> Dict[str, Any]:
"""
Wrap any benchmark function with CodeCarbon energy & emissions tracking.
"""
# 🔧 Ensure the output directory exists (this fixes your OSError)
output_dir = "emissions"
os.makedirs(output_dir, exist_ok=True)
tracker = EmissionsTracker(
project_name=project_name,
measure_power_secs=1,
output_dir=output_dir,
save_to_file=True,
log_level="error",
)
tracker.start()
metrics = fn()
emissions = tracker.stop()
# Depending on CodeCarbon version, tracker.stop() may be:
# - a float (kg CO2eq)
# - a dict with 'energy_kwh' and 'emissions_kg'
energy_kwh = None
emissions_kg = None
if isinstance(emissions, dict):
energy_kwh = emissions.get("energy_kwh", None)
emissions_kg = emissions.get("emissions_kg", None)
else:
# old style: just kg CO2eq
emissions_kg = emissions
metrics["energy_kwh"] = float(energy_kwh) if energy_kwh is not None else None
metrics["emissions_kg"] = float(emissions_kg) if emissions_kg is not None else None
return metrics