Mercury Genesys Token Calculator

This commit is contained in:
2026-08-07 14:49:39 -04:00
parent 22a5d907d6
commit 89b835d681
35 changed files with 14105 additions and 2912 deletions

View File

@@ -0,0 +1,114 @@
"""Enhanced TTS — the non-token line, its round-up, and its free share."""
from __future__ import annotations
import pytest
from genesyscalc.meters import Confidence
from genesyscalc.tts import (
TTS_PRICE_PER_MILLION_CHARS,
TTS_SOURCE,
TTS_SOURCE_DATE,
TTS_STANDARD_END_OF_SALE,
TTS_STANDARD_END_OF_SUPPORT,
TtsUsage,
tts_cost,
tts_free_share,
)
from genesyscalc.usage import DeflectionMix
def test_published_rates() -> None:
assert TTS_PRICE_PER_MILLION_CHARS == {"advanced": 20.0, "standard": 5.0}
def test_source_pinned_and_distinct_from_the_tokens_article() -> None:
"""TTS has its own page and its own date — it is not a token meter."""
from genesyscalc.ratecard import RATE_CARD_SOURCE, RATE_CARD_SOURCE_DATE
assert TTS_SOURCE_DATE == "2026-05-22"
assert TTS_SOURCE.endswith("genesys-enhanced-tts-pricing/")
assert TTS_SOURCE != RATE_CARD_SOURCE
assert TTS_SOURCE_DATE != RATE_CARD_SOURCE_DATE
def test_tts_is_published_so_confirmed() -> None:
line = tts_cost(TtsUsage(calls_monthly=100_000))
assert line.confidence is Confidence.CONFIRMED
def test_hand_checked_advanced_cost() -> None:
"""100,000 calls × 2,000 chars = 200M chars → 200 units × $20 = $4,000/mo."""
line = tts_cost(TtsUsage(calls_monthly=100_000, chars_per_call=2_000))
assert line.total_chars_monthly == pytest.approx(200_000_000.0)
assert line.billed_millions_monthly == 200
assert line.cost_monthly == pytest.approx(4_000.0)
assert line.cost_annual == pytest.approx(48_000.0)
def test_hand_checked_standard_cost() -> None:
"""Same volume on standard voices: 200 × $5 = $1,000/mo."""
line = tts_cost(
TtsUsage(calls_monthly=100_000, chars_per_call=2_000, tier="standard")
)
assert line.cost_monthly == pytest.approx(1_000.0)
def test_per_million_roundup_published_examples() -> None:
"""The article's own examples: 200,000 chars = $5; 1,000,005 chars = $10.
Both on standard voices, where the unit rate is $5.
"""
small = tts_cost(TtsUsage(calls_monthly=1, chars_per_call=200_000, tier="standard"))
assert small.billed_millions_monthly == 1
assert small.cost_monthly == pytest.approx(5.0)
just_over = tts_cost(
TtsUsage(calls_monthly=1, chars_per_call=1_000_005, tier="standard")
)
assert just_over.billed_millions_monthly == 2
assert just_over.cost_monthly == pytest.approx(10.0)
def test_free_share_tracks_the_virtual_agent_tiers() -> None:
"""Free during VA and agentic VA — bot-only deflection does not qualify."""
mix = DeflectionMix(
bot_only_share=0.30, virtual_agent_share=0.15, agentic_va_share=0.05
)
assert tts_free_share(mix) == pytest.approx(0.20)
def test_free_share_reduces_the_bill() -> None:
"""200M chars, 20% free → 160M billable → 160 × $20 = $3,200/mo."""
mix = DeflectionMix(virtual_agent_share=0.15, agentic_va_share=0.05)
line = tts_cost(TtsUsage(calls_monthly=100_000, chars_per_call=2_000), mix)
assert line.free_share == pytest.approx(0.20)
assert line.free_chars_monthly == pytest.approx(40_000_000.0)
assert line.billable_chars_monthly == pytest.approx(160_000_000.0)
assert line.cost_monthly == pytest.approx(3_200.0)
def test_standard_tier_warns_about_end_of_life() -> None:
line = tts_cost(TtsUsage(calls_monthly=1_000, tier="standard"))
assert len(line.warnings) == 1
assert TTS_STANDARD_END_OF_SALE in line.warnings[0]
assert TTS_STANDARD_END_OF_SUPPORT in line.warnings[0]
def test_advanced_tier_does_not_warn() -> None:
assert tts_cost(TtsUsage(calls_monthly=1_000)).warnings == ()
def test_concession_applies_to_tts_too() -> None:
line = tts_cost(TtsUsage(calls_monthly=100_000), concession_pct=0.25)
assert line.cost_monthly == pytest.approx(3_000.0)
def test_zero_volume_costs_nothing() -> None:
line = tts_cost(TtsUsage(calls_monthly=0))
assert line.billed_millions_monthly == 0
assert line.cost_monthly == 0.0
def test_unknown_tier_rejected() -> None:
with pytest.raises(ValueError, match="unknown TTS tier"):
TtsUsage(calls_monthly=1, tier="neural-ultra")