MCPcopy Create free account
hub / github.com/Tiiny-AI/PowerInfer / sample_id

Function sample_id

examples/llava/llava-cli.cpp:43–105  ·  view source on GitHub ↗

TODO: use common/sampling.h

Source from the content-addressed store, hash-verified

41
42// TODO: use common/sampling.h
43static llama_token sample_id(llama_context * ctx_llama, gpt_params & params) {
44 auto & sparams = params.sparams;
45
46 // out of user input, sample next token
47 const float temp = sparams.temp;
48 const int32_t top_k = sparams.top_k <= 0 ? llama_n_vocab(llama_get_model(ctx_llama)) : sparams.top_k;
49 const float top_p = sparams.top_p;
50 const float tfs_z = sparams.tfs_z;
51 const float typical_p = sparams.typical_p;
52 // const int32_t repeat_last_n = sparams.repeat_last_n < 0 ? n_ctx : sparams.repeat_last_n;
53 // const float repeat_penalty = sparams.repeat_penalty;
54 // const float alpha_presence = sparams.presence_penalty;
55 // const float alpha_frequency = sparams.frequency_penalty;
56 const int mirostat = sparams.mirostat;
57 const float mirostat_tau = sparams.mirostat_tau;
58 const float mirostat_eta = sparams.mirostat_eta;
59 // const bool penalize_nl = sparams.penalize_nl;
60
61 llama_token id = 0;
62 {
63 auto logits = llama_get_logits(ctx_llama);
64 auto n_vocab = llama_n_vocab(llama_get_model(ctx_llama));
65
66 // Apply params.logit_bias map
67 for (auto it = sparams.logit_bias.begin(); it != sparams.logit_bias.end(); it++) {
68 logits[it->first] += it->second;
69 }
70
71 std::vector<llama_token_data> candidates;
72 candidates.reserve(n_vocab);
73 for (llama_token token_id = 0; token_id < n_vocab; token_id++) {
74 candidates.emplace_back(llama_token_data{token_id, logits[token_id], 0.0f});
75 }
76
77 llama_token_data_array candidates_p = { candidates.data(), candidates.size(), false };
78
79 if (temp <= 0) {
80 // Greedy sampling
81 id = llama_sample_token_greedy(ctx_llama, &candidates_p);
82 } else {
83 if (mirostat == 1) {
84 static float mirostat_mu = 2.0f * mirostat_tau;
85 const int mirostat_m = 100;
86 llama_sample_temp(ctx_llama, &candidates_p, temp);
87 id = llama_sample_token_mirostat(ctx_llama, &candidates_p, mirostat_tau, mirostat_eta, mirostat_m, &mirostat_mu);
88 } else if (mirostat == 2) {
89 static float mirostat_mu = 2.0f * mirostat_tau;
90 llama_sample_temp(ctx_llama, &candidates_p, temp);
91 id = llama_sample_token_mirostat_v2(ctx_llama, &candidates_p, mirostat_tau, mirostat_eta, &mirostat_mu);
92 } else {
93 // Temperature sampling
94 llama_sample_top_k(ctx_llama, &candidates_p, top_k, 1);
95 llama_sample_tail_free(ctx_llama, &candidates_p, tfs_z, 1);
96 llama_sample_typical(ctx_llama, &candidates_p, typical_p, 1);
97 llama_sample_top_p(ctx_llama, &candidates_p, top_p, 1);
98 llama_sample_temp(ctx_llama, &candidates_p, temp);
99 id = llama_sample_token(ctx_llama, &candidates_p);
100 }

Callers 1

sampleFunction · 0.85

Calls 15

llama_sample_tempFunction · 0.85
llama_sample_top_kFunction · 0.85
llama_sample_tail_freeFunction · 0.85
llama_sample_typicalFunction · 0.85
llama_sample_top_pFunction · 0.85
llama_sample_tokenFunction · 0.85
reserveMethod · 0.80
llama_n_vocabFunction · 0.50
llama_get_modelFunction · 0.50

Tested by

no test coverage detected