fn callback()

in src/requests.rs [602:646]


    fn callback(&mut self, request: Arc<TextGenerationRequest>, response: &str) {
        // retrieve current turn id
        let id = match request.id {
            None => {
                return;
            }
            Some(id) => id,
        };
        // retrieve next turn from id
        let next_request = match self.requests.get(&id) {
            None => {
                return;
            }
            Some(request) => request,
        };
        // create a new turn with the prompt concatenated with the response and next turn's prompt
        // and add the next turn id to the new turn
        let new_prompt =
            request.prompt.clone() + "\n" + response + "\n" + next_request.request.prompt.as_str();
        // tokenize the prompt
        let (prompt, num_tokens) = match tokenize_prompt(
            new_prompt.to_string(),
            self.tokenizer.clone(),
            &TokenizeOptions::default(),
        ) {
            Ok((prompt, num_tokens)) => (prompt, num_tokens),
            Err(_) => {
                return;
            }
        };
        let next_id = next_request.request.id;
        let turn = ConversationTurnRequest {
            id,
            priority: 100,       // move to the front of the queue
            tie: Instant::now(), // use the current time as tie-breaking (older turns have higher priority)
            request: TextGenerationRequest {
                id: next_id,
                prompt,
                num_prompt_tokens: num_tokens,
                num_decode_tokens: request.num_decode_tokens, // decode tokens do not change between turns
            },
        };
        //debug!("Adding new turn to queue: {turn}", turn = turn.request.prompt);
        self.queue.push(turn);
    }