pvanand commited on
Commit
2d3888b
1 Parent(s): fc04628

Create tests/follow_up_response.py

Browse files
Files changed (1) hide show
  1. tests/follow_up_response.py +90 -0
tests/follow_up_response.py ADDED
@@ -0,0 +1,90 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import re
2
+
3
+ def parse_text(input_text):
4
+ # Define patterns for response and clarification
5
+ response_pattern = re.compile(r'<response>(.*?)<\/response>', re.DOTALL)
6
+ clarification_pattern = re.compile(r'<clarification>(.*?)<\/clarification>', re.DOTALL)
7
+
8
+ # Find all matches for response and clarification
9
+ response_matches = response_pattern.finditer(input_text)
10
+ clarification_matches = clarification_pattern.finditer(input_text)
11
+
12
+ # Initialize variables to keep track of the position
13
+ last_end = 0
14
+ combined_response = ""
15
+ parsed_clarifications = []
16
+
17
+ # Combine responses and capture everything in between
18
+ for response_match in response_matches:
19
+ # Capture text before the current response tag
20
+ combined_response += input_text[last_end:response_match.start()].strip() + "\n"
21
+ # Add the response content
22
+ combined_response += response_match.group(1).strip() + "\n"
23
+ # Update the last end position
24
+ last_end = response_match.end()
25
+
26
+ # Check for clarifications and parse them
27
+ for clarification_match in clarification_matches:
28
+ # Capture text before the current clarification tag
29
+ combined_response += input_text[last_end:clarification_match.start()].strip() + "\n"
30
+ # Process the clarification block
31
+ clarification_text = clarification_match.group(1).strip()
32
+ if clarification_text:
33
+ # Split by "text:" to separate each question block
34
+ question_blocks = clarification_text.split("- text:")
35
+
36
+ # Loop through each block and extract the question and its options
37
+ for block in question_blocks[1:]:
38
+ # Extract the question using regex (up to the "options:" part)
39
+ question_match = re.search(r'^(.*?)\s*options:', block, re.DOTALL)
40
+ if question_match:
41
+ question = question_match.group(1).strip()
42
+
43
+ # Extract the options using regex
44
+ options_match = re.search(r'options:\s*(.*?)$', block, re.DOTALL)
45
+ if options_match:
46
+ options = [option.strip() for option in options_match.group(1).split('-') if option.strip()]
47
+
48
+ # Add the parsed question and options to the list
49
+ parsed_clarifications.append({'question': question, 'options': options})
50
+ # Update the last end position
51
+ last_end = clarification_match.end()
52
+
53
+ # Capture any remaining text after the last tag
54
+ combined_response += input_text[last_end:].strip()
55
+
56
+ return combined_response.strip(), parsed_clarifications
57
+
58
+ # Example usage
59
+ input_text = """
60
+ Some introductory text that should be included in the response.
61
+
62
+ <response>response to previous question is provided here</response>
63
+
64
+ Some more text that should also be included in the response.
65
+
66
+ <clarification>
67
+ questions:
68
+ - text: What topic should the article cover?
69
+ options:
70
+ - Technology
71
+ - Health and Wellness
72
+ - Travel
73
+ - Other
74
+ - text: What is the target audience for the article?
75
+ options:
76
+ - General public
77
+ - Professionals in a specific field
78
+ - Students
79
+ - Other
80
+ </clarification>
81
+
82
+ Final notes that should be part of the response.
83
+ """
84
+
85
+ parsed_data = parse_text(input_text)
86
+ print(f"Response: {parsed_data['response']}")
87
+ print("Clarifications:")
88
+ for item in parsed_data['clarifications']:
89
+ print(f" Question: {item['question']}")
90
+ print(" Options:", ", ".join(item['options']))