| import re |
| import json |
| import ast |
|
|
| def extract_function_signatures(code): |
| function_defs = [] |
| pattern = r'def\s+([a-zA-Z0-9_]+)\s*\(([^)]*)\)' |
| matches = re.finditer(pattern, code) |
| |
| for match in matches: |
| func_name = match.group(1) |
| params = match.group(2) |
| function_defs.append(f"def {func_name}({params})") |
| |
| return function_defs |
|
|
| def clear_code(code): |
| if "```python" in code: |
| code = code.split("```python")[-1].replace("<|im_end|>", "").replace("<|EOT|>", "") |
| if "```" in code: |
| code = code.split("```")[0] |
| return code |
|
|
| def extract_function_calls(code): |
| calls = [] |
| pattern = r'([a-zA-Z0-9_]+)\s*\(([^)]*)\)' |
| matches = re.finditer(pattern, code) |
| |
| for match in matches: |
| func_name = match.group(1) |
| args = match.group(2) |
| calls.append(f"{func_name}({args})") |
| |
| return calls |
|
|
| def clear_json(response): |
| if type(response) is dict: |
| return response |
| elif type(response) is not str: |
| response = str(response) |
| base_response = response |
| try: |
| response = base_response.replace("\n", " ") |
| response = re.search('({.+})', response).group(0) |
| response = re.sub(r"(\w)'(\w|\s)", r"\1\\'\2", response) |
| result = ast.literal_eval(response) |
| return result |
| except (SyntaxError, NameError, AttributeError): |
| pass |
| try: |
| response = base_response.split('assistantfinal')[-1] |
| result = ast.literal_eval(response) |
| return result |
| except: |
| pass |
| try: |
| response = base_response.split('assistantfinal JSON')[-1] |
| result = ast.literal_eval(response) |
| return result |
| except: |
| pass |
| try: |
| response = base_response.split('assistantfinal json')[-1] |
| result = ast.literal_eval(response) |
| return result |
| except: |
| pass |
| try: |
| response = list(re.finditer(r'\{[\s\S]*?\}', base_response))[-1].group(0) |
| result = ast.literal_eval(response) |
| return result |
| except: |
| pass |
| return 'ERR_SYNTAX' |
|
|