1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
//! Token sampling stages for language-model logits.
//!
//! The crate accepts `f32` logits and token history as slices. A chain owns its
//! candidate storage and reuses it across calls.
//!
//! # Default chain
//!
//! ```
//! use token_sampling::{ChainConfig, SamplerChain, SplitMix64};
//!
//! let mut chain = SamplerChain::llama_default(ChainConfig::default());
//! let mut rng = SplitMix64::new(7);
//! let mut logits = [0.2, 1.4, -0.3, 0.7];
//! let token = chain.sample(&mut logits, &[1, 2], &mut rng)?;
//! assert!(token < logits.len() as u32);
//! # Ok::<(), token_sampling::Error>(())
//! ```
//!
//! # Custom chain
//!
//! ```
//! use token_sampling::{Dist, SamplerChain, SplitMix64, Temperature, TopK};
//!
//! let mut chain = SamplerChain::new()
//! .push(TopK { k: 8 })
//! .push(Temperature { t: 0.7 })
//! .push(Dist);
//! let mut rng = SplitMix64::new(11);
//! let mut logits = [0.1, 0.9, 0.4];
//! let token = chain.sample(&mut logits, &[], &mut rng)?;
//! assert!(token < 3);
//! # Ok::<(), token_sampling::Error>(())
//! ```
//!
//! # Mirostat chain
//!
//! ```
//! use token_sampling::{MirostatV1, SamplerChain, SplitMix64, Temperature};
//!
//! let mut chain = SamplerChain::new()
//! .push(Temperature { t: 0.8 })
//! .push(MirostatV1::new(32));
//! let mut rng = SplitMix64::new(19);
//! let mut logits = [0.2; 32];
//! let token = chain.sample(&mut logits, &[], &mut rng)?;
//! assert!(token < 32);
//! # Ok::<(), token_sampling::Error>(())
//! ```
pub use ;
pub use ;
pub use ;
pub use ;