diff --git a/pyproject.toml b/pyproject.toml index 0710224..86f3126 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta" [project] name = "emp-agents" -version = "0.3.0" +version = "0.3.1" description = "A Python library for building low-code, capable and extensible autonomous agent systems." readme = "README.md" requires-python = ">=3.10" diff --git a/src/emp_agents/agents/base.py b/src/emp_agents/agents/base.py index b300c45..880b5b5 100644 --- a/src/emp_agents/agents/base.py +++ b/src/emp_agents/agents/base.py @@ -7,11 +7,13 @@ ConfigDict, Field, PrivateAttr, + ValidationError, computed_field, field_validator, ) from emp_agents.agents.history import AbstractConversationProvider, ConversationProvider +from emp_agents.exceptions import ResponseValidationError from emp_agents.logger import logger from emp_agents.models import ( AssistantMessage, @@ -46,7 +48,7 @@ class AgentBase(BaseModel): default_factory=ConversationProvider ) sync_tools: bool = Field( - True, description="If true, tools will be executed synchronously" + default=True, description="If true, tools will be executed synchronously" ) # This can be used to modify the conversation before completion, such as RAG @@ -195,7 +197,12 @@ async def respond( max_tokens=max_tokens, response_format=response_format, ) - return response_format.model_validate_json(response) + try: + return response_format.model_validate_json(response) + except ValidationError as e: + raise ResponseValidationError( + f"Error validating agent response to {response_format.__name__}: {response}" + ) from e @overload async def complete( diff --git a/src/emp_agents/exceptions.py b/src/emp_agents/exceptions.py index 65a3b99..9a06b5d 100644 --- a/src/emp_agents/exceptions.py +++ b/src/emp_agents/exceptions.py @@ -4,3 +4,7 @@ class TooManyTriesException(BaseException): class InvalidModelException(BaseException): pass + + +class ResponseValidationError(BaseException): + pass