summaryrefslogtreecommitdiff
path: root/candle-transformers/src
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-transformers/src
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-transformers/src')
-rw-r--r--candle-transformers/src/lib.rs1
-rw-r--r--candle-transformers/src/utils.rs18
2 files changed, 19 insertions, 0 deletions
diff --git a/candle-transformers/src/lib.rs b/candle-transformers/src/lib.rs
index 86cb904e..a8890dc8 100644
--- a/candle-transformers/src/lib.rs
+++ b/candle-transformers/src/lib.rs
@@ -1,3 +1,4 @@
pub mod generation;
pub mod models;
pub mod pipelines;
+pub mod utils;
diff --git a/candle-transformers/src/utils.rs b/candle-transformers/src/utils.rs
new file mode 100644
index 00000000..50d3b707
--- /dev/null
+++ b/candle-transformers/src/utils.rs
@@ -0,0 +1,18 @@
+use candle::{Result, Tensor};
+
+pub fn apply_repeat_penalty(logits: &Tensor, penalty: f32, context: &[u32]) -> Result<Tensor> {
+ let device = logits.device();
+ let mut logits = logits.to_vec1::<f32>()?;
+ let context: std::collections::HashSet<_> = context.iter().collect();
+ for (token_id, logit) in logits.iter_mut().enumerate() {
+ if context.contains(&(token_id as u32)) {
+ if *logit >= 0. {
+ *logit /= penalty
+ } else {
+ *logit *= penalty
+ }
+ }
+ }
+ let logits_len = logits.len();
+ Tensor::from_vec(logits, logits_len, device)
+}