in core/src/tokenization.rs [169:252]
fn tokenizer_worker(
mut tokenizer: Tokenizer,
max_input_length: usize,
position_offset: usize,
default_prompt: Option<String>,
prompts: Option<HashMap<String, String>>,
receiver: async_channel::Receiver<TokenizerRequest>,
) {
// Loop over requests
while let Ok(request) = receiver.recv_blocking() {
match request {
TokenizerRequest::Encode(
inputs,
truncate,
truncation_direction,
prompt_name,
response_tx,
parent_span,
) => {
parent_span.in_scope(|| {
if !response_tx.is_closed() {
let default_prompt_clone = match prompt_name {
None => default_prompt.clone(),
Some(_) => None,
};
// It's possible that the user dropped its request resulting in a send error.
// We just discard the error
let _ = response_tx.send(encode_input(
inputs,
truncate,
truncation_direction,
max_input_length,
position_offset,
default_prompt_clone,
prompt_name,
prompts.as_ref(),
&mut tokenizer,
));
}
})
}
TokenizerRequest::Tokenize(
inputs,
add_special_tokens,
prompt_name,
response_tx,
parent_span,
) => {
parent_span.in_scope(|| {
if !response_tx.is_closed() {
let default_prompt_clone = match prompt_name {
None => default_prompt.clone(),
Some(_) => None,
};
// It's possible that the user dropped its request resulting in a send error.
// We just discard the error
let _ = response_tx.send(tokenize_input(
inputs,
add_special_tokens,
max_input_length,
None,
default_prompt_clone,
prompt_name,
prompts.as_ref(),
&mut tokenizer,
));
}
})
}
TokenizerRequest::Decode(ids, skip_special_tokens, response_tx, parent_span) => {
parent_span.in_scope(|| {
if !response_tx.is_closed() {
// It's possible that the user dropped its request resulting in a send error.
// We just discard the error
let _ =
response_tx.send(decode_ids(ids, skip_special_tokens, &mut tokenizer));
}
})
}
}
}
}