summaryrefslogtreecommitdiff
path: root/candle-examples/examples/llama/main.rs
diff options
context:
space:
mode:
authorLaurent Mazare <laurent.mazare@gmail.com>2023-08-27 10:48:45 +0100
committerGitHub <noreply@github.com>2023-08-27 10:48:45 +0100
commit6e485f2deb65bf21d21c85b4913149e7d2c65c6b (patch)
treeebd2d2265e4e321f6cbd13d0a1445a77401a9ab4 /candle-examples/examples/llama/main.rs
parent5320aa6b7d339ff594d3886dd29634ea8cde6f17 (diff)
downloadcandle-6e485f2deb65bf21d21c85b4913149e7d2c65c6b.tar.gz
candle-6e485f2deb65bf21d21c85b4913149e7d2c65c6b.tar.bz2
candle-6e485f2deb65bf21d21c85b4913149e7d2c65c6b.zip
Add some optional repeat penalty. (#623)
* Add some optional repeat penalty. * Add the missing files.
Diffstat (limited to 'candle-examples/examples/llama/main.rs')
-rw-r--r--candle-examples/examples/llama/main.rs18
1 files changed, 18 insertions, 0 deletions
diff --git a/candle-examples/examples/llama/main.rs b/candle-examples/examples/llama/main.rs
index 2f4a4cd8..6f8766d4 100644
--- a/candle-examples/examples/llama/main.rs
+++ b/candle-examples/examples/llama/main.rs
@@ -83,6 +83,14 @@ struct Args {
/// (same structure as huggingface online)
#[arg(long)]
local_weights: Option<String>,
+
+ /// Penalty to be applied for repeating tokens, 1. means no penalty.
+ #[arg(long, default_value_t = 1.0)]
+ repeat_penalty: f32,
+
+ /// The context size to consider for the repeat penalty.
+ #[arg(long, default_value_t = 64)]
+ repeat_last_n: usize,
}
fn main() -> Result<()> {
@@ -200,6 +208,16 @@ fn main() -> Result<()> {
let input = Tensor::new(ctxt, &device)?.unsqueeze(0)?;
let logits = llama.forward(&input, index_pos)?;
let logits = logits.squeeze(0)?;
+ let logits = if args.repeat_penalty == 1. {
+ logits
+ } else {
+ let start_at = tokens.len().saturating_sub(args.repeat_last_n);
+ candle_transformers::utils::apply_repeat_penalty(
+ &logits,
+ args.repeat_penalty,
+ &tokens[start_at..],
+ )?
+ };
index_pos += ctxt.len();
let next_token = logits_processor.sample(&logits)?;