File size: 1,097 Bytes
4273dfe
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
"""Safe usage summaries; no prompts or credential values are stored.
Provide provider-specific prices through environment variables if desired;
otherwise estimated_cost_usd is None (not an asserted price).
"""
import os

def estimate_cost_usd(provider: str, usage: dict):
    prefix = provider.upper()
    in_price = os.getenv(f"{prefix}_INPUT_USD_PER_M")
    out_price = os.getenv(f"{prefix}_OUTPUT_USD_PER_M")
    if not in_price or not out_price:
        return None
    n_in = usage.get("input_tokens")
    n_out = usage.get("output_tokens")
    if n_in is None or n_out is None:
        return None
    try:
        cost = (n_in * float(in_price) + n_out * float(out_price)) / 1_000_000
        return round(cost, 8)
    except (ValueError, TypeError):
        return None

def usage_summary(result: dict):
    return {
        "provider": result["provider"],
        "model": result["model_requested"],
        "elapsed_s": result.get("elapsed_s"),
        "usage": result.get("usage", {}),
        "estimated_cost_usd": estimate_cost_usd(result["provider"], result.get("usage", {})),
    }