def refine_struct_result()

in src/models/struxgpt_v2.py [0:0]


    def refine_struct_result(self, raw_query: str, slice_sent_num: int = 0, num_threads: int = 0,
                                   timeout: int = 3, return_json: bool = True):
        if slice_sent_num == 0:
            struct_res = self.generate_struct(raw_query, timeout=timeout)
        else:
            assert isinstance(slice_sent_num, int) and slice_sent_num > 0
            sent_list = self.remapping_sentence(raw_query)
            ns, rs = len(sent_list), slice_sent_num
            if ns > rs:
                if num_threads > 1:
                    struct_args_list = []
                    for i in range(0, ns, rs):
                        sent_sublist = sent_list[i:i+rs]
                        sentences_str = self.mapping_sentence(sent_sublist)
                        struct_args_list.append((sentences_str, timeout))
                    struct_res_list = multiprocess_call(self.generate_struct, struct_args_list, 
                                                        num_threads=min(num_threads, len(struct_args_list)))
                else:
                    struct_res_list = []
                    for i in range(0, ns, rs):
                        sent_sublist = sent_list[i:i+rs]
                        sentences_str = self.mapping_sentence(sent_sublist)
                        struct_res_list.append(self.generate_struct(sentences_str, timeout=timeout))
                scope = self.summarize_sentence_scope(raw_query)
                struct_res = StructItem.merge_struct(scope, struct_res_list, mode='concat')
            else:
                struct_res = self.generate_struct(raw_query, timeout=timeout)
        
        return struct_res.to_json() if return_json else struct_res