From e740d6499d6d73263174fa0c432acf715b254ece Mon Sep 17 00:00:00 2001 From: luijait Date: Fri, 23 May 2025 12:15:01 +0200 Subject: [PATCH] Pricing via JSON --- .gitignore | 4 ++-- src/cai/util.py | 31 ++++++++++++++++--------------- 2 files changed, 18 insertions(+), 17 deletions(-) diff --git a/.gitignore b/.gitignore index 593a7ca6..6c1e2b31 100644 --- a/.gitignore +++ b/.gitignore @@ -1,6 +1,6 @@ # macOS Files .DS_Store - +cai_env/ # Byte-compiled / optimized / DLL files __pycache__/ **/__pycache__/ @@ -152,4 +152,4 @@ cython_debug/ workspaces/ # benchmarks -benchmarks/outputs \ No newline at end of file +benchmarks/outputs diff --git a/src/cai/util.py b/src/cai/util.py index 40fdc62b..a13257eb 100644 --- a/src/cai/util.py +++ b/src/cai/util.py @@ -341,23 +341,24 @@ class CostTracker: if model_name in self.model_pricing_cache: return self.model_pricing_cache[model_name] - # Try to load pricing from local pricing.json first + # Try to load pricing from remote pricing.json first try: - pricing_path = pathlib.Path("pricing.json") - if pricing_path.exists(): - with open(pricing_path, "r", encoding="utf-8") as f: - local_pricing = json.load(f) - pricing_info = local_pricing.get("alias0", {}) - input_cost = pricing_info.get("input_cost_per_token", 0) - output_cost = pricing_info.get("output_cost_per_token", 0) - - # Cache and return local pricing - self.model_pricing_cache[model_name] = (input_cost, output_cost) - return input_cost, output_cost + import requests + pricing_url = "https://raw.githubusercontent.com/aliasrobotics/cai/refs/heads/mcp_stdio/pricing.json" + response = requests.get(pricing_url, timeout=5) + if response.status_code == 200: + remote_pricing = response.json() + pricing_info = remote_pricing.get("alias0", {}) + input_cost = pricing_info.get("input_cost_per_token", 0) + output_cost = pricing_info.get("output_cost_per_token", 0) + + # Cache and return remote pricing + self.model_pricing_cache[model_name] = (input_cost, output_cost) + return input_cost, output_cost except Exception as e: - print(f" WARNING: Error loading local pricing.json: {str(e)}") - - # Fallback to LiteLLM API if local pricing not found + print(f" WARNING: Error loading remote pricing.json: {str(e)}") + + # Fallback to LiteLLM API if both remote and local pricing not found LITELLM_URL = ( "https://raw.githubusercontent.com/BerriAI/litellm/main/" "model_prices_and_context_window.json"