singhalamaan116 commited on
Commit
b66a8df
·
verified ·
1 Parent(s): 4ff0f51

Create ecoeval/energy.py

Browse files
Files changed (1) hide show
  1. ecoeval/energy.py +41 -0
ecoeval/energy.py ADDED
@@ -0,0 +1,41 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # ecoeval/energy.py
2
+ from typing import Callable, Dict, Any
3
+
4
+ from codecarbon import EmissionsTracker
5
+
6
+
7
+ def run_with_energy(
8
+ fn: Callable[[], Dict[str, Any]],
9
+ project_name: str = "EcoEval-LLM",
10
+ ) -> Dict[str, Any]:
11
+ """
12
+ Wrap any benchmark function with CodeCarbon energy & emissions tracking.
13
+ """
14
+ tracker = EmissionsTracker(
15
+ project_name=project_name,
16
+ measure_power_secs=1,
17
+ output_dir="emissions",
18
+ save_to_file=True,
19
+ log_level="error",
20
+ )
21
+ tracker.start()
22
+ metrics = fn()
23
+ emissions = tracker.stop()
24
+
25
+ # Depending on CodeCarbon version, tracker.stop() may be:
26
+ # - a float (kg CO2eq)
27
+ # - a dict with 'energy_kwh' and 'emissions_kg'
28
+ energy_kwh = None
29
+ emissions_kg = None
30
+
31
+ if isinstance(emissions, dict):
32
+ energy_kwh = emissions.get("energy_kwh", None)
33
+ emissions_kg = emissions.get("emissions_kg", None)
34
+ else:
35
+ # old style: just kg CO2eq
36
+ emissions_kg = emissions
37
+
38
+ metrics["energy_kwh"] = float(energy_kwh) if energy_kwh is not None else None
39
+ metrics["emissions_kg"] = float(emissions_kg) if emissions_kg is not None else None
40
+
41
+ return metrics