import asyncio
from openjev_server.backends.letters import has_chat_template, header_counter, letter_ids, letter_variants, render
from openjev_server.backends.probe import probe
from openjev_server.profile import Profile
from openjev_server.readout import Readout
def test_letter_variants_and_choice(fake_backend):
v = letter_variants(fake_backend.tok)
assert "" in v and len(v[""]) == 52
ids, pre = letter_ids(fake_backend.tok, "auto")
assert pre == "" and len(set(ids.values())) == 52
def test_render_with_and_without_assistant_prefix(fake_backend):
tok = fake_backend.tok
assert has_chat_template(tok)
plain = render(tok, "hello")
pref = render(tok, "hello", "\n\n\n\n")
assert "hello" in plain and "hello" in pref and pref.rstrip().endswith("") and pref.index("hello") < pref.rstrip().rindex("")
assert header_counter(tok, "")("abc") < header_counter(tok, "\n\n\n\n")("abc")
def test_probe_reports_letter_mass(fake_backend):
ro = Readout(fake_backend, Profile())
rep = asyncio.run(probe(ro, fake_backend, letter_prefix_used="", exact=True, vision=True))
assert rep["scores_finite"] is True and rep["letter_mass_at_readout_position"] > 0 and "problem" not in rep