Download src/spec/draft_policy_test.cpp from WineryLabs/Winery-Strata: direct link, hf CLI and curl.
- Browser
- Download file 3.29 kB
-
https://huggingface.co/WineryLabs/Winery-Strata/resolve/main/src/spec/draft_policy_test.cpp
- Command line
-
hf download hf://WineryLabs/Winery-Strata/src/spec/draft_policy_test.cpp
-
curl -L -o draft_policy_test.cpp https://huggingface.co/WineryLabs/Winery-Strata/resolve/main/src/spec/draft_policy_test.cpp
3.29 kB
| // src/spec/draft_policy_test.cpp - DraftPolicy: when does a lookup window beat the MTP's? | |
| // | |
| // Simulated rounds with the costs measured on the RTX 5070 (window-cost: ~10 ms more per token) check that | |
| // 1. with no lookup proposal the MTP window is kept; | |
| // 2. lookup drafts that are mostly rejected stop being taken (their bucket's rate falls); | |
| // 3. lookup drafts that are always accepted are taken, and the window grows with them; | |
| // 4. match-length buckets learn separately (short matches failing does not stop long ones); | |
| // 5. the policy never proposes a window beyond its cap. | |
| using strata::spec::DraftPolicy; | |
| namespace { | |
| int g_fail = 0; | |
| void check(bool ok, const char* what) { | |
| std::printf(" %-66s %s\n", what, ok ? "ok" : "FAIL"); | |
| if (!ok) ++g_fail; | |
| } | |
| double cost(int t) { return 19.0 + 10.5 * (t - 1); } // ms per round, measured shape | |
| } // namespace | |
| int main() { | |
| std::printf("draft_policy_test\n"); | |
| { | |
| DraftPolicy p(6); | |
| for (int i = 0; i < 50; ++i) p.observe(false, 4, 2, 0, cost(4)); // MTP windows of 4: 3 tokens each | |
| const DraftPolicy::Pick k = p.choose(4, 0, 0); | |
| check(!k.lookup && k.t == 4, "no proposal: the MTP window"); | |
| } | |
| { | |
| DraftPolicy p(6); | |
| for (int i = 0; i < 50; ++i) p.observe(false, 4, 2, 0, cost(4)); | |
| for (int t = 2; t <= 6; ++t) p.observe(false, t, 0, 0, cost(t)); | |
| for (int i = 0; i < 40; ++i) p.observe(true, 6, 0, 4, cost(6)); // short matches, all rejected | |
| check(p.lookup_rate(4) < 0.15, "rejected short-match drafts: their rate falls below 0.15"); | |
| check(!p.choose(4, 5, 4).lookup, "rejected short-match drafts: no longer taken"); | |
| for (int i = 0; i < 40; ++i) p.observe(true, 6, 5, 30, cost(6)); // long matches, all accepted | |
| check(p.lookup_rate(30) > 0.9, "accepted long-match drafts: their rate rises above 0.9"); | |
| const DraftPolicy::Pick k = p.choose(4, 5, 30); | |
| check(k.lookup && k.t == 6, "accepted long matches: the full lookup window is taken"); | |
| check(!p.choose(4, 5, 4).lookup, "buckets are separate: short matches still not taken"); | |
| check(p.choose(4, 20, 30).t <= 6, "never beyond the window cap"); | |
| } | |
| { | |
| DraftPolicy p(8); | |
| for (int i = 0; i < 50; ++i) p.observe(false, 3, 2, 0, cost(3)); // a very good MTP: 3 of 3 tokens | |
| for (int t = 2; t <= 8; ++t) p.observe(false, t, t - 1, 0, cost(t)); | |
| for (int i = 0; i < 40; ++i) p.observe(true, 4, 2, 8, cost(4)); // lookup at q ~ 0.67 | |
| check(!p.choose(3, 7, 8).lookup, "a mediocre lookup does not replace a strong MTP window"); | |
| } | |
| { | |
| DraftPolicy p(6); | |
| for (int i = 0; i < 50; ++i) p.observe(false, 4, 3, 0, cost(4)); // a near-perfect MTP, only size 4 seen | |
| const DraftPolicy::Pick k = p.choose(4, 5, 40); | |
| check(k.lookup && k.t == 6, "an unmeasured size is probed for a confident lookup"); | |
| for (int i = 0; i < 3; ++i) p.observe(true, 6, 5, 40, 3.0 * cost(6)); // it turns out very expensive | |
| check(!p.choose(4, 5, 40).lookup, "after the probes, the measured cost decides"); | |
| } | |
| std::printf(g_fail ? "FAIL\n" : "PASS\n"); | |
| return g_fail ? 1 : 0; | |
| } | |