slide-deck-ai / helpers /text_helper.py
barunsaha's picture
Remove leading ```json when cleaning JSON
80a7ca8
"""
Utility functions to help with text processing.
"""
import json_repair as jr
def is_valid_prompt(prompt: str) -> bool:
"""
Verify whether user input satisfies the concerned constraints.
:param prompt: The user input text.
:return: True if all criteria are satisfied; False otherwise.
"""
if len(prompt) < 7 or ' ' not in prompt:
return False
return True
def get_clean_json(json_str: str) -> str:
"""
Attempt to clean a JSON response string from the LLM by removing ```json at the beginning and
trailing ``` and any text beyond that.
CAUTION: May not be always accurate.
:param json_str: The input string in JSON format.
:return: The "cleaned" JSON string.
"""
response_cleaned = json_str
if json_str.startswith('```json'):
json_str = json_str[7:]
while True:
idx = json_str.rfind('```') # -1 on failure
if idx <= 0:
break
# In the ideal scenario, the character before the last ``` should be
# a new line or a closing bracket
prev_char = json_str[idx - 1]
if (prev_char == '}') or (prev_char == '\n' and json_str[idx - 2] == '}'):
response_cleaned = json_str[:idx]
json_str = json_str[:idx]
return response_cleaned
def fix_malformed_json(json_str: str) -> str:
"""
Try and fix the syntax error(s) in a JSON string.
:param json_str: The input JSON string.
:return: The fixed JSOn string.
"""
return jr.repair_json(json_str, skip_json_loads=True)
if __name__ == '__main__':
JSON1 = '''{
"key": "value"
}
'''
JSON2 = '''["Reason": "Regular updates help protect against known vulnerabilities."]'''
JSON3 = '''["Reason" Regular updates help protect against known vulnerabilities."]'''
JSON4 = '''
{"bullet_points": [
">> Write without stopping or editing",
>> Set daily writing goals and stick to them,
">> Allow yourself to make mistakes"
],}
'''
print(fix_malformed_json(JSON1))
print(fix_malformed_json(JSON2))
print(fix_malformed_json(JSON3))
print(fix_malformed_json(JSON4))