@@ -424,34 +424,36 @@ impl Validation {
424
424
None => None ,
425
425
} ;
426
426
427
- let logit_bias = match & request. parameters . logit_bias {
428
- Some ( bias) if !bias. is_empty ( ) => {
429
- for ( token_str, _) in bias. iter ( ) {
430
- let token_id = token_str. parse :: < u32 > ( ) . map_err ( |_| {
431
- ValidationError :: LogitBiasInvalid ( format ! (
432
- "Token ID {} is not a valid number." ,
433
- token_str
434
- ) )
435
- } ) ?;
436
-
437
- if token_id >= self . vocab_size {
438
- return Err ( ValidationError :: LogitBiasInvalid ( format ! (
439
- "Token ID {} is out of range. Must be between 0 and {}." ,
440
- token_id,
441
- self . vocab_size - 1
442
- ) ) ) ;
443
- }
444
- }
427
+ // Validate logit bias and convert to a vector of (token_id, bias_value)
428
+ let logit_bias = request
429
+ . parameters
430
+ . logit_bias
431
+ . as_ref ( )
432
+ . filter ( |bias_map| !bias_map. is_empty ( ) )
433
+ . map ( |bias_map| {
434
+ bias_map
435
+ . iter ( )
436
+ . map ( |( token_str, & bias_value) | {
437
+ let token_id: u32 = token_str. parse ( ) . map_err ( |_| {
438
+ ValidationError :: LogitBiasInvalid ( format ! (
439
+ "Token ID {token_str} is not a valid number."
440
+ ) )
441
+ } ) ?;
445
442
446
- // Transform into the required format
447
- Some (
448
- bias. iter ( )
449
- . map ( |( k, v) | ( k. parse :: < u32 > ( ) . unwrap ( ) , * v as f32 ) )
450
- . collect ( ) ,
451
- )
452
- }
453
- _ => None ,
454
- } ;
443
+ if token_id >= self . vocab_size {
444
+ return Err ( ValidationError :: LogitBiasInvalid ( format ! (
445
+ "Token ID {token_id} is out of range (0..{})." ,
446
+ self . vocab_size - 1
447
+ ) ) ) ;
448
+ }
449
+
450
+ Ok ( ( token_id, bias_value as f32 ) )
451
+ } )
452
+ . collect :: < Result < Vec < _ > , _ > > ( )
453
+ } )
454
+ // convert Option<Result<T, E>> to Result<Option<T>, E> to throw
455
+ // if any of the token IDs are invalid
456
+ . transpose ( ) ?;
455
457
456
458
let parameters = ValidParameters {
457
459
temperature,
0 commit comments