* Enable backend sampling with token speculation * Clamp the mask sum before converting it into the sampled index * Add a numeric context parameter declaring the maximum outputs one sequence * More fixes * Don't reuse memory for output views. * Match dist between CPU and GPU * Fix CPU and backend sampling mismatches * Simpify some of the changes * Fix tests on Vulkan * More test fixes * Rebase changes * Rebase and address review comments * Address review comments * Address review comments * Update src/llama-sampler.cpp Co-authored-by: Georgi Gerganov <ggerganov@gmail.com> --------- Co-authored-by: Georgi Gerganov <ggerganov@gmail.com>
47 lines
982 B
C++
47 lines
982 B
C++
#pragma once
|
|
|
|
#include "llama.h"
|
|
|
|
#include <vector>
|
|
|
|
struct llama_vocab;
|
|
struct llama_grammar;
|
|
|
|
// sampler chain
|
|
|
|
struct llama_sampler_chain {
|
|
llama_sampler_chain_params params;
|
|
|
|
// has .backend_init() been called?
|
|
bool is_init = false;
|
|
|
|
uint32_t n_nodes = 0;
|
|
|
|
struct info {
|
|
bool is_backend;
|
|
|
|
llama_sampler * ptr;
|
|
};
|
|
|
|
std::vector<info> samplers;
|
|
|
|
// pre-allocated buffer for llama_sampler_sample to avoid repeated allocations
|
|
std::vector<llama_token_data> cur;
|
|
|
|
// timing
|
|
|
|
mutable int64_t t_sample_us;
|
|
|
|
mutable int32_t n_sample;
|
|
};
|
|
|
|
uint32_t llama_sampler_backend_n_nodes(const llama_sampler * sampler);
|
|
void llama_sampler_backend_begin(llama_sampler * sampler);
|
|
|
|
struct llama_sampler * llama_sampler_init_dry_testing(
|
|
float dry_multiplier,
|
|
float dry_base,
|
|
int32_t dry_allowed_length,
|
|
int32_t dry_penalty_last_n,
|
|
const std::vector<std::vector<llama_token>> & seq_breakers);
|