update
This commit is contained in:
@@ -10,8 +10,10 @@ from pathlib import Path
|
||||
from unittest.mock import patch
|
||||
|
||||
from aza_ai_budget import (
|
||||
_norm_model,
|
||||
compute_budget_snapshot,
|
||||
ensure_ai_budget_schema,
|
||||
estimate_openai_cost_usd,
|
||||
insert_usage_event,
|
||||
resolve_license_for_empfang,
|
||||
sum_usage_usd_for_period,
|
||||
@@ -67,6 +69,57 @@ def _mk_db(path: Path) -> None:
|
||||
con.close()
|
||||
|
||||
|
||||
class TestModelNormalizationAndBudgetDefault(unittest.TestCase):
|
||||
def test_norm_dated_gpt_4o_mini(self):
|
||||
self.assertEqual(_norm_model("gpt-4o-mini-2024-07-18"), "gpt-4o-mini")
|
||||
|
||||
def test_dated_gpt_4o_mini_uses_cheap_price(self):
|
||||
cost = estimate_openai_cost_usd(
|
||||
model="gpt-4o-mini-2024-07-18",
|
||||
input_tokens=1_000_000,
|
||||
output_tokens=0,
|
||||
)
|
||||
self.assertAlmostEqual(cost, 0.15, places=6)
|
||||
self.assertEqual(
|
||||
cost,
|
||||
estimate_openai_cost_usd(
|
||||
model="gpt-4o-mini", input_tokens=1_000_000, output_tokens=0
|
||||
),
|
||||
)
|
||||
|
||||
def test_gpt_4o_mini_transcribe_unchanged(self):
|
||||
self.assertEqual(_norm_model("gpt-4o-mini-transcribe"), "gpt-4o-mini-transcribe")
|
||||
cost = estimate_openai_cost_usd(
|
||||
model="gpt-4o-mini-transcribe", audio_seconds=60.0
|
||||
)
|
||||
self.assertAlmostEqual(cost, 0.012, places=6)
|
||||
|
||||
def test_unknown_model_stays_conservative_fallback(self):
|
||||
cost = estimate_openai_cost_usd(
|
||||
model="totally-unknown-model-xyz",
|
||||
input_tokens=1_000_000,
|
||||
output_tokens=0,
|
||||
)
|
||||
self.assertAlmostEqual(cost, 5.0, places=6)
|
||||
|
||||
def test_env_overrides_budget_default(self):
|
||||
import importlib
|
||||
import aza_ai_budget as mod
|
||||
|
||||
key = "AZA_AI_BUDGET_USD_DEFAULT"
|
||||
old = os.environ.get(key)
|
||||
try:
|
||||
os.environ[key] = "42.5"
|
||||
importlib.reload(mod)
|
||||
self.assertEqual(mod.DEFAULT_MONTHLY_AI_BUDGET_USD, 42.5)
|
||||
finally:
|
||||
if old is None:
|
||||
os.environ.pop(key, None)
|
||||
else:
|
||||
os.environ[key] = old
|
||||
importlib.reload(mod)
|
||||
|
||||
|
||||
class TestBackendGatePracticeFallback(unittest.TestCase):
|
||||
def setUp(self):
|
||||
self.tmp = tempfile.NamedTemporaryFile(suffix=".sqlite", delete=False)
|
||||
|
||||
Reference in New Issue
Block a user