in src/models/struxgpt_v2.py [0:0]
def merge_struct(title: str, struct_list: Union[List["StructItem"], List[dict]],
mode: Literal["concat", 'upgrade']):
assert len(struct_list)
if isinstance(struct_list[0], dict):
struct_list = [StructItem(struct_dict=data_res) for data_res in struct_list]
data_dict: Dict[str, Union[str, List[str]]] = {
'scope': title,
'aspects': [],
'raw_query': [],
'raw_response': None
}
sent_num_offset = 0
for struct_res in struct_list:
data_dict['raw_query'].extend(StruXGPT.remapping_sentence(struct_res.raw_query))
sent_num = struct_res.aspects[-1].sent_range[1]
if mode == 'concat':
for aspect in struct_res.aspects:
data_dict['aspects'].append(
AspectItem.offset_sent_range(aspect.to_json(), sent_num_offset)
)
elif mode == 'upgrade':
super_aspect = {
'name': struct_res.scope,
'sent_range': [
sent_num_offset + 1,
sent_num_offset + sent_num
],
'subaspects': [
AspectItem.offset_sent_range(aspect.to_json(), sent_num_offset) \
for aspect in struct_res.aspects
]
}
data_dict['aspects'].append(super_aspect)
else:
raise NotImplementedError(mode)
sent_num_offset += sent_num
data_dict['raw_query'] = StruXGPT.mapping_sentence(data_dict['raw_query'])
return StructItem(struct_dict=data_dict)