Spaces:
Sleeping
Sleeping
| import re | |
| def parse_followup_and_tools(input_text): | |
| # Remove extra brackets and excess quotes | |
| cleaned_text = re.sub(r'\[|\]|"+', ' ', input_text) | |
| # Extract response content | |
| response_pattern = re.compile(r'<response>(.*?)</response>', re.DOTALL) | |
| response_parts = response_pattern.findall(cleaned_text) | |
| combined_response = ' '.join(response_parts) | |
| # Normalize spaces in the combined response | |
| combined_response = ' '.join(combined_response.split()) | |
| parsed_interacts = [] | |
| parsed_tools = [] | |
| # Parse interacts and tools | |
| blocks = re.finditer(r'<(interact|tools?)(.*?)>(.*?)</\1>', cleaned_text, re.DOTALL) | |
| for block in blocks: | |
| block_type, _, content = block.groups() | |
| content = content.strip() | |
| if block_type == 'interact': | |
| question_blocks = re.split(r'\s*-\s*text:', content)[1:] | |
| for qblock in question_blocks: | |
| parts = re.split(r'\s*options:\s*', qblock, maxsplit=1) | |
| if len(parts) == 2: | |
| question = ' '.join(parts[0].split()) # Normalize spaces | |
| options = [' '.join(opt.split()) for opt in re.split(r'\s*-\s*', parts[1]) if opt.strip()] | |
| parsed_interacts.append({'question': question, 'options': options}) | |
| elif block_type.startswith('tool'): # This will match both 'tool' and 'tools' | |
| tool_match = re.search(r'text:\s*(.*?)\s*options:\s*-\s*(.*)', content, re.DOTALL) | |
| if tool_match: | |
| tool_name = ' '.join(tool_match.group(1).split()) # Normalize spaces | |
| option = ' '.join(tool_match.group(2).split()) # Normalize spaces | |
| parsed_tools.append({'name': tool_name, 'input': option}) | |
| return combined_response, parsed_interacts, parsed_tools |