diff options
author | Nicholas Tindle <nicholas.tindle@agpt.co> | 2024-04-30 07:09:31 -0500 |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-04-30 07:09:31 -0500 |
commit | 9728fecb8e2e3345ef722fc8abae6042e8fecf9a (patch) | |
tree | f9545d4ec6e8401ae3b318b8f414714d5a477ad4 | |
parent | Merge branch 'master' into forge/fixes (diff) | |
parent | feat(agent/core): Support referenced types in `JSONSchema.from_dict` (diff) | |
download | Auto-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.py | 2 | ||||
-rw-r--r-- | autogpts/autogpt/autogpt/core/resource/model_providers/openai.py | 10 | ||||
-rw-r--r-- | autogpts/autogpt/autogpt/core/utils/json_schema.py | 27 |
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" |