F1-Paddock-Oracle / tests /smoke /test_modal_client.py
NiketKakkar's picture
sync all project files
97e14f1
Raw
History Blame Contribute Delete
1.89 kB
"""Smoke tests for the Modal client (Issue #8).
MANUAL-ONLY — not run in CI.
Run with:
python -m pytest tests/smoke/test_modal_client.py -v
WARNING: Each invocation hits live Modal containers and consumes Modal credits.
Do not add this to CI or run repeatedly without need.
"""
import time
from modal_backend.client import call_generate_commentary, call_reason_strategy
COMMENTARY_PROMPT = (
"LAP 47 of 57 at Monaco. Verstappen leads Hamilton by 6.2 seconds. "
"Hamilton is on worn mediums, tyre age 28 laps. "
"Generate a 2-sentence broadcast commentary update."
)
STRATEGY_PROMPT = (
"Race: 2023 British Grand Prix\n"
"Original outcome: Verstappen won from pole, Hamilton finished P4 after a late pit.\n"
"User change: What if Hamilton had pitted 5 laps earlier on lap 30 for fresh mediums?"
)
def test_container1_reachable_and_non_empty():
"""Container 1 (MiniCPM-o) returns a non-empty text response."""
result = call_generate_commentary(prompt=COMMENTARY_PROMPT)
assert isinstance(result, dict), "Expected dict response from Container 1"
assert result.get("text"), "Container 1 returned empty text"
def test_container2_reachable_and_non_empty():
"""Container 2 (Nemotron Nano) returns a non-empty reasoning chain."""
result = call_reason_strategy(prompt=STRATEGY_PROMPT)
assert isinstance(result, dict), "Expected dict response from Container 2"
assert result.get("reasoning_chain"), "Container 2 returned empty reasoning_chain"
def test_warmup_returns_under_2_seconds():
"""Warmup flag (both containers already warm) completes in under 2 seconds."""
start = time.monotonic()
call_generate_commentary(prompt="", warmup=True)
call_reason_strategy(prompt="", warmup=True)
elapsed = time.monotonic() - start
assert elapsed < 2.0, f"Warmup took {elapsed:.2f}s — containers may be cold"