|
import unittest |
|
|
|
import tests.context |
|
from autogpt.json_utils.json_fix_llm import fix_and_parse_json |
|
|
|
|
|
class TestParseJson(unittest.TestCase): |
|
def test_valid_json(self): |
|
|
|
json_str = '{"name": "John", "age": 30, "city": "New York"}' |
|
obj = fix_and_parse_json(json_str) |
|
self.assertEqual(obj, {"name": "John", "age": 30, "city": "New York"}) |
|
|
|
def test_invalid_json_minor(self): |
|
|
|
json_str = '{"name": "John", "age": 30, "city": "New York",}' |
|
with self.assertRaises(Exception): |
|
fix_and_parse_json(json_str, try_to_fix_with_gpt=False) |
|
|
|
def test_invalid_json_major_with_gpt(self): |
|
|
|
json_str = 'BEGIN: "name": "John" - "age": 30 - "city": "New York" :END' |
|
with self.assertRaises(Exception): |
|
fix_and_parse_json(json_str, try_to_fix_with_gpt=False) |
|
|
|
def test_invalid_json_major_without_gpt(self): |
|
|
|
json_str = 'BEGIN: "name": "John" - "age": 30 - "city": "New York" :END' |
|
|
|
with self.assertRaises(Exception): |
|
fix_and_parse_json(json_str, try_to_fix_with_gpt=False) |
|
|
|
def test_invalid_json_leading_sentence_with_gpt(self): |
|
|
|
json_str = """I suggest we start by browsing the repository to find any issues that we can fix. |
|
|
|
{ |
|
"command": { |
|
"name": "browse_website", |
|
"args":{ |
|
"url": "https://github.com/Torantulino/Auto-GPT" |
|
} |
|
}, |
|
"thoughts": |
|
{ |
|
"text": "I suggest we start browsing the repository to find any issues that we can fix.", |
|
"reasoning": "Browsing the repository will give us an idea of the current state of the codebase and identify any issues that we can address to improve the repo.", |
|
"plan": "- Look through the repository to find any issues.\n- Investigate any issues to determine what needs to be fixed\n- Identify possible solutions to fix the issues\n- Open Pull Requests with fixes", |
|
"criticism": "I should be careful while browsing so as not to accidentally introduce any new bugs or issues.", |
|
"speak": "I will start browsing the repository to find any issues we can fix." |
|
} |
|
}""" |
|
good_obj = { |
|
"command": { |
|
"name": "browse_website", |
|
"args": {"url": "https://github.com/Torantulino/Auto-GPT"}, |
|
}, |
|
"thoughts": { |
|
"text": "I suggest we start browsing the repository to find any issues that we can fix.", |
|
"reasoning": "Browsing the repository will give us an idea of the current state of the codebase and identify any issues that we can address to improve the repo.", |
|
"plan": "- Look through the repository to find any issues.\n- Investigate any issues to determine what needs to be fixed\n- Identify possible solutions to fix the issues\n- Open Pull Requests with fixes", |
|
"criticism": "I should be careful while browsing so as not to accidentally introduce any new bugs or issues.", |
|
"speak": "I will start browsing the repository to find any issues we can fix.", |
|
}, |
|
} |
|
|
|
self.assertEqual( |
|
fix_and_parse_json(json_str, try_to_fix_with_gpt=False), good_obj |
|
) |
|
|
|
def test_invalid_json_leading_sentence_with_gpt(self): |
|
|
|
json_str = """I will first need to browse the repository (https://github.com/Torantulino/Auto-GPT) and identify any potential bugs that need fixing. I will use the "browse_website" command for this. |
|
|
|
{ |
|
"command": { |
|
"name": "browse_website", |
|
"args":{ |
|
"url": "https://github.com/Torantulino/Auto-GPT" |
|
} |
|
}, |
|
"thoughts": |
|
{ |
|
"text": "Browsing the repository to identify potential bugs", |
|
"reasoning": "Before fixing bugs, I need to identify what needs fixing. I will use the 'browse_website' command to analyze the repository.", |
|
"plan": "- Analyze the repository for potential bugs and areas of improvement", |
|
"criticism": "I need to ensure I am thorough and pay attention to detail while browsing the repository.", |
|
"speak": "I am browsing the repository to identify potential bugs." |
|
} |
|
}""" |
|
good_obj = { |
|
"command": { |
|
"name": "browse_website", |
|
"args": {"url": "https://github.com/Torantulino/Auto-GPT"}, |
|
}, |
|
"thoughts": { |
|
"text": "Browsing the repository to identify potential bugs", |
|
"reasoning": "Before fixing bugs, I need to identify what needs fixing. I will use the 'browse_website' command to analyze the repository.", |
|
"plan": "- Analyze the repository for potential bugs and areas of improvement", |
|
"criticism": "I need to ensure I am thorough and pay attention to detail while browsing the repository.", |
|
"speak": "I am browsing the repository to identify potential bugs.", |
|
}, |
|
} |
|
|
|
self.assertEqual( |
|
fix_and_parse_json(json_str, try_to_fix_with_gpt=False), good_obj |
|
) |
|
|
|
|
|
if __name__ == "__main__": |
|
unittest.main() |
|
|