1+ //! Safe wrapper around `llama_logit_bias`.
2+ use crate :: token:: LlamaToken ;
3+
4+ /// A transparent wrapper around `llama_logit_bias`.
5+ ///
6+ /// Represents a bias to be applied to a specific token during text generation.
7+ /// The bias modifies the likelihood of the token being selected.
8+ ///
9+ /// Do not rely on `repr(transparent)` for this type. It should be considered an implementation
10+ /// detail and may change across minor versions.
11+ #[ derive( Clone , Copy , Debug , PartialEq ) ]
12+ #[ repr( transparent) ]
13+ #[ allow( clippy:: module_name_repetitions) ]
14+ pub struct LlamaLogitBias {
15+ logit_bias : llama_cpp_sys_2:: llama_logit_bias ,
16+ }
17+
18+ impl LlamaLogitBias {
19+ /// Creates a new logit bias for a specific token with the given bias value.
20+ ///
21+ /// # Examples
22+ /// ```
23+ /// # use llama_cpp_2::token::{LlamaToken, logit_bias::LlamaLogitBias};
24+ /// let token = LlamaToken::new(1);
25+ /// let bias = LlamaLogitBias::new(token, 1.5);
26+ /// ```
27+ #[ must_use]
28+ pub fn new ( LlamaToken ( token) : LlamaToken , bias : f32 ) -> Self {
29+ Self {
30+ logit_bias : llama_cpp_sys_2:: llama_logit_bias {
31+ token,
32+ bias,
33+ } ,
34+ }
35+ }
36+
37+ /// Gets the token this bias applies to.
38+ ///
39+ /// # Examples
40+ /// ```
41+ /// # use llama_cpp_2::token::{LlamaToken, logit_bias::LlamaLogitBias};
42+ /// let token = LlamaToken::new(1);
43+ /// let bias = LlamaLogitBias::new(token, 1.5);
44+ /// assert_eq!(bias.token(), token);
45+ /// ```
46+ #[ must_use]
47+ pub fn token ( & self ) -> LlamaToken {
48+ LlamaToken ( self . logit_bias . token )
49+ }
50+
51+ /// Gets the bias value.
52+ ///
53+ /// # Examples
54+ /// ```
55+ /// # use llama_cpp_2::token::{LlamaToken, logit_bias::LlamaLogitBias};
56+ /// let token = LlamaToken::new(1);
57+ /// let bias = LlamaLogitBias::new(token, 1.5);
58+ /// assert_eq!(bias.bias(), 1.5);
59+ /// ```
60+ #[ must_use]
61+ pub fn bias ( & self ) -> f32 {
62+ self . logit_bias . bias
63+ }
64+
65+ /// Sets the token this bias applies to.
66+ ///
67+ /// # Examples
68+ /// ```
69+ /// # use llama_cpp_2::token::{LlamaToken, logit_bias::LlamaLogitBias};
70+ /// let token = LlamaToken::new(1);
71+ /// let mut bias = LlamaLogitBias::new(token, 1.5);
72+ /// let new_token = LlamaToken::new(2);
73+ /// bias.set_token(new_token);
74+ /// assert_eq!(bias.token(), new_token);
75+ /// ```
76+ pub fn set_token ( & mut self , token : LlamaToken ) {
77+ self . logit_bias . token = token. 0 ;
78+ }
79+
80+ /// Sets the bias value.
81+ ///
82+ /// # Examples
83+ /// ```
84+ /// # use llama_cpp_2::token::{LlamaToken, logit_bias::LlamaLogitBias};
85+ /// let token = LlamaToken::new(1);
86+ /// let mut bias = LlamaLogitBias::new(token, 1.5);
87+ /// bias.set_bias(2.0);
88+ /// assert_eq!(bias.bias(), 2.0);
89+ /// ```
90+ pub fn set_bias ( & mut self , bias : f32 ) {
91+ self . logit_bias . bias = bias;
92+ }
93+ }
0 commit comments