Spaces:
Running
Running
File size: 888 Bytes
99eecc5 249a0e9 99eecc5 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | // Relative probability threshold, applied AFTER temperature. No word rules.
export function sampleCharacter(values, temperature, random, minP = 0) {
if (!(temperature > 0) || !Number.isFinite(temperature)) throw new Error('Invalid temperature.');
if (!(minP >= 0 && minP <= 1)) throw new Error('Seuil de tirage invalide.');
const max = Math.max(...values);
if (!Number.isFinite(max)) throw new Error('Logits non finis.');
const probs = Array.from(values, v => Math.exp((v - max) / temperature));
if (minP > 0) for (let j = 0; j < probs.length; j++) if (probs[j] < minP) probs[j] = 0;
let r = random() * probs.reduce((a, b) => a + b, 0), choice = 0;
for (let j = 0; j < probs.length; j++) {
if (probs[j] === 0) continue;
choice = j; // Rounding at the upper boundary must still choose a retained token.
r -= probs[j]; if (r <= 0) break;
}
return choice;
}
|