Errors
Every error the SDK raises, from guardian_agent.errors, and proxy_error, which recovers the SDK's error from a model client's.
Every error the SDK raises derives from GuardianAgentError, and each is also importable from guardian_agent. A refusal that reaches you through a model client’s own error can be recovered with proxy_error.
proxy_error
proxy_error
proxy_error(source: object) -> GuardianAgentError | NoneThe SDK’s error for a refusal, from a response or an error that holds one.
Parameters:
- source (
object) – Anhttpxorhttpx2response, or an exception with aresponseattribute, such asopenai.APIStatusError.
Returns:
GuardianAgentError | None– The refusal as this SDK’s typed error, with the proxy’s code, message, hint and status; orNonewhen it isn’t one (the provider’s own error, say). It never raises.
guardian_agent.errors
Every error the SDK raises.
All of them derive from GuardianAgentError, and each carries the
stable code the contract defines (the same code the proxy sends), a
message for people, an optional hint saying what to do, and the HTTP
status when the error came from the proxy. Branch on the class or on
code; message may change between releases.
Errors are grouped so you can catch a whole family:
try:
agent.register()
except ga.DefinitionError as error: # anything wrong with the definition
...
except ga.ProxyError as error: # the proxy is down, old, or refusing
...A model client routed with Agent.bind() raises its own errors, so its
retries keep working; guardian_agent.proxy_error turns a refusal back
into one of these:
try:
client.chat.completions.create(...)
except openai.APIStatusError as error:
if refusal := ga.proxy_error(error):
...No error ever repeats a value you submitted, which may be a credential: they name where a problem is and which rule it breaks.
Classes:
- GuardianAgentError – The base of every error the SDK raises.
- ProxyError – The local Viper proxy can’t be used: down, incompatible or refusing.
- ProxyUnreachable – Nothing answered at the proxy’s address, or it didn’t answer in time.
- ProxyIncompatible – The proxy lacks the agent API, definition schema or features this SDK uses.
- NotLocal – The proxy refused the call because it didn’t come from this machine.
- NotFound – The proxy has no such endpoint; usually a proxy older than the SDK.
- MethodNotAllowed – The endpoint exists but not for that method; a version mismatch.
- ProxyInternalError – The proxy failed in a way the caller can’t fix; its log says why.
- UpstreamUnreachable – The proxy couldn’t reach the gateway, so nothing was sent.
- RequestUnreadable – The proxy couldn’t take in the request’s body.
- UpstreamResponseLost – The request was sent, but no complete answer came back.
- UnexpectedResponse – The proxy answered with something this SDK can’t read.
- DefinitionError – The agent definition breaks a rule; nothing was registered.
- DefinitionInvalid – The definition breaks the schema or a validation rule.
- DefinitionTooLarge – The definition, or part of it, is over one of the proxy’s limits.
- DefinitionContainsSecret – The definition looks like it holds a credential, which is never recorded.
- SchemaVersionUnsupported – The proxy doesn’t accept this definition schema version.
- CollectionInvalid – A skill’s or memory source’s files can’t be stored as given; none were.
- CollectionTooLarge – A skill’s or memory source’s files are over one of the proxy’s limits.
- AgentError – The proxy couldn’t match a request to an enrolled agent and definition.
- AgentHeaderRequired – The proxy only signs requests that name an agent, and this one didn’t.
- AgentHeaderInvalid – An agent header was repeated, empty or not text.
- AgentNotEnrolled – No agent of that name is enrolled on this proxy.
- DefinitionUnknown – The definition isn’t registered for this agent on the proxy.
- SubagentUnknown – The definition has no sub-agent of that name.
- SigningFailed – The proxy couldn’t sign the request, so it didn’t forward it.
- ModelNotRoutedThroughProxy – A model client points somewhere other than the proxy, so it would go unsigned.
- UnrecognisedError – An error with a code this SDK doesn’t know, from a newer proxy.
errors.GuardianAgentError
GuardianAgentError(message: str, *, hint: str | None = None, status: int | None = None)Bases: Exception
The base of every error the SDK raises.
Attributes:
- code (
str) – The contract’s error code, such as"agent_not_enrolled". - message – What went wrong, for people.
- hint – What to do about it, when there is something to do.
- status – The HTTP status the proxy answered with, if it answered.
Parameters:
- message (
str) – What went wrong. - hint (
str | None) – What to do about it. - status (
int | None) – The proxy’s HTTP status, if the error came from the proxy.
errors.GuardianAgentError.code
code: str = 'guardian_agent_error'The contract’s error code; each subclass sets its own.
errors.ProxyError
Bases: GuardianAgentError
The local Viper proxy can’t be used: down, incompatible or refusing.
errors.ProxyUnreachable
Bases: ProxyError
Nothing answered at the proxy’s address, or it didn’t answer in time.
errors.ProxyIncompatible
Bases: ProxyError
The proxy lacks the agent API, definition schema or features this SDK uses.
errors.NotLocal
Bases: ProxyError
The proxy refused the call because it didn’t come from this machine.
errors.NotFound
Bases: ProxyError
The proxy has no such endpoint; usually a proxy older than the SDK.
errors.MethodNotAllowed
Bases: ProxyError
The endpoint exists but not for that method; a version mismatch.
errors.ProxyInternalError
Bases: ProxyError
The proxy failed in a way the caller can’t fix; its log says why.
errors.UpstreamUnreachable
Bases: ProxyError
The proxy couldn’t reach the gateway, so nothing was sent.
Retrying may help, and model clients retry it. The hint says what to check.
errors.RequestUnreadable
Bases: ProxyError
The proxy couldn’t take in the request’s body.
It broke off on the way in (send it again), or was over the relay limit (send less). Not retried for you.
errors.UpstreamResponseLost
Bases: ProxyError
The request was sent, but no complete answer came back.
The connection failed while waiting, or the answer couldn’t be read or passed on. The model may have run, so this isn’t retried for you: check before sending the request again.
errors.UnexpectedResponse
Bases: ProxyError
The proxy answered with something this SDK can’t read.
Its body is never repeated in the message. Raised for a body that isn’t JSON, or isn’t the shape the agent API defines.
errors.DefinitionError
DefinitionError(message: str, *, problems: Iterable[Problem] = (), hint: str | None = None, status: int | None = None)Bases: GuardianAgentError
The agent definition breaks a rule; nothing was registered.
Attributes:
- problems (
tuple[Problem, ...]) – Where the definition breaks which rule, when that’s known: always for a definition checked locally, never for one the proxy refused (its message says where).
Parameters:
- message (
str) – What went wrong. - problems (
Iterable[Problem]) – Where the definition breaks which rule. - hint (
str | None) – What to do about it. - status (
int | None) – The proxy’s HTTP status, if the proxy refused it.
errors.DefinitionInvalid
Bases: DefinitionError
The definition breaks the schema or a validation rule.
errors.DefinitionTooLarge
Bases: DefinitionError
The definition, or part of it, is over one of the proxy’s limits.
errors.DefinitionContainsSecret
Bases: DefinitionError
The definition looks like it holds a credential, which is never recorded.
Checked locally, problems names each place, as rule secret with
what it looks like as kind; the value is never repeated.
errors.SchemaVersionUnsupported
Bases: DefinitionError
The proxy doesn’t accept this definition schema version.
errors.CollectionInvalid
Bases: DefinitionError
A skill’s or memory source’s files can’t be stored as given; none were.
errors.CollectionTooLarge
Bases: DefinitionError
A skill’s or memory source’s files are over one of the proxy’s limits.
errors.AgentError
Bases: GuardianAgentError
The proxy couldn’t match a request to an enrolled agent and definition.
errors.AgentHeaderRequired
Bases: AgentError
The proxy only signs requests that name an agent, and this one didn’t.
errors.AgentHeaderInvalid
Bases: AgentError
An agent header was repeated, empty or not text.
errors.AgentNotEnrolled
Bases: AgentError
No agent of that name is enrolled on this proxy.
The proxy reads its agents when it starts, so an agent enrolled since then needs the proxy restarted.
errors.DefinitionUnknown
Bases: AgentError
The definition isn’t registered for this agent on the proxy.
The proxy remembers registrations only while it runs, so this usually follows a proxy restart.
errors.SubagentUnknown
Bases: AgentError
The definition has no sub-agent of that name.
errors.SigningFailed
Bases: GuardianAgentError
The proxy couldn’t sign the request, so it didn’t forward it.
errors.ModelNotRoutedThroughProxy
Bases: GuardianAgentError
A model client points somewhere other than the proxy, so it would go unsigned.
errors.UnrecognisedError
UnrecognisedError(message: str, *, code: str, hint: str | None = None, status: int | None = None)Bases: GuardianAgentError
An error with a code this SDK doesn’t know, from a newer proxy.
Its code, message and hint are the proxy’s own.
Parameters:
- message (
str) – The proxy’s message. - code (
str) – The proxy’s code. - hint (
str | None) – The proxy’s hint. - status (
int | None) – The proxy’s HTTP status.