Skip to content

Commit 033d672

Browse files
committed
Add p-less setup and configuration into rust files
Signed-off-by: Runyan <blackbird7@hotmail.com> Signed-off-by: Runyan <blackbird7@hotmail.com>
1 parent 2810836 commit 033d672

13 files changed

Lines changed: 50 additions & 0 deletions

File tree

rust/src/engine-core-client/src/protocol/sampling.rs

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,10 @@ fn default_max_tokens() -> u32 {
2424
16
2525
}
2626

27+
fn default_p_less() -> bool {
28+
false
29+
}
30+
2731
///
2832
/// Parameters for detecting repetitive N-gram patterns in output tokens.
2933
///
@@ -96,6 +100,9 @@ pub struct EngineCoreSamplingParams {
96100
pub prompt_logprobs: Option<i32>,
97101
/// Minimum probability threshold for token sampling.
98102
pub min_p: f32,
103+
/// Whether to use p-less sampling. p-less sampling is hyperparameter free.
104+
#[serde(default = "default_p_less")]
105+
pub p_less: bool,
99106
/// Frequency penalty applied by the sampler.
100107
pub frequency_penalty: f32,
101108
/// Presence penalty applied by the sampler.
@@ -161,6 +168,7 @@ impl EngineCoreSamplingParams {
161168
logprobs: None,
162169
prompt_logprobs: None,
163170
min_p: 0.0,
171+
p_less: false,
164172
frequency_penalty: 0.0,
165173
presence_penalty: 0.0,
166174
repetition_penalty: 1.0,
@@ -231,6 +239,7 @@ mod tests {
231239
assert_eq!(sampling.max_tokens, 16);
232240
assert_eq!(sampling.min_tokens, 0);
233241
assert_eq!(sampling.min_p, 0.0);
242+
assert_eq!(sampling.p_less, false);
234243
assert_eq!(sampling.frequency_penalty, 0.0);
235244
assert_eq!(sampling.presence_penalty, 0.0);
236245
assert_eq!(sampling.repetition_penalty, 1.0);

rust/src/engine-core-client/src/tests/client.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2463,6 +2463,7 @@ fn python_msgpack_fixtures_match_rust_encoding() {
24632463
logprobs: None,
24642464
prompt_logprobs: None,
24652465
min_p: 0.0,
2466+
p_less: false,
24662467
frequency_penalty: 0.0,
24672468
presence_penalty: 0.0,
24682469
repetition_penalty: 1.0,

rust/src/server/src/grpc/convert.rs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -145,6 +145,10 @@ fn build_sampling_params(
145145
if s.min_p != 0.0 {
146146
params.min_p = Some(s.min_p);
147147
}
148+
// p-less is a boolean, either true or false.
149+
if s.p_less {
150+
params.p_less = Some(s.p_less);
151+
}
148152
params.seed = s.seed;
149153
}
150154

rust/src/server/src/routes/openai/chat_completions/convert.rs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -124,6 +124,7 @@ pub(super) fn prepare_chat_request(
124124
logprobs: request.logprobs.then_some(top_logprobs),
125125
prompt_logprobs,
126126
min_p: request.min_p,
127+
p_less: request.p_less,
127128
frequency_penalty: request.frequency_penalty,
128129
presence_penalty: request.presence_penalty,
129130
repetition_penalty: request.repetition_penalty,
@@ -607,6 +608,7 @@ mod tests {
607608
let request = ChatCompletionRequest {
608609
seed: Some(42),
609610
min_p: Some(0.2),
611+
p_less: Some(true),
610612
frequency_penalty: Some(0.3),
611613
presence_penalty: Some(0.4),
612614
repetition_penalty: Some(1.1),
@@ -622,6 +624,7 @@ mod tests {
622624
let expected = VllmSamplingParams {
623625
seed: Some(42),
624626
min_p: Some(0.2),
627+
p_less: Some(true),
625628
frequency_penalty: Some(0.3),
626629
presence_penalty: Some(0.4),
627630
repetition_penalty: Some(1.1),

rust/src/server/src/routes/openai/chat_completions/types.rs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -126,6 +126,9 @@ pub struct ChatCompletionRequest {
126126
#[validate(range(min = 0.0, max = 1.0))]
127127
pub min_p: Option<f32>,
128128

129+
/// Whether to use p-less sampling. p-less sampling is hyperparameter free.
130+
pub p_less: Option<bool>,
131+
129132
/// Repetition penalty for reducing repetitive text
130133
#[validate(range(min = 0.0, max = 2.0))]
131134
pub repetition_penalty: Option<f32>,
@@ -277,6 +280,7 @@ impl Default for ChatCompletionRequest {
277280
use_beam_search: false,
278281
top_k: None,
279282
min_p: None,
283+
p_less: None,
280284
repetition_penalty: None,
281285
length_penalty: None,
282286
stop_token_ids: None,

rust/src/server/src/routes/openai/chat_completions/validate.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -169,6 +169,7 @@ mod tests {
169169
frequency_penalty: Some(0.5),
170170
presence_penalty: Some(0.25),
171171
min_p: Some(0.2),
172+
p_less: Some(true),
172173
repetition_penalty: Some(1.1),
173174
seed: Some(7),
174175
..base_request()

rust/src/server/src/routes/openai/completions/convert.rs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -119,6 +119,7 @@ pub(super) fn prepare_completion_request(
119119
logprobs,
120120
prompt_logprobs,
121121
min_p: request.min_p,
122+
p_less: request.p_less,
122123
frequency_penalty: request.frequency_penalty,
123124
presence_penalty: request.presence_penalty,
124125
repetition_penalty: request.repetition_penalty,
@@ -291,6 +292,7 @@ mod tests {
291292
"top_p": 0.9,
292293
"top_k": 42,
293294
"min_p": 0.1,
295+
"p_less": true,
294296
"frequency_penalty": 0.2,
295297
"presence_penalty": 0.3,
296298
"repetition_penalty": 1.1,
@@ -317,6 +319,7 @@ mod tests {
317319
assert_eq!(prepared.text_request.sampling_params.top_p, Some(0.9));
318320
assert_eq!(prepared.text_request.sampling_params.top_k, Some(42));
319321
assert_eq!(prepared.text_request.sampling_params.min_p, Some(0.1));
322+
assert_eq!(prepared.text_request.sampling_params.p_less, Some(true));
320323
assert_eq!(
321324
prepared.text_request.sampling_params.frequency_penalty,
322325
Some(0.2)

rust/src/server/src/routes/openai/completions/types.rs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -101,6 +101,9 @@ pub struct CompletionRequest {
101101
/// Min-p nucleus sampling parameter
102102
pub min_p: Option<f32>,
103103

104+
/// Whether to use p-less sampling. p-less sampling is hyperparameter free.
105+
pub p_less: Option<bool>,
106+
104107
/// Repetition penalty for reducing repetitive text
105108
pub repetition_penalty: Option<f32>,
106109

rust/src/text/src/backend/hf/config.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -112,6 +112,7 @@ pub(super) struct GenerationConfig {
112112
pub top_p: Option<f32>,
113113
pub top_k: Option<u32>,
114114
pub min_p: Option<f32>,
115+
pub p_less: Option<bool>,
115116
pub repetition_penalty: Option<f32>,
116117
pub max_new_tokens: Option<u32>,
117118
}

rust/src/text/src/backend/hf/mod.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -123,6 +123,7 @@ impl TextBackend for HfTextBackend {
123123
default_top_p: self.generation_config.top_p,
124124
default_top_k: self.generation_config.top_k,
125125
default_min_p: self.generation_config.min_p,
126+
default_p_less: self.generation_config.p_less,
126127
default_repetition_penalty: self.generation_config.repetition_penalty,
127128
default_max_tokens: self.generation_config.max_new_tokens,
128129
})

0 commit comments

Comments
 (0)