def _run_critic(self, paragraphs: List[str]) -> CriticOutput:
        """
        Run Critic component, the llm will generate responses based on the paragraphs and then evaluate them.

        Args:
            paragraphs (List[str]): List of paragraphs to evaluate

        Returns:
            CriticOutput: Paragraphs final score, LLM predictions and source nodes

        """
        paragraphs_final_score = {}
        llm_response_text = {}
        source_nodes = []

        for p_idx, paragraph in enumerate(paragraphs):
            pred = self.llm(paragraph, **self.generate_kwargs)
            # Cache llm answer
            llm_response_text[p_idx] = pred["choices"][0]["text"]

            logprobs = pred["choices"][0]["logprobs"]
            pred_log_probs = logprobs["top_logprobs"]
            # Compute isRel score, on the first predicted token
            isRel_score = _relevance_score(pred_log_probs[0])

            # Compute isSup score
            isSup_score = _is_supported_score(logprobs["tokens"], pred_log_probs)

            # Compute isUse score
            isUse_score = _is_useful_score(logprobs["tokens"], pred_log_probs)

            paragraphs_final_score[p_idx] = (
                isRel_score + isSup_score + 0.5 * isUse_score
            )
            # Add the paragraph as source node with its relevance score
            source_nodes.append(
                NodeWithScore(
                    node=TextNode(text=paragraph, id_=str(p_idx)),
                    score=isRel_score,
                )
            )

            if self.verbose:
                print_text(
                    f"Input: {paragraph}\nPrediction: {llm_response_text[p_idx]}\nScore: {paragraphs_final_score[p_idx]}\n",
                    color="blue",
                )
                print_text(
                    f"{p_idx + 1}/{len(paragraphs)} paragraphs done\n\n", color="blue"
                )

        return CriticOutput(llm_response_text, paragraphs_final_score, source_nodes)

        Run Critic component, the llm will generate responses based on the paragraphs and then evaluate them.

        Args:
            paragraphs (List[str]): List of paragraphs to evaluate

        Returns:
            CriticOutput: Paragraphs final score, LLM predictions and source nodes

        
llama-index-packs/llama-index-packs-self-rag/llama_index/packs/self_rag/base.py