File size: 2,178 Bytes
12130fe
b9ed0f0
ad0eb53
 
 
 
 
 
 
 
742b3a2
 
12130fe
b9ed0f0
ad0eb53
 
 
 
b9ed0f0
 
 
12130fe
b9ed0f0
 
 
12130fe
 
 
 
 
 
 
 
 
742b3a2
4a9d6cb
12130fe
 
 
 
 
b9ed0f0
 
ad0eb53
b9ed0f0
 
4a9d6cb
 
b9ed0f0
ad0eb53
 
b9ed0f0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
# Model Baselines (per 1000 tokens) based on scaling laws
MODELS = {
    "Mistral Large 3": {"energy_wh": 1.98, "water_ml": 3.56, "co2_g": 0.95},
    "Mistral Medium 3": {"energy_wh": 6.76, "water_ml": 12.17, "co2_g": 3.24},
    "Claude Sonnet 4.6": {"energy_wh": 19.32, "water_ml": 34.78, "co2_g": 9.27},
    "Gemini 3 Pro": {"energy_wh": 72.45, "water_ml": 130.41, "co2_g": 34.78},
    "Gemini 3.1 Pro": {"energy_wh": 77.28, "water_ml": 139.10, "co2_g": 37.09},
    "Claude Opus 4.6": {"energy_wh": 96.60, "water_ml": 173.88, "co2_g": 46.37},
    "GPT-5.2": {"energy_wh": 144.90, "water_ml": 260.82, "co2_g": 69.55},
    "GPT-5.4": {"energy_wh": 169.05, "water_ml": 304.29, "co2_g": 81.14}
}

# Category Token Multipliers
CATEGORY_MULTIPLIERS = {
    "simple factual question": 0.05,        
    "mathematical calculation": 0.10,       
    "creative content generation": 0.80,    
    "complex research query": 1.50          
}

def calculate_impact(category, confidence_score, query_text, model_name):
    # Get base costs for the specific model
    model_cost = MODELS.get(model_name, MODELS["Mistral Large 3"])
    cat_mult = CATEGORY_MULTIPLIERS.get(category, 0.05)
    
    # 1. Confidence Multiplier
    if confidence_score > 0.8:
        conf_mult = 1.0
    elif 0.5 <= confidence_score <= 0.8:
        conf_mult = 1.2
    else:
        conf_mult = 1.5
        
    # 2. Dynamic Word Count Logic (Continuous Scaling)
    word_count = len(query_text.split())
    
    # Baseline is 15 words (1.0x). Each word adjusts the impact by 1.5% (0.015)
    # Minimum factor is floored at 0.5x to ensure small queries still cost resources
    len_factor = max(0.5, 1.0 + ((word_count - 15) * 0.015))
    
    # 3. Final Calculation Formula
    water_ml = model_cost["water_ml"] * cat_mult * conf_mult * len_factor
    energy_wh = model_cost["energy_wh"] * cat_mult * conf_mult * len_factor
    co2_g = model_cost["co2_g"] * cat_mult * conf_mult * len_factor
    
    return {
        "water_l": water_ml / 1000.0, 
        "energy_kwh": energy_wh / 1000.0, 
        "water_ml": round(water_ml, 1), 
        "energy_wh": round(energy_wh, 2),
        "co2_g": round(co2_g, 2)
    }