def _propose_question_decomposition(
        self, question: str, chosen_atom_infos: List[AtomRetrievalInfo],
    ) -> Tuple[bool, str, List[str]]:
        """Let the LLM client propose a sub-questions list for better answering the original question based on the
        chosen information. It is the first step in atom information selection loop.
        """
        messages = self._decompose_proposal_protocol.process_input(
            content=question,
            chosen_atom_infos=chosen_atom_infos,
        )
        content = self._client.generate_content_with_messages(messages, **self.llm_config)
        decompose, thinking, question_list = self._decompose_proposal_protocol.parse_output(content)
        return decompose, thinking, question_list
Let the LLM client propose a sub-questions list for better answering the original question based on the
        chosen information. It is the first step in atom information selection loop.
        
pikerag/workflows/qa_decompose.py