Felipe97/llama-cpp-compiled
01.1k
1#pragma once2 3#include "llama.h"4 5#include <cstdint>6 7enum diffusion_algorithm {8 DIFFUSION_ALGORITHM_ORIGIN = 0,9 DIFFUSION_ALGORITHM_ENTROPY_BASED = 1,10 DIFFUSION_ALGORITHM_MARGIN_BASED = 2,11 DIFFUSION_ALGORITHM_RANDOM = 3,12 DIFFUSION_ALGORITHM_CONFIDENCE_BASED = 4,13};14 15// Unified transfer scheduling methods16enum diffusion_transfer_schedule {17 DIFFUSION_TRANSFER_SCHEDULE_TIMESTEP_BASED = 0, // Dream-style: (1.0 - s/t) * remaining18 DIFFUSION_TRANSFER_SCHEDULE_BLOCK_BASED = 1, // LLaDA-style: process in blocks with get_num_transfer_tokens19};20 21typedef bool (*diffusion_step_callback_t)(int32_t step,22 int32_t total_steps,23 const llama_token * tokens,24 int32_t n_tokens,25 void * user_data);26 27struct diffusion_params {28 int32_t steps = 0;29 float temperature = 0;30 llama_token mask_token_id = LLAMA_TOKEN_NULL;31 diffusion_step_callback_t step_callback = nullptr;32 void * step_callback_user_data = nullptr;33 int32_t seed = 0;34 bool visual_mode = false;35 bool shift_logits = false; // Shift logits by -1 after decode36 37 float top_p = 0.;38 int32_t top_k = 0.;39 40 diffusion_algorithm algorithm = DIFFUSION_ALGORITHM_CONFIDENCE_BASED;41 diffusion_transfer_schedule schedule = DIFFUSION_TRANSFER_SCHEDULE_TIMESTEP_BASED;42 43 float cfg_scale = 0.; // Config scale for classifier-free guidance44 float eps = 0.; // Timestep scheduling45 int32_t block_length = 0; // Block size (for block scheduling)46 float alg_temp = 0; // algorithm temperature (0.0 = deterministic)47 bool add_gumbel_noise = false; // Add gumbel noise to the logits if temp > 0.048 49 int32_t max_length = 0; // Maximum sequence length50};51 52void diffusion_generate(llama_context * ctx,53 const llama_token * input_tokens,54 llama_token * output_tokens,55 int32_t n_input,56 const diffusion_params & params,57 int32_t & n_generated);58 