UserSyncUI / test_parse.py
harvesthealth's picture
Upload folder using huggingface_hub
7f117eb verified
import re
import json
import ast
def extract_json(text: str) -> dict:
try:
if isinstance(text, dict) or isinstance(text, list):
return text
filtered_text = ""
filtered_text = re.sub(r'^.*?({|\[)', r'\1', text, flags=re.DOTALL)
filtered_text = re.sub(r'(}|\])(?!.*(\]|\})).*$', r'\1', filtered_text, flags=re.DOTALL)
try:
parsed = json.loads(filtered_text, strict=False)
except json.JSONDecodeError:
try:
clean_text = re.sub(r"\\'", "'", filtered_text)
clean_text = re.sub(r"\\,", ",", clean_text)
parsed = ast.literal_eval(clean_text)
except:
converted_text = re.sub(r"'([^']*)'", r'"\1"', filtered_text)
parsed = json.loads(converted_text, strict=False)
return parsed
except Exception as e:
return {}
def _coerce_to_list(llm_output:str):
if isinstance(llm_output, list):
return llm_output
try:
result = extract_json(llm_output)
if result == {} and not (isinstance(llm_output, str) and ('[' in llm_output and ']' in llm_output)):
raise ValueError("Cannot convert the LLM output to a list value.")
if not isinstance(result, list):
raise ValueError(f"Cannot convert the LLM output to a list value. Got {type(result)}")
return result
except Exception as e:
raise ValueError(f"Cannot convert the LLM output to a list value. Underlying error: {e}")
print("Test 1:", _coerce_to_list("""```json
[
{"key": "value"}
]
```"""))