| import numpy as np | |
| from mla.generate import sample_next, _softmax | |
| def test_temperature_zero_is_greedy(): | |
| logits = np.array([0.1, 3.0, 0.2, 2.9]) | |
| assert sample_next(logits, temperature=0.0) == 1 | |
| def test_top_k_one_is_greedy(): | |
| logits = np.array([1.0, 0.5, 5.0, 2.0, 0.0]) | |
| rng = np.random.default_rng(0) | |
| for _ in range(20): | |
| assert sample_next(logits, temperature=1.0, top_k=1, rng=rng) == 2 | |
| def test_top_p_restricts_to_nucleus(): | |
| logits = np.log(np.array([0.70, 0.20, 0.05, 0.05])) | |
| rng = np.random.default_rng(1) | |
| picks = {sample_next(logits, temperature=1.0, top_p=0.85, rng=rng) for _ in range(200)} | |
| assert picks <= {0, 1} | |
| def test_reproducible_with_seed(): | |
| logits = np.array([1.0, 1.0, 1.0, 1.0, 1.0]) | |
| a = [sample_next(logits, temperature=1.0, rng=np.random.default_rng(42)) for _ in range(5)] | |
| b = [sample_next(logits, temperature=1.0, rng=np.random.default_rng(42)) for _ in range(5)] | |
| assert a == b | |
| def test_softmax_sums_to_one(): | |
| z = np.array([2.0, -1.0, 0.5, 3.0]) | |
| p = _softmax(z) | |
| assert abs(p.sum() - 1.0) < 1e-12 | |