| 20 | #define DUMP(__candidates) do { printf("%s:%d (%s)\n", __FILE__, __LINE__, __func__); dump((__candidates)); printf("-\n"); } while(0) |
| 21 | |
| 22 | static void test_top_k(const std::vector<float> & probs, const std::vector<float> & expected_probs, int k) { |
| 23 | size_t n_vocab = probs.size(); |
| 24 | std::vector<llama_token_data> candidates; |
| 25 | candidates.reserve(n_vocab); |
| 26 | for (llama_token token_id = 0; token_id < (llama_token)n_vocab; token_id++) { |
| 27 | float logit = log(probs[token_id]); |
| 28 | candidates.emplace_back(llama_token_data{token_id, logit, 0.0f}); |
| 29 | } |
| 30 | |
| 31 | llama_token_data_array candidates_p = { candidates.data(), candidates.size(), false }; |
| 32 | llama_sample_softmax(nullptr, &candidates_p); |
| 33 | DUMP(&candidates_p); |
| 34 | llama_sample_top_k(nullptr, &candidates_p, k, 1); |
| 35 | DUMP(&candidates_p); |
| 36 | |
| 37 | GGML_ASSERT(candidates_p.size == expected_probs.size()); |
| 38 | for (size_t i = 0; i < candidates_p.size; i++) { |
| 39 | GGML_ASSERT(fabs(candidates_p.data[i].p - expected_probs[i]) < 1e-5); |
| 40 | } |
| 41 | } |
| 42 | |
| 43 | static void test_top_p(const std::vector<float> & probs, const std::vector<float> & expected_probs, float p) { |
| 44 | size_t n_vocab = probs.size(); |
no test coverage detected