aboutsummaryrefslogtreecommitdiff
path: root/autogpts/autogpt/tests/unit/_test_json_parser.py
blob: ee871cf48dae632cb169b9c0a05daf07aa58595d (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
import pytest

from autogpt.json_utils.json_fix_llm import fix_and_parse_json


def test_valid_json():
    """Test that a valid JSON string is parsed correctly."""
    json_str = '{"name": "John", "age": 30, "city": "New York"}'
    obj = fix_and_parse_json(json_str)
    assert obj == {"name": "John", "age": 30, "city": "New York"}


def test_invalid_json_minor():
    """Test that an invalid JSON string can be fixed with gpt."""
    json_str = '{"name": "John", "age": 30, "city": "New York",}'
    assert fix_and_parse_json(json_str, try_to_fix_with_gpt=False) == {
        "name": "John",
        "age": 30,
        "city": "New York",
    }


def test_invalid_json_major_with_gpt():
    """Test that an invalid JSON string raises an error when try_to_fix_with_gpt is False."""
    json_str = 'BEGIN: "name": "John" - "age": 30 - "city": "New York" :END'
    assert fix_and_parse_json(json_str, try_to_fix_with_gpt=True) == {
        "name": "John",
        "age": 30,
        "city": "New York",
    }


def test_invalid_json_major_without_gpt():
    """Test that a REALLY invalid JSON string raises an error when try_to_fix_with_gpt is False."""
    json_str = 'BEGIN: "name": "John" - "age": 30 - "city": "New York" :END'
    # Assert that this raises an exception:
    with pytest.raises(Exception):
        fix_and_parse_json(json_str, try_to_fix_with_gpt=False)


def test_invalid_json_leading_sentence_with_gpt():
    """Test that a REALLY invalid JSON string raises an error when try_to_fix_with_gpt is False."""

    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/Significant-Gravitas/AutoGPT"
        }
    },
    "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/Significant-Gravitas/AutoGPT"},
        },
        "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.",
        },
    }
    # Assert that this raises an exception:
    assert fix_and_parse_json(json_str, try_to_fix_with_gpt=False) == good_obj


def test_invalid_json_leading_sentence_with_gpt(self):
    """Test that a REALLY invalid JSON string raises an error when try_to_fix_with_gpt is False."""
    json_str = """I will first need to browse the repository (https://github.com/Significant-Gravitas/AutoGPT) 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/Significant-Gravitas/AutoGPT"
        }
    },
    "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/Significant-Gravitas/AutoGPT"},
        },
        "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.",
        },
    }

    assert fix_and_parse_json(json_str, try_to_fix_with_gpt=False) == good_obj