aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGravatar Nicholas Tindle <nicholas.tindle@agpt.co> 2024-04-30 07:09:31 -0500
committerGravatar GitHub <noreply@github.com> 2024-04-30 07:09:31 -0500
commit9728fecb8e2e3345ef722fc8abae6042e8fecf9a (patch)
treef9545d4ec6e8401ae3b318b8f414714d5a477ad4
parentMerge branch 'master' into forge/fixes (diff)
parentfeat(agent/core): Support referenced types in `JSONSchema.from_dict` (diff)
downloadAuto-GPT-9728fecb8e2e3345ef722fc8abae6042e8fecf9a.tar.gz
Auto-GPT-9728fecb8e2e3345ef722fc8abae6042e8fecf9a.tar.bz2
Auto-GPT-9728fecb8e2e3345ef722fc8abae6042e8fecf9a.zip
Merge branch 'master' into forge/fixes
-rw-r--r--autogpts/autogpt/autogpt/app/configurator.py2
-rw-r--r--autogpts/autogpt/autogpt/core/resource/model_providers/openai.py10
-rw-r--r--autogpts/autogpt/autogpt/core/utils/json_schema.py27
3 files changed, 32 insertions, 7 deletions
diff --git a/autogpts/autogpt/autogpt/app/configurator.py b/autogpts/autogpt/autogpt/app/configurator.py
index 06f976c83..085d5dbf1 100644
--- a/autogpts/autogpt/autogpt/app/configurator.py
+++ b/autogpts/autogpt/autogpt/app/configurator.py
@@ -8,12 +8,12 @@ from typing import Literal, Optional
import click
from colorama import Back, Fore, Style
-from autogpt import utils
from autogpt.config import Config
from autogpt.config.config import GPT_3_MODEL, GPT_4_MODEL
from autogpt.core.resource.model_providers.openai import OpenAIModelName, OpenAIProvider
from autogpt.logs.helpers import request_user_double_check
from autogpt.memory.vector import get_supported_memory_backends
+from autogpt.utils import utils
logger = logging.getLogger(__name__)
diff --git a/autogpts/autogpt/autogpt/core/resource/model_providers/openai.py b/autogpts/autogpt/autogpt/core/resource/model_providers/openai.py
index 8a3546a36..0e50f1fa3 100644
--- a/autogpts/autogpt/autogpt/core/resource/model_providers/openai.py
+++ b/autogpts/autogpt/autogpt/core/resource/model_providers/openai.py
@@ -465,8 +465,11 @@ class OpenAIProvider(
self._logger.debug(
f"Parsing failed on response: '''{_assistant_msg}'''"
)
+ parse_errors_fmt = "\n\n".join(
+ f"{e.__class__.__name__}: {e}" for e in parse_errors
+ )
self._logger.warning(
- f"Parsing attempt #{attempts} failed: {parse_errors}"
+ f"Parsing attempt #{attempts} failed: {parse_errors_fmt}"
)
for e in parse_errors:
sentry_sdk.capture_exception(
@@ -480,10 +483,7 @@ class OpenAIProvider(
{
"role": "system",
"content": (
- "ERROR PARSING YOUR RESPONSE:\n\n"
- + "\n\n".join(
- f"{e.__class__.__name__}: {e}" for e in parse_errors
- )
+ f"ERROR PARSING YOUR RESPONSE:\n\n{parse_errors_fmt}"
),
}
)
diff --git a/autogpts/autogpt/autogpt/core/utils/json_schema.py b/autogpts/autogpt/autogpt/core/utils/json_schema.py
index d72b509dd..ce987f5d7 100644
--- a/autogpts/autogpt/autogpt/core/utils/json_schema.py
+++ b/autogpts/autogpt/autogpt/core/utils/json_schema.py
@@ -57,10 +57,35 @@ class JSONSchema(BaseModel):
@staticmethod
def from_dict(schema: dict) -> "JSONSchema":
+ def resolve_references(schema: dict, definitions: dict) -> dict:
+ """
+ Recursively resolve type $refs in the JSON schema with their definitions.
+ """
+ if isinstance(schema, dict):
+ if "$ref" in schema:
+ ref_path = schema["$ref"].split("/")[
+ 2:
+ ] # Split and remove '#/definitions'
+ ref_value = definitions
+ for key in ref_path:
+ ref_value = ref_value[key]
+ return resolve_references(ref_value, definitions)
+ else:
+ return {
+ k: resolve_references(v, definitions) for k, v in schema.items()
+ }
+ elif isinstance(schema, list):
+ return [resolve_references(item, definitions) for item in schema]
+ else:
+ return schema
+
+ definitions = schema.get("definitions", {})
+ schema = resolve_references(schema, definitions)
+
return JSONSchema(
description=schema.get("description"),
type=schema["type"],
- enum=schema["enum"] if "enum" in schema else None,
+ enum=schema.get("enum"),
items=JSONSchema.from_dict(schema["items"]) if "items" in schema else None,
properties=JSONSchema.parse_properties(schema)
if schema["type"] == "object"